--- a/jdk/src/share/classes/java/net/DatagramSocket.java Tue Jan 20 13:04:19 2009 -0800
+++ b/jdk/src/share/classes/java/net/DatagramSocket.java Tue Jan 20 16:16:35 2009 -0800
@@ -41,10 +41,11 @@
* one machine to another may be routed differently, and may arrive in
* any order.
*
- * <p>UDP broadcasts sends are always enabled on a DatagramSocket.
- * In order to receive broadcast packets a DatagramSocket
- * should be bound to the wildcard address. In some
- * implementations, broadcast packets may also be received when
+ * <p> Where possible, a newly constructed {@code DatagramSocket} has the
+ * {@link SocketOptions#SO_BROADCAST SO_BROADCAST} socket option enabled so as
+ * to allow the transmission of broadcast datagrams. In order to receive
+ * broadcast packets a DatagramSocket should be bound to the wildcard address.
+ * In some implementations, broadcast packets may also be received when
* a DatagramSocket is bound to a more specific address.
* <p>
* Example:
@@ -1017,9 +1018,18 @@
/**
* Enable/disable SO_BROADCAST.
- * @param on whether or not to have broadcast turned on.
- * @exception SocketException if there is an error
- * in the underlying protocol, such as an UDP error.
+ *
+ * <p> Some operating systems may require that the Java virtual machine be
+ * started with implementation specific privileges to enable this option or
+ * send broadcast datagrams.
+ *
+ * @param on
+ * whether or not to have broadcast turned on.
+ *
+ * @throws SocketException
+ * if there is an error in the underlying protocol, such as an UDP
+ * error.
+ *
* @since 1.4
* @see #getBroadcast()
*/
--- a/jdk/src/share/classes/java/util/Collection.java Tue Jan 20 13:04:19 2009 -0800
+++ b/jdk/src/share/classes/java/util/Collection.java Tue Jan 20 16:16:35 2009 -0800
@@ -427,7 +427,7 @@
* contract for the <tt>Object.hashCode</tt> method, programmers should
* take note that any class that overrides the <tt>Object.equals</tt>
* method must also override the <tt>Object.hashCode</tt> method in order
- * to satisfy the general contract for the <tt>Object.hashCode</tt>method.
+ * to satisfy the general contract for the <tt>Object.hashCode</tt> method.
* In particular, <tt>c1.equals(c2)</tt> implies that
* <tt>c1.hashCode()==c2.hashCode()</tt>.
*
--- a/jdk/src/share/classes/java/util/Random.java Tue Jan 20 13:04:19 2009 -0800
+++ b/jdk/src/share/classes/java/util/Random.java Tue Jan 20 16:16:35 2009 -0800
@@ -32,7 +32,7 @@
* An instance of this class is used to generate a stream of
* pseudorandom numbers. The class uses a 48-bit seed, which is
* modified using a linear congruential formula. (See Donald Knuth,
- * <i>The Art of Computer Programming, Volume 3</i>, Section 3.2.1.)
+ * <i>The Art of Computer Programming, Volume 2</i>, Section 3.2.1.)
* <p>
* If two instances of {@code Random} are created with the same
* seed, and the same sequence of method calls is made for each, they
--- a/jdk/src/share/classes/sun/security/krb5/Config.java Tue Jan 20 13:04:19 2009 -0800
+++ b/jdk/src/share/classes/sun/security/krb5/Config.java Tue Jan 20 16:16:35 2009 -0800
@@ -1,5 +1,5 @@
/*
- * Portions Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Portions Copyright 2000-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
@@ -74,7 +74,7 @@
private String defaultRealm; // default kdc realm.
// used for native interface
- private static native String getWindowsDirectory();
+ private static native String getWindowsDirectory(boolean isSystem);
/**
@@ -661,38 +661,37 @@
}
/**
- * Gets the default configuration file name. The file will be searched
- * in a list of possible loations in the following order:
- * 1. the location and file name defined by system property
- * "java.security.krb5.conf",
- * 2. at Java home lib\security directory with "krb5.conf" name,
- * 3. "krb5.ini" at Java home,
- * 4. at windows directory with the name of "krb5.ini" for Windows,
- * /etc/krb5/krb5.conf for Solaris, /etc/krb5.conf for Linux.
+ * Gets the default configuration file name. This method will never
+ * return null.
+ *
+ * If the system property "java.security.krb5.conf" is defined, we'll
+ * use its value, no matter if the file exists or not. Otherwise,
+ * the file will be searched in a list of possible loations in the
+ * following order:
+ *
+ * 1. at Java home lib\security directory with "krb5.conf" name,
+ * 2. at windows directory with the name of "krb5.ini" for Windows,
+ * /etc/krb5/krb5.conf for Solaris, /etc/krb5.conf otherwise.
+ *
+ * Note: When the Terminal Service is started in Windows (from 2003),
+ * there are two kinds of Windows directories: A system one (say,
+ * C:\Windows), and a user-private one (say, C:\Users\Me\Windows).
+ * We will first look for krb5.ini in the user-private one. If not
+ * found, try the system one instead.
*/
private String getFileName() {
String name =
java.security.AccessController.doPrivileged(
new sun.security.action.
GetPropertyAction("java.security.krb5.conf"));
- if (name != null) {
- boolean temp =
- java.security.AccessController.doPrivileged(
- new FileExistsAction(name));
- if (temp)
- return name;
- } else {
+ if (name == null) {
name = java.security.AccessController.doPrivileged(
new sun.security.action.
GetPropertyAction("java.home")) + File.separator +
"lib" + File.separator + "security" +
File.separator + "krb5.conf";
- boolean temp =
- java.security.AccessController.doPrivileged(
- new FileExistsAction(name));
- if (temp) {
- return name;
- } else {
+ if (!fileExists(name)) {
+ name = null;
String osname =
java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("os.name"));
@@ -703,19 +702,35 @@
// ignore exceptions
}
if (Credentials.alreadyLoaded) {
- if ((name = getWindowsDirectory()) == null) {
- name = "c:\\winnt\\krb5.ini";
- } else if (name.endsWith("\\")) {
- name += "krb5.ini";
- } else {
- name += "\\krb5.ini";
+ String path = getWindowsDirectory(false);
+ if (path != null) {
+ if (path.endsWith("\\")) {
+ path = path + "krb5.ini";
+ } else {
+ path = path + "\\krb5.ini";
+ }
+ if (fileExists(path)) {
+ name = path;
+ }
}
- } else {
+ if (name == null) {
+ path = getWindowsDirectory(true);
+ if (path != null) {
+ if (path.endsWith("\\")) {
+ path = path + "krb5.ini";
+ } else {
+ path = path + "\\krb5.ini";
+ }
+ name = path;
+ }
+ }
+ }
+ if (name == null) {
name = "c:\\winnt\\krb5.ini";
}
} else if (osname.startsWith("SunOS")) {
name = "/etc/krb5/krb5.conf";
- } else if (osname.startsWith("Linux")) {
+ } else {
name = "/etc/krb5.conf";
}
}
@@ -1171,6 +1186,11 @@
return kdcs;
}
+ private boolean fileExists(String name) {
+ return java.security.AccessController.doPrivileged(
+ new FileExistsAction(name));
+ }
+
static class FileExistsAction
implements java.security.PrivilegedAction<Boolean> {
--- a/jdk/src/windows/native/sun/security/krb5/WindowsDirectory.c Tue Jan 20 13:04:19 2009 -0800
+++ b/jdk/src/windows/native/sun/security/krb5/WindowsDirectory.c Tue Jan 20 16:16:35 2009 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-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
@@ -23,6 +23,7 @@
* have any questions.
*/
+#define UNICODE
#include <jni.h>
#include <windows.h>
#include <stdlib.h>
@@ -30,22 +31,20 @@
/*
* Class: sun_security_krb5_Config
* Method: getWindowsDirectory
- * Signature: ()Ljava/lang/String;
+ * Signature: (Z)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sun_security_krb5_Config_getWindowsDirectory(
- JNIEnv* env, jclass configClass) {
- LPTSTR lpPath = NULL;
- UINT uLength ;
- jstring path = NULL;
-
- if (uLength = GetWindowsDirectory(lpPath, 0)) {
- lpPath = (LPTSTR)malloc(sizeof(TCHAR) * uLength);
- if (lpPath != NULL) {
- if (GetWindowsDirectory(lpPath, uLength)) {
- path = (*env)->NewStringUTF(env, lpPath);
- }
- free(lpPath);
- }
+ JNIEnv* env, jclass configClass, jboolean isSystem) {
+ TCHAR lpPath[MAX_PATH+1];
+ UINT len;
+ if (isSystem) {
+ len = GetSystemWindowsDirectory(lpPath, MAX_PATH);
+ } else {
+ len = GetWindowsDirectory(lpPath, MAX_PATH);
}
- return path;
+ if (len) {
+ return (*env)->NewString(env, lpPath, len);
+ } else {
+ return NULL;
+ }
}