Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
3f70d8d5
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3f70d8d5
编写于
9月 18, 2009
作者:
T
tbell
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
1f7426ec
23688aa0
变更
60
展开全部
隐藏空白更改
内联
并排
Showing
60 changed file
with
2077 addition
and
1067 deletion
+2077
-1067
make/java/java/FILES_java.gmk
make/java/java/FILES_java.gmk
+3
-1
make/sun/security/Makefile
make/sun/security/Makefile
+9
-2
src/share/bin/java.h
src/share/bin/java.h
+1
-4
src/share/bin/parse_manifest.c
src/share/bin/parse_manifest.c
+1
-1
src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java
...hare/classes/com/sun/rowset/JdbcRowSetResourceBundle.java
+2
-2
src/share/classes/com/sun/rowset/JoinRowSetImpl.java
src/share/classes/com/sun/rowset/JoinRowSetImpl.java
+0
-1
src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java
...e/classes/com/sun/rowset/internal/WebRowSetXmlReader.java
+11
-11
src/share/classes/java/lang/Class.java
src/share/classes/java/lang/Class.java
+2
-1
src/share/classes/java/lang/ClassLoader.java
src/share/classes/java/lang/ClassLoader.java
+27
-8
src/share/classes/java/net/URLClassLoader.java
src/share/classes/java/net/URLClassLoader.java
+3
-0
src/share/classes/java/net/doc-files/net-properties.html
src/share/classes/java/net/doc-files/net-properties.html
+6
-4
src/share/classes/java/nio/file/FileTreeWalker.java
src/share/classes/java/nio/file/FileTreeWalker.java
+18
-10
src/share/classes/java/nio/file/Files.java
src/share/classes/java/nio/file/Files.java
+1
-1
src/share/classes/java/util/logging/ErrorManager.java
src/share/classes/java/util/logging/ErrorManager.java
+2
-2
src/share/classes/java/util/logging/FileHandler.java
src/share/classes/java/util/logging/FileHandler.java
+2
-2
src/share/classes/java/util/logging/Formatter.java
src/share/classes/java/util/logging/Formatter.java
+3
-3
src/share/classes/java/util/logging/Handler.java
src/share/classes/java/util/logging/Handler.java
+1
-1
src/share/classes/java/util/logging/Level.java
src/share/classes/java/util/logging/Level.java
+6
-4
src/share/classes/java/util/logging/LogRecord.java
src/share/classes/java/util/logging/LogRecord.java
+2
-2
src/share/classes/java/util/logging/Logger.java
src/share/classes/java/util/logging/Logger.java
+22
-20
src/share/classes/java/util/logging/LoggingMXBean.java
src/share/classes/java/util/logging/LoggingMXBean.java
+2
-2
src/share/classes/java/util/logging/MemoryHandler.java
src/share/classes/java/util/logging/MemoryHandler.java
+2
-2
src/share/classes/java/util/logging/StreamHandler.java
src/share/classes/java/util/logging/StreamHandler.java
+1
-1
src/share/classes/java/util/zip/ZipEntry.java
src/share/classes/java/util/zip/ZipEntry.java
+1
-5
src/share/classes/java/util/zip/ZipFile.java
src/share/classes/java/util/zip/ZipFile.java
+3
-0
src/share/classes/javax/sql/rowset/BaseRowSet.java
src/share/classes/javax/sql/rowset/BaseRowSet.java
+21
-21
src/share/classes/sun/misc/PerfCounter.java
src/share/classes/sun/misc/PerfCounter.java
+191
-0
src/share/classes/sun/net/spi/DefaultProxySelector.java
src/share/classes/sun/net/spi/DefaultProxySelector.java
+19
-125
src/share/classes/sun/security/action/GetBooleanSecurityPropertyAction.java
...sun/security/action/GetBooleanSecurityPropertyAction.java
+74
-0
src/share/classes/sun/security/provider/certpath/Builder.java
...share/classes/sun/security/provider/certpath/Builder.java
+5
-4
src/share/classes/sun/security/provider/certpath/CertId.java
src/share/classes/sun/security/provider/certpath/CertId.java
+23
-15
src/share/classes/sun/security/provider/certpath/CrlRevocationChecker.java
.../sun/security/provider/certpath/CrlRevocationChecker.java
+15
-0
src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
.../security/provider/certpath/DistributionPointFetcher.java
+3
-23
src/share/classes/sun/security/provider/certpath/ForwardBuilder.java
...lasses/sun/security/provider/certpath/ForwardBuilder.java
+6
-3
src/share/classes/sun/security/provider/certpath/OCSP.java
src/share/classes/sun/security/provider/certpath/OCSP.java
+329
-0
src/share/classes/sun/security/provider/certpath/OCSPChecker.java
...e/classes/sun/security/provider/certpath/OCSPChecker.java
+223
-297
src/share/classes/sun/security/provider/certpath/OCSPRequest.java
...e/classes/sun/security/provider/certpath/OCSPRequest.java
+20
-55
src/share/classes/sun/security/provider/certpath/OCSPResponse.java
.../classes/sun/security/provider/certpath/OCSPResponse.java
+313
-357
src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
...sun/security/provider/certpath/PKIXCertPathValidator.java
+14
-15
src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java
...es/sun/security/provider/certpath/SunCertPathBuilder.java
+14
-7
src/share/classes/sun/security/x509/AccessDescription.java
src/share/classes/sun/security/x509/AccessDescription.java
+1
-1
src/share/demo/jvmti/waiters/Agent.cpp
src/share/demo/jvmti/waiters/Agent.cpp
+33
-35
src/share/demo/jvmti/waiters/Agent.hpp
src/share/demo/jvmti/waiters/Agent.hpp
+5
-1
src/share/demo/jvmti/waiters/Monitor.cpp
src/share/demo/jvmti/waiters/Monitor.cpp
+10
-0
src/share/demo/jvmti/waiters/Monitor.hpp
src/share/demo/jvmti/waiters/Monitor.hpp
+3
-0
src/share/javavm/export/jvm.h
src/share/javavm/export/jvm.h
+6
-0
src/share/lib/net.properties
src/share/lib/net.properties
+2
-2
src/share/native/java/lang/ClassLoader.c
src/share/native/java/lang/ClassLoader.c
+4
-3
src/solaris/bin/java_md.c
src/solaris/bin/java_md.c
+3
-3
src/windows/bin/java_md.c
src/windows/bin/java_md.c
+3
-9
src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java
src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java
+3
-0
test/com/sun/jdi/BreakpointWithFullGC.sh
test/com/sun/jdi/BreakpointWithFullGC.sh
+128
-0
test/java/lang/ProcessBuilder/Basic.java
test/java/lang/ProcessBuilder/Basic.java
+25
-1
test/java/net/ProxySelector/B6737819.java
test/java/net/ProxySelector/B6737819.java
+63
-0
test/java/nio/file/Files/WalkWithSecurity.java
test/java/nio/file/Files/WalkWithSecurity.java
+132
-0
test/java/nio/file/Files/denyAll.policy
test/java/nio/file/Files/denyAll.policy
+3
-0
test/java/nio/file/Files/grantAll.policy
test/java/nio/file/Files/grantAll.policy
+5
-0
test/java/nio/file/Files/grantTopOnly.policy
test/java/nio/file/Files/grantTopOnly.policy
+4
-0
test/tools/launcher/6842838/CreateBadJar.java
test/tools/launcher/6842838/CreateBadJar.java
+168
-0
test/tools/launcher/6842838/Test6842838.sh
test/tools/launcher/6842838/Test6842838.sh
+75
-0
未找到文件。
make/java/java/FILES_java.gmk
浏览文件 @
3f70d8d5
...
@@ -454,6 +454,8 @@ JAVA_JAVA_java = \
...
@@ -454,6 +454,8 @@ JAVA_JAVA_java = \
sun/misc/JavaLangAccess.java \
sun/misc/JavaLangAccess.java \
sun/misc/JavaIOAccess.java \
sun/misc/JavaIOAccess.java \
sun/misc/JavaIOFileDescriptorAccess.java \
sun/misc/JavaIOFileDescriptorAccess.java \
sun/misc/JavaNioAccess.java
sun/misc/JavaNioAccess.java \
sun/misc/Perf.java \
sun/misc/PerfCounter.java
FILES_java = $(JAVA_JAVA_java)
FILES_java = $(JAVA_JAVA_java)
make/sun/security/Makefile
浏览文件 @
3f70d8d5
...
@@ -60,8 +60,15 @@ ifeq ($(PLATFORM), windows)
...
@@ -60,8 +60,15 @@ ifeq ($(PLATFORM), windows)
endif
endif
endif
endif
SUBDIRS
=
ec other action util tools jgss krb5 smartcardio
$(PKCS11)
\
# Build in-tree elliptic curve crypto provider only when
$(JGSS_WRAPPER)
$(MSCAPI)
# DISABLE_INTREE_EC is not set
INTREE_EC
=
ec
ifdef
DISABLE_INTREE_EC
INTREE_EC
=
endif
SUBDIRS
=
$(INTREE_EC)
other action util tools jgss krb5 smartcardio
\
$(PKCS11)
$(JGSS_WRAPPER)
$(MSCAPI)
all build clean clobber
::
all build clean clobber
::
$
(
SUBDIRS-loop
)
$
(
SUBDIRS-loop
)
...
...
src/share/bin/java.h
浏览文件 @
3f70d8d5
...
@@ -187,9 +187,6 @@ void InitLauncher(jboolean javaw);
...
@@ -187,9 +187,6 @@ void InitLauncher(jboolean javaw);
*
*
*/
*/
typedef
jclass
(
JNICALL
FindClassFromBootLoader_t
(
JNIEnv
*
env
,
typedef
jclass
(
JNICALL
FindClassFromBootLoader_t
(
JNIEnv
*
env
,
const
char
*
name
,
const
char
*
name
));
jboolean
init
,
jobject
loader
,
jboolean
throwError
));
jclass
FindBootStrapClass
(
JNIEnv
*
env
,
const
char
*
classname
);
jclass
FindBootStrapClass
(
JNIEnv
*
env
,
const
char
*
classname
);
#endif
/* _JAVA_H_ */
#endif
/* _JAVA_H_ */
src/share/bin/parse_manifest.c
浏览文件 @
3f70d8d5
...
@@ -59,7 +59,7 @@ inflate_file(int fd, zentry *entry, int *size_out)
...
@@ -59,7 +59,7 @@ inflate_file(int fd, zentry *entry, int *size_out)
char
*
out
;
char
*
out
;
z_stream
zs
;
z_stream
zs
;
if
(
entry
->
csize
==
0xffffffff
||
entry
->
isize
==
0xffffffff
)
if
(
entry
->
csize
==
(
size_t
)
-
1
||
entry
->
isize
==
(
size_t
)
-
1
)
return
(
NULL
);
return
(
NULL
);
if
(
lseek
(
fd
,
entry
->
offset
,
SEEK_SET
)
<
(
off_t
)
0
)
if
(
lseek
(
fd
,
entry
->
offset
,
SEEK_SET
)
<
(
off_t
)
0
)
return
(
NULL
);
return
(
NULL
);
...
...
src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java
浏览文件 @
3f70d8d5
...
@@ -133,7 +133,7 @@ public class JdbcRowSetResourceBundle implements Serializable {
...
@@ -133,7 +133,7 @@ public class JdbcRowSetResourceBundle implements Serializable {
* This method returns an enumerated handle of the keys
* This method returns an enumerated handle of the keys
* which correspond to values translated to various locales.
* which correspond to values translated to various locales.
*
*
* @return
s an enumerated
keys which have messages tranlated to
* @return
an enumeration of
keys which have messages tranlated to
* corresponding locales.
* corresponding locales.
*/
*/
public
Enumeration
getKeys
()
{
public
Enumeration
getKeys
()
{
...
@@ -146,7 +146,7 @@ public class JdbcRowSetResourceBundle implements Serializable {
...
@@ -146,7 +146,7 @@ public class JdbcRowSetResourceBundle implements Serializable {
* returns the corresponding value reading it
* returns the corresponding value reading it
* from the Resource Bundle loaded earlier.
* from the Resource Bundle loaded earlier.
*
*
* @return
s
value in locale specific language
* @return value in locale specific language
* according to the key passed.
* according to the key passed.
*/
*/
public
Object
handleGetObject
(
String
key
)
{
public
Object
handleGetObject
(
String
key
)
{
...
...
src/share/classes/com/sun/rowset/JoinRowSetImpl.java
浏览文件 @
3f70d8d5
...
@@ -3737,7 +3737,6 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
...
@@ -3737,7 +3737,6 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
* Returns a result set containing the original value of the current
* Returns a result set containing the original value of the current
* row only.
* row only.
*
*
* @return the original result set of the row
* @throws SQLException if there is no current row
* @throws SQLException if there is no current row
* @see #setOriginalRow
* @see #setOriginalRow
*/
*/
...
...
src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java
浏览文件 @
3f70d8d5
...
@@ -46,6 +46,17 @@ import javax.sql.rowset.spi.*;
...
@@ -46,6 +46,17 @@ import javax.sql.rowset.spi.*;
*/
*/
public
class
WebRowSetXmlReader
implements
XmlReader
,
Serializable
{
public
class
WebRowSetXmlReader
implements
XmlReader
,
Serializable
{
private
JdbcRowSetResourceBundle
resBundle
;
public
WebRowSetXmlReader
(){
try
{
resBundle
=
JdbcRowSetResourceBundle
.
getJdbcRowSetResourceBundle
();
}
catch
(
IOException
ioe
)
{
throw
new
RuntimeException
(
ioe
);
}
}
/**
/**
* Parses the given <code>WebRowSet</code> object, getting its input from
* Parses the given <code>WebRowSet</code> object, getting its input from
* the given <code>java.io.Reader</code> object. The parser will send
* the given <code>java.io.Reader</code> object. The parser will send
...
@@ -69,17 +80,6 @@ public class WebRowSetXmlReader implements XmlReader, Serializable {
...
@@ -69,17 +80,6 @@ public class WebRowSetXmlReader implements XmlReader, Serializable {
* reader for the given rowset
* reader for the given rowset
* @see XmlReaderContentHandler
* @see XmlReaderContentHandler
*/
*/
private
JdbcRowSetResourceBundle
resBundle
;
public
WebRowSetXmlReader
(){
try
{
resBundle
=
JdbcRowSetResourceBundle
.
getJdbcRowSetResourceBundle
();
}
catch
(
IOException
ioe
)
{
throw
new
RuntimeException
(
ioe
);
}
}
public
void
readXML
(
WebRowSet
caller
,
java
.
io
.
Reader
reader
)
throws
SQLException
{
public
void
readXML
(
WebRowSet
caller
,
java
.
io
.
Reader
reader
)
throws
SQLException
{
try
{
try
{
// Crimson Parser(as in J2SE 1.4.1 is NOT able to handle
// Crimson Parser(as in J2SE 1.4.1 is NOT able to handle
...
...
src/share/classes/java/lang/Class.java
浏览文件 @
3f70d8d5
...
@@ -565,8 +565,9 @@ public final
...
@@ -565,8 +565,9 @@ public final
* represented by this object.
* represented by this object.
*/
*/
public
String
getName
()
{
public
String
getName
()
{
String
name
=
this
.
name
;
if
(
name
==
null
)
if
(
name
==
null
)
name
=
getName0
();
this
.
name
=
name
=
getName0
();
return
name
;
return
name
;
}
}
...
...
src/share/classes/java/lang/ClassLoader.java
浏览文件 @
3f70d8d5
...
@@ -380,16 +380,28 @@ public abstract class ClassLoader {
...
@@ -380,16 +380,28 @@ public abstract class ClassLoader {
// First, check if the class has already been loaded
// First, check if the class has already been loaded
Class
c
=
findLoadedClass
(
name
);
Class
c
=
findLoadedClass
(
name
);
if
(
c
==
null
)
{
if
(
c
==
null
)
{
long
t0
=
System
.
nanoTime
();
try
{
try
{
if
(
parent
!=
null
)
{
if
(
parent
!=
null
)
{
c
=
parent
.
loadClass
(
name
,
false
);
c
=
parent
.
loadClass
(
name
,
false
);
}
else
{
}
else
{
c
=
findBootstrapClass
0
(
name
);
c
=
findBootstrapClass
OrNull
(
name
);
}
}
}
catch
(
ClassNotFoundException
e
)
{
}
catch
(
ClassNotFoundException
e
)
{
// ClassNotFoundException thrown if class not found
// from the non-null parent class loader
}
if
(
c
==
null
)
{
// If still not found, then invoke findClass in order
// If still not found, then invoke findClass in order
// to find the class.
// to find the class.
long
t1
=
System
.
nanoTime
();
c
=
findClass
(
name
);
c
=
findClass
(
name
);
// this is the defining class loader; record the stats
sun
.
misc
.
PerfCounter
.
getParentDelegationTime
().
addTime
(
t1
-
t0
);
sun
.
misc
.
PerfCounter
.
getFindClassTime
().
addElapsedTimeFrom
(
t1
);
sun
.
misc
.
PerfCounter
.
getFindClasses
().
increment
();
}
}
}
}
if
(
resolve
)
{
if
(
resolve
)
{
...
@@ -1008,22 +1020,29 @@ public abstract class ClassLoader {
...
@@ -1008,22 +1020,29 @@ public abstract class ClassLoader {
if
(
system
==
null
)
{
if
(
system
==
null
)
{
if
(!
checkName
(
name
))
if
(!
checkName
(
name
))
throw
new
ClassNotFoundException
(
name
);
throw
new
ClassNotFoundException
(
name
);
return
findBootstrapClass
(
name
);
Class
cls
=
findBootstrapClass
(
name
);
if
(
cls
==
null
)
{
throw
new
ClassNotFoundException
(
name
);
}
return
cls
;
}
}
return
system
.
loadClass
(
name
);
return
system
.
loadClass
(
name
);
}
}
private
Class
findBootstrapClass0
(
String
name
)
/**
throws
ClassNotFoundException
* Returns a class loaded by the bootstrap class loader;
* or return null if not found.
*/
private
Class
findBootstrapClassOrNull
(
String
name
)
{
{
check
();
check
();
if
(!
checkName
(
name
))
if
(!
checkName
(
name
))
return
null
;
throw
new
ClassNotFoundException
(
name
);
return
findBootstrapClass
(
name
);
return
findBootstrapClass
(
name
);
}
}
private
native
Class
findBootstrapClass
(
String
name
)
// return null if not found
throws
ClassNotFoundException
;
private
native
Class
findBootstrapClass
(
String
name
)
;
// Check to make sure the class loader has been initialized.
// Check to make sure the class loader has been initialized.
private
void
check
()
{
private
void
check
()
{
...
...
src/share/classes/java/net/URLClassLoader.java
浏览文件 @
3f70d8d5
...
@@ -340,6 +340,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
...
@@ -340,6 +340,7 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
* used.
* used.
*/
*/
private
Class
defineClass
(
String
name
,
Resource
res
)
throws
IOException
{
private
Class
defineClass
(
String
name
,
Resource
res
)
throws
IOException
{
long
t0
=
System
.
nanoTime
();
int
i
=
name
.
lastIndexOf
(
'.'
);
int
i
=
name
.
lastIndexOf
(
'.'
);
URL
url
=
res
.
getCodeSourceURL
();
URL
url
=
res
.
getCodeSourceURL
();
if
(
i
!=
-
1
)
{
if
(
i
!=
-
1
)
{
...
@@ -370,12 +371,14 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
...
@@ -370,12 +371,14 @@ public class URLClassLoader extends SecureClassLoader implements Closeable {
// Use (direct) ByteBuffer:
// Use (direct) ByteBuffer:
CodeSigner
[]
signers
=
res
.
getCodeSigners
();
CodeSigner
[]
signers
=
res
.
getCodeSigners
();
CodeSource
cs
=
new
CodeSource
(
url
,
signers
);
CodeSource
cs
=
new
CodeSource
(
url
,
signers
);
sun
.
misc
.
PerfCounter
.
getReadClassBytesTime
().
addElapsedTimeFrom
(
t0
);
return
defineClass
(
name
,
bb
,
cs
);
return
defineClass
(
name
,
bb
,
cs
);
}
else
{
}
else
{
byte
[]
b
=
res
.
getBytes
();
byte
[]
b
=
res
.
getBytes
();
// must read certificates AFTER reading bytes.
// must read certificates AFTER reading bytes.
CodeSigner
[]
signers
=
res
.
getCodeSigners
();
CodeSigner
[]
signers
=
res
.
getCodeSigners
();
CodeSource
cs
=
new
CodeSource
(
url
,
signers
);
CodeSource
cs
=
new
CodeSource
(
url
,
signers
);
sun
.
misc
.
PerfCounter
.
getReadClassBytesTime
().
addElapsedTimeFrom
(
t0
);
return
defineClass
(
name
,
b
,
0
,
b
.
length
,
cs
);
return
defineClass
(
name
,
b
,
0
,
b
.
length
,
cs
);
}
}
}
}
...
...
src/share/classes/java/net/doc-files/net-properties.html
浏览文件 @
3f70d8d5
...
@@ -71,12 +71,12 @@ of proxies.</P>
...
@@ -71,12 +71,12 @@ of proxies.</P>
<LI><P>
HTTP
</P>
<LI><P>
HTTP
</P>
<P>
The following proxy settings are used by the HTTP protocol handler.
</P>
<P>
The following proxy settings are used by the HTTP protocol handler.
</P>
<UL>
<UL>
<LI><P><B>
http.proxyHost
</
FONT></
B>
(default:
<
none
>
)
<BR>
<LI><P><B>
http.proxyHost
</B>
(default:
<
none
>
)
<BR>
The hostname, or address, of the proxy server
The hostname, or address, of the proxy server
</P>
</P>
<LI><P><B>
http.proxyPort
</B>
(default: 80)
<BR>
<LI><P><B>
http.proxyPort
</B>
(default: 80)
<BR>
The port number of the proxy server.
</P>
The port number of the proxy server.
</P>
<LI><P><B>
http.nonProxyHosts
</B>
(default:
<
none
>
)
<BR>
<LI><P><B>
http.nonProxyHosts
</B>
(default:
localhost|127.*|[::1]
)
<BR>
Indicates the hosts that should be accessed without going
Indicates the hosts that should be accessed without going
through the proxy. Typically this defines internal hosts.
through the proxy. Typically this defines internal hosts.
The value of this property is a list of hosts,
The value of this property is a list of hosts,
...
@@ -86,7 +86,8 @@ of proxies.</P>
...
@@ -86,7 +86,8 @@ of proxies.</P>
will indicate that every hosts in the foo.com domain and the
will indicate that every hosts in the foo.com domain and the
localhost should be accessed directly even if a proxy server is
localhost should be accessed directly even if a proxy server is
specified.
</P>
specified.
</P>
</UL>
<P>
The default value excludes all common variations of the loopback address.
</P>
</UL>
<LI><P>
HTTPS
<BR>
This is HTTP over SSL, a secure version of HTTP
<LI><P>
HTTPS
<BR>
This is HTTP over SSL, a secure version of HTTP
mainly used when confidentiality (like on payment sites) is needed.
</P>
mainly used when confidentiality (like on payment sites) is needed.
</P>
<P>
The following proxy settings are used by the HTTPS protocol handler.
</P>
<P>
The following proxy settings are used by the HTTPS protocol handler.
</P>
...
@@ -107,7 +108,7 @@ of proxies.</P>
...
@@ -107,7 +108,7 @@ of proxies.</P>
</P>
</P>
<LI><P><B>
ftp.proxyPort
</B>
(default: 80)
<BR>
<LI><P><B>
ftp.proxyPort
</B>
(default: 80)
<BR>
The port number of the proxy server.
</P>
The port number of the proxy server.
</P>
<LI><P><B>
ftp.nonProxyHosts
</B>
(default:
<
none
>
)
<BR>
<LI><P><B>
ftp.nonProxyHosts
</B>
(default:
localhost|127.*|[::1]
)
<BR>
Indicates the hosts that should be accessed without going
Indicates the hosts that should be accessed without going
through the proxy. Typically this defines internal hosts.
through the proxy. Typically this defines internal hosts.
The value of this property is a list of hosts, separated by
The value of this property is a list of hosts, separated by
...
@@ -117,6 +118,7 @@ of proxies.</P>
...
@@ -117,6 +118,7 @@ of proxies.</P>
will indicate that every hosts in the foo.com domain and the
will indicate that every hosts in the foo.com domain and the
localhost should be accessed directly even if a proxy server is
localhost should be accessed directly even if a proxy server is
specified.
</P>
specified.
</P>
<P>
The default value excludes all common variations of the loopback address.
</P>
</UL>
</UL>
<LI><P>
SOCKS
<BR>
This is another type of proxy. It allows for lower
<LI><P>
SOCKS
<BR>
This is another type of proxy. It allows for lower
level type of tunneling since it works at the TCP level. In effect,
level type of tunneling since it works at the TCP level. In effect,
...
...
src/share/classes/java/nio/file/FileTreeWalker.java
浏览文件 @
3f70d8d5
...
@@ -41,8 +41,12 @@ class FileTreeWalker {
...
@@ -41,8 +41,12 @@ class FileTreeWalker {
private
final
boolean
detectCycles
;
private
final
boolean
detectCycles
;
private
final
LinkOption
[]
linkOptions
;
private
final
LinkOption
[]
linkOptions
;
private
final
FileVisitor
<?
super
Path
>
visitor
;
private
final
FileVisitor
<?
super
Path
>
visitor
;
private
final
int
maxDepth
;
FileTreeWalker
(
Set
<
FileVisitOption
>
options
,
FileVisitor
<?
super
Path
>
visitor
)
{
FileTreeWalker
(
Set
<
FileVisitOption
>
options
,
FileVisitor
<?
super
Path
>
visitor
,
int
maxDepth
)
{
boolean
fl
=
false
;
boolean
fl
=
false
;
boolean
dc
=
false
;
boolean
dc
=
false
;
for
(
FileVisitOption
option:
options
)
{
for
(
FileVisitOption
option:
options
)
{
...
@@ -58,18 +62,15 @@ class FileTreeWalker {
...
@@ -58,18 +62,15 @@ class FileTreeWalker {
this
.
linkOptions
=
(
fl
)
?
new
LinkOption
[
0
]
:
this
.
linkOptions
=
(
fl
)
?
new
LinkOption
[
0
]
:
new
LinkOption
[]
{
LinkOption
.
NOFOLLOW_LINKS
};
new
LinkOption
[]
{
LinkOption
.
NOFOLLOW_LINKS
};
this
.
visitor
=
visitor
;
this
.
visitor
=
visitor
;
this
.
maxDepth
=
maxDepth
;
}
}
/**
/**
* Walk file tree starting at the given file
* Walk file tree starting at the given file
*/
*/
void
walk
(
Path
start
,
int
maxDepth
)
{
void
walk
(
Path
start
)
{
// don't use attributes of starting file as they may be stale
if
(
start
instanceof
BasicFileAttributesHolder
)
{
((
BasicFileAttributesHolder
)
start
).
invalidate
();
}
FileVisitResult
result
=
walk
(
start
,
FileVisitResult
result
=
walk
(
start
,
maxDepth
,
0
,
new
ArrayList
<
AncestorDirectory
>());
new
ArrayList
<
AncestorDirectory
>());
if
(
result
==
null
)
{
if
(
result
==
null
)
{
throw
new
NullPointerException
(
"Visitor returned 'null'"
);
throw
new
NullPointerException
(
"Visitor returned 'null'"
);
...
@@ -89,12 +90,15 @@ class FileTreeWalker {
...
@@ -89,12 +90,15 @@ class FileTreeWalker {
List
<
AncestorDirectory
>
ancestors
)
List
<
AncestorDirectory
>
ancestors
)
{
{
// depth check
// depth check
if
(
depth
--
<
0
)
if
(
depth
>
maxDepth
)
return
FileVisitResult
.
CONTINUE
;
return
FileVisitResult
.
CONTINUE
;
// if attributes are cached then use them if possible
// if attributes are cached then use them if possible
BasicFileAttributes
attrs
=
null
;
BasicFileAttributes
attrs
=
null
;
if
(
file
instanceof
BasicFileAttributesHolder
)
{
if
((
depth
>
0
)
&&
(
file
instanceof
BasicFileAttributesHolder
)
&&
(
System
.
getSecurityManager
()
==
null
))
{
BasicFileAttributes
cached
=
((
BasicFileAttributesHolder
)
file
).
get
();
BasicFileAttributes
cached
=
((
BasicFileAttributesHolder
)
file
).
get
();
if
(!
followLinks
||
!
cached
.
isSymbolicLink
())
if
(!
followLinks
||
!
cached
.
isSymbolicLink
())
attrs
=
cached
;
attrs
=
cached
;
...
@@ -120,6 +124,10 @@ class FileTreeWalker {
...
@@ -120,6 +124,10 @@ class FileTreeWalker {
}
}
}
}
}
catch
(
SecurityException
x
)
{
}
catch
(
SecurityException
x
)
{
// If access to starting file is denied then SecurityException
// is thrown, otherwise the file is ignored.
if
(
depth
==
0
)
throw
x
;
return
FileVisitResult
.
CONTINUE
;
return
FileVisitResult
.
CONTINUE
;
}
}
}
}
...
@@ -196,7 +204,7 @@ class FileTreeWalker {
...
@@ -196,7 +204,7 @@ class FileTreeWalker {
try
{
try
{
for
(
Path
entry:
stream
)
{
for
(
Path
entry:
stream
)
{
inAction
=
true
;
inAction
=
true
;
result
=
walk
(
entry
,
depth
,
ancestors
);
result
=
walk
(
entry
,
depth
+
1
,
ancestors
);
inAction
=
false
;
inAction
=
false
;
// returning null will cause NPE to be thrown
// returning null will cause NPE to be thrown
...
...
src/share/classes/java/nio/file/Files.java
浏览文件 @
3f70d8d5
...
@@ -223,7 +223,7 @@ public final class Files {
...
@@ -223,7 +223,7 @@ public final class Files {
{
{
if
(
maxDepth
<
0
)
if
(
maxDepth
<
0
)
throw
new
IllegalArgumentException
(
"'maxDepth' is negative"
);
throw
new
IllegalArgumentException
(
"'maxDepth' is negative"
);
new
FileTreeWalker
(
options
,
visitor
).
walk
(
start
,
maxDepth
);
new
FileTreeWalker
(
options
,
visitor
,
maxDepth
).
walk
(
start
);
}
}
/**
/**
...
...
src/share/classes/java/util/logging/ErrorManager.java
浏览文件 @
3f70d8d5
...
@@ -28,7 +28,7 @@ package java.util.logging;
...
@@ -28,7 +28,7 @@ package java.util.logging;
/**
/**
* ErrorManager objects can be attached to Handlers to process
* ErrorManager objects can be attached to Handlers to process
* any error that occur on a Handler during Logging.
* any error that occur
s
on a Handler during Logging.
* <p>
* <p>
* When processing logging output, if a Handler encounters problems
* When processing logging output, if a Handler encounters problems
* then rather than throwing an Exception back to the issuer of
* then rather than throwing an Exception back to the issuer of
...
@@ -72,7 +72,7 @@ public class ErrorManager {
...
@@ -72,7 +72,7 @@ public class ErrorManager {
/**
/**
* The error method is called when a Handler failure occurs.
* The error method is called when a Handler failure occurs.
* <p>
* <p>
* This method may be overriden in subclasses. The default
* This method may be overrid
d
en in subclasses. The default
* behavior in this base class is that the first call is
* behavior in this base class is that the first call is
* reported to System.err, and subsequent calls are ignored.
* reported to System.err, and subsequent calls are ignored.
*
*
...
...
src/share/classes/java/util/logging/FileHandler.java
浏览文件 @
3f70d8d5
...
@@ -39,7 +39,7 @@ import java.security.*;
...
@@ -39,7 +39,7 @@ import java.security.*;
* For a rotating set of files, as each file reaches a given size
* For a rotating set of files, as each file reaches a given size
* limit, it is closed, rotated out, and a new file opened.
* limit, it is closed, rotated out, and a new file opened.
* Successively older files are named by adding "0", "1", "2",
* Successively older files are named by adding "0", "1", "2",
* etc into the base filename.
* etc
.
into the base filename.
* <p>
* <p>
* By default buffering is enabled in the IO libraries but each log
* By default buffering is enabled in the IO libraries but each log
* record is flushed out when it is complete.
* record is flushed out when it is complete.
...
@@ -391,7 +391,7 @@ public class FileHandler extends StreamHandler {
...
@@ -391,7 +391,7 @@ public class FileHandler extends StreamHandler {
// Generate a lock file name from the "unique" int.
// Generate a lock file name from the "unique" int.
lockFileName
=
generate
(
pattern
,
0
,
unique
).
toString
()
+
".lck"
;
lockFileName
=
generate
(
pattern
,
0
,
unique
).
toString
()
+
".lck"
;
// Now try to lock that filename.
// Now try to lock that filename.
// Because some systems (e.g. Solaris) can only do file locks
// Because some systems (e.g.
,
Solaris) can only do file locks
// between processes (and not within a process), we first check
// between processes (and not within a process), we first check
// if we ourself already have the file locked.
// if we ourself already have the file locked.
synchronized
(
locks
)
{
synchronized
(
locks
)
{
...
...
src/share/classes/java/util/logging/Formatter.java
浏览文件 @
3f70d8d5
...
@@ -52,7 +52,7 @@ public abstract class Formatter {
...
@@ -52,7 +52,7 @@ public abstract class Formatter {
* Format the given log record and return the formatted string.
* Format the given log record and return the formatted string.
* <p>
* <p>
* The resulting formatted String will normally include a
* The resulting formatted String will normally include a
* localized and formated version of the LogRecord's message field.
* localized and format
t
ed version of the LogRecord's message field.
* It is recommended to use the {@link Formatter#formatMessage}
* It is recommended to use the {@link Formatter#formatMessage}
* convenience method to localize and format the message field.
* convenience method to localize and format the message field.
*
*
...
@@ -66,7 +66,7 @@ public abstract class Formatter {
...
@@ -66,7 +66,7 @@ public abstract class Formatter {
* Return the header string for a set of formatted records.
* Return the header string for a set of formatted records.
* <p>
* <p>
* This base class returns an empty string, but this may be
* This base class returns an empty string, but this may be
* overriden by subclasses.
* overrid
d
en by subclasses.
*
*
* @param h The target handler (can be null)
* @param h The target handler (can be null)
* @return header string
* @return header string
...
@@ -79,7 +79,7 @@ public abstract class Formatter {
...
@@ -79,7 +79,7 @@ public abstract class Formatter {
* Return the tail string for a set of formatted records.
* Return the tail string for a set of formatted records.
* <p>
* <p>
* This base class returns an empty string, but this may be
* This base class returns an empty string, but this may be
* overriden by subclasses.
* overrid
d
en by subclasses.
*
*
* @param h The target handler (can be null)
* @param h The target handler (can be null)
* @return tail string
* @return tail string
...
...
src/share/classes/java/util/logging/Handler.java
浏览文件 @
3f70d8d5
...
@@ -274,7 +274,7 @@ public abstract class Handler {
...
@@ -274,7 +274,7 @@ public abstract class Handler {
* <tt>Level</tt> and whether it satisfies any <tt>Filter</tt>. It also
* <tt>Level</tt> and whether it satisfies any <tt>Filter</tt>. It also
* may make other <tt>Handler</tt> specific checks that might prevent a
* may make other <tt>Handler</tt> specific checks that might prevent a
* handler from logging the <tt>LogRecord</tt>. It will return false if
* handler from logging the <tt>LogRecord</tt>. It will return false if
* the <tt>LogRecord</tt> is
N
ull.
* the <tt>LogRecord</tt> is
n
ull.
* <p>
* <p>
* @param record a <tt>LogRecord</tt>
* @param record a <tt>LogRecord</tt>
* @return true if the <tt>LogRecord</tt> would be logged.
* @return true if the <tt>LogRecord</tt> would be logged.
...
...
src/share/classes/java/util/logging/Level.java
浏览文件 @
3f70d8d5
...
@@ -110,7 +110,7 @@ public class Level implements java.io.Serializable {
...
@@ -110,7 +110,7 @@ public class Level implements java.io.Serializable {
* Typically INFO messages will be written to the console
* Typically INFO messages will be written to the console
* or its equivalent. So the INFO level should only be
* or its equivalent. So the INFO level should only be
* used for reasonably significant messages that will
* used for reasonably significant messages that will
* make sense to end users and system admins.
* make sense to end users and system admin
istrator
s.
* This level is initialized to <CODE>800</CODE>.
* This level is initialized to <CODE>800</CODE>.
*/
*/
public
static
final
Level
INFO
=
new
Level
(
"INFO"
,
800
,
defaultBundle
);
public
static
final
Level
INFO
=
new
Level
(
"INFO"
,
800
,
defaultBundle
);
...
@@ -245,6 +245,8 @@ public class Level implements java.io.Serializable {
...
@@ -245,6 +245,8 @@ public class Level implements java.io.Serializable {
}
}
/**
/**
* Returns a string representation of this Level.
*
* @return the non-localized name of the Level, for example "INFO".
* @return the non-localized name of the Level, for example "INFO".
*/
*/
public
final
String
toString
()
{
public
final
String
toString
()
{
...
@@ -299,14 +301,14 @@ public class Level implements java.io.Serializable {
...
@@ -299,14 +301,14 @@ public class Level implements java.io.Serializable {
* @throws IllegalArgumentException if the value is not valid.
* @throws IllegalArgumentException if the value is not valid.
* Valid values are integers between <CODE>Integer.MIN_VALUE</CODE>
* Valid values are integers between <CODE>Integer.MIN_VALUE</CODE>
* and <CODE>Integer.MAX_VALUE</CODE>, and all known level names.
* and <CODE>Integer.MAX_VALUE</CODE>, and all known level names.
* Known names are the levels defined by this class (
i.e.
<CODE>FINE</CODE>,
* Known names are the levels defined by this class (
e.g.,
<CODE>FINE</CODE>,
* <CODE>FINER</CODE>, <CODE>FINEST</CODE>), or created by this class with
* <CODE>FINER</CODE>, <CODE>FINEST</CODE>), or created by this class with
* appropriate package access, or new levels defined or created
* appropriate package access, or new levels defined or created
* by subclasses.
* by subclasses.
*
*
* @return The parsed value. Passing an integer that corresponds to a known name
* @return The parsed value. Passing an integer that corresponds to a known name
* (e
g 700) will return the associated name (eg
<CODE>CONFIG</CODE>).
* (e
.g., 700) will return the associated name (e.g.,
<CODE>CONFIG</CODE>).
* Passing an integer that does not (e
g
1) will return a new level name
* Passing an integer that does not (e
.g.,
1) will return a new level name
* initialized to that value.
* initialized to that value.
*/
*/
public
static
synchronized
Level
parse
(
String
name
)
throws
IllegalArgumentException
{
public
static
synchronized
Level
parse
(
String
name
)
throws
IllegalArgumentException
{
...
...
src/share/classes/java/util/logging/LogRecord.java
浏览文件 @
3f70d8d5
...
@@ -188,7 +188,7 @@ public class LogRecord implements java.io.Serializable {
...
@@ -188,7 +188,7 @@ public class LogRecord implements java.io.Serializable {
}
}
/**
/**
* Get the source Logger
name's
* Get the source Logger
's name.
*
*
* @return source logger name (may be null)
* @return source logger name (may be null)
*/
*/
...
@@ -197,7 +197,7 @@ public class LogRecord implements java.io.Serializable {
...
@@ -197,7 +197,7 @@ public class LogRecord implements java.io.Serializable {
}
}
/**
/**
* Set the source Logger name.
* Set the source Logger
's
name.
*
*
* @param name the source logger name (may be null)
* @param name the source logger name (may be null)
*/
*/
...
...
src/share/classes/java/util/logging/Logger.java
浏览文件 @
3f70d8d5
...
@@ -66,7 +66,7 @@ import java.lang.ref.WeakReference;
...
@@ -66,7 +66,7 @@ import java.lang.ref.WeakReference;
* effective level from its parent.
* effective level from its parent.
* <p>
* <p>
* On each logging call the Logger initially performs a cheap
* On each logging call the Logger initially performs a cheap
* check of the request level (e.g. SEVERE or FINE) against the
* check of the request level (e.g.
,
SEVERE or FINE) against the
* effective log level of the logger. If the request level is
* effective log level of the logger. If the request level is
* lower than the log level, the logging call returns immediately.
* lower than the log level, the logging call returns immediately.
* <p>
* <p>
...
@@ -230,7 +230,7 @@ public class Logger {
...
@@ -230,7 +230,7 @@ public class Logger {
* Protected method to construct a logger for a named subsystem.
* Protected method to construct a logger for a named subsystem.
* <p>
* <p>
* The logger will be initially configured with a null Level
* The logger will be initially configured with a null Level
* and with useParentHandlers true.
* and with useParentHandlers
set to
true.
*
*
* @param name A name for the logger. This should
* @param name A name for the logger. This should
* be a dot-separated name and should normally
* be a dot-separated name and should normally
...
@@ -240,7 +240,7 @@ public class Logger {
...
@@ -240,7 +240,7 @@ public class Logger {
* @param resourceBundleName name of ResourceBundle to be used for localizing
* @param resourceBundleName name of ResourceBundle to be used for localizing
* messages for this logger. May be null if none
* messages for this logger. May be null if none
* of the messages require localization.
* of the messages require localization.
* @throws MissingResourceException if the
R
esourceBundleName is non-null and
* @throws MissingResourceException if the
r
esourceBundleName is non-null and
* no corresponding resource can be found.
* no corresponding resource can be found.
*/
*/
protected
Logger
(
String
name
,
String
resourceBundleName
)
{
protected
Logger
(
String
name
,
String
resourceBundleName
)
{
...
@@ -285,7 +285,7 @@ public class Logger {
...
@@ -285,7 +285,7 @@ public class Logger {
* <p>
* <p>
* If a new logger is created its log level will be configured
* If a new logger is created its log level will be configured
* based on the LogManager configuration and it will configured
* based on the LogManager configuration and it will configured
* to also send logging output to its parent's
h
andlers. It will
* to also send logging output to its parent's
H
andlers. It will
* be registered in the LogManager global namespace.
* be registered in the LogManager global namespace.
*
*
* @param name A name for the logger. This should
* @param name A name for the logger. This should
...
@@ -308,7 +308,7 @@ public class Logger {
...
@@ -308,7 +308,7 @@ public class Logger {
* <p>
* <p>
* If a new logger is created its log level will be configured
* If a new logger is created its log level will be configured
* based on the LogManager and it will configured to also send logging
* based on the LogManager and it will configured to also send logging
* output to its parent
logger
s Handlers. It will be registered in
* output to its parent
'
s Handlers. It will be registered in
* the LogManager global namespace.
* the LogManager global namespace.
* <p>
* <p>
* If the named Logger already exists and does not yet have a
* If the named Logger already exists and does not yet have a
...
@@ -326,7 +326,8 @@ public class Logger {
...
@@ -326,7 +326,8 @@ public class Logger {
* messages for this logger. May be <CODE>null</CODE> if none of
* messages for this logger. May be <CODE>null</CODE> if none of
* the messages require localization.
* the messages require localization.
* @return a suitable Logger
* @return a suitable Logger
* @throws MissingResourceException if the named ResourceBundle cannot be found.
* @throws MissingResourceException if the resourceBundleName is non-null and
* no corresponding resource can be found.
* @throws IllegalArgumentException if the Logger already exists and uses
* @throws IllegalArgumentException if the Logger already exists and uses
* a different resource bundle name.
* a different resource bundle name.
* @throws NullPointerException if the name is null.
* @throws NullPointerException if the name is null.
...
@@ -395,7 +396,8 @@ public class Logger {
...
@@ -395,7 +396,8 @@ public class Logger {
* messages for this logger.
* messages for this logger.
* May be null if none of the messages require localization.
* May be null if none of the messages require localization.
* @return a newly created private Logger
* @return a newly created private Logger
* @throws MissingResourceException if the named ResourceBundle cannot be found.
* @throws MissingResourceException if the resourceBundleName is non-null and
* no corresponding resource can be found.
*/
*/
public
static
synchronized
Logger
getAnonymousLogger
(
String
resourceBundleName
)
{
public
static
synchronized
Logger
getAnonymousLogger
(
String
resourceBundleName
)
{
LogManager
manager
=
LogManager
.
getLogManager
();
LogManager
manager
=
LogManager
.
getLogManager
();
...
@@ -514,7 +516,7 @@ public class Logger {
...
@@ -514,7 +516,7 @@ public class Logger {
* level then the given message is forwarded to all the
* level then the given message is forwarded to all the
* registered output Handler objects.
* registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
*/
*/
public
void
log
(
Level
level
,
String
msg
)
{
public
void
log
(
Level
level
,
String
msg
)
{
...
@@ -532,7 +534,7 @@ public class Logger {
...
@@ -532,7 +534,7 @@ public class Logger {
* level then a corresponding LogRecord is created and forwarded
* level then a corresponding LogRecord is created and forwarded
* to all the registered output Handler objects.
* to all the registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
* @param param1 parameter to the message
* @param param1 parameter to the message
*/
*/
...
@@ -553,7 +555,7 @@ public class Logger {
...
@@ -553,7 +555,7 @@ public class Logger {
* level then a corresponding LogRecord is created and forwarded
* level then a corresponding LogRecord is created and forwarded
* to all the registered output Handler objects.
* to all the registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
* @param params array of parameters to the message
* @param params array of parameters to the message
*/
*/
...
@@ -578,7 +580,7 @@ public class Logger {
...
@@ -578,7 +580,7 @@ public class Logger {
* processed specially by output Formatters and is not treated
* processed specially by output Formatters and is not treated
* as a formatting parameter to the LogRecord message property.
* as a formatting parameter to the LogRecord message property.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
* @param thrown Throwable associated with log message.
* @param thrown Throwable associated with log message.
*/
*/
...
@@ -603,7 +605,7 @@ public class Logger {
...
@@ -603,7 +605,7 @@ public class Logger {
* level then the given message is forwarded to all the
* level then the given message is forwarded to all the
* registered output Handler objects.
* registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
...
@@ -626,7 +628,7 @@ public class Logger {
...
@@ -626,7 +628,7 @@ public class Logger {
* level then a corresponding LogRecord is created and forwarded
* level then a corresponding LogRecord is created and forwarded
* to all the registered output Handler objects.
* to all the registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
...
@@ -653,7 +655,7 @@ public class Logger {
...
@@ -653,7 +655,7 @@ public class Logger {
* level then a corresponding LogRecord is created and forwarded
* level then a corresponding LogRecord is created and forwarded
* to all the registered output Handler objects.
* to all the registered output Handler objects.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
...
@@ -684,7 +686,7 @@ public class Logger {
...
@@ -684,7 +686,7 @@ public class Logger {
* processed specially by output Formatters and is not treated
* processed specially by output Formatters and is not treated
* as a formatting parameter to the LogRecord message property.
* as a formatting parameter to the LogRecord message property.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param msg The string message (or a key in the message catalog)
* @param msg The string message (or a key in the message catalog)
...
@@ -731,7 +733,7 @@ public class Logger {
...
@@ -731,7 +733,7 @@ public class Logger {
* resource bundle name is null, or an empty String or invalid
* resource bundle name is null, or an empty String or invalid
* then the msg string is not localized.
* then the msg string is not localized.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param bundleName name of resource bundle to localize msg,
* @param bundleName name of resource bundle to localize msg,
...
@@ -762,7 +764,7 @@ public class Logger {
...
@@ -762,7 +764,7 @@ public class Logger {
* resource bundle name is null, or an empty String or invalid
* resource bundle name is null, or an empty String or invalid
* then the msg string is not localized.
* then the msg string is not localized.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param bundleName name of resource bundle to localize msg,
* @param bundleName name of resource bundle to localize msg,
...
@@ -795,7 +797,7 @@ public class Logger {
...
@@ -795,7 +797,7 @@ public class Logger {
* resource bundle name is null, or an empty String or invalid
* resource bundle name is null, or an empty String or invalid
* then the msg string is not localized.
* then the msg string is not localized.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param bundleName name of resource bundle to localize msg,
* @param bundleName name of resource bundle to localize msg,
...
@@ -832,7 +834,7 @@ public class Logger {
...
@@ -832,7 +834,7 @@ public class Logger {
* processed specially by output Formatters and is not treated
* processed specially by output Formatters and is not treated
* as a formatting parameter to the LogRecord message property.
* as a formatting parameter to the LogRecord message property.
* <p>
* <p>
* @param level One of the message level identifiers, e.g. SEVERE
* @param level One of the message level identifiers, e.g.
,
SEVERE
* @param sourceClass name of class that issued the logging request
* @param sourceClass name of class that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param sourceMethod name of method that issued the logging request
* @param bundleName name of resource bundle to localize msg,
* @param bundleName name of resource bundle to localize msg,
...
@@ -1214,7 +1216,7 @@ public class Logger {
...
@@ -1214,7 +1216,7 @@ public class Logger {
/**
/**
* Specify whether or not this logger should send its output
* Specify whether or not this logger should send its output
* to it
'
s parent Logger. This means that any LogRecords will
* to its parent Logger. This means that any LogRecords will
* also be written to the parent's Handlers, and potentially
* also be written to the parent's Handlers, and potentially
* to its parent, recursively up the namespace.
* to its parent, recursively up the namespace.
*
*
...
...
src/share/classes/java/util/logging/LoggingMXBean.java
浏览文件 @
3f70d8d5
...
@@ -105,8 +105,8 @@ public interface LoggingMXBean extends PlatformManagedObject {
...
@@ -105,8 +105,8 @@ public interface LoggingMXBean extends PlatformManagedObject {
*
*
* @param loggerName The name of the <tt>Logger</tt> to be set.
* @param loggerName The name of the <tt>Logger</tt> to be set.
* Must be non-null.
* Must be non-null.
* @param levelName The name of the level to set
the specified logger to
,
* @param levelName The name of the level to set
on the specified logger
,
* or <tt>null</tt> if
to set
the level to inherit
* or <tt>null</tt> if
setting
the level to inherit
* from its nearest ancestor.
* from its nearest ancestor.
*
*
* @throws IllegalArgumentException if the specified logger
* @throws IllegalArgumentException if the specified logger
...
...
src/share/classes/java/util/logging/MemoryHandler.java
浏览文件 @
3f70d8d5
...
@@ -136,7 +136,7 @@ public class MemoryHandler extends Handler {
...
@@ -136,7 +136,7 @@ public class MemoryHandler extends Handler {
* @param size the number of log records to buffer (must be greater than zero)
* @param size the number of log records to buffer (must be greater than zero)
* @param pushLevel message level to push on
* @param pushLevel message level to push on
*
*
* @throws IllegalArgumentException i
s
size is <= 0
* @throws IllegalArgumentException i
f
size is <= 0
*/
*/
public
MemoryHandler
(
Handler
target
,
int
size
,
Level
pushLevel
)
{
public
MemoryHandler
(
Handler
target
,
int
size
,
Level
pushLevel
)
{
if
(
target
==
null
||
pushLevel
==
null
)
{
if
(
target
==
null
||
pushLevel
==
null
)
{
...
@@ -258,7 +258,7 @@ public class MemoryHandler extends Handler {
...
@@ -258,7 +258,7 @@ public class MemoryHandler extends Handler {
* This method checks if the <tt>LogRecord</tt> has an appropriate level and
* This method checks if the <tt>LogRecord</tt> has an appropriate level and
* whether it satisfies any <tt>Filter</tt>. However it does <b>not</b>
* whether it satisfies any <tt>Filter</tt>. However it does <b>not</b>
* check whether the <tt>LogRecord</tt> would result in a "push" of the
* check whether the <tt>LogRecord</tt> would result in a "push" of the
* buffer contents. It will return false if the <tt>LogRecord</tt> is
N
ull.
* buffer contents. It will return false if the <tt>LogRecord</tt> is
n
ull.
* <p>
* <p>
* @param record a <tt>LogRecord</tt>
* @param record a <tt>LogRecord</tt>
* @return true if the <tt>LogRecord</tt> would be logged.
* @return true if the <tt>LogRecord</tt> would be logged.
...
...
src/share/classes/java/util/logging/StreamHandler.java
浏览文件 @
3f70d8d5
...
@@ -220,7 +220,7 @@ public class StreamHandler extends Handler {
...
@@ -220,7 +220,7 @@ public class StreamHandler extends Handler {
* <p>
* <p>
* This method checks if the <tt>LogRecord</tt> has an appropriate level and
* This method checks if the <tt>LogRecord</tt> has an appropriate level and
* whether it satisfies any <tt>Filter</tt>. It will also return false if
* whether it satisfies any <tt>Filter</tt>. It will also return false if
* no output stream has been assigned yet or the LogRecord is
N
ull.
* no output stream has been assigned yet or the LogRecord is
n
ull.
* <p>
* <p>
* @param record a <tt>LogRecord</tt>
* @param record a <tt>LogRecord</tt>
* @return true if the <tt>LogRecord</tt> would be logged.
* @return true if the <tt>LogRecord</tt> would be logged.
...
...
src/share/classes/java/util/zip/ZipEntry.java
浏览文件 @
3f70d8d5
...
@@ -253,14 +253,10 @@ class ZipEntry implements ZipConstants, Cloneable {
...
@@ -253,14 +253,10 @@ class ZipEntry implements ZipConstants, Cloneable {
* the first 0xFFFF bytes are output to the ZIP file entry.
* the first 0xFFFF bytes are output to the ZIP file entry.
*
*
* @param comment the comment string
* @param comment the comment string
* @exception IllegalArgumentException if the length of the specified
*
* comment string is greater than 0xFFFF bytes
* @see #getComment()
* @see #getComment()
*/
*/
public
void
setComment
(
String
comment
)
{
public
void
setComment
(
String
comment
)
{
if
(
comment
!=
null
&&
comment
.
length
()
>
0xffff
)
{
throw
new
IllegalArgumentException
(
"invalid entry comment length"
);
}
this
.
comment
=
comment
;
this
.
comment
=
comment
;
}
}
...
...
src/share/classes/java/util/zip/ZipFile.java
浏览文件 @
3f70d8d5
...
@@ -195,7 +195,10 @@ class ZipFile implements ZipConstants, Closeable {
...
@@ -195,7 +195,10 @@ class ZipFile implements ZipConstants, Closeable {
if
(
charset
==
null
)
if
(
charset
==
null
)
throw
new
NullPointerException
(
"charset is null"
);
throw
new
NullPointerException
(
"charset is null"
);
this
.
zc
=
ZipCoder
.
get
(
charset
);
this
.
zc
=
ZipCoder
.
get
(
charset
);
long
t0
=
System
.
nanoTime
();
jzfile
=
open
(
name
,
mode
,
file
.
lastModified
());
jzfile
=
open
(
name
,
mode
,
file
.
lastModified
());
sun
.
misc
.
PerfCounter
.
getZipFileOpenTime
().
addElapsedTimeFrom
(
t0
);
sun
.
misc
.
PerfCounter
.
getZipFileCount
().
increment
();
this
.
name
=
name
;
this
.
name
=
name
;
this
.
total
=
getTotal
(
jzfile
);
this
.
total
=
getTotal
(
jzfile
);
}
}
...
...
src/share/classes/javax/sql/rowset/BaseRowSet.java
浏览文件 @
3f70d8d5
...
@@ -168,8 +168,8 @@ import javax.sql.rowset.serial.*;
...
@@ -168,8 +168,8 @@ import javax.sql.rowset.serial.*;
* The majority of methods for setting placeholder parameters take two parameters,
* The majority of methods for setting placeholder parameters take two parameters,
* with the first parameter
* with the first parameter
* indicating which placeholder parameter is to be set, and the second parameter
* indicating which placeholder parameter is to be set, and the second parameter
* giving the value to be set. Methods such as <code>
g
etInt</code>,
* giving the value to be set. Methods such as <code>
s
etInt</code>,
* <code>
getString</code>, <code>getBoolean</code>, and <code>g
etLong</code> fall into
* <code>
setString</code>, <code>setBoolean</code>, and <code>s
etLong</code> fall into
* this category. After these methods have been called, a call to the method
* this category. After these methods have been called, a call to the method
* <code>getParams</code> will return an array with the values that have been set. Each
* <code>getParams</code> will return an array with the values that have been set. Each
* element in the array is an <code>Object</code> instance representing the
* element in the array is an <code>Object</code> instance representing the
...
@@ -3259,9 +3259,9 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3259,9 +3259,9 @@ public static final int ASCII_STREAM_PARAM = 2;
* @param x the parameter value
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @see #getBoolean
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #getParams
* @since 1.4
* @since 1.4
*/
*/
public
void
setBoolean
(
String
parameterName
,
boolean
x
)
throws
SQLException
{
public
void
setBoolean
(
String
parameterName
,
boolean
x
)
throws
SQLException
{
...
@@ -3281,7 +3281,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3281,7 +3281,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Byte
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setByte
(
String
parameterName
,
byte
x
)
throws
SQLException
{
public
void
setByte
(
String
parameterName
,
byte
x
)
throws
SQLException
{
...
@@ -3301,7 +3301,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3301,7 +3301,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Short
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setShort
(
String
parameterName
,
short
x
)
throws
SQLException
{
public
void
setShort
(
String
parameterName
,
short
x
)
throws
SQLException
{
...
@@ -3320,7 +3320,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3320,7 +3320,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Int
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setInt
(
String
parameterName
,
int
x
)
throws
SQLException
{
public
void
setInt
(
String
parameterName
,
int
x
)
throws
SQLException
{
...
@@ -3339,7 +3339,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3339,7 +3339,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Long
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setLong
(
String
parameterName
,
long
x
)
throws
SQLException
{
public
void
setLong
(
String
parameterName
,
long
x
)
throws
SQLException
{
...
@@ -3358,7 +3358,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3358,7 +3358,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Float
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setFloat
(
String
parameterName
,
float
x
)
throws
SQLException
{
public
void
setFloat
(
String
parameterName
,
float
x
)
throws
SQLException
{
...
@@ -3377,7 +3377,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3377,7 +3377,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Double
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setDouble
(
String
parameterName
,
double
x
)
throws
SQLException
{
public
void
setDouble
(
String
parameterName
,
double
x
)
throws
SQLException
{
...
@@ -3398,7 +3398,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3398,7 +3398,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
BigDecimal
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setBigDecimal
(
String
parameterName
,
BigDecimal
x
)
throws
SQLException
{
public
void
setBigDecimal
(
String
parameterName
,
BigDecimal
x
)
throws
SQLException
{
...
@@ -3421,7 +3421,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3421,7 +3421,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
String
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setString
(
String
parameterName
,
String
x
)
throws
SQLException
{
public
void
setString
(
String
parameterName
,
String
x
)
throws
SQLException
{
...
@@ -3443,7 +3443,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3443,7 +3443,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Byte
s
* @see #get
Param
s
* @since 1.4
* @since 1.4
*/
*/
public
void
setBytes
(
String
parameterName
,
byte
x
[])
throws
SQLException
{
public
void
setBytes
(
String
parameterName
,
byte
x
[])
throws
SQLException
{
...
@@ -3464,7 +3464,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3464,7 +3464,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Timestamp
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setTimestamp
(
String
parameterName
,
java
.
sql
.
Timestamp
x
)
public
void
setTimestamp
(
String
parameterName
,
java
.
sql
.
Timestamp
x
)
...
@@ -3712,7 +3712,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3712,7 +3712,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* or <code>STRUCT</code> data type and the JDBC driver does not support
* or <code>STRUCT</code> data type and the JDBC driver does not support
* this data type
* this data type
* @see Types
* @see Types
* @see #get
Object
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setObject
(
String
parameterName
,
Object
x
,
int
targetSqlType
,
int
scale
)
public
void
setObject
(
String
parameterName
,
Object
x
,
int
targetSqlType
,
int
scale
)
...
@@ -3740,7 +3740,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3740,7 +3740,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
* <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
* or <code>STRUCT</code> data type and the JDBC driver does not support
* or <code>STRUCT</code> data type and the JDBC driver does not support
* this data type
* this data type
* @see #get
Object
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setObject
(
String
parameterName
,
Object
x
,
int
targetSqlType
)
public
void
setObject
(
String
parameterName
,
Object
x
,
int
targetSqlType
)
...
@@ -3782,7 +3782,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -3782,7 +3782,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* <code>Object</code> parameter is ambiguous
* <code>Object</code> parameter is ambiguous
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Object
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setObject
(
String
parameterName
,
Object
x
)
throws
SQLException
{
public
void
setObject
(
String
parameterName
,
Object
x
)
throws
SQLException
{
...
@@ -4064,7 +4064,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -4064,7 +4064,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Date
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setDate
(
String
parameterName
,
java
.
sql
.
Date
x
)
public
void
setDate
(
String
parameterName
,
java
.
sql
.
Date
x
)
...
@@ -4091,7 +4091,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -4091,7 +4091,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Date
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setDate
(
String
parameterName
,
java
.
sql
.
Date
x
,
Calendar
cal
)
public
void
setDate
(
String
parameterName
,
java
.
sql
.
Date
x
,
Calendar
cal
)
...
@@ -4111,7 +4111,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -4111,7 +4111,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Time
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setTime
(
String
parameterName
,
java
.
sql
.
Time
x
)
public
void
setTime
(
String
parameterName
,
java
.
sql
.
Time
x
)
...
@@ -4138,7 +4138,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -4138,7 +4138,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Time
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setTime
(
String
parameterName
,
java
.
sql
.
Time
x
,
Calendar
cal
)
public
void
setTime
(
String
parameterName
,
java
.
sql
.
Time
x
,
Calendar
cal
)
...
@@ -4165,7 +4165,7 @@ public static final int ASCII_STREAM_PARAM = 2;
...
@@ -4165,7 +4165,7 @@ public static final int ASCII_STREAM_PARAM = 2;
* this method is called on a closed <code>CallableStatement</code>
* this method is called on a closed <code>CallableStatement</code>
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* this method
* @see #get
Timestamp
* @see #get
Params
* @since 1.4
* @since 1.4
*/
*/
public
void
setTimestamp
(
String
parameterName
,
java
.
sql
.
Timestamp
x
,
Calendar
cal
)
public
void
setTimestamp
(
String
parameterName
,
java
.
sql
.
Timestamp
x
,
Calendar
cal
)
...
...
src/share/classes/sun/misc/PerfCounter.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package
sun.misc
;
import
java.nio.ByteBuffer
;
import
java.nio.ByteOrder
;
import
java.nio.LongBuffer
;
import
java.security.AccessController
;
/**
* Performance counter support for internal JRE classes.
* This class defines a fixed list of counters for the platform
* to use as an interim solution until RFE# 6209222 is implemented.
* The perf counters will be created in the jvmstat perf buffer
* that the HotSpot VM creates. The default size is 32K and thus
* the number of counters is bounded. You can alter the size
* with -XX:PerfDataMemorySize=<bytes> option. If there is
* insufficient memory in the jvmstat perf buffer, the C heap memory
* will be used and thus the application will continue to run if
* the counters added exceeds the buffer size but the counters
* will be missing.
*
* See HotSpot jvmstat implementation for certain circumstances
* that the jvmstat perf buffer is not supported.
*
*/
public
class
PerfCounter
{
private
static
final
Perf
perf
=
AccessController
.
doPrivileged
(
new
Perf
.
GetPerfAction
());
// Must match values defined in hotspot/src/share/vm/runtime/perfdata.hpp
private
final
static
int
V_Constant
=
1
;
private
final
static
int
V_Monotonic
=
2
;
private
final
static
int
V_Variable
=
3
;
private
final
static
int
U_None
=
1
;
private
final
String
name
;
private
final
LongBuffer
lb
;
private
PerfCounter
(
String
name
,
int
type
)
{
this
.
name
=
name
;
ByteBuffer
bb
=
perf
.
createLong
(
name
,
U_None
,
type
,
0L
);
bb
.
order
(
ByteOrder
.
nativeOrder
());
this
.
lb
=
bb
.
asLongBuffer
();
}
static
PerfCounter
newPerfCounter
(
String
name
)
{
return
new
PerfCounter
(
name
,
V_Variable
);
}
static
PerfCounter
newConstantPerfCounter
(
String
name
)
{
PerfCounter
c
=
new
PerfCounter
(
name
,
V_Constant
);
return
c
;
}
/**
* Returns the current value of the perf counter.
*/
public
synchronized
long
get
()
{
return
lb
.
get
(
0
);
}
/**
* Sets the value of the perf counter to the given newValue.
*/
public
synchronized
void
set
(
long
newValue
)
{
lb
.
put
(
0
,
newValue
);
}
/**
* Adds the given value to the perf counter.
*/
public
synchronized
void
add
(
long
value
)
{
long
res
=
get
()
+
value
;
lb
.
put
(
0
,
res
);
}
/**
* Increments the perf counter with 1.
*/
public
void
increment
()
{
add
(
1
);
}
/**
* Adds the given interval to the perf counter.
*/
public
void
addTime
(
long
interval
)
{
add
(
interval
);
}
/**
* Adds the elapsed time from the given start time (ns) to the perf counter.
*/
public
void
addElapsedTimeFrom
(
long
startTime
)
{
add
(
System
.
nanoTime
()
-
startTime
);
}
@Override
public
String
toString
()
{
return
name
+
" = "
+
get
();
}
static
class
CoreCounters
{
static
final
PerfCounter
pdt
=
newPerfCounter
(
"sun.classloader.parentDelegationTime"
);
static
final
PerfCounter
lc
=
newPerfCounter
(
"sun.classloader.findClasses"
);
static
final
PerfCounter
lct
=
newPerfCounter
(
"sun.classloader.findClassTime"
);
static
final
PerfCounter
rcbt
=
newPerfCounter
(
"sun.urlClassLoader.readClassBytesTime"
);
static
final
PerfCounter
zfc
=
newPerfCounter
(
"sun.zip.zipFiles"
);
static
final
PerfCounter
zfot
=
newPerfCounter
(
"sun.zip.zipFile.openTime"
);
}
static
class
WindowsClientCounters
{
static
final
PerfCounter
d3dAvailable
=
newConstantPerfCounter
(
"sun.java2d.d3d.available"
);
}
/**
* Number of findClass calls
*/
public
static
PerfCounter
getFindClasses
()
{
return
CoreCounters
.
lc
;
}
/**
* Time (ns) spent in finding classes that includes
* lookup and read class bytes and defineClass
*/
public
static
PerfCounter
getFindClassTime
()
{
return
CoreCounters
.
lct
;
}
/**
* Time (ns) spent in finding classes
*/
public
static
PerfCounter
getReadClassBytesTime
()
{
return
CoreCounters
.
rcbt
;
}
/**
* Time (ns) spent in the parent delegation to
* the parent of the defining class loader
*/
public
static
PerfCounter
getParentDelegationTime
()
{
return
CoreCounters
.
pdt
;
}
/**
* Number of zip files opened.
*/
public
static
PerfCounter
getZipFileCount
()
{
return
CoreCounters
.
zfc
;
}
/**
* Time (ns) spent in opening the zip files that
* includes building the entries hash table
*/
public
static
PerfCounter
getZipFileOpenTime
()
{
return
CoreCounters
.
zfot
;
}
/**
* D3D graphic pipeline available
*/
public
static
PerfCounter
getD3DAvailable
()
{
return
WindowsClientCounters
.
d3dAvailable
;
}
}
src/share/classes/sun/net/spi/DefaultProxySelector.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2003-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -25,11 +25,9 @@
...
@@ -25,11 +25,9 @@
package
sun.net.spi
;
package
sun.net.spi
;
import
sun.net.www.http.*
;
import
sun.net.NetProperties
;
import
sun.net.NetProperties
;
import
java.net.*
;
import
java.net.*
;
import
java.util.*
;
import
java.util.*
;
import
java.util.regex.*
;
import
java.io.*
;
import
java.io.*
;
import
sun.misc.RegexpPool
;
import
sun.misc.RegexpPool
;
import
java.security.AccessController
;
import
java.security.AccessController
;
...
@@ -102,17 +100,22 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -102,17 +100,22 @@ public class DefaultProxySelector extends ProxySelector {
*/
*/
static
class
NonProxyInfo
{
static
class
NonProxyInfo
{
// Default value for nonProxyHosts, this provides backward compatibility
// by excluding localhost and its litteral notations.
static
final
String
defStringVal
=
"localhost|127.*|[::1]"
;
String
hostsSource
;
String
hostsSource
;
RegexpPool
hostsPool
;
RegexpPool
hostsPool
;
String
property
;
final
String
property
;
final
String
defaultVal
;
static
NonProxyInfo
ftpNonProxyInfo
=
new
NonProxyInfo
(
"ftp.nonProxyHosts"
,
null
,
null
);
static
NonProxyInfo
ftpNonProxyInfo
=
new
NonProxyInfo
(
"ftp.nonProxyHosts"
,
null
,
null
,
defStringVal
);
static
NonProxyInfo
httpNonProxyInfo
=
new
NonProxyInfo
(
"http.nonProxyHosts"
,
null
,
null
);
static
NonProxyInfo
httpNonProxyInfo
=
new
NonProxyInfo
(
"http.nonProxyHosts"
,
null
,
null
,
defStringVal
);
NonProxyInfo
(
String
p
,
String
s
,
RegexpPool
pool
)
{
NonProxyInfo
(
String
p
,
String
s
,
RegexpPool
pool
,
String
d
)
{
property
=
p
;
property
=
p
;
hostsSource
=
s
;
hostsSource
=
s
;
hostsPool
=
pool
;
hostsPool
=
pool
;
defaultVal
=
d
;
}
}
}
}
...
@@ -130,7 +133,6 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -130,7 +133,6 @@ public class DefaultProxySelector extends ProxySelector {
}
}
String
protocol
=
uri
.
getScheme
();
String
protocol
=
uri
.
getScheme
();
String
host
=
uri
.
getHost
();
String
host
=
uri
.
getHost
();
int
port
=
uri
.
getPort
();
if
(
host
==
null
)
{
if
(
host
==
null
)
{
// This is a hack to ensure backward compatibility in two
// This is a hack to ensure backward compatibility in two
...
@@ -149,11 +151,6 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -149,11 +151,6 @@ public class DefaultProxySelector extends ProxySelector {
}
}
i
=
auth
.
lastIndexOf
(
':'
);
i
=
auth
.
lastIndexOf
(
':'
);
if
(
i
>=
0
)
{
if
(
i
>=
0
)
{
try
{
port
=
Integer
.
parseInt
(
auth
.
substring
(
i
+
1
));
}
catch
(
NumberFormatException
e
)
{
port
=
-
1
;
}
auth
=
auth
.
substring
(
0
,
i
);
auth
=
auth
.
substring
(
0
,
i
);
}
}
host
=
auth
;
host
=
auth
;
...
@@ -165,13 +162,6 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -165,13 +162,6 @@ public class DefaultProxySelector extends ProxySelector {
}
}
List
<
Proxy
>
proxyl
=
new
ArrayList
<
Proxy
>(
1
);
List
<
Proxy
>
proxyl
=
new
ArrayList
<
Proxy
>(
1
);
// special case localhost and loopback addresses to
// not go through proxy
if
(
isLoopback
(
host
))
{
proxyl
.
add
(
Proxy
.
NO_PROXY
);
return
proxyl
;
}
NonProxyInfo
pinfo
=
null
;
NonProxyInfo
pinfo
=
null
;
if
(
"http"
.
equalsIgnoreCase
(
protocol
))
{
if
(
"http"
.
equalsIgnoreCase
(
protocol
))
{
...
@@ -244,9 +234,14 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -244,9 +234,14 @@ public class DefaultProxySelector extends ProxySelector {
nphosts
=
NetProperties
.
get
(
nprop
.
property
);
nphosts
=
NetProperties
.
get
(
nprop
.
property
);
synchronized
(
nprop
)
{
synchronized
(
nprop
)
{
if
(
nphosts
==
null
)
{
if
(
nphosts
==
null
)
{
nprop
.
hostsSource
=
null
;
if
(
nprop
.
defaultVal
!=
null
)
{
nprop
.
hostsPool
=
null
;
nphosts
=
nprop
.
defaultVal
;
}
else
{
}
else
{
nprop
.
hostsSource
=
null
;
nprop
.
hostsPool
=
null
;
}
}
if
(
nphosts
!=
null
)
{
if
(!
nphosts
.
equals
(
nprop
.
hostsSource
))
{
if
(!
nphosts
.
equals
(
nprop
.
hostsSource
))
{
RegexpPool
pool
=
new
RegexpPool
();
RegexpPool
pool
=
new
RegexpPool
();
StringTokenizer
st
=
new
StringTokenizer
(
nphosts
,
"|"
,
false
);
StringTokenizer
st
=
new
StringTokenizer
(
nphosts
,
"|"
,
false
);
...
@@ -334,107 +329,6 @@ public class DefaultProxySelector extends ProxySelector {
...
@@ -334,107 +329,6 @@ public class DefaultProxySelector extends ProxySelector {
}
}
}
}
private
boolean
isLoopback
(
String
host
)
{
if
(
host
==
null
||
host
.
length
()
==
0
)
return
false
;
if
(
host
.
equalsIgnoreCase
(
"localhost"
))
return
true
;
/* The string could represent a numerical IP address.
* For IPv4 addresses, check whether it starts with 127.
* For IPv6 addresses, check whether it is ::1 or its equivalent.
* Don't check IPv4-mapped or IPv4-compatible addresses
*/
if
(
host
.
startsWith
(
"127."
))
{
// possible IPv4 loopback address
int
p
=
4
;
int
q
;
int
n
=
host
.
length
();
// Per RFC2732: At most three digits per byte
// Further constraint: Each element fits in a byte
if
((
q
=
scanByte
(
host
,
p
,
n
))
<=
p
)
return
false
;
p
=
q
;
if
((
q
=
scan
(
host
,
p
,
n
,
'.'
))
<=
p
)
return
q
==
n
&&
number
>
0
;
p
=
q
;
if
((
q
=
scanByte
(
host
,
p
,
n
))
<=
p
)
return
false
;
p
=
q
;
if
((
q
=
scan
(
host
,
p
,
n
,
'.'
))
<=
p
)
return
q
==
n
&&
number
>
0
;
p
=
q
;
if
((
q
=
scanByte
(
host
,
p
,
n
))
<=
p
)
return
false
;
return
q
==
n
&&
number
>
0
;
}
if
(
host
.
endsWith
(
":1"
))
{
final
Pattern
p6
=
Pattern
.
compile
(
"::1|(0:){7}1|(0:){1,6}:1"
);
return
p6
.
matcher
(
host
).
matches
();
}
return
false
;
}
// Character-class masks, in reverse order from RFC2396 because
// initializers for static fields cannot make forward references.
// Compute a low-order mask for the characters
// between first and last, inclusive
private
static
long
lowMask
(
char
first
,
char
last
)
{
long
m
=
0
;
int
f
=
Math
.
max
(
Math
.
min
(
first
,
63
),
0
);
int
l
=
Math
.
max
(
Math
.
min
(
last
,
63
),
0
);
for
(
int
i
=
f
;
i
<=
l
;
i
++)
m
|=
1L
<<
i
;
return
m
;
}
// digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
// "8" | "9"
private
static
final
long
L_DIGIT
=
lowMask
(
'0'
,
'9'
);
private
static
final
long
H_DIGIT
=
0L
;
// Scan a string of decimal digits whose value fits in a byte
//
private
int
number
;
private
int
scanByte
(
String
input
,
int
start
,
int
n
)
{
int
p
=
start
;
int
q
=
scan
(
input
,
p
,
n
,
L_DIGIT
,
H_DIGIT
);
if
(
q
<=
p
)
return
q
;
number
=
Integer
.
parseInt
(
input
.
substring
(
p
,
q
));
if
(
number
>
255
)
return
p
;
return
q
;
}
// Scan a specific char: If the char at the given start position is
// equal to c, return the index of the next char; otherwise, return the
// start position.
//
private
int
scan
(
String
input
,
int
start
,
int
end
,
char
c
)
{
if
((
start
<
end
)
&&
(
input
.
charAt
(
start
)
==
c
))
return
start
+
1
;
return
start
;
}
// Scan chars that match the given mask pair
//
private
int
scan
(
String
input
,
int
start
,
int
n
,
long
lowMask
,
long
highMask
)
{
int
p
=
start
;
while
(
p
<
n
)
{
char
c
=
input
.
charAt
(
p
);
if
(
match
(
c
,
lowMask
,
highMask
))
{
p
++;
continue
;
}
break
;
}
return
p
;
}
// Tell whether the given character is permitted by the given mask pair
private
boolean
match
(
char
c
,
long
lowMask
,
long
highMask
)
{
if
(
c
<
64
)
return
((
1L
<<
c
)
&
lowMask
)
!=
0
;
if
(
c
<
128
)
return
((
1L
<<
(
c
-
64
))
&
highMask
)
!=
0
;
return
false
;
}
private
native
static
boolean
init
();
private
native
static
boolean
init
();
private
native
Proxy
getSystemProxy
(
String
protocol
,
String
host
);
private
native
Proxy
getSystemProxy
(
String
protocol
,
String
host
);
}
}
src/share/classes/sun/security/action/GetBooleanSecurityPropertyAction.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package
sun.security.action
;
import
java.security.Security
;
/**
* A convenience class for retrieving the boolean value of a security property
* as a privileged action.
*
* <p>An instance of this class can be used as the argument of
* <code>AccessController.doPrivileged</code>.
*
* <p>The following code retrieves the boolean value of the security
* property named <code>"prop"</code> as a privileged action: <p>
*
* <pre>
* boolean b = java.security.AccessController.doPrivileged
* (new GetBooleanSecurityPropertyAction("prop")).booleanValue();
* </pre>
*
*/
public
class
GetBooleanSecurityPropertyAction
implements
java
.
security
.
PrivilegedAction
<
Boolean
>
{
private
String
theProp
;
/**
* Constructor that takes the name of the security property whose boolean
* value needs to be determined.
*
* @param theProp the name of the security property
*/
public
GetBooleanSecurityPropertyAction
(
String
theProp
)
{
this
.
theProp
=
theProp
;
}
/**
* Determines the boolean value of the security property whose name was
* specified in the constructor.
*
* @return the <code>Boolean</code> value of the security property.
*/
public
Boolean
run
()
{
boolean
b
=
false
;
try
{
String
value
=
Security
.
getProperty
(
theProp
);
b
=
(
value
!=
null
)
&&
value
.
equalsIgnoreCase
(
"true"
);
}
catch
(
NullPointerException
e
)
{}
return
b
;
}
}
src/share/classes/sun/security/provider/certpath/Builder.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2000-200
6
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -26,12 +26,14 @@
...
@@ -26,12 +26,14 @@
package
sun.security.provider.certpath
;
package
sun.security.provider.certpath
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.security.AccessController
;
import
java.security.GeneralSecurityException
;
import
java.security.GeneralSecurityException
;
import
java.security.cert.*
;
import
java.security.cert.*
;
import
java.util.*
;
import
java.util.*
;
import
javax.security.auth.x500.X500Principal
;
import
javax.security.auth.x500.X500Principal
;
import
sun.security.action.GetBooleanAction
;
import
sun.security.util.Debug
;
import
sun.security.util.Debug
;
import
sun.security.x509.GeneralNames
;
import
sun.security.x509.GeneralNames
;
import
sun.security.x509.GeneralNameInterface
;
import
sun.security.x509.GeneralNameInterface
;
...
@@ -64,9 +66,8 @@ public abstract class Builder {
...
@@ -64,9 +66,8 @@ public abstract class Builder {
* Authority Information Access extension shall be enabled. Currently
* Authority Information Access extension shall be enabled. Currently
* disabled by default for compatibility reasons.
* disabled by default for compatibility reasons.
*/
*/
final
static
boolean
USE_AIA
=
final
static
boolean
USE_AIA
=
AccessController
.
doPrivileged
DistributionPointFetcher
.
getBooleanProperty
(
new
GetBooleanAction
(
"com.sun.security.enableAIAcaIssuers"
));
(
"com.sun.security.enableAIAcaIssuers"
,
false
);
/**
/**
* Initialize the builder with the input parameters.
* Initialize the builder with the input parameters.
...
...
src/share/classes/sun/security/provider/certpath/CertId.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2003-200
5
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -25,9 +25,11 @@
...
@@ -25,9 +25,11 @@
package
sun.security.provider.certpath
;
package
sun.security.provider.certpath
;
import
java.io.
*
;
import
java.io.
IOException
;
import
java.math.BigInteger
;
import
java.math.BigInteger
;
import
java.security.MessageDigest
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.cert.X509Certificate
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
sun.misc.HexDumpEncoder
;
import
sun.misc.HexDumpEncoder
;
import
sun.security.x509.*
;
import
sun.security.x509.*
;
...
@@ -54,21 +56,28 @@ import sun.security.util.*;
...
@@ -54,21 +56,28 @@ import sun.security.util.*;
public
class
CertId
{
public
class
CertId
{
private
static
final
boolean
debug
=
false
;
private
static
final
boolean
debug
=
false
;
private
AlgorithmId
hashAlgId
;
private
static
final
AlgorithmId
SHA1_ALGID
private
byte
[]
issuerNameHash
;
=
new
AlgorithmId
(
AlgorithmId
.
SHA_oid
);
private
byte
[]
issuerKeyHash
;
private
final
AlgorithmId
hashAlgId
;
private
SerialNumber
certSerialNumber
;
private
final
byte
[]
issuerNameHash
;
private
final
byte
[]
issuerKeyHash
;
private
final
SerialNumber
certSerialNumber
;
private
int
myhash
=
-
1
;
// hashcode for this CertId
private
int
myhash
=
-
1
;
// hashcode for this CertId
/**
/**
* Creates a CertId. The hash algorithm used is SHA-1.
* Creates a CertId. The hash algorithm used is SHA-1.
*/
*/
public
CertId
(
X509Cert
Impl
issuerCert
,
SerialNumber
serialNumber
)
public
CertId
(
X509Cert
ificate
issuerCert
,
SerialNumber
serialNumber
)
throws
Exception
{
throws
IO
Exception
{
// compute issuerNameHash
// compute issuerNameHash
MessageDigest
md
=
MessageDigest
.
getInstance
(
"SHA1"
);
MessageDigest
md
=
null
;
hashAlgId
=
AlgorithmId
.
get
(
"SHA1"
);
try
{
md
=
MessageDigest
.
getInstance
(
"SHA1"
);
}
catch
(
NoSuchAlgorithmException
nsae
)
{
throw
new
IOException
(
"Unable to create CertId"
,
nsae
);
}
hashAlgId
=
SHA1_ALGID
;
md
.
update
(
issuerCert
.
getSubjectX500Principal
().
getEncoded
());
md
.
update
(
issuerCert
.
getSubjectX500Principal
().
getEncoded
());
issuerNameHash
=
md
.
digest
();
issuerNameHash
=
md
.
digest
();
...
@@ -90,6 +99,7 @@ public class CertId {
...
@@ -90,6 +99,7 @@ public class CertId {
encoder
.
encode
(
issuerNameHash
));
encoder
.
encode
(
issuerNameHash
));
System
.
out
.
println
(
"issuerKeyHash is "
+
System
.
out
.
println
(
"issuerKeyHash is "
+
encoder
.
encode
(
issuerKeyHash
));
encoder
.
encode
(
issuerKeyHash
));
System
.
out
.
println
(
"SerialNumber is "
+
serialNumber
.
getNumber
());
}
}
}
}
...
@@ -97,7 +107,6 @@ public class CertId {
...
@@ -97,7 +107,6 @@ public class CertId {
* Creates a CertId from its ASN.1 DER encoding.
* Creates a CertId from its ASN.1 DER encoding.
*/
*/
public
CertId
(
DerInputStream
derIn
)
throws
IOException
{
public
CertId
(
DerInputStream
derIn
)
throws
IOException
{
hashAlgId
=
AlgorithmId
.
parse
(
derIn
.
getDerValue
());
hashAlgId
=
AlgorithmId
.
parse
(
derIn
.
getDerValue
());
issuerNameHash
=
derIn
.
getOctetString
();
issuerNameHash
=
derIn
.
getOctetString
();
issuerKeyHash
=
derIn
.
getOctetString
();
issuerKeyHash
=
derIn
.
getOctetString
();
...
@@ -157,7 +166,7 @@ public class CertId {
...
@@ -157,7 +166,7 @@ public class CertId {
*
*
* @return the hashcode value.
* @return the hashcode value.
*/
*/
public
int
hashCode
()
{
@Override
public
int
hashCode
()
{
if
(
myhash
==
-
1
)
{
if
(
myhash
==
-
1
)
{
myhash
=
hashAlgId
.
hashCode
();
myhash
=
hashAlgId
.
hashCode
();
for
(
int
i
=
0
;
i
<
issuerNameHash
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
issuerNameHash
.
length
;
i
++)
{
...
@@ -180,8 +189,7 @@ public class CertId {
...
@@ -180,8 +189,7 @@ public class CertId {
* @param other the object to test for equality with this object.
* @param other the object to test for equality with this object.
* @return true if the objects are considered equal, false otherwise.
* @return true if the objects are considered equal, false otherwise.
*/
*/
public
boolean
equals
(
Object
other
)
{
@Override
public
boolean
equals
(
Object
other
)
{
if
(
this
==
other
)
{
if
(
this
==
other
)
{
return
true
;
return
true
;
}
}
...
@@ -203,7 +211,7 @@ public class CertId {
...
@@ -203,7 +211,7 @@ public class CertId {
/**
/**
* Create a string representation of the CertId.
* Create a string representation of the CertId.
*/
*/
public
String
toString
()
{
@Override
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
();
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
"CertId \n"
);
sb
.
append
(
"CertId \n"
);
sb
.
append
(
"Algorithm: "
+
hashAlgId
.
toString
()
+
"\n"
);
sb
.
append
(
"Algorithm: "
+
hashAlgId
.
toString
()
+
"\n"
);
...
...
src/share/classes/sun/security/provider/certpath/CrlRevocationChecker.java
浏览文件 @
3f70d8d5
...
@@ -80,6 +80,7 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
...
@@ -80,6 +80,7 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
{
false
,
false
,
false
,
false
,
false
,
false
,
true
};
{
false
,
false
,
false
,
false
,
false
,
false
,
true
};
private
static
final
boolean
[]
ALL_REASONS
=
private
static
final
boolean
[]
ALL_REASONS
=
{
true
,
true
,
true
,
true
,
true
,
true
,
true
,
true
,
true
};
{
true
,
true
,
true
,
true
,
true
,
true
,
true
,
true
,
true
};
private
boolean
mOnlyEECert
=
false
;
// Maximum clock skew in milliseconds (15 minutes) allowed when checking
// Maximum clock skew in milliseconds (15 minutes) allowed when checking
// validity of CRLs
// validity of CRLs
...
@@ -114,6 +115,12 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
...
@@ -114,6 +115,12 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
CrlRevocationChecker
(
TrustAnchor
anchor
,
PKIXParameters
params
,
CrlRevocationChecker
(
TrustAnchor
anchor
,
PKIXParameters
params
,
Collection
<
X509Certificate
>
certs
)
throws
CertPathValidatorException
Collection
<
X509Certificate
>
certs
)
throws
CertPathValidatorException
{
{
this
(
anchor
,
params
,
certs
,
false
);
}
CrlRevocationChecker
(
TrustAnchor
anchor
,
PKIXParameters
params
,
Collection
<
X509Certificate
>
certs
,
boolean
onlyEECert
)
throws
CertPathValidatorException
{
mAnchor
=
anchor
;
mAnchor
=
anchor
;
mParams
=
params
;
mParams
=
params
;
mStores
=
new
ArrayList
<
CertStore
>(
params
.
getCertStores
());
mStores
=
new
ArrayList
<
CertStore
>(
params
.
getCertStores
());
...
@@ -133,6 +140,7 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
...
@@ -133,6 +140,7 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
}
}
Date
testDate
=
params
.
getDate
();
Date
testDate
=
params
.
getDate
();
mCurrentTime
=
(
testDate
!=
null
?
testDate
:
new
Date
());
mCurrentTime
=
(
testDate
!=
null
?
testDate
:
new
Date
());
mOnlyEECert
=
onlyEECert
;
init
(
false
);
init
(
false
);
}
}
...
@@ -264,6 +272,13 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
...
@@ -264,6 +272,13 @@ class CrlRevocationChecker extends PKIXCertPathChecker {
" ---checking "
+
msg
+
"..."
);
" ---checking "
+
msg
+
"..."
);
}
}
if
(
mOnlyEECert
&&
currCert
.
getBasicConstraints
()
!=
-
1
)
{
if
(
debug
!=
null
)
{
debug
.
println
(
"Skipping revocation check, not end entity cert"
);
}
return
;
}
// reject circular dependencies - RFC 3280 is not explicit on how
// reject circular dependencies - RFC 3280 is not explicit on how
// to handle this, so we feel it is safest to reject them until
// to handle this, so we feel it is safest to reject them until
// the issue is resolved in the PKIX WG.
// the issue is resolved in the PKIX WG.
...
...
src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
浏览文件 @
3f70d8d5
...
@@ -32,7 +32,7 @@ import java.security.*;
...
@@ -32,7 +32,7 @@ import java.security.*;
import
java.security.cert.*
;
import
java.security.cert.*
;
import
javax.security.auth.x500.X500Principal
;
import
javax.security.auth.x500.X500Principal
;
import
sun.security.action.Get
Property
Action
;
import
sun.security.action.Get
Boolean
Action
;
import
sun.security.util.Debug
;
import
sun.security.util.Debug
;
import
sun.security.util.DerOutputStream
;
import
sun.security.util.DerOutputStream
;
import
sun.security.x509.*
;
import
sun.security.x509.*
;
...
@@ -62,28 +62,8 @@ class DistributionPointFetcher {
...
@@ -62,28 +62,8 @@ class DistributionPointFetcher {
* extension shall be enabled. Currently disabled by default for
* extension shall be enabled. Currently disabled by default for
* compatibility and legal reasons.
* compatibility and legal reasons.
*/
*/
private
final
static
boolean
USE_CRLDP
=
private
final
static
boolean
USE_CRLDP
=
AccessController
.
doPrivileged
getBooleanProperty
(
"com.sun.security.enableCRLDP"
,
false
);
(
new
GetBooleanAction
(
"com.sun.security.enableCRLDP"
));
/**
* Return the value of the boolean System property propName.
*/
public
static
boolean
getBooleanProperty
(
String
propName
,
boolean
defaultValue
)
{
// if set, require value of either true or false
String
b
=
AccessController
.
doPrivileged
(
new
GetPropertyAction
(
propName
));
if
(
b
==
null
)
{
return
defaultValue
;
}
else
if
(
b
.
equalsIgnoreCase
(
"false"
))
{
return
false
;
}
else
if
(
b
.
equalsIgnoreCase
(
"true"
))
{
return
true
;
}
else
{
throw
new
RuntimeException
(
"Value of "
+
propName
+
" must either be 'true' or 'false'"
);
}
}
// singleton instance
// singleton instance
private
static
final
DistributionPointFetcher
INSTANCE
=
private
static
final
DistributionPointFetcher
INSTANCE
=
...
...
src/share/classes/sun/security/provider/certpath/ForwardBuilder.java
浏览文件 @
3f70d8d5
...
@@ -82,6 +82,7 @@ class ForwardBuilder extends Builder {
...
@@ -82,6 +82,7 @@ class ForwardBuilder extends Builder {
TrustAnchor
trustAnchor
;
TrustAnchor
trustAnchor
;
private
Comparator
<
X509Certificate
>
comparator
;
private
Comparator
<
X509Certificate
>
comparator
;
private
boolean
searchAllCertStores
=
true
;
private
boolean
searchAllCertStores
=
true
;
private
boolean
onlyEECert
=
false
;
/**
/**
* Initialize the builder with the input parameters.
* Initialize the builder with the input parameters.
...
@@ -89,7 +90,8 @@ class ForwardBuilder extends Builder {
...
@@ -89,7 +90,8 @@ class ForwardBuilder extends Builder {
* @param params the parameter set used to build a certification path
* @param params the parameter set used to build a certification path
*/
*/
ForwardBuilder
(
PKIXBuilderParameters
buildParams
,
ForwardBuilder
(
PKIXBuilderParameters
buildParams
,
X500Principal
targetSubjectDN
,
boolean
searchAllCertStores
)
X500Principal
targetSubjectDN
,
boolean
searchAllCertStores
,
boolean
onlyEECert
)
{
{
super
(
buildParams
,
targetSubjectDN
);
super
(
buildParams
,
targetSubjectDN
);
...
@@ -108,6 +110,7 @@ class ForwardBuilder extends Builder {
...
@@ -108,6 +110,7 @@ class ForwardBuilder extends Builder {
}
}
comparator
=
new
PKIXCertComparator
(
trustedSubjectDNs
);
comparator
=
new
PKIXCertComparator
(
trustedSubjectDNs
);
this
.
searchAllCertStores
=
searchAllCertStores
;
this
.
searchAllCertStores
=
searchAllCertStores
;
this
.
onlyEECert
=
onlyEECert
;
}
}
/**
/**
...
@@ -875,8 +878,8 @@ class ForwardBuilder extends Builder {
...
@@ -875,8 +878,8 @@ class ForwardBuilder extends Builder {
/* Check revocation if it is enabled */
/* Check revocation if it is enabled */
if
(
buildParams
.
isRevocationEnabled
())
{
if
(
buildParams
.
isRevocationEnabled
())
{
try
{
try
{
CrlRevocationChecker
crlChecker
=
CrlRevocationChecker
crlChecker
=
new
CrlRevocationChecker
new
CrlRevocationChecker
(
anchor
,
buildParams
);
(
anchor
,
buildParams
,
null
,
onlyEECert
);
crlChecker
.
check
(
cert
,
anchor
.
getCAPublicKey
(),
true
);
crlChecker
.
check
(
cert
,
anchor
.
getCAPublicKey
(),
true
);
}
catch
(
CertPathValidatorException
cpve
)
{
}
catch
(
CertPathValidatorException
cpve
)
{
if
(
debug
!=
null
)
{
if
(
debug
!=
null
)
{
...
...
src/share/classes/sun/security/provider/certpath/OCSP.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package
sun.security.provider.certpath
;
import
java.io.InputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.net.URI
;
import
java.net.URL
;
import
java.net.HttpURLConnection
;
import
java.security.cert.CertificateException
;
import
java.security.cert.CertPathValidatorException
;
import
java.security.cert.CRLReason
;
import
java.security.cert.Extension
;
import
java.security.cert.X509Certificate
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
static
sun
.
security
.
provider
.
certpath
.
OCSPResponse
.*;
import
sun.security.util.Debug
;
import
sun.security.x509.AccessDescription
;
import
sun.security.x509.AuthorityInfoAccessExtension
;
import
sun.security.x509.GeneralName
;
import
sun.security.x509.GeneralNameInterface
;
import
sun.security.x509.URIName
;
import
sun.security.x509.X509CertImpl
;
/**
* This is a class that checks the revocation status of a certificate(s) using
* OCSP. It is not a PKIXCertPathChecker and therefore can be used outside of
* the CertPathValidator framework. It is useful when you want to
* just check the revocation status of a certificate, and you don't want to
* incur the overhead of validating all of the certificates in the
* associated certificate chain.
*
* @author Sean Mullan
*/
public
final
class
OCSP
{
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"certpath"
);
private
OCSP
()
{}
/**
* Obtains the revocation status of a certificate using OCSP using the most
* common defaults. The OCSP responder URI is retrieved from the
* certificate's AIA extension. The OCSP responder certificate is assumed
* to be the issuer's certificate (or issued by the issuer CA).
*
* @param cert the certificate to be checked
* @param issuerCert the issuer certificate
* @return the RevocationStatus
* @throws IOException if there is an exception connecting to or
* communicating with the OCSP responder
* @throws CertPathValidatorException if an exception occurs while
* encoding the OCSP Request or validating the OCSP Response
*/
public
static
RevocationStatus
check
(
X509Certificate
cert
,
X509Certificate
issuerCert
)
throws
IOException
,
CertPathValidatorException
{
CertId
certId
=
null
;
URI
responderURI
=
null
;
try
{
X509CertImpl
certImpl
=
X509CertImpl
.
toImpl
(
cert
);
responderURI
=
getResponderURI
(
certImpl
);
if
(
responderURI
==
null
)
{
throw
new
CertPathValidatorException
(
"No OCSP Responder URI in certificate"
);
}
certId
=
new
CertId
(
issuerCert
,
certImpl
.
getSerialNumberObject
());
}
catch
(
CertificateException
ce
)
{
throw
new
CertPathValidatorException
(
"Exception while encoding OCSPRequest"
,
ce
);
}
catch
(
IOException
ioe
)
{
throw
new
CertPathValidatorException
(
"Exception while encoding OCSPRequest"
,
ioe
);
}
OCSPResponse
ocspResponse
=
check
(
Collections
.
singletonList
(
certId
),
responderURI
,
issuerCert
,
null
);
return
(
RevocationStatus
)
ocspResponse
.
getSingleResponse
(
certId
);
}
/**
* Obtains the revocation status of a certificate using OCSP.
*
* @param cert the certificate to be checked
* @param issuerCert the issuer certificate
* @param responderURI the URI of the OCSP responder
* @param responderCert the OCSP responder's certificate
* @param date the time the validity of the OCSP responder's certificate
* should be checked against. If null, the current time is used.
* @return the RevocationStatus
* @throws IOException if there is an exception connecting to or
* communicating with the OCSP responder
* @throws CertPathValidatorException if an exception occurs while
* encoding the OCSP Request or validating the OCSP Response
*/
public
static
RevocationStatus
check
(
X509Certificate
cert
,
X509Certificate
issuerCert
,
URI
responderURI
,
X509Certificate
responderCert
,
Date
date
)
throws
IOException
,
CertPathValidatorException
{
CertId
certId
=
null
;
try
{
X509CertImpl
certImpl
=
X509CertImpl
.
toImpl
(
cert
);
certId
=
new
CertId
(
issuerCert
,
certImpl
.
getSerialNumberObject
());
}
catch
(
CertificateException
ce
)
{
throw
new
CertPathValidatorException
(
"Exception while encoding OCSPRequest"
,
ce
);
}
catch
(
IOException
ioe
)
{
throw
new
CertPathValidatorException
(
"Exception while encoding OCSPRequest"
,
ioe
);
}
OCSPResponse
ocspResponse
=
check
(
Collections
.
singletonList
(
certId
),
responderURI
,
responderCert
,
date
);
return
(
RevocationStatus
)
ocspResponse
.
getSingleResponse
(
certId
);
}
/**
* Checks the revocation status of a list of certificates using OCSP.
*
* @param certs the CertIds to be checked
* @param responderURI the URI of the OCSP responder
* @param responderCert the OCSP responder's certificate
* @param date the time the validity of the OCSP responder's certificate
* should be checked against. If null, the current time is used.
* @return the OCSPResponse
* @throws IOException if there is an exception connecting to or
* communicating with the OCSP responder
* @throws CertPathValidatorException if an exception occurs while
* encoding the OCSP Request or validating the OCSP Response
*/
static
OCSPResponse
check
(
List
<
CertId
>
certIds
,
URI
responderURI
,
X509Certificate
responderCert
,
Date
date
)
throws
IOException
,
CertPathValidatorException
{
byte
[]
bytes
=
null
;
try
{
OCSPRequest
request
=
new
OCSPRequest
(
certIds
);
bytes
=
request
.
encodeBytes
();
}
catch
(
IOException
ioe
)
{
throw
new
CertPathValidatorException
(
"Exception while encoding OCSPRequest"
,
ioe
);
}
InputStream
in
=
null
;
OutputStream
out
=
null
;
byte
[]
response
=
null
;
try
{
URL
url
=
responderURI
.
toURL
();
if
(
debug
!=
null
)
{
debug
.
println
(
"connecting to OCSP service at: "
+
url
);
}
HttpURLConnection
con
=
(
HttpURLConnection
)
url
.
openConnection
();
con
.
setDoOutput
(
true
);
con
.
setDoInput
(
true
);
con
.
setRequestMethod
(
"POST"
);
con
.
setRequestProperty
(
"Content-type"
,
"application/ocsp-request"
);
con
.
setRequestProperty
(
"Content-length"
,
String
.
valueOf
(
bytes
.
length
));
out
=
con
.
getOutputStream
();
out
.
write
(
bytes
);
out
.
flush
();
// Check the response
if
(
debug
!=
null
&&
con
.
getResponseCode
()
!=
HttpURLConnection
.
HTTP_OK
)
{
debug
.
println
(
"Received HTTP error: "
+
con
.
getResponseCode
()
+
" - "
+
con
.
getResponseMessage
());
}
in
=
con
.
getInputStream
();
int
contentLength
=
con
.
getContentLength
();
if
(
contentLength
==
-
1
)
{
contentLength
=
Integer
.
MAX_VALUE
;
}
response
=
new
byte
[
contentLength
>
2048
?
2048
:
contentLength
];
int
total
=
0
;
while
(
total
<
contentLength
)
{
int
count
=
in
.
read
(
response
,
total
,
response
.
length
-
total
);
if
(
count
<
0
)
break
;
total
+=
count
;
if
(
total
>=
response
.
length
&&
total
<
contentLength
)
{
response
=
Arrays
.
copyOf
(
response
,
total
*
2
);
}
}
response
=
Arrays
.
copyOf
(
response
,
total
);
}
finally
{
if
(
in
!=
null
)
{
try
{
in
.
close
();
}
catch
(
IOException
ioe
)
{
throw
ioe
;
}
}
if
(
out
!=
null
)
{
try
{
out
.
close
();
}
catch
(
IOException
ioe
)
{
throw
ioe
;
}
}
}
OCSPResponse
ocspResponse
=
null
;
try
{
ocspResponse
=
new
OCSPResponse
(
response
,
date
,
responderCert
);
}
catch
(
IOException
ioe
)
{
// response decoding exception
throw
new
CertPathValidatorException
(
ioe
);
}
if
(
ocspResponse
.
getResponseStatus
()
!=
ResponseStatus
.
SUCCESSFUL
)
{
throw
new
CertPathValidatorException
(
"OCSP response error: "
+
ocspResponse
.
getResponseStatus
());
}
// Check that the response includes a response for all of the
// certs that were supplied in the request
for
(
CertId
certId
:
certIds
)
{
SingleResponse
sr
=
ocspResponse
.
getSingleResponse
(
certId
);
if
(
sr
==
null
)
{
if
(
debug
!=
null
)
{
debug
.
println
(
"No response found for CertId: "
+
certId
);
}
throw
new
CertPathValidatorException
(
"OCSP response does not include a response for a "
+
"certificate supplied in the OCSP request"
);
}
if
(
debug
!=
null
)
{
debug
.
println
(
"Status of certificate (with serial number "
+
certId
.
getSerialNumber
()
+
") is: "
+
sr
.
getCertStatus
());
}
}
return
ocspResponse
;
}
/**
* Returns the URI of the OCSP Responder as specified in the
* certificate's Authority Information Access extension, or null if
* not specified.
*
* @param cert the certificate
* @return the URI of the OCSP Responder, or null if not specified
*/
public
static
URI
getResponderURI
(
X509Certificate
cert
)
{
try
{
return
getResponderURI
(
X509CertImpl
.
toImpl
(
cert
));
}
catch
(
CertificateException
ce
)
{
// treat this case as if the cert had no extension
return
null
;
}
}
static
URI
getResponderURI
(
X509CertImpl
certImpl
)
{
// Examine the certificate's AuthorityInfoAccess extension
AuthorityInfoAccessExtension
aia
=
certImpl
.
getAuthorityInfoAccessExtension
();
if
(
aia
==
null
)
{
return
null
;
}
List
<
AccessDescription
>
descriptions
=
aia
.
getAccessDescriptions
();
for
(
AccessDescription
description
:
descriptions
)
{
if
(
description
.
getAccessMethod
().
equals
(
AccessDescription
.
Ad_OCSP_Id
))
{
GeneralName
generalName
=
description
.
getAccessLocation
();
if
(
generalName
.
getType
()
==
GeneralNameInterface
.
NAME_URI
)
{
URIName
uri
=
(
URIName
)
generalName
.
getName
();
return
uri
.
getURI
();
}
}
}
return
null
;
}
/**
* The Revocation Status of a certificate.
*/
public
static
interface
RevocationStatus
{
public
enum
CertStatus
{
GOOD
,
REVOKED
,
UNKNOWN
};
/**
* Returns the revocation status.
*/
CertStatus
getCertStatus
();
/**
* Returns the time when the certificate was revoked, or null
* if it has not been revoked.
*/
Date
getRevocationTime
();
/**
* Returns the reason the certificate was revoked, or null if it
* has not been revoked.
*/
CRLReason
getRevocationReason
();
/**
* Returns a Map of additional extensions.
*/
Map
<
String
,
Extension
>
getSingleExtensions
();
}
}
src/share/classes/sun/security/provider/certpath/OCSPChecker.java
浏览文件 @
3f70d8d5
此差异已折叠。
点击以展开。
src/share/classes/sun/security/provider/certpath/OCSPRequest.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2003-200
4
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2003-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -26,9 +26,9 @@
...
@@ -26,9 +26,9 @@
package
sun.security.provider.certpath
;
package
sun.security.provider.certpath
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.security.cert.CertPathValidatorException
;
import
java.util.Collections
;
import
java.util.List
;
import
sun.misc.HexDumpEncoder
;
import
sun.misc.HexDumpEncoder
;
import
sun.security.x509.*
;
import
sun.security.util.*
;
import
sun.security.util.*
;
/**
/**
...
@@ -77,47 +77,33 @@ class OCSPRequest {
...
@@ -77,47 +77,33 @@ class OCSPRequest {
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"certpath"
);
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"certpath"
);
private
static
final
boolean
dump
=
false
;
private
static
final
boolean
dump
=
false
;
// Serial number of the certificates to be checked for revocation
// List of request CertIds
private
SerialNumber
serialNumber
;
private
final
List
<
CertId
>
certIds
;
// Issuer's certificate (for computing certId hash values)
private
X509CertImpl
issuerCert
;
// CertId of the certificate to be checked
private
CertId
certId
=
null
;
/*
/*
* Constructs an OCSPRequest. This constructor is used
* Constructs an OCSPRequest. This constructor is used
* to construct an unsigned OCSP Request for a single user cert.
* to construct an unsigned OCSP Request for a single user cert.
*/
*/
// used by OCSPChecker
OCSPRequest
(
CertId
certId
)
{
OCSPRequest
(
X509CertImpl
userCert
,
X509CertImpl
issuerCert
)
this
.
certIds
=
Collections
.
singletonList
(
certId
);
throws
CertPathValidatorException
{
}
if
(
issuerCert
==
null
)
{
OCSPRequest
(
List
<
CertId
>
certIds
)
{
throw
new
CertPathValidatorException
(
"Null IssuerCertificate"
);
this
.
certIds
=
certIds
;
}
this
.
issuerCert
=
issuerCert
;
serialNumber
=
userCert
.
getSerialNumberObject
();
}
}
// used by OCSPChecker
byte
[]
encodeBytes
()
throws
IOException
{
byte
[]
encodeBytes
()
throws
IOException
{
// encode tbsRequest
// encode tbsRequest
DerOutputStream
tmp
=
new
DerOutputStream
();
DerOutputStream
tmp
=
new
DerOutputStream
();
DerOutputStream
derSingleReqList
=
new
DerOutputStream
();
DerOutputStream
requestsOut
=
new
DerOutputStream
();
SingleRequest
singleRequest
=
null
;
for
(
CertId
certId
:
certIds
)
{
DerOutputStream
certIdOut
=
new
DerOutputStream
();
try
{
certId
.
encode
(
certIdOut
);
singleRequest
=
new
SingleRequest
(
issuerCert
,
serialNumber
);
requestsOut
.
write
(
DerValue
.
tag_Sequence
,
certIdOut
);
}
catch
(
Exception
e
)
{
throw
new
IOException
(
"Error encoding OCSP request"
);
}
}
certId
=
singleRequest
.
getCertId
();
tmp
.
write
(
DerValue
.
tag_Sequence
,
requestsOut
);
singleRequest
.
encode
(
derSingleReqList
);
tmp
.
write
(
DerValue
.
tag_Sequence
,
derSingleReqList
);
// No extensions supported
// No extensions supported
DerOutputStream
tbsRequest
=
new
DerOutputStream
();
DerOutputStream
tbsRequest
=
new
DerOutputStream
();
tbsRequest
.
write
(
DerValue
.
tag_Sequence
,
tmp
);
tbsRequest
.
write
(
DerValue
.
tag_Sequence
,
tmp
);
...
@@ -130,35 +116,14 @@ class OCSPRequest {
...
@@ -130,35 +116,14 @@ class OCSPRequest {
if
(
dump
)
{
if
(
dump
)
{
HexDumpEncoder
hexEnc
=
new
HexDumpEncoder
();
HexDumpEncoder
hexEnc
=
new
HexDumpEncoder
();
System
.
out
.
println
(
"OCSPRequest bytes are... "
);
System
.
out
.
println
(
"OCSPRequest bytes are... "
);
System
.
out
.
println
(
hexEnc
.
encode
(
bytes
));
System
.
out
.
println
(
hexEnc
.
encode
(
bytes
));
}
}
return
(
bytes
);
return
bytes
;
}
// used by OCSPChecker
CertId
getCertId
()
{
return
certId
;
}
}
private
static
class
SingleRequest
{
List
<
CertId
>
getCertIds
()
{
private
CertId
certId
;
return
certIds
;
// No extensions are set
private
SingleRequest
(
X509CertImpl
cert
,
SerialNumber
serialNo
)
throws
Exception
{
certId
=
new
CertId
(
cert
,
serialNo
);
}
private
void
encode
(
DerOutputStream
out
)
throws
IOException
{
DerOutputStream
tmp
=
new
DerOutputStream
();
certId
.
encode
(
tmp
);
out
.
write
(
DerValue
.
tag_Sequence
,
tmp
);
}
private
CertId
getCertId
()
{
return
certId
;
}
}
}
}
}
src/share/classes/sun/security/provider/certpath/OCSPResponse.java
浏览文件 @
3f70d8d5
此差异已折叠。
点击以展开。
src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2000-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -28,8 +28,6 @@ package sun.security.provider.certpath;
...
@@ -28,8 +28,6 @@ package sun.security.provider.certpath;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.security.AccessController
;
import
java.security.AccessController
;
import
java.security.InvalidAlgorithmParameterException
;
import
java.security.InvalidAlgorithmParameterException
;
import
java.security.PrivilegedAction
;
import
java.security.Security
;
import
java.security.cert.CertPath
;
import
java.security.cert.CertPath
;
import
java.security.cert.CertPathParameters
;
import
java.security.cert.CertPathParameters
;
import
java.security.cert.CertPathValidatorException
;
import
java.security.cert.CertPathValidatorException
;
...
@@ -49,6 +47,7 @@ import java.util.ArrayList;
...
@@ -49,6 +47,7 @@ import java.util.ArrayList;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.Set
;
import
java.util.Set
;
import
javax.security.auth.x500.X500Principal
;
import
javax.security.auth.x500.X500Principal
;
import
sun.security.action.GetBooleanSecurityPropertyAction
;
import
sun.security.util.Debug
;
import
sun.security.util.Debug
;
/**
/**
...
@@ -67,7 +66,8 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
...
@@ -67,7 +66,8 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
private
List
<
PKIXCertPathChecker
>
userCheckers
;
private
List
<
PKIXCertPathChecker
>
userCheckers
;
private
String
sigProvider
;
private
String
sigProvider
;
private
BasicChecker
basicChecker
;
private
BasicChecker
basicChecker
;
private
String
ocspProperty
;
private
boolean
ocspEnabled
=
false
;
private
boolean
onlyEECert
=
false
;
/**
/**
* Default constructor.
* Default constructor.
...
@@ -253,13 +253,12 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
...
@@ -253,13 +253,12 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
if
(
pkixParam
.
isRevocationEnabled
())
{
if
(
pkixParam
.
isRevocationEnabled
())
{
// Examine OCSP security property
// Examine OCSP security property
ocspProperty
=
AccessController
.
doPrivileged
(
ocspEnabled
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
String
>()
{
new
GetBooleanSecurityPropertyAction
public
String
run
()
{
(
OCSPChecker
.
OCSP_ENABLE_PROP
));
return
onlyEECert
=
AccessController
.
doPrivileged
(
Security
.
getProperty
(
OCSPChecker
.
OCSP_ENABLE_PROP
);
new
GetBooleanSecurityPropertyAction
}
(
"com.sun.security.onlyCheckRevocationOfEECert"
));
});
}
}
}
}
...
@@ -301,15 +300,15 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
...
@@ -301,15 +300,15 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
if
(
pkixParam
.
isRevocationEnabled
())
{
if
(
pkixParam
.
isRevocationEnabled
())
{
// Use OCSP if it has been enabled
// Use OCSP if it has been enabled
if
(
"true"
.
equalsIgnoreCase
(
ocspProperty
)
)
{
if
(
ocspEnabled
)
{
OCSPChecker
ocspChecker
=
OCSPChecker
ocspChecker
=
new
OCSPChecker
(
cpOriginal
,
pkixParam
);
new
OCSPChecker
(
cpOriginal
,
pkixParam
,
onlyEECert
);
certPathCheckers
.
add
(
ocspChecker
);
certPathCheckers
.
add
(
ocspChecker
);
}
}
// Always use CRLs
// Always use CRLs
CrlRevocationChecker
revocationChecker
=
CrlRevocationChecker
revocationChecker
=
new
new
CrlRevocationChecker
(
anchor
,
pkixParam
,
certLis
t
);
CrlRevocationChecker
(
anchor
,
pkixParam
,
certList
,
onlyEECer
t
);
certPathCheckers
.
add
(
revocationChecker
);
certPathCheckers
.
add
(
revocationChecker
);
}
}
...
...
src/share/classes/sun/security/provider/certpath/SunCertPathBuilder.java
浏览文件 @
3f70d8d5
/*
/*
* Copyright 2000-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2000-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
package
sun.security.provider.certpath
;
package
sun.security.provider.certpath
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.security.AccessController
;
import
java.security.GeneralSecurityException
;
import
java.security.GeneralSecurityException
;
import
java.security.InvalidAlgorithmParameterException
;
import
java.security.InvalidAlgorithmParameterException
;
import
java.security.Principal
;
import
java.security.Principal
;
...
@@ -44,6 +45,7 @@ import java.util.LinkedList;
...
@@ -44,6 +45,7 @@ import java.util.LinkedList;
import
java.util.Set
;
import
java.util.Set
;
import
javax.security.auth.x500.X500Principal
;
import
javax.security.auth.x500.X500Principal
;
import
sun.security.action.GetBooleanSecurityPropertyAction
;
import
sun.security.x509.X500Name
;
import
sun.security.x509.X500Name
;
import
sun.security.x509.PKIXExtensions
;
import
sun.security.x509.PKIXExtensions
;
import
sun.security.util.Debug
;
import
sun.security.util.Debug
;
...
@@ -85,6 +87,7 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -85,6 +87,7 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
private
PublicKey
finalPublicKey
;
private
PublicKey
finalPublicKey
;
private
X509CertSelector
targetSel
;
private
X509CertSelector
targetSel
;
private
List
<
CertStore
>
orderedCertStores
;
private
List
<
CertStore
>
orderedCertStores
;
private
boolean
onlyEECert
=
false
;
/**
/**
* Create an instance of <code>SunCertPathBuilder</code>.
* Create an instance of <code>SunCertPathBuilder</code>.
...
@@ -97,6 +100,9 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -97,6 +100,9 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
}
catch
(
CertificateException
e
)
{
}
catch
(
CertificateException
e
)
{
throw
new
CertPathBuilderException
(
e
);
throw
new
CertPathBuilderException
(
e
);
}
}
onlyEECert
=
AccessController
.
doPrivileged
(
new
GetBooleanSecurityPropertyAction
(
"com.sun.security.onlyCheckRevocationOfEECert"
));
}
}
/**
/**
...
@@ -256,7 +262,6 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -256,7 +262,6 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
/*
/*
* Private build reverse method.
* Private build reverse method.
*
*/
*/
private
void
buildReverse
(
List
<
List
<
Vertex
>>
adjacencyList
,
private
void
buildReverse
(
List
<
List
<
Vertex
>>
adjacencyList
,
LinkedList
<
X509Certificate
>
certPathList
)
throws
Exception
LinkedList
<
X509Certificate
>
certPathList
)
throws
Exception
...
@@ -296,7 +301,7 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -296,7 +301,7 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
currentState
.
updateState
(
anchor
);
currentState
.
updateState
(
anchor
);
// init the crl checker
// init the crl checker
currentState
.
crlChecker
=
currentState
.
crlChecker
=
new
CrlRevocationChecker
(
null
,
buildParams
);
new
CrlRevocationChecker
(
null
,
buildParams
,
null
,
onlyEECert
);
try
{
try
{
depthFirstSearchReverse
(
null
,
currentState
,
depthFirstSearchReverse
(
null
,
currentState
,
new
ReverseBuilder
(
buildParams
,
targetSubjectDN
),
adjacencyList
,
new
ReverseBuilder
(
buildParams
,
targetSubjectDN
),
adjacencyList
,
...
@@ -341,10 +346,12 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -341,10 +346,12 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
adjacencyList
.
add
(
new
LinkedList
<
Vertex
>());
adjacencyList
.
add
(
new
LinkedList
<
Vertex
>());
// init the crl checker
// init the crl checker
currentState
.
crlChecker
=
new
CrlRevocationChecker
(
null
,
buildParams
);
currentState
.
crlChecker
=
new
CrlRevocationChecker
(
null
,
buildParams
,
null
,
onlyEECert
);
depthFirstSearchForward
(
targetSubjectDN
,
currentState
,
depthFirstSearchForward
(
targetSubjectDN
,
currentState
,
new
ForwardBuilder
(
buildParams
,
targetSubjectDN
,
searchAllCertStores
),
new
ForwardBuilder
(
buildParams
,
targetSubjectDN
,
searchAllCertStores
,
onlyEECert
),
adjacencyList
,
certPathList
);
adjacencyList
,
certPathList
);
}
}
...
@@ -486,8 +493,8 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
...
@@ -486,8 +493,8 @@ public final class SunCertPathBuilder extends CertPathBuilderSpi {
userCheckers
.
add
(
mustCheck
,
basicChecker
);
userCheckers
.
add
(
mustCheck
,
basicChecker
);
mustCheck
++;
mustCheck
++;
if
(
buildParams
.
isRevocationEnabled
())
{
if
(
buildParams
.
isRevocationEnabled
())
{
userCheckers
.
add
(
mustCheck
,
userCheckers
.
add
(
mustCheck
,
new
CrlRevocationChecker
new
CrlRevocationChecker
(
anchor
,
buildParams
));
(
anchor
,
buildParams
,
null
,
onlyEECert
));
mustCheck
++;
mustCheck
++;
}
}
}
}
...
...
src/share/classes/sun/security/x509/AccessDescription.java
浏览文件 @
3f70d8d5
...
@@ -113,7 +113,7 @@ public final class AccessDescription {
...
@@ -113,7 +113,7 @@ public final class AccessDescription {
}
else
{
}
else
{
method
=
accessMethod
.
toString
();
method
=
accessMethod
.
toString
();
}
}
return
(
"accessMethod: "
+
method
+
return
(
"
\n
accessMethod: "
+
method
+
"\n accessLocation: "
+
accessLocation
.
toString
()
+
"\n"
);
"\n accessLocation: "
+
accessLocation
.
toString
()
+
"\n"
);
}
}
}
}
src/share/demo/jvmti/waiters/Agent.cpp
浏览文件 @
3f70d8d5
...
@@ -72,36 +72,30 @@ Agent::get_monitor(jvmtiEnv *jvmti, JNIEnv *env, jobject object)
...
@@ -72,36 +72,30 @@ Agent::get_monitor(jvmtiEnv *jvmti, JNIEnv *env, jobject object)
{
{
jvmtiError
err
;
jvmtiError
err
;
Monitor
*
m
;
Monitor
*
m
;
jlong
tag
;
/* We use tags to track these, the tag is the Monitor pointer */
m
=
NULL
;
err
=
jvmti
->
RawMonitorEnter
(
lock
);
{
tag
=
(
jlong
)
0
;
check_jvmti_error
(
jvmti
,
err
,
"raw monitor enter"
);
err
=
jvmti
->
GetTag
(
object
,
&
tag
);
check_jvmti_error
(
jvmti
,
err
,
"get tag"
);
/* The raw monitor enter/exit protects us from creating two
/*LINTED*/
* instances for the same object.
m
=
(
Monitor
*
)(
void
*
)(
ptrdiff_t
)
tag
;
*/
if
(
m
==
NULL
)
{
jlong
tag
;
m
=
new
Monitor
(
jvmti
,
env
,
object
);
/* Save monitor on list */
m
=
NULL
;
if
(
monitor_count
==
monitor_list_size
)
{
tag
=
(
jlong
)
0
;
monitor_list_size
+=
monitor_list_grow_size
;
err
=
jvmti
->
GetTag
(
object
,
&
tag
);
check_jvmti_error
(
jvmti
,
err
,
"get tag"
);
/*LINTED*/
m
=
(
Monitor
*
)(
void
*
)(
ptrdiff_t
)
tag
;
if
(
m
==
NULL
)
{
m
=
new
Monitor
(
jvmti
,
env
,
object
);
/*LINTED*/
tag
=
(
jlong
)(
ptrdiff_t
)(
void
*
)
m
;
err
=
jvmti
->
SetTag
(
object
,
tag
);
check_jvmti_error
(
jvmti
,
err
,
"set tag"
);
/* Save monitor on list */
monitor_list
=
(
Monitor
**
)
realloc
((
void
*
)
monitor_list
,
monitor_list
=
(
Monitor
**
)
realloc
((
void
*
)
monitor_list
,
(
monitor_count
+
1
)
*
(
int
)
sizeof
(
Monitor
*
));
(
monitor_list_size
)
*
(
int
)
sizeof
(
Monitor
*
));
monitor_list
[
monitor_count
++
]
=
m
;
}
}
}
err
=
jvmti
->
RawMonitorExit
(
lock
);
monitor_list
[
monitor_count
]
=
m
;
check_jvmti_error
(
jvmti
,
err
,
"raw monitor exit"
);
m
->
set_slot
(
monitor_count
);
monitor_count
++
;
/*LINTED*/
tag
=
(
jlong
)(
ptrdiff_t
)(
void
*
)
m
;
err
=
jvmti
->
SetTag
(
object
,
tag
);
check_jvmti_error
(
jvmti
,
err
,
"set tag"
);
}
return
m
;
return
m
;
}
}
...
@@ -112,12 +106,11 @@ Agent::Agent(jvmtiEnv *jvmti, JNIEnv *env, jthread thread)
...
@@ -112,12 +106,11 @@ Agent::Agent(jvmtiEnv *jvmti, JNIEnv *env, jthread thread)
stdout_message
(
"Agent created..
\n
"
);
stdout_message
(
"Agent created..
\n
"
);
stdout_message
(
"VMInit...
\n
"
);
stdout_message
(
"VMInit...
\n
"
);
/* Create a Monitor lock to use */
err
=
jvmti
->
CreateRawMonitor
(
"waiters Agent lock"
,
&
lock
);
check_jvmti_error
(
jvmti
,
err
,
"create raw monitor"
);
/* Start monitor list */
/* Start monitor list */
monitor_count
=
0
;
monitor_count
=
0
;
monitor_list
=
(
Monitor
**
)
malloc
((
int
)
sizeof
(
Monitor
*
));
monitor_list_size
=
initial_monitor_list_size
;
monitor_list
=
(
Monitor
**
)
malloc
(
monitor_list_size
*
(
int
)
sizeof
(
Monitor
*
));
}
}
Agent
::~
Agent
()
Agent
::~
Agent
()
...
@@ -134,9 +127,6 @@ void Agent::vm_death(jvmtiEnv *jvmti, JNIEnv *env)
...
@@ -134,9 +127,6 @@ void Agent::vm_death(jvmtiEnv *jvmti, JNIEnv *env)
delete
monitor_list
[
i
];
delete
monitor_list
[
i
];
}
}
free
(
monitor_list
);
free
(
monitor_list
);
/* Destroy the Monitor lock to use */
err
=
jvmti
->
DestroyRawMonitor
(
lock
);
check_jvmti_error
(
jvmti
,
err
,
"destroy raw monitor"
);
/* Print death message */
/* Print death message */
stdout_message
(
"VMDeath...
\n
"
);
stdout_message
(
"VMDeath...
\n
"
);
}
}
...
@@ -215,8 +205,16 @@ void Agent::object_free(jvmtiEnv* jvmti, jlong tag)
...
@@ -215,8 +205,16 @@ void Agent::object_free(jvmtiEnv* jvmti, jlong tag)
/* We just cast the tag to a C++ pointer and delete it.
/* We just cast the tag to a C++ pointer and delete it.
* we know it can only be a Monitor *.
* we know it can only be a Monitor *.
*/
*/
Monitor
*
m
;
Monitor
*
m
;
/*LINTED*/
/*LINTED*/
m
=
(
Monitor
*
)(
ptrdiff_t
)
tag
;
m
=
(
Monitor
*
)(
ptrdiff_t
)
tag
;
if
(
monitor_count
>
1
)
{
/* Move the last element to this Monitor's slot */
int
slot
=
m
->
get_slot
();
Monitor
*
last
=
monitor_list
[
monitor_count
-
1
];
monitor_list
[
slot
]
=
last
;
last
->
set_slot
(
slot
);
}
monitor_count
--
;
delete
m
;
delete
m
;
}
}
src/share/demo/jvmti/waiters/Agent.hpp
浏览文件 @
3f70d8d5
...
@@ -34,8 +34,12 @@
...
@@ -34,8 +34,12 @@
class
Agent
{
class
Agent
{
private:
private:
jrawMonitorID
lock
;
enum
{
initial_monitor_list_size
=
64
,
monitor_list_grow_size
=
16
};
Monitor
**
monitor_list
;
Monitor
**
monitor_list
;
unsigned
monitor_list_size
;
unsigned
monitor_count
;
unsigned
monitor_count
;
Thread
*
get_thread
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jthread
thread
);
Thread
*
get_thread
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jthread
thread
);
Monitor
*
get_monitor
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jobject
object
);
Monitor
*
get_monitor
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jobject
object
);
...
...
src/share/demo/jvmti/waiters/Monitor.cpp
浏览文件 @
3f70d8d5
...
@@ -73,6 +73,16 @@ Monitor::~Monitor()
...
@@ -73,6 +73,16 @@ Monitor::~Monitor()
name
,
contends
,
waits
,
timeouts
);
name
,
contends
,
waits
,
timeouts
);
}
}
int
Monitor
::
get_slot
()
{
return
slot
;
}
void
Monitor
::
set_slot
(
int
aslot
)
{
slot
=
aslot
;
}
void
Monitor
::
contended
()
void
Monitor
::
contended
()
{
{
contends
++
;
contends
++
;
...
...
src/share/demo/jvmti/waiters/Monitor.hpp
浏览文件 @
3f70d8d5
...
@@ -35,6 +35,7 @@ class Monitor {
...
@@ -35,6 +35,7 @@ class Monitor {
private:
private:
char
name
[
64
];
char
name
[
64
];
int
slot
;
unsigned
contends
;
unsigned
contends
;
unsigned
waits
;
unsigned
waits
;
unsigned
timeouts
;
unsigned
timeouts
;
...
@@ -42,6 +43,8 @@ class Monitor {
...
@@ -42,6 +43,8 @@ class Monitor {
public:
public:
Monitor
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jobject
object
);
Monitor
(
jvmtiEnv
*
jvmti
,
JNIEnv
*
env
,
jobject
object
);
~
Monitor
();
~
Monitor
();
int
get_slot
();
void
set_slot
(
int
i
);
void
contended
();
void
contended
();
void
waited
();
void
waited
();
void
timeout
();
void
timeout
();
...
...
src/share/javavm/export/jvm.h
浏览文件 @
3f70d8d5
...
@@ -374,6 +374,12 @@ JVM_FindPrimitiveClass(JNIEnv *env, const char *utf);
...
@@ -374,6 +374,12 @@ JVM_FindPrimitiveClass(JNIEnv *env, const char *utf);
JNIEXPORT
void
JNICALL
JNIEXPORT
void
JNICALL
JVM_ResolveClass
(
JNIEnv
*
env
,
jclass
cls
);
JVM_ResolveClass
(
JNIEnv
*
env
,
jclass
cls
);
/*
* Find a class from a boot class loader. Returns NULL if class not found.
*/
JNIEXPORT
jclass
JNICALL
JVM_FindClassFromBootLoader
(
JNIEnv
*
env
,
const
char
*
name
);
/*
/*
* Find a class from a given class loader. Throw ClassNotFoundException
* Find a class from a given class loader. Throw ClassNotFoundException
* or NoClassDefFoundError depending on the value of the last
* or NoClassDefFoundError depending on the value of the last
...
...
src/share/lib/net.properties
浏览文件 @
3f70d8d5
...
@@ -32,7 +32,7 @@ java.net.useSystemProxies=false
...
@@ -32,7 +32,7 @@ java.net.useSystemProxies=false
#
#
# http.proxyHost=
# http.proxyHost=
# http.proxyPort=80
# http.proxyPort=80
# http.nonProxyHosts=localhost|127.0.0.1
http.nonProxyHosts
=
localhost|127.*|[::1]
#
#
# HTTPS Proxy Settings. proxyHost is the name of the proxy server
# HTTPS Proxy Settings. proxyHost is the name of the proxy server
# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
...
@@ -49,7 +49,7 @@ java.net.useSystemProxies=false
...
@@ -49,7 +49,7 @@ java.net.useSystemProxies=false
#
#
# ftp.proxyHost=
# ftp.proxyHost=
# ftp.proxyPort=80
# ftp.proxyPort=80
# ftp.nonProxyHosts=localhost|127.0.0.1
ftp.nonProxyHosts
=
localhost|127.*|[::1]
#
#
# Gopher Proxy settings. proxyHost is the name of the proxy server
# Gopher Proxy settings. proxyHost is the name of the proxy server
# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default
...
...
src/share/native/java/lang/ClassLoader.c
浏览文件 @
3f70d8d5
...
@@ -237,6 +237,9 @@ Java_java_lang_ClassLoader_resolveClass0(JNIEnv *env, jobject this,
...
@@ -237,6 +237,9 @@ Java_java_lang_ClassLoader_resolveClass0(JNIEnv *env, jobject this,
JVM_ResolveClass
(
env
,
cls
);
JVM_ResolveClass
(
env
,
cls
);
}
}
/*
* Returns NULL if class not found.
*/
JNIEXPORT
jclass
JNICALL
JNIEXPORT
jclass
JNICALL
Java_java_lang_ClassLoader_findBootstrapClass
(
JNIEnv
*
env
,
jobject
loader
,
Java_java_lang_ClassLoader_findBootstrapClass
(
JNIEnv
*
env
,
jobject
loader
,
jstring
classname
)
jstring
classname
)
...
@@ -246,7 +249,6 @@ Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
...
@@ -246,7 +249,6 @@ Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
char
buf
[
128
];
char
buf
[
128
];
if
(
classname
==
NULL
)
{
if
(
classname
==
NULL
)
{
JNU_ThrowClassNotFoundException
(
env
,
0
);
return
0
;
return
0
;
}
}
...
@@ -258,11 +260,10 @@ Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
...
@@ -258,11 +260,10 @@ Java_java_lang_ClassLoader_findBootstrapClass(JNIEnv *env, jobject loader,
VerifyFixClassname
(
clname
);
VerifyFixClassname
(
clname
);
if
(
!
VerifyClassname
(
clname
,
JNI_TRUE
))
{
/* expects slashed name */
if
(
!
VerifyClassname
(
clname
,
JNI_TRUE
))
{
/* expects slashed name */
JNU_ThrowClassNotFoundException
(
env
,
clname
);
goto
done
;
goto
done
;
}
}
cls
=
JVM_FindClassFrom
ClassLoader
(
env
,
clname
,
JNI_FALSE
,
0
,
JNI_FALSE
);
cls
=
JVM_FindClassFrom
BootLoader
(
env
,
clname
);
done:
done:
if
(
clname
!=
buf
)
{
if
(
clname
!=
buf
)
{
...
...
src/solaris/bin/java_md.c
浏览文件 @
3f70d8d5
...
@@ -1324,12 +1324,12 @@ FindBootStrapClass(JNIEnv *env, const char* classname)
...
@@ -1324,12 +1324,12 @@ FindBootStrapClass(JNIEnv *env, const char* classname)
{
{
if
(
findBootClass
==
NULL
)
{
if
(
findBootClass
==
NULL
)
{
findBootClass
=
(
FindClassFromBootLoader_t
*
)
dlsym
(
RTLD_DEFAULT
,
findBootClass
=
(
FindClassFromBootLoader_t
*
)
dlsym
(
RTLD_DEFAULT
,
"JVM_FindClassFrom
Class
Loader"
);
"JVM_FindClassFrom
Boot
Loader"
);
if
(
findBootClass
==
NULL
)
{
if
(
findBootClass
==
NULL
)
{
JLI_ReportErrorMessage
(
DLL_ERROR4
,
JLI_ReportErrorMessage
(
DLL_ERROR4
,
"JVM_FindClassFrom
Class
Loader"
);
"JVM_FindClassFrom
Boot
Loader"
);
return
NULL
;
return
NULL
;
}
}
}
}
return
findBootClass
(
env
,
classname
,
JNI_FALSE
,
(
jobject
)
NULL
,
JNI_FALSE
);
return
findBootClass
(
env
,
classname
);
}
}
src/windows/bin/java_md.c
浏览文件 @
3f70d8d5
...
@@ -1093,12 +1093,6 @@ void SetJavaLauncherPlatformProps() {}
...
@@ -1093,12 +1093,6 @@ void SetJavaLauncherPlatformProps() {}
*/
*/
static
FindClassFromBootLoader_t
*
findBootClass
=
NULL
;
static
FindClassFromBootLoader_t
*
findBootClass
=
NULL
;
#ifdef _M_AMD64
#define JVM_BCLOADER "JVM_FindClassFromClassLoader"
#else
#define JVM_BCLOADER "_JVM_FindClassFromClassLoader@20"
#endif
/* _M_AMD64 */
jclass
FindBootStrapClass
(
JNIEnv
*
env
,
const
char
*
classname
)
jclass
FindBootStrapClass
(
JNIEnv
*
env
,
const
char
*
classname
)
{
{
HMODULE
hJvm
;
HMODULE
hJvm
;
...
@@ -1108,13 +1102,13 @@ jclass FindBootStrapClass(JNIEnv *env, const char *classname)
...
@@ -1108,13 +1102,13 @@ jclass FindBootStrapClass(JNIEnv *env, const char *classname)
if
(
hJvm
==
NULL
)
return
NULL
;
if
(
hJvm
==
NULL
)
return
NULL
;
/* need to use the demangled entry point */
/* need to use the demangled entry point */
findBootClass
=
(
FindClassFromBootLoader_t
*
)
GetProcAddress
(
hJvm
,
findBootClass
=
(
FindClassFromBootLoader_t
*
)
GetProcAddress
(
hJvm
,
JVM_BCLOADER
);
"JVM_FindClassFromBootLoader"
);
if
(
findBootClass
==
NULL
)
{
if
(
findBootClass
==
NULL
)
{
JLI_ReportErrorMessage
(
DLL_ERROR4
,
JVM_BCLOADER
);
JLI_ReportErrorMessage
(
DLL_ERROR4
,
"JVM_FindClassFromBootLoader"
);
return
NULL
;
return
NULL
;
}
}
}
}
return
findBootClass
(
env
,
classname
,
JNI_FALSE
,
(
jobject
)
NULL
,
JNI_FALSE
);
return
findBootClass
(
env
,
classname
);
}
}
void
void
...
...
src/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java
浏览文件 @
3f70d8d5
...
@@ -67,6 +67,9 @@ public class D3DGraphicsDevice extends Win32GraphicsDevice {
...
@@ -67,6 +67,9 @@ public class D3DGraphicsDevice extends Win32GraphicsDevice {
if
(
d3dAvailable
)
{
if
(
d3dAvailable
)
{
// we don't use pixel formats for the d3d pipeline
// we don't use pixel formats for the d3d pipeline
pfDisabled
=
true
;
pfDisabled
=
true
;
sun
.
misc
.
PerfCounter
.
getD3DAvailable
().
set
(
1
);
}
else
{
sun
.
misc
.
PerfCounter
.
getD3DAvailable
().
set
(
0
);
}
}
}
}
...
...
test/com/sun/jdi/BreakpointWithFullGC.sh
0 → 100644
浏览文件 @
3f70d8d5
#!/bin/sh
#
# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6862295
# @summary Verify breakpoints still work after a full GC.
# @author dcubed (based on the test program posted to the following
# Eclipse thread https://bugs.eclipse.org/bugs/show_bug.cgi?id=279137)
#
# @run shell BreakpointWithFullGC.sh
compileOptions
=
-g
# Hijacking the mode parameter to make sure we use a small amount
# of memory and can see what GC is doing.
mode
=
"-Xmx32m -verbose:gc"
# Force use of a GC framework collector to see the original failure.
#mode="$mode -XX:+UseSerialGC"
# Uncomment this to see the JDI trace
#jdbOptions=-dbgtrace
createJavaFile
()
{
cat
<<
EOF
>
$1
.java.1
import java.util.ArrayList;
import java.util.List;
public class
$1
{
public static List<Object> objList = new ArrayList<Object>();
private static void init(int numObjs) {
for (int i = 0; i < numObjs; i++) {
objList.add(new Object());
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("top of loop"); // @1 breakpoint
init(1000000);
objList.clear();
System.out.println("bottom of loop"); // @1 breakpoint
}
System.out.println("end of test"); // @1 breakpoint
}
}
EOF
}
# This is called to feed cmds to jdb.
dojdbCmds
()
{
setBkpts @1
# get to the first loop breakpoint
runToBkpt
# 19 "cont" commands gets us through all the loop breakpoints.
# Use for-loop instead of while-loop to avoid creating processes
# for '[' and 'expr'.
for
ii
in
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
;
do
contToBkpt
done
# get to the last breakpoint
contToBkpt
}
mysetup
()
{
if
[
-z
"
$TESTSRC
"
]
;
then
TESTSRC
=
.
fi
for
ii
in
.
$TESTSRC
$TESTSRC
/..
;
do
if
[
-r
"
$ii
/ShellScaffold.sh"
]
;
then
.
$ii
/ShellScaffold.sh
break
fi
done
}
# You could replace this next line with the contents
# of ShellScaffold.sh and this script will run just the same.
mysetup
runit
# make sure we hit the first breakpoint at least once
jdbFailIfNotPresent
'System\..*top of loop'
# make sure we hit the second breakpoint at least once
jdbFailIfNotPresent
'System\..*bottom of loop'
# make sure we hit the last breakpoint
jdbFailIfNotPresent
'System\..*end of test'
# make sure we had at least one full GC
debuggeeFailIfNotPresent
'Full GC'
# check for error message due to thread ID change
debuggeeFailIfPresent
\
'Exception in thread "event-handler" java.lang.NullPointerException'
pass
test/java/lang/ProcessBuilder/Basic.java
浏览文件 @
3f70d8d5
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
* @test
* @test
* @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689
* @bug 4199068 4738465 4937983 4930681 4926230 4931433 4932663 4986689
* 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313
* 5026830 5023243 5070673 4052517 4811767 6192449 6397034 6413313
* 6464154 6523983 6206031 4960438 6631352 6631966
* 6464154 6523983 6206031 4960438 6631352 6631966
6850957 6850958
* @summary Basic tests for Process and Environment Variable code
* @summary Basic tests for Process and Environment Variable code
* @run main/othervm Basic
* @run main/othervm Basic
* @author Martin Buchholz
* @author Martin Buchholz
...
@@ -302,6 +302,14 @@ public class Basic {
...
@@ -302,6 +302,14 @@ public class Basic {
printUTF8
(
val
==
null
?
"null"
:
val
);
printUTF8
(
val
==
null
?
"null"
:
val
);
}
else
if
(
action
.
equals
(
"System.getenv()"
))
{
}
else
if
(
action
.
equals
(
"System.getenv()"
))
{
printUTF8
(
getenvAsString
(
System
.
getenv
()));
printUTF8
(
getenvAsString
(
System
.
getenv
()));
}
else
if
(
action
.
equals
(
"ArrayOOME"
))
{
Object
dummy
;
switch
(
new
Random
().
nextInt
(
3
))
{
case
0
:
dummy
=
new
Integer
[
Integer
.
MAX_VALUE
];
break
;
case
1
:
dummy
=
new
double
[
Integer
.
MAX_VALUE
];
break
;
case
2
:
dummy
=
new
byte
[
Integer
.
MAX_VALUE
][];
break
;
default
:
throw
new
InternalError
();
}
}
else
if
(
action
.
equals
(
"pwd"
))
{
}
else
if
(
action
.
equals
(
"pwd"
))
{
printUTF8
(
new
File
(
System
.
getProperty
(
"user.dir"
))
printUTF8
(
new
File
(
System
.
getProperty
(
"user.dir"
))
.
getCanonicalPath
());
.
getCanonicalPath
());
...
@@ -1472,6 +1480,22 @@ public class Basic {
...
@@ -1472,6 +1480,22 @@ public class Basic {
}
}
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
// OOME in child allocating maximally sized array
// Test for hotspot/jvmti bug 6850957
//----------------------------------------------------------------
try
{
List
<
String
>
list
=
new
ArrayList
<
String
>(
javaChildArgs
);
list
.
add
(
1
,
String
.
format
(
"-XX:OnOutOfMemoryError=%s -version"
,
javaExe
));
list
.
add
(
"ArrayOOME"
);
ProcessResults
r
=
run
(
new
ProcessBuilder
(
list
));
check
(
r
.
out
().
contains
(
"java.lang.OutOfMemoryError:"
));
check
(
r
.
out
().
contains
(
javaExe
));
check
(
r
.
err
().
contains
(
System
.
getProperty
(
"java.version"
)));
equal
(
r
.
exitValue
(),
1
);
}
catch
(
Throwable
t
)
{
unexpected
(
t
);
}
//----------------------------------------------------------------
//----------------------------------------------------------------
// Windows has tricky semi-case-insensitive semantics
// Windows has tricky semi-case-insensitive semantics
//----------------------------------------------------------------
//----------------------------------------------------------------
...
...
test/java/net/ProxySelector/B6737819.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6737819
* @summary sun.misc.net.DefaultProxySelector doesn't use proxy setting to localhost
*/
import
java.net.ProxySelector
;
import
java.net.Proxy
;
import
java.net.URI
;
public
class
B6737819
{
private
static
String
[]
uris
=
{
"http://localhost/index.html"
,
"http://127.0.0.1/index.html"
,
"http://127.2/index.html"
,
"http://[::1]/index.html"
};
public
static
void
main
(
String
[]
args
)
throws
Exception
{
System
.
setProperty
(
"http.proxyHost"
,
"myproxy"
);
System
.
setProperty
(
"http.proxyPort"
,
"8080"
);
ProxySelector
sel
=
ProxySelector
.
getDefault
();
java
.
util
.
List
<
Proxy
>
l
;
// Default value for http.nonProxyHots should exclude all this uris
// from going through the HTTP proxy
for
(
String
s
:
uris
)
{
l
=
sel
.
select
(
new
URI
(
s
));
if
(
l
.
size
()
==
1
&&
l
.
get
(
0
).
type
()
!=
Proxy
.
Type
.
DIRECT
)
{
throw
new
RuntimeException
(
"ProxySelector returned the wrong proxy for "
+
s
);
}
}
// Let's override the default nonProxyHosts and make sure we now get a
// HTTP proxy
System
.
setProperty
(
"http.nonProxyHosts"
,
""
);
for
(
String
s
:
uris
)
{
l
=
sel
.
select
(
new
URI
(
s
));
if
(
l
.
size
()
==
1
&&
l
.
get
(
0
).
type
()
!=
Proxy
.
Type
.
HTTP
)
{
throw
new
RuntimeException
(
"ProxySelector returned the wrong proxy for "
+
s
);
}
}
}
}
test/java/nio/file/Files/WalkWithSecurity.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/* @test
* @bug 6876541
* @summary Test Files.walkFileTree in the presence of a security manager
* @build WalkWithSecurity
* @run main/othervm WalkWithSecurity grantAll.policy pass
* @run main/othervm WalkWithSecurity denyAll.policy fail
* @run main/othervm WalkWithSecurity grantTopOnly.policy top_only
*/
import
java.nio.file.*
;
import
java.nio.file.attribute.BasicFileAttributes
;
import
java.io.IOException
;
public
class
WalkWithSecurity
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
String
policyFile
=
args
[
0
];
ExpectedResult
expectedResult
=
ExpectedResult
.
valueOf
(
args
[
1
].
toUpperCase
());
String
here
=
System
.
getProperty
(
"user.dir"
);
String
testSrc
=
System
.
getProperty
(
"test.src"
);
if
(
testSrc
==
null
)
throw
new
RuntimeException
(
"This test must be run by jtreg"
);
Path
dir
=
Paths
.
get
(
testSrc
);
// Sanity check the environment
if
(
Paths
.
get
(
here
).
isSameFile
(
dir
))
throw
new
RuntimeException
(
"Working directory cannot be "
+
dir
);
DirectoryStream
<
Path
>
stream
=
dir
.
newDirectoryStream
();
try
{
if
(!
stream
.
iterator
().
hasNext
())
throw
new
RuntimeException
(
testSrc
+
" is empty"
);
}
finally
{
stream
.
close
();
}
// Install security manager with the given policy file
System
.
setProperty
(
"java.security.policy"
,
dir
.
resolve
(
policyFile
).
toString
());
System
.
setSecurityManager
(
new
SecurityManager
());
// Walk the source tree
CountingVisitor
visitor
=
new
CountingVisitor
();
SecurityException
exception
=
null
;
try
{
Files
.
walkFileTree
(
dir
,
visitor
);
}
catch
(
SecurityException
se
)
{
exception
=
se
;
}
// Check result
switch
(
expectedResult
)
{
case
PASS:
if
(
exception
!=
null
)
{
exception
.
printStackTrace
();
throw
new
RuntimeException
(
"SecurityException not expected"
);
}
if
(
visitor
.
count
()
==
0
)
throw
new
RuntimeException
(
"No files visited"
);
break
;
case
FAIL:
if
(
exception
==
null
)
throw
new
RuntimeException
(
"SecurityException expected"
);
if
(
visitor
.
count
()
>
0
)
throw
new
RuntimeException
(
"Files were visited"
);
break
;
case
TOP_ONLY:
if
(
exception
!=
null
)
{
exception
.
printStackTrace
();
throw
new
RuntimeException
(
"SecurityException not expected"
);
}
if
(
visitor
.
count
()
==
0
)
throw
new
RuntimeException
(
"Starting file not visited"
);
if
(
visitor
.
count
()
>
1
)
throw
new
RuntimeException
(
"More than starting file visited"
);
break
;
default
:
throw
new
RuntimeException
(
"Should not get here"
);
}
}
static
enum
ExpectedResult
{
PASS
,
FAIL
,
TOP_ONLY
;
}
static
class
CountingVisitor
extends
SimpleFileVisitor
<
Path
>
{
private
int
count
;
int
count
()
{
return
count
;
}
@Override
public
FileVisitResult
preVisitDirectory
(
Path
dir
)
{
System
.
out
.
println
(
dir
);
count
++;
return
FileVisitResult
.
CONTINUE
;
}
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
System
.
out
.
println
(
file
);
count
++;
return
FileVisitResult
.
CONTINUE
;
}
}
}
test/java/nio/file/Files/denyAll.policy
0 → 100644
浏览文件 @
3f70d8d5
// policy file that does not grant any permissions
grant {
};
test/java/nio/file/Files/grantAll.policy
0 → 100644
浏览文件 @
3f70d8d5
// policy file that grants read access to source directory and all descendants
grant {
permission java.io.FilePermission "${test.src}", "read";
permission java.io.FilePermission "${test.src}${file.separator}-", "read";
};
test/java/nio/file/Files/grantTopOnly.policy
0 → 100644
浏览文件 @
3f70d8d5
// policy file that grants read access to source directory
grant {
permission java.io.FilePermission "${test.src}", "read";
};
test/tools/launcher/6842838/CreateBadJar.java
0 → 100644
浏览文件 @
3f70d8d5
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* Borrowing significantly from Martin Buchholz's CorruptedZipFiles.java
*
* Needed a way of testing the checks for corrupt zip/jar entry in
* inflate_file from file j2se/src/share/bin/parse_manifest.c
* and running them with the 64-bit launcher. e.g.
* sparcv9/bin/java -jar badjar.jar
*
* Run from a script driver Test6842838.sh as we want to specifically run
* bin/sparcv9/java, the 64-bit launcher.
*
* So this program will create a zip file and damage it in the way
* required to tickle this bug.
*
* It will cause a buffer overrun: but that will not always crash.
* Use libumem preloaded by the script driver in order to
* abort quickly when the overrun happens. That makes the test
* Solaris-specific.
*/
import
java.util.*
;
import
java.util.zip.*
;
import
java.io.*
;
import
static
java
.
lang
.
System
.*;
import
static
java
.
util
.
zip
.
ZipFile
.*;
public
class
CreateBadJar
{
public
static
void
main
(
String
[]
arguments
)
{
if
(
arguments
.
length
!=
2
)
{
throw
new
RuntimeException
(
"Arguments: jarfilename entryname"
);
}
String
outFile
=
arguments
[
0
];
String
entryName
=
arguments
[
1
];
try
{
// If the named file doesn't exist, create it.
// If it does, we are expecting it to contain the named entry, for
// alteration.
if
(!
new
File
(
outFile
).
exists
())
{
System
.
out
.
println
(
"Creating file "
+
outFile
);
// Create the requested zip/jar file.
ZipOutputStream
zos
=
null
;
zos
=
new
ZipOutputStream
(
new
FileOutputStream
(
outFile
));
ZipEntry
e
=
new
ZipEntry
(
entryName
);
zos
.
putNextEntry
(
e
);
for
(
int
j
=
0
;
j
<
50000
;
j
++)
{
zos
.
write
((
int
)
'a'
);
}
zos
.
closeEntry
();
zos
.
close
();
zos
=
null
;
}
// Read it.
int
len
=
(
int
)(
new
File
(
outFile
).
length
());
byte
[]
good
=
new
byte
[
len
];
FileInputStream
fis
=
new
FileInputStream
(
outFile
);
fis
.
read
(
good
);
fis
.
close
();
fis
=
null
;
int
endpos
=
len
-
ENDHDR
;
int
cenpos
=
u16
(
good
,
endpos
+
ENDOFF
);
if
(
u32
(
good
,
cenpos
)
!=
CENSIG
)
throw
new
RuntimeException
(
"Where's CENSIG?"
);
byte
[]
bad
;
bad
=
good
.
clone
();
// Corrupt it...
int
pos
=
findInCEN
(
bad
,
cenpos
,
entryName
);
// What bad stuff are we doing to it?
// Store a 32-bit -1 in uncomp size.
bad
[
pos
+
0x18
]=(
byte
)
0xff
;
bad
[
pos
+
0x19
]=(
byte
)
0xff
;
bad
[
pos
+
0x1a
]=(
byte
)
0xff
;
bad
[
pos
+
0x1b
]=(
byte
)
0xff
;
// Bad work complete, delete the original.
new
File
(
outFile
).
delete
();
// Write it.
FileOutputStream
fos
=
new
FileOutputStream
(
outFile
);
fos
.
write
(
bad
);
fos
.
close
();
fos
=
null
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/*
* Scan Central Directory File Headers looking for the named entry.
*/
static
int
findInCEN
(
byte
[]
bytes
,
int
cenpos
,
String
entryName
)
{
int
pos
=
cenpos
;
int
nextPos
=
0
;
String
filename
=
null
;
do
{
if
(
nextPos
!=
0
)
{
pos
=
nextPos
;
}
System
.
out
.
println
(
"entry at pos = "
+
pos
);
if
(
u32
(
bytes
,
pos
)
!=
CENSIG
)
throw
new
RuntimeException
(
"entry not found in CEN or premature end..."
);
int
csize
=
u32
(
bytes
,
pos
+
0x14
);
// +0x14 1 dword csize
int
uncompsize
=
u32
(
bytes
,
pos
+
0x18
);
// +0x18 1 dword uncomp size
int
filenameLength
=
u16
(
bytes
,
pos
+
0x1c
);
// +0x1c 1 word length of filename
int
extraLength
=
u16
(
bytes
,
pos
+
0x1e
);
// +0x1e 1 world length of extra field
int
commentLength
=
u16
(
bytes
,
pos
+
0x20
);
// +0x20 1 world length of file comment
filename
=
new
String
(
bytes
,
pos
+
0x2e
,
filenameLength
);
// +0x2e chars of filename
int
offset
=
u32
(
bytes
,
pos
+
0x2a
);
// +0x2a chars of filename
System
.
out
.
println
(
"filename = "
+
filename
+
"\ncsize = "
+
csize
+
" uncomp.size = "
+
uncompsize
+
" file offset = "
+
offset
);
nextPos
=
pos
+
0x2e
+
filenameLength
+
extraLength
+
commentLength
;
}
while
(!
filename
.
equals
(
entryName
));
System
.
out
.
println
(
"entry found at pos = "
+
pos
);
return
pos
;
}
static
int
u8
(
byte
[]
data
,
int
offset
)
{
return
data
[
offset
]&
0xff
;
}
static
int
u16
(
byte
[]
data
,
int
offset
)
{
return
u8
(
data
,
offset
)
+
(
u8
(
data
,
offset
+
1
)<<
8
);
}
static
int
u32
(
byte
[]
data
,
int
offset
)
{
return
u16
(
data
,
offset
)
+
(
u16
(
data
,
offset
+
2
)<<
16
);
}
}
test/tools/launcher/6842838/Test6842838.sh
0 → 100644
浏览文件 @
3f70d8d5
#!/bin/sh -x
#
# @test @(#)Test6842838.sh
# @bug 6842838
# @summary Test 6842838 64-bit launcher failure due to corrupt jar
# @run shell Test6842838.sh
#
#
# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
if
[
"
${
TESTSRC
}
"
=
""
]
then
TESTSRC
=
.
fi
if
[
"
${
TESTJAVA
}
"
=
""
]
then
PARENT
=
`
dirname
\`
which java
\`
`
TESTJAVA
=
`
dirname
${
PARENT
}
`
echo
"TESTJAVA not set, selecting "
${
TESTJAVA
}
echo
"If this is incorrect, try setting the variable manually."
fi
if
[
"
${
TESTCLASSES
}
"
=
""
]
then
echo
"TESTCLASSES not set. Test cannot execute. Failed."
exit
1
fi
# set platform-dependent variables
OS
=
`
uname
-s
`
case
"
$OS
"
in
SunOS
)
NULL
=
/dev/null
PS
=
":"
FS
=
"/"
JAVA_EXE
=
${
TESTJAVA
}${
FS
}
bin
${
FS
}
sparcv9
${
FS
}
java
;;
*
)
echo
"Only testing on sparcv9 (use libumem to reliably catch buffer overrun)"
exit
0
;
;;
esac
BADFILE
=
newbadjar.jar
${
JAVA_EXE
}
-version
rm
-f
${
BADFILE
}
${
TESTJAVA
}
/bin/javac CreateBadJar.java
${
JAVA_EXE
}
CreateBadJar
${
BADFILE
}
"META-INF/MANIFEST.MF"
LD_PRELOAD
=
/lib/64/libumem.so
${
JAVA_EXE
}
-jar
${
BADFILE
}
>
test.out 2>&1
grep
"Invalid or corrupt jarfile"
test.out
exit
$?
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录