Mercurial > hg > release > icedtea7-forest-2.0 > jdk
changeset 1589:baec332a0ff4
Merge
author | asaha |
---|---|
date | Mon, 27 Jul 2009 22:28:29 -0700 |
parents | 14c81c80a7f3 (current diff) 056c8e724015 (diff) |
children | ebc7d26588b8 |
files | |
diffstat | 44 files changed, 1321 insertions(+), 324 deletions(-) [+] |
line wrap: on
line diff
--- a/make/common/shared/Defs-control.gmk Tue Jul 21 13:06:30 2009 -0700 +++ b/make/common/shared/Defs-control.gmk Mon Jul 27 22:28:29 2009 -0700 @@ -92,9 +92,9 @@ dummy := $(shell $(MKDIR) -p $(TEMP_DIR)) # The language version we want for this jdk build -SOURCE_LANGUAGE_VERSION=5 +SOURCE_LANGUAGE_VERSION=7 # The class version we want for this jdk build -TARGET_CLASS_VERSION=5 +TARGET_CLASS_VERSION=7 # The MESSAGE, WARNING and ERROR files are used to store sanity check and # source check messages, warnings and errors.
--- a/make/common/shared/Defs-java.gmk Tue Jul 21 13:06:30 2009 -0700 +++ b/make/common/shared/Defs-java.gmk Mon Jul 27 22:28:29 2009 -0700 @@ -122,13 +122,13 @@ JAVACFLAGS += -Werror endif -# Add the source level (currently all source is 1.5, should this be 1.6?) -SOURCE_LANGUAGE_VERSION = 5 +# Add the source level +SOURCE_LANGUAGE_VERSION = 7 LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION) JAVACFLAGS += $(LANGUAGE_VERSION) -# Add the class version we want (currently this is 5, should it be 6 or even 7?) -TARGET_CLASS_VERSION = 5 +# Add the class version we want +TARGET_CLASS_VERSION = 7 CLASS_VERSION = -target $(TARGET_CLASS_VERSION) JAVACFLAGS += $(CLASS_VERSION) JAVACFLAGS += -encoding ascii
--- a/make/java/dyn/Makefile Tue Jul 21 13:06:30 2009 -0700 +++ b/make/java/dyn/Makefile Mon Jul 27 22:28:29 2009 -0700 @@ -33,8 +33,8 @@ # The sources built here use new language syntax to generate # method handle calls. Let's be sure we are using that format. -#LANGUAGE_VERSION = -source 7 -#CLASS_VERSION = -target 7 +LANGUAGE_VERSION = -source 7 +CLASS_VERSION = -target 7 # Actually, it will be less disruptive to compile with the same # -target option as the rest of the system, and just turn on
--- a/src/share/classes/com/sun/jndi/ldap/Filter.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/com/sun/jndi/ldap/Filter.java Mon Jul 27 22:28:29 2009 -0700 @@ -93,9 +93,7 @@ int filtOffset[] = new int[1]; - for (filtOffset[0] = filterStart; - filtOffset[0] < filterEnd; - filtOffset[0]++) { + for (filtOffset[0] = filterStart; filtOffset[0] < filterEnd;) { switch (filter[filtOffset[0]]) { case '(': filtOffset[0]++; @@ -104,18 +102,21 @@ case '&': encodeComplexFilter(ber, filter, LDAP_FILTER_AND, filtOffset, filterEnd); + // filtOffset[0] has pointed to char after right paren parens--; break; case '|': encodeComplexFilter(ber, filter, LDAP_FILTER_OR, filtOffset, filterEnd); + // filtOffset[0] has pointed to char after right paren parens--; break; case '!': encodeComplexFilter(ber, filter, LDAP_FILTER_NOT, filtOffset, filterEnd); + // filtOffset[0] has pointed to char after right paren parens--; break; @@ -143,8 +144,8 @@ encodeSimpleFilter(ber, filter, filtOffset[0], nextOffset); - // points to right parens; for loop will increment beyond parens - filtOffset[0] = nextOffset; + // points to the char after right paren. + filtOffset[0] = nextOffset + 1; parens--; break; @@ -170,9 +171,14 @@ filtOffset[0] = filterEnd; // force break from outer break; } + + if (parens < 0) { + throw new InvalidSearchFilterException( + "Unbalanced parenthesis"); + } } - if (parens > 0) { + if (parens != 0) { throw new InvalidSearchFilterException("Unbalanced parenthesis"); }
--- a/src/share/classes/java/lang/Character.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/java/lang/Character.java Mon Jul 27 22:28:29 2009 -0700 @@ -2784,8 +2784,13 @@ * @since 1.5 */ public static int toCodePoint(char high, char low) { - return ((high - MIN_HIGH_SURROGATE) << 10) - + (low - MIN_LOW_SURROGATE) + MIN_SUPPLEMENTARY_CODE_POINT; + // Optimized form of: + // return ((high - MIN_HIGH_SURROGATE) << 10) + // + (low - MIN_LOW_SURROGATE) + // + MIN_SUPPLEMENTARY_CODE_POINT; + return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT + - (MIN_HIGH_SURROGATE << 10) + - MIN_LOW_SURROGATE); } /** @@ -3071,9 +3076,10 @@ } static void toSurrogates(int codePoint, char[] dst, int index) { - int offset = codePoint - MIN_SUPPLEMENTARY_CODE_POINT; - dst[index+1] = (char)((offset & 0x3ff) + MIN_LOW_SURROGATE); - dst[index] = (char)((offset >>> 10) + MIN_HIGH_SURROGATE); + // We write elements "backwards" to guarantee all-or-nothing + dst[index+1] = (char)((codePoint & 0x3ff) + MIN_LOW_SURROGATE); + dst[index] = (char)((codePoint >>> 10) + + (MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10))); } /**
--- a/src/share/classes/java/util/logging/LogManager.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/java/util/logging/LogManager.java Mon Jul 27 22:28:29 2009 -0700 @@ -338,7 +338,7 @@ // already been created with the given name it is returned. // Otherwise a new logger instance is created and registered // in the LogManager global namespace. - synchronized Logger demandLogger(String name) { + Logger demandLogger(String name) { Logger result = getLogger(name); if (result == null) { result = new Logger(name, null);
--- a/src/share/classes/sun/nio/cs/Surrogate.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/nio/cs/Surrogate.java Mon Jul 27 22:28:29 2009 -0700 @@ -30,7 +30,6 @@ import java.nio.charset.MalformedInputException; import java.nio.charset.UnmappableCharacterException; - /** * Utility class for dealing with surrogates. * @@ -41,19 +40,15 @@ private Surrogate() { } - // UTF-16 surrogate-character ranges - // - public static final char MIN_HIGH = '\uD800'; - public static final char MAX_HIGH = '\uDBFF'; - public static final char MIN_LOW = '\uDC00'; - public static final char MAX_LOW = '\uDFFF'; - public static final char MIN = MIN_HIGH; - public static final char MAX = MAX_LOW; - - // Range of UCS-4 values that need surrogates in UTF-16 - // - public static final int UCS4_MIN = 0x10000; - public static final int UCS4_MAX = (1 << 20) + UCS4_MIN - 1; + // TODO: Deprecate/remove the following redundant definitions + public static final char MIN_HIGH = Character.MIN_HIGH_SURROGATE; + public static final char MAX_HIGH = Character.MAX_HIGH_SURROGATE; + public static final char MIN_LOW = Character.MIN_LOW_SURROGATE; + public static final char MAX_LOW = Character.MAX_LOW_SURROGATE; + public static final char MIN = Character.MIN_SURROGATE; + public static final char MAX = Character.MAX_SURROGATE; + public static final int UCS4_MIN = Character.MIN_SUPPLEMENTARY_CODE_POINT; + public static final int UCS4_MAX = Character.MAX_CODE_POINT; /** * Tells whether or not the given UTF-16 value is a high surrogate. @@ -77,35 +72,45 @@ } /** + * Tells whether or not the given UCS-4 character is in the Basic + * Multilingual Plane, and can be represented using a single char. + */ + public static boolean isBMP(int uc) { + return (int) (char) uc == uc; + } + + /** * Tells whether or not the given UCS-4 character must be represented as a * surrogate pair in UTF-16. */ public static boolean neededFor(int uc) { - return (uc >= UCS4_MIN) && (uc <= UCS4_MAX); + return Character.isSupplementaryCodePoint(uc); } /** * Returns the high UTF-16 surrogate for the given UCS-4 character. */ public static char high(int uc) { - assert neededFor(uc); - return (char)(0xd800 | (((uc - UCS4_MIN) >> 10) & 0x3ff)); + assert Character.isSupplementaryCodePoint(uc); + return (char)((uc >> 10) + + (Character.MIN_HIGH_SURROGATE + - (Character.MIN_SUPPLEMENTARY_CODE_POINT >> 10))); } /** * Returns the low UTF-16 surrogate for the given UCS-4 character. */ public static char low(int uc) { - assert neededFor(uc); - return (char)(0xdc00 | ((uc - UCS4_MIN) & 0x3ff)); + assert Character.isSupplementaryCodePoint(uc); + return (char)((uc & 0x3ff) + Character.MIN_LOW_SURROGATE); } /** * Converts the given surrogate pair into a 32-bit UCS-4 character. */ public static int toUCS4(char c, char d) { - assert isHigh(c) && isLow(d); - return (((c & 0x3ff) << 10) | (d & 0x3ff)) + 0x10000; + assert Character.isHighSurrogate(c) && Character.isLowSurrogate(d); + return Character.toCodePoint(c, d); } /** @@ -178,14 +183,14 @@ * object */ public int parse(char c, CharBuffer in) { - if (Surrogate.isHigh(c)) { + if (Character.isHighSurrogate(c)) { if (!in.hasRemaining()) { error = CoderResult.UNDERFLOW; return -1; } char d = in.get(); - if (Surrogate.isLow(d)) { - character = toUCS4(c, d); + if (Character.isLowSurrogate(d)) { + character = Character.toCodePoint(c, d); isPair = true; error = null; return character; @@ -193,7 +198,7 @@ error = CoderResult.malformedForLength(1); return -1; } - if (Surrogate.isLow(c)) { + if (Character.isLowSurrogate(c)) { error = CoderResult.malformedForLength(1); return -1; } @@ -220,14 +225,14 @@ */ public int parse(char c, char[] ia, int ip, int il) { assert (ia[ip] == c); - if (Surrogate.isHigh(c)) { + if (Character.isHighSurrogate(c)) { if (il - ip < 2) { error = CoderResult.UNDERFLOW; return -1; } char d = ia[ip + 1]; - if (Surrogate.isLow(d)) { - character = toUCS4(c, d); + if (Character.isLowSurrogate(d)) { + character = Character.toCodePoint(c, d); isPair = true; error = null; return character; @@ -235,7 +240,7 @@ error = CoderResult.malformedForLength(1); return -1; } - if (Surrogate.isLow(c)) { + if (Character.isLowSurrogate(c)) { error = CoderResult.malformedForLength(1); return -1; } @@ -282,7 +287,7 @@ * error() will return a descriptive result object */ public int generate(int uc, int len, CharBuffer dst) { - if (uc <= 0xffff) { + if (Surrogate.isBMP(uc)) { if (Surrogate.is(uc)) { error = CoderResult.malformedForLength(len); return -1; @@ -294,12 +299,7 @@ dst.put((char)uc); error = null; return 1; - } - if (uc < Surrogate.UCS4_MIN) { - error = CoderResult.malformedForLength(len); - return -1; - } - if (uc <= Surrogate.UCS4_MAX) { + } else if (Character.isSupplementaryCodePoint(uc)) { if (dst.remaining() < 2) { error = CoderResult.OVERFLOW; return -1; @@ -308,9 +308,10 @@ dst.put(Surrogate.low(uc)); error = null; return 2; + } else { + error = CoderResult.unmappableForLength(len); + return -1; } - error = CoderResult.unmappableForLength(len); - return -1; } /** @@ -330,7 +331,7 @@ * error() will return a descriptive result object */ public int generate(int uc, int len, char[] da, int dp, int dl) { - if (uc <= 0xffff) { + if (Surrogate.isBMP(uc)) { if (Surrogate.is(uc)) { error = CoderResult.malformedForLength(len); return -1; @@ -342,12 +343,7 @@ da[dp] = (char)uc; error = null; return 1; - } - if (uc < Surrogate.UCS4_MIN) { - error = CoderResult.malformedForLength(len); - return -1; - } - if (uc <= Surrogate.UCS4_MAX) { + } else if (Character.isSupplementaryCodePoint(uc)) { if (dl - dp < 2) { error = CoderResult.OVERFLOW; return -1; @@ -356,11 +352,11 @@ da[dp + 1] = Surrogate.low(uc); error = null; return 2; + } else { + error = CoderResult.unmappableForLength(len); + return -1; } - error = CoderResult.unmappableForLength(len); - return -1; } - } }
--- a/src/share/classes/sun/security/krb5/Config.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/krb5/Config.java Mon Jul 27 22:28:29 2009 -0700 @@ -70,7 +70,12 @@ private static final int BASE16_1 = 16; private static final int BASE16_2 = 16 * 16; private static final int BASE16_3 = 16 * 16 * 16; - private String defaultRealm; // default kdc realm. + + /** + * Specified by system properties. Must be both null or non-null. + */ + private final String defaultRealm; + private final String defaultKDC; // used for native interface private static native String getWindowsDirectory(boolean isSystem); @@ -81,9 +86,8 @@ * singleton) is returned. * * @exception KrbException if error occurs when constructing a Config - * instance. Possible causes would be configuration file not - * found, either of java.security.krb5.realm or java.security.krb5.kdc - * not specified, error reading configuration file. + * instance. Possible causes would be either of java.security.krb5.realm or + * java.security.krb5.kdc not specified, error reading configuration file. */ public static synchronized Config getInstance() throws KrbException { if (singleton == null) { @@ -98,9 +102,8 @@ * the java.security.krb5.* system properties again. * * @exception KrbException if error occurs when constructing a Config - * instance. Possible causes would be configuration file not - * found, either of java.security.krb5.realm or java.security.krb5.kdc - * not specified, error reading configuration file. + * instance. Possible causes would be either of java.security.krb5.realm or + * java.security.krb5.kdc not specified, error reading configuration file. */ public static synchronized void refresh() throws KrbException { @@ -114,56 +117,37 @@ */ private Config() throws KrbException { /* - * If these two system properties are being specified by the user, - * we ignore configuration file. If either one system property is - * specified, we throw exception. If neither of them are specified, - * we load the information from configuration file. + * If either one system property is specified, we throw exception. */ - String kdchost = + String tmp = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction ("java.security.krb5.kdc")); + if (tmp != null) { + // The user can specify a list of kdc hosts separated by ":" + defaultKDC = tmp.replace(':', ' '); + } else { + defaultKDC = null; + } defaultRealm = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction ("java.security.krb5.realm")); - if ((kdchost == null && defaultRealm != null) || - (defaultRealm == null && kdchost != null)) { + if ((defaultKDC == null && defaultRealm != null) || + (defaultRealm == null && defaultKDC != null)) { throw new KrbException ("System property java.security.krb5.kdc and " + "java.security.krb5.realm both must be set or " + "neither must be set."); } - // Read the Kerberos configuration file + // Always read the Kerberos configuration file try { Vector<String> configFile; configFile = loadConfigFile(); stanzaTable = parseStanzaTable(configFile); } catch (IOException ioe) { - // No krb5.conf, no problem. We'll use DNS etc. - } - - if (kdchost != null) { - /* - * If configuration information is only specified by - * properties java.security.krb5.kdc and - * java.security.krb5.realm, we put both in the hashtable - * under [libdefaults]. - */ - if (stanzaTable == null) { - stanzaTable = new Hashtable<String,Object> (); - } - Hashtable<String,String> kdcs = - (Hashtable<String,String>)stanzaTable.get("libdefaults"); - if (kdcs == null) { - kdcs = new Hashtable<String,String> (); - stanzaTable.put("libdefaults", kdcs); - } - kdcs.put("default_realm", defaultRealm); - // The user can specify a list of kdc hosts separated by ":" - kdchost = kdchost.replace(':', ' '); - kdcs.put("kdc", kdchost); + // No krb5.conf, no problem. We'll use DNS or system property etc. } } @@ -295,19 +279,6 @@ String result = null; Hashtable subTable; - /* - * In the situation when kdc is specified by - * java.security.krb5.kdc, we get the kdc from [libdefaults] in - * hashtable. - */ - if (name.equalsIgnoreCase("kdc") && - (section.equalsIgnoreCase(getDefault("default_realm", "libdefaults"))) && - (java.security.AccessController.doPrivileged( - new sun.security.action. - GetPropertyAction("java.security.krb5.kdc")) != null)) { - result = getDefault("kdc", "libdefaults"); - return result; - } if (stanzaTable != null) { for (Enumeration e = stanzaTable.keys(); e.hasMoreElements(); ) { stanzaName = (String)e.nextElement(); @@ -1035,13 +1006,13 @@ /** * Resets the default kdc realm. * We do not need to synchronize these methods since assignments are atomic + * + * This method was useless. Kept here in case some class still calls it. */ public void resetDefaultRealm(String realm) { - defaultRealm = realm; if (DEBUG) { - System.out.println(">>> Config reset default kdc " + defaultRealm); + System.out.println(">>> Config try resetting default kdc " + realm); } - } /** @@ -1098,6 +1069,9 @@ * @return the default realm, always non null */ public String getDefaultRealm() throws KrbException { + if (defaultRealm != null) { + return defaultRealm; + } Exception cause = null; String realm = getDefault("default_realm", "libdefaults"); if ((realm == null) && useDNS_Realm()) { @@ -1142,6 +1116,9 @@ if (realm == null) { realm = getDefaultRealm(); } + if (realm.equalsIgnoreCase(defaultRealm)) { + return defaultKDC; + } Exception cause = null; String kdcs = getDefault("kdc", realm); if ((kdcs == null) && useDNS_KDC()) { @@ -1171,6 +1148,9 @@ }); } if (kdcs == null) { + if (defaultKDC != null) { + return defaultKDC; + } KrbException ke = new KrbException("Cannot locate KDC"); if (cause != null) { ke.initCause(cause);
--- a/src/share/classes/sun/security/krb5/KrbApReq.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/krb5/KrbApReq.java Mon Jul 27 22:28:29 2009 -0700 @@ -294,8 +294,6 @@ apReqMessg.ticket.sname.setRealm(apReqMessg.ticket.realm); enc_ticketPart.cname.setRealm(enc_ticketPart.crealm); - Config.getInstance().resetDefaultRealm(apReqMessg.ticket.realm.toString()); - if (!authenticator.cname.equals(enc_ticketPart.cname)) throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH);
--- a/src/share/classes/sun/security/krb5/internal/ktab/KeyTab.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/krb5/internal/ktab/KeyTab.java Mon Jul 27 22:28:29 2009 -0700 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2000-2006 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 @@ -403,11 +403,11 @@ /** * Retrieves the key table entry with the specified service name. * @param service the service which may have an entry in the key table. + * @param keyType the etype to match, returns the 1st one if -1 provided * @return -1 if the entry is not found, else return the entry index * in the list. */ private int retrieveEntry(PrincipalName service, int keyType) { - int found = -1; KeyTabEntry e; if (entries != null) { for (int i = 0; i < entries.size(); i++) { @@ -418,7 +418,7 @@ } } } - return found; + return -1; } /** @@ -476,12 +476,29 @@ /** * Removes an entry from the key table. * @param service the service <code>PrincipalName</code>. + * @param etype the etype to match, first one if -1 provided + * @return 1 if removed successfully, 0 otherwise */ - public void deleteEntry(PrincipalName service) { - int result = retrieveEntry(service, -1); + public int deleteEntry(PrincipalName service, int etype) { + int result = retrieveEntry(service, etype); if (result != -1) { entries.removeElementAt(result); + return 1; } + return 0; + } + + /** + * Removes an entry from the key table. + * @param service the service <code>PrincipalName</code>. + * @return number of entries removed + */ + public int deleteEntry(PrincipalName service) { + int count = 0; + while (deleteEntry(service, -1) > 0) { + count++; + } + return count; } /**
--- a/src/share/classes/sun/security/tools/JarSigner.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/tools/JarSigner.java Mon Jul 27 22:28:29 2009 -0700 @@ -136,7 +136,7 @@ char[] keypass; // private key password String sigfile; // name of .SF file String sigalg; // name of signature algorithm - String digestalg = "SHA1"; // name of digest algorithm + String digestalg = "SHA-256"; // name of digest algorithm String signedjar; // output filename String tsaUrl; // location of the Timestamping Authority String tsaAlias; // alias for the Timestamping Authority's certificate @@ -2205,7 +2205,7 @@ if (keyAlgorithm.equalsIgnoreCase("DSA")) digestAlgorithm = "SHA1"; else if (keyAlgorithm.equalsIgnoreCase("RSA")) - digestAlgorithm = "SHA1"; + digestAlgorithm = "SHA256"; else { throw new RuntimeException("private key is not a DSA or " + "RSA key");
--- a/src/share/classes/sun/security/tools/KeyTool.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/tools/KeyTool.java Mon Jul 27 22:28:29 2009 -0700 @@ -1052,7 +1052,7 @@ X509CertImpl signerCertImpl = new X509CertImpl(encoded); X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get( X509CertImpl.NAME + "." + X509CertImpl.INFO); - X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." + + X500Name issuer = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." + CertificateSubjectName.DN_NAME); Date firstDate = getStartDate(startDate); @@ -1068,7 +1068,7 @@ Signature signature = Signature.getInstance(sigAlgName); signature.initSign(privateKey); - X500Signer signer = new X500Signer(signature, owner); + X500Signer signer = new X500Signer(signature, issuer); X509CertInfo info = new X509CertInfo(); info.set(X509CertInfo.VALIDITY, interval); @@ -1102,7 +1102,8 @@ PKCS10 req = new PKCS10(rawReq); info.set(X509CertInfo.KEY, new CertificateX509Key(req.getSubjectPublicKeyInfo())); - info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(req.getSubjectName())); + info.set(X509CertInfo.SUBJECT, new CertificateSubjectName( + dname==null?req.getSubjectName():new X500Name(dname))); CertificateExtensions reqex = null; Iterator<PKCS10Attribute> attrs = req.getAttributes().getAttributes().iterator(); while (attrs.hasNext()) { @@ -1160,8 +1161,9 @@ Signature signature = Signature.getInstance(sigAlgName); signature.initSign(privKey); - X500Name subject = - new X500Name(((X509Certificate)cert).getSubjectDN().toString()); + X500Name subject = dname == null? + new X500Name(((X509Certificate)cert).getSubjectDN().toString()): + new X500Name(dname); X500Signer signer = new X500Signer(signature, subject); // Sign the request and base-64 encode it @@ -1316,7 +1318,7 @@ if ("DSA".equalsIgnoreCase(keyAlgName)) { return "SHA1WithDSA"; } else if ("RSA".equalsIgnoreCase(keyAlgName)) { - return "SHA1WithRSA"; + return "SHA256WithRSA"; } else if ("EC".equalsIgnoreCase(keyAlgName)) { return "SHA1withECDSA"; } else { @@ -1334,6 +1336,8 @@ if (keysize == -1) { if ("EC".equalsIgnoreCase(keyAlgName)) { keysize = 256; + } else if ("RSA".equalsIgnoreCase(keyAlgName)) { + keysize = 2048; } else { keysize = 1024; } @@ -2497,6 +2501,7 @@ cert.getNotAfter().toString(), getCertFingerPrint("MD5", cert), getCertFingerPrint("SHA1", cert), + getCertFingerPrint("SHA-256", cert), cert.getSigAlgName(), cert.getVersion() }; @@ -3428,7 +3433,7 @@ int colonpos = name.indexOf(':'); if (colonpos >= 0) { - if (name.substring(colonpos+1).equalsIgnoreCase("critical")) { + if (oneOf(name.substring(colonpos+1), "critical") == 0) { isCritical = true; } name = name.substring(0, colonpos); @@ -3689,6 +3694,8 @@ System.err.println(rb.getString ("\t [-alias <alias>] [-sigalg <sigalg>]")); System.err.println(rb.getString + ("\t [-dname <dname>]")); + System.err.println(rb.getString ("\t [-file <csr_file>] [-keypass <keypass>]")); System.err.println(rb.getString ("\t [-keystore <keystore>] [-storepass <storepass>]")); @@ -3771,6 +3778,8 @@ System.err.println(rb.getString ("\t [-alias <alias>]")); System.err.println(rb.getString + ("\t [-dname <dname>]")); + System.err.println(rb.getString ("\t [-sigalg <sigalg>]")); System.err.println(rb.getString ("\t [-startdate <startdate>]"));
--- a/src/share/classes/sun/security/util/Resources.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/classes/sun/security/util/Resources.java Mon Jul 27 22:28:29 2009 -0700 @@ -215,7 +215,7 @@ {"\t(RETURN if same as for <otherAlias>)", "\t(RETURN if same as for <{0}>)"}, {"*PATTERN* printX509Cert", - "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t Signature algorithm name: {7}\n\t Version: {8}"}, + "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5: {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signature algorithm name: {8}\n\t Version: {9}"}, {"What is your first and last name?", "What is your first and last name?"}, {"What is the name of your organizational unit?", @@ -301,6 +301,7 @@ "-certreq [-v] [-protected]"}, {"\t [-alias <alias>] [-sigalg <sigalg>]", "\t [-alias <alias>] [-sigalg <sigalg>]"}, + {"\t [-dname <dname>]", "\t [-dname <dname>]"}, {"\t [-file <csr_file>] [-keypass <keypass>]", "\t [-file <csr_file>] [-keypass <keypass>]"}, {"\t [-keystore <keystore>] [-storepass <storepass>]",
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Mon Jul 27 22:28:29 2009 -0700 @@ -337,7 +337,7 @@ CK_ULONG ckTokenNumber; CK_SLOT_ID_PTR ckpSlotList; CK_BBOOL ckTokenPresent; - jlongArray jSlotList; + jlongArray jSlotList = NULL; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -637,7 +637,7 @@ CK_SLOT_ID ckSlotID; CK_ULONG ckMechanismNumber; CK_MECHANISM_TYPE_PTR ckpMechanismList; - jlongArray jMechanismList; + jlongArray jMechanismList = NULL; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Mon Jul 27 22:28:29 2009 -0700 @@ -73,9 +73,8 @@ CK_MECHANISM ckMechanism; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - CK_OBJECT_HANDLE ckKeyHandle; + CK_OBJECT_HANDLE ckKeyHandle = 0; jlong jKeyHandle = 0L; - CK_ULONG i; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -151,8 +150,7 @@ CK_OBJECT_HANDLE_PTR ckpPublicKeyHandle; /* pointer to Public Key */ CK_OBJECT_HANDLE_PTR ckpPrivateKeyHandle; /* pointer to Private Key */ CK_OBJECT_HANDLE_PTR ckpKeyHandles; /* pointer to array with Public and Private Key */ - jlongArray jKeyHandles; - CK_ULONG i; + jlongArray jKeyHandles = NULL; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -299,9 +297,8 @@ CK_ULONG ckWrappedKeyLength; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - CK_OBJECT_HANDLE ckKeyHandle; + CK_OBJECT_HANDLE ckKeyHandle = 0; jlong jKeyHandle = 0L; - CK_ULONG i; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -478,8 +475,7 @@ CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; CK_OBJECT_HANDLE ckKeyHandle = 0; - jlong jKeyHandle; - CK_ULONG i; + jlong jKeyHandle = 0L; CK_RV rv; CK_OBJECT_HANDLE_PTR phKey = &ckKeyHandle;
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Mon Jul 27 22:28:29 2009 -0700 @@ -72,8 +72,7 @@ CK_OBJECT_HANDLE ckObjectHandle; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - jlong jObjectHandle; - CK_ULONG i; + jlong jObjectHandle = 0L; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -114,8 +113,7 @@ CK_OBJECT_HANDLE ckNewObjectHandle; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - jlong jNewObjectHandle; - CK_ULONG i; + jlong jNewObjectHandle = 0L; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -180,7 +178,7 @@ CK_SESSION_HANDLE ckSessionHandle; CK_OBJECT_HANDLE ckObjectHandle; CK_ULONG ckObjectSize; - jlong jObjectSize; + jlong jObjectSize = 0L; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -217,7 +215,7 @@ CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; CK_ULONG ckBufferLength; - CK_ULONG i, j; + CK_ULONG i; jobject jAttribute; CK_RV rv; @@ -307,7 +305,6 @@ CK_OBJECT_HANDLE ckObjectHandle; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - CK_ULONG i; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -342,7 +339,6 @@ CK_SESSION_HANDLE ckSessionHandle; CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR; CK_ULONG ckAttributesLength; - CK_ULONG i; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); @@ -385,7 +381,7 @@ CK_ULONG ckMaxObjectLength; CK_OBJECT_HANDLE_PTR ckpObjectHandleArray; CK_ULONG ckActualObjectCount; - jlongArray jObjectHandleArray; + jlongArray jObjectHandleArray = NULL; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj); if (ckpFunctions == NULL) { return NULL; }
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Mon Jul 27 22:28:29 2009 -0700 @@ -110,7 +110,7 @@ CK_BYTE_PTR ckpSignature; CK_ULONG ckDataLength; CK_ULONG ckSignatureLength = 0; - jbyteArray jSignature; + jbyteArray jSignature = NULL; CK_RV rv; CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Mon Jul 27 22:28:29 2009 -0700 @@ -194,16 +194,14 @@ jclass jPKCS11ExceptionClass; jmethodID jConstructor; jthrowable jPKCS11Exception; - jlong jErrorCode; + jlong jErrorCode = 0L; - if (returnValue == CKR_OK) { - return 0L ; - } else { + if (returnValue != CKR_OK) { + jErrorCode = ckULongToJLong(returnValue); jPKCS11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION); if (jPKCS11ExceptionClass != NULL) { jConstructor = (*env)->GetMethodID(env, jPKCS11ExceptionClass, "<init>", "(J)V"); if (jConstructor != NULL) { - jErrorCode = ckULongToJLong(returnValue); jPKCS11Exception = (jthrowable) (*env)->NewObject(env, jPKCS11ExceptionClass, jConstructor, jErrorCode); if (jPKCS11Exception != NULL) { (*env)->Throw(env, jPKCS11Exception); @@ -211,8 +209,8 @@ } } (*env)->DeleteLocalRef(env, jPKCS11ExceptionClass); - return jErrorCode ; } + return jErrorCode ; } /*
--- a/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Tue Jul 21 13:06:30 2009 -0700 +++ b/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Mon Jul 27 22:28:29 2009 -0700 @@ -300,7 +300,7 @@ /* funktions to convert a CK-type array and the array length to a Java array */ -jcharArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength); +jbyteArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength); jlongArray ckULongArrayToJLongArray(JNIEnv *env, const CK_ULONG_PTR ckpArray, CK_ULONG ckLength); jcharArray ckCharArrayToJCharArray(JNIEnv *env, const CK_CHAR_PTR ckpArray, CK_ULONG length); jcharArray ckUTF8CharArrayToJCharArray(JNIEnv *env, const CK_UTF8CHAR_PTR ckpArray, CK_ULONG ckLength);
--- a/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Mon Jul 27 22:28:29 2009 -0700 @@ -127,8 +127,6 @@ /* -- End of fields protected by stateLock -- */ - private SctpResultContainer commUpResultContainer; /* null */ - /** * Constructor for normal connecting sockets */ @@ -761,12 +759,6 @@ if (!ensureReceiveOpen()) return null; - if (commUpResultContainer != null) { - resultContainer = commUpResultContainer; - commUpResultContainer = null; - continue; - } - int n = 0; try { begin(); @@ -778,7 +770,7 @@ } do { - n = receive(fdVal, buffer, resultContainer); + n = receive(fdVal, buffer, resultContainer, fromConnect); } while ((n == IOStatus.INTERRUPTED) && isOpen()); } finally { receiverCleanup(); @@ -809,9 +801,9 @@ if (fromConnect) { /* If we reach here, then it was connect that invoked - * receive an received the COMM_UP. Save it and allow - * the user handler to process it upon next receive. */ - commUpResultContainer = resultContainer; + * receive and received the COMM_UP. We have already + * handled the COMM_UP with the internal notification + * handler. Simply return. */ return null; } } /* receiveLock */ @@ -827,20 +819,21 @@ private int receive(int fd, ByteBuffer dst, - SctpResultContainer resultContainer) + SctpResultContainer resultContainer, + boolean peek) throws IOException { int pos = dst.position(); int lim = dst.limit(); assert (pos <= lim); int rem = (pos <= lim ? lim - pos : 0); if (dst instanceof DirectBuffer && rem > 0) - return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos); + return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos, peek); /* Substitute a native buffer */ int newSize = Math.max(rem, 1); ByteBuffer bb = Util.getTemporaryDirectBuffer(newSize); try { - int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0); + int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0, peek); bb.flip(); if (n > 0 && rem > 0) dst.put(bb); @@ -854,10 +847,11 @@ SctpResultContainer resultContainer, ByteBuffer bb, int rem, - int pos) + int pos, + boolean peek) throws IOException { - int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem); + int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem, peek); if (n > 0) bb.position(pos + n); @@ -1089,7 +1083,7 @@ private static native void initIDs(); static native int receive0(int fd, SctpResultContainer resultContainer, - long address, int length) throws IOException; + long address, int length, boolean peek) throws IOException; static native int send0(int fd, long address, int length, SocketAddress target, int assocId, int streamNumber,
--- a/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java Mon Jul 27 22:28:29 2009 -0700 @@ -31,6 +31,8 @@ import java.io.FileDescriptor; import java.io.IOException; import java.util.Collections; +import java.util.Map.Entry; +import java.util.Iterator; import java.util.Set; import java.util.HashSet; import java.util.HashMap; @@ -702,7 +704,7 @@ int assocId = association.associationID(); Set<SocketAddress> addresses = null; - try { + try { addresses = SctpNet.getRemoteAddresses(fdVal, assocId); } catch (IOException unused) { /* OK, determining connected addresses may not be possible @@ -723,9 +725,11 @@ /* We cannot determine the connected addresses */ Set<java.util.Map.Entry<SocketAddress, Association>> addrAssocs = addressMap.entrySet(); - for (java.util.Map.Entry<SocketAddress, Association> entry : addrAssocs) { + Iterator<Entry<SocketAddress, Association>> iterator = addrAssocs.iterator(); + while (iterator.hasNext()) { + Entry<SocketAddress, Association> entry = iterator.next(); if (entry.getValue().equals(association)) { - addressMap.remove(entry.getKey()); + iterator.remove(); } } } @@ -957,7 +961,7 @@ int length) throws IOException{ return SctpChannelImpl.receive0(fd, resultContainer, address, - length); + length, false /*peek */); } private static int send0(int fd,
--- a/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Mon Jul 27 22:28:29 2009 -0700 @@ -417,11 +417,11 @@ /* * Class: sun_nio_ch_SctpChannelImpl * Method: receive0 - * Signature: (ILsun/nio/ch/SctpResultContainer;JI)I + * Signature: (ILsun/nio/ch/SctpResultContainer;JIZ)I */ JNIEXPORT jint JNICALL Java_sun_nio_ch_SctpChannelImpl_receive0 (JNIEnv *env, jclass klass, jint fd, jobject resultContainerObj, - jlong address, jint length) { + jlong address, jint length, jboolean peek) { SOCKADDR sa; int sa_len = sizeof(sa); ssize_t rv = 0; @@ -429,6 +429,7 @@ struct iovec iov[1]; struct msghdr msg[1]; char cbuf[CMSG_SPACE(sizeof (struct sctp_sndrcvinfo))]; + int flags = peek == JNI_TRUE ? MSG_PEEK : 0; /* Set up the msghdr structure for receiving */ memset(msg, 0, sizeof (*msg)); @@ -443,7 +444,7 @@ msg->msg_flags = 0; do { - if ((rv = recvmsg(fd, msg, 0)) < 0) { + if ((rv = recvmsg(fd, msg, flags)) < 0) { if (errno == EWOULDBLOCK) { return IOS_UNAVAILABLE; } else if (errno == EINTR) { @@ -473,7 +474,7 @@ memcpy(buf, addr, rv); iov->iov_base = buf + rv; iov->iov_len = NOTIFICATION_BUFFER_SIZE - rv; - if ((rv = recvmsg(fd, msg, 0)) < 0) { + if ((rv = recvmsg(fd, msg, flags)) < 0) { handleSocketError(env, errno); return 0; }
--- a/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Tue Jul 21 13:06:30 2009 -0700 +++ b/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Mon Jul 27 22:28:29 2009 -0700 @@ -85,19 +85,21 @@ static jfieldID entry_dev; /** - * System calls that may not be available at build time. + * System calls that may not be available at run time. */ typedef int openat64_func(int, const char *, int, ...); typedef int fstatat64_func(int, const char *, struct stat64 *, int); typedef int unlinkat_func(int, const char*, int); typedef int renameat_func(int, const char*, int, const char*); typedef int futimesat_func(int, const char *, const struct timeval *); +typedef DIR* fdopendir_func(int); static openat64_func* my_openat64_func = NULL; static fstatat64_func* my_fstatat64_func = NULL; static unlinkat_func* my_unlinkat_func = NULL; static renameat_func* my_renameat_func = NULL; static futimesat_func* my_futimesat_func = NULL; +static fdopendir_func* my_fdopendir_func = NULL; /** * fstatat missing from glibc on Linux. Temporary workaround @@ -183,7 +185,7 @@ entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B"); entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J"); - /* system calls that might not be available at build time */ + /* system calls that might not be available at run time */ #if defined(__solaris__) && defined(_LP64) /* Solaris 64-bit does not have openat64/fstatat64 */ @@ -196,6 +198,7 @@ my_unlinkat_func = (unlinkat_func*) dlsym(RTLD_DEFAULT, "unlinkat"); my_renameat_func = (renameat_func*) dlsym(RTLD_DEFAULT, "renameat"); my_futimesat_func = (futimesat_func*) dlsym(RTLD_DEFAULT, "futimesat"); + my_fdopendir_func = (fdopendir_func*) dlsym(RTLD_DEFAULT, "fdopendir"); #if defined(FSTATAT64_SYSCALL_AVAILABLE) /* fstatat64 missing from glibc */ @@ -205,7 +208,7 @@ if (my_openat64_func != NULL && my_fstatat64_func != NULL && my_unlinkat_func != NULL && my_renameat_func != NULL && - my_futimesat_func != NULL) + my_futimesat_func != NULL && my_fdopendir_func != NULL) { flags |= sun_nio_fs_UnixNativeDispatcher_HAS_AT_SYSCALLS; } @@ -565,8 +568,13 @@ Java_sun_nio_fs_UnixNativeDispatcher_fdopendir(JNIEnv* env, jclass this, int dfd) { DIR* dir; + if (my_fdopendir_func == NULL) { + JNU_ThrowInternalError(env, "should not reach here"); + return (jlong)-1; + } + /* EINTR not listed as a possible error */ - dir = fdopendir((int)dfd); + dir = (*my_fdopendir_func)((int)dfd); if (dir == NULL) { throwUnixException(env, errno); }
--- a/src/windows/classes/sun/nio/fs/WindowsPath.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/windows/classes/sun/nio/fs/WindowsPath.java Mon Jul 27 22:28:29 2009 -0700 @@ -1177,14 +1177,20 @@ /* * Windows treates symbolic links to directories differently than it - * does to other file types. For that reason we check if the exists and - * is a directory. + * does to other file types. For that reason we need to check if the + * target is a directory (or a directory junction). */ + WindowsPath resolvedTarget; + if (target.type == WindowsPathType.RELATIVE) { + WindowsPath parent = getParent(); + resolvedTarget = (parent == null) ? target : parent.resolve(target); + } else { + resolvedTarget = resolve(target); + } int flags = 0; - WindowsPath resolvedTarget = - WindowsPath.createFromNormalizedPath(getFileSystem(), resolve(target).path); try { - if (WindowsFileAttributes.get(resolvedTarget, true).isDirectory()) + WindowsFileAttributes wattrs = WindowsFileAttributes.get(resolvedTarget, false); + if (wattrs.isDirectory() || wattrs.isDirectoryLink()) flags |= SYMBOLIC_LINK_FLAG_DIRECTORY; } catch (WindowsException x) { // unable to access target so assume target is not a directory
--- a/src/windows/classes/sun/security/krb5/internal/tools/Klist.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/windows/classes/sun/security/krb5/internal/tools/Klist.java Mon Jul 27 22:28:29 2009 -0700 @@ -1,4 +1,5 @@ /* + * Portions Copyright 2003-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
--- a/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Tue Jul 21 13:06:30 2009 -0700 +++ b/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Mon Jul 27 22:28:29 2009 -0700 @@ -1,4 +1,5 @@ /* + * Portions Copyright 2003-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 @@ -30,16 +31,15 @@ package sun.security.krb5.internal.tools; import sun.security.krb5.*; -import sun.security.krb5.internal.*; import sun.security.krb5.internal.ktab.*; -import sun.security.krb5.KrbCryptoException; -import java.lang.RuntimeException; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; -import java.io.FileOutputStream; import java.io.File; +import java.text.DateFormat; import java.util.Arrays; +import java.util.Date; +import sun.security.krb5.internal.crypto.EType; /** * This class can execute as a command-line tool to help the user manage * entires in the key table. @@ -55,6 +55,9 @@ char action; String name; // name and directory of key table String principal; + boolean showEType; + boolean showTime; + int etype = -1; char[] password = null; /** @@ -62,13 +65,14 @@ * <br>Usage: ktab <options> * <br>available options to Ktab: * <ul> - * <li><b>-l</b> list the keytab name and entries + * <li><b>-l [-e] [-t]</b> list the keytab name and entries, -e show + * encryption etypes, -t show timestamps. * <li><b>-a</b> <<i>principal name</i>> * (<<i>password</i>>) add an entry to the keytab. * The entry is added only to the keytab. No changes are made to the * Kerberos database. - * <li><b>-d</b> <<i>principal name</i>> - * delete an entry from the keytab + * <li><b>-d</b> <<i>principal name</i>> [<<i>etype</i>>] + * delete an entry from the keytab. * The entry is deleted only from the keytab. No changes are made to the * Kerberos database. * <li><b>-k</b> <<i>keytab name</i> > @@ -182,6 +186,11 @@ i++; if ((i < args.length) && (!args[i].startsWith("-"))) { principal = args[i]; + int j = i + 1; + if ((j < args.length) && (!args[j].startsWith("-"))) { + etype = Integer.parseInt(args[j]); + i = j; + } } else { System.out.println("Please specify the principal" + "name of the entry you want to " + @@ -207,6 +216,12 @@ System.exit(-1); } break; + case 'e': + showEType = true; + break; + case 't': + showTime = true; + break; default: printHelp(); System.exit(-1); @@ -271,25 +286,54 @@ * Lists key table name and entries in it. */ void listKt() { - int version; - String principal; - // System.out.println("Keytab name: " + admin.getKeyTabName()); - System.out.println("Keytab name: " + table.tabName()); - // KeyTabEntry[] entries = admin.getEntries(); + System.out.println("Keytab name: " + KeyTab.tabName()); KeyTabEntry[] entries = table.getEntries(); if ((entries != null) && (entries.length > 0)) { - System.out.println("KVNO Principal"); + String[][] output = new String[entries.length+1][showTime?3:2]; + int column = 0; + output[0][column++] = "KVNO"; + if (showTime) output[0][column++] = "Timestamp"; + output[0][column++] = "Principal"; for (int i = 0; i < entries.length; i++) { - version = entries[i].getKey().getKeyVersionNumber().intValue(); - principal = entries[i].getService().toString(); - if (i == 0) { - StringBuffer separator = new StringBuffer(); - for (int j = 0; j < 9 + principal.length(); j++) { - separator.append("-"); + column = 0; + output[i+1][column++] = entries[i].getKey(). + getKeyVersionNumber().toString(); + if (showTime) output[i+1][column++] = + DateFormat.getDateTimeInstance( + DateFormat.SHORT, DateFormat.SHORT).format( + new Date(entries[i].getTimeStamp().getTime())); + String princ = entries[i].getService().toString(); + if (showEType) { + int e = entries[i].getKey().getEType(); + output[i+1][column++] = princ + " (" + e + ":" + + EType.toString(e) + ")"; + } else { + output[i+1][column++] = princ; + } + } + int[] width = new int[column]; + for (int j=0; j<column; j++) { + for (int i=0; i <= entries.length; i++) { + if (output[i][j].length() > width[j]) { + width[j] = output[i][j].length(); } - System.out.println(separator.toString()); } - System.out.println(" " + version + " " + principal); + if (j != 0) width[j] = -width[j]; + } + for (int j=0; j<column; j++) { + System.out.printf("%" + width[j] + "s ", output[0][j]); + } + System.out.println(); + for (int j=0; j<column; j++) { + for (int k=0; k<Math.abs(width[j]); k++) System.out.print("-"); + System.out.print(" "); + } + System.out.println(); + for (int i=0; i<entries.length; i++) { + for (int j=0; j<column; j++) { + System.out.printf("%" + width[j] + "s ", output[i+1][j]); + } + System.out.println(); } } else { System.out.println("0 entry."); @@ -309,9 +353,10 @@ String answer; BufferedReader cis = new BufferedReader(new InputStreamReader(System.in)); - System.out.print("Are you sure you want to "+ + System.out.print("Are you sure you want to"+ " delete service key for " + pname.toString() + - " in " + table.tabName() + "?(Y/N) :"); + " (" + (etype==-1?"all etypes":("etype = "+etype)) + + ") in " + table.tabName() + "?(Y/N): "); System.out.flush(); answer = cis.readLine(); @@ -333,19 +378,26 @@ e.printStackTrace(); System.exit(-1); } - // admin.deleteEntry(pname); - table.deleteEntry(pname); + + int count; + if (etype == -1) count = table.deleteEntry(pname); + else count = table.deleteEntry(pname, etype); - try { - table.save(); - } catch (IOException e) { - System.err.println("Error occurs while saving the keytab." + + if (count == 0) { + System.err.println("No matched entry in the keytab. " + "Deletion fails."); - e.printStackTrace(); System.exit(-1); + } else { + try { + table.save(); + } catch (IOException e) { + System.err.println("Error occurs while saving the keytab. " + + "Deletion fails."); + e.printStackTrace(); + System.exit(-1); + } + System.out.println("Done!"); } - System.out.println("Done!"); - } /** @@ -355,12 +407,12 @@ System.out.println("\nUsage: ktab " + "<options>"); System.out.println("available options to Ktab:"); - System.out.println("-l\t\t\t\tlist the keytab name and entries"); + System.out.println("-l [-e] [-t]\t\t\tlist the keytab name and entries,\n\t\t\t\t-e with etype, -t with timestamp"); System.out.println("-a <principal name> (<password>)add an entry " + "to the keytab"); - System.out.println("-d <principal name>\t\tdelete an entry from "+ - "the keytab"); + System.out.println("-d <principal name> [<etype>]\tdelete an "+ + "entry from the keytab"); System.out.println("-k <keytab name>\t\tspecify keytab name and "+ - " path with prefix FILE:"); + "path with prefix FILE:"); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/jndi/ldap/BalancedParentheses.java Mon Jul 27 22:28:29 2009 -0700 @@ -0,0 +1,259 @@ +/* + * 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 6449574 + * @summary Invalid ldap filter is accepted and processed + */ + +import java.io.*; +import javax.naming.*; +import javax.naming.directory.*; +import java.util.Properties; +import java.util.Hashtable; + +import java.net.Socket; +import java.net.ServerSocket; + +public class BalancedParentheses { + // Should we run the client or server in a separate thread? + // + // Both sides can throw exceptions, but do you have a preference + // as to which side should be the main thread. + static boolean separateServerThread = true; + + // use any free port by default + volatile int serverPort = 0; + + // Is the server ready to serve? + volatile static boolean serverReady = false; + + // Define the server side of the test. + // + // If the server prematurely exits, serverReady will be set to true + // to avoid infinite hangs. + void doServerSide() throws Exception { + ServerSocket serverSock = new ServerSocket(serverPort); + + // signal client, it's ready to accecpt connection + serverPort = serverSock.getLocalPort(); + serverReady = true; + + // accept a connection + Socket socket = serverSock.accept(); + System.out.println("Server: Connection accepted"); + + InputStream is = socket.getInputStream(); + OutputStream os = socket.getOutputStream(); + + // read the bindRequest + while (is.read() != -1) { + // ignore + is.skip(is.available()); + break; + } + + byte[] bindResponse = {0x30, 0x0C, 0x02, 0x01, 0x01, 0x61, 0x07, 0x0A, + 0x01, 0x00, 0x04, 0x00, 0x04, 0x00}; + // write bindResponse + os.write(bindResponse); + os.flush(); + + // ignore any more request. + while (is.read() != -1) { + // ignore + is.skip(is.available()); + } + + is.close(); + os.close(); + socket.close(); + serverSock.close(); + } + + // Define the client side of the test. + // + // If the server prematurely exits, serverReady will be set to true + // to avoid infinite hangs. + void doClientSide() throws Exception { + // Wait for server to get started. + while (!serverReady) { + Thread.sleep(50); + } + + // set up the environment for creating the initial context + Hashtable<Object, Object> env = new Hashtable<Object, Object>(); + env.put(Context.INITIAL_CONTEXT_FACTORY, + "com.sun.jndi.ldap.LdapCtxFactory"); + env.put(Context.PROVIDER_URL, "ldap://localhost:" + serverPort); + env.put("com.sun.jndi.ldap.read.timeout", "1000"); + + // env.put(Context.SECURITY_AUTHENTICATION, "simple"); + // env.put(Context.SECURITY_PRINCIPAL,"cn=root"); + // env.put(Context.SECURITY_CREDENTIALS,"root"); + + // create initial context + DirContext context = new InitialDirContext(env); + + // searching + SearchControls scs = new SearchControls(); + scs.setSearchScope(SearchControls.SUBTREE_SCOPE); + + try { + NamingEnumeration answer = context.search( + "o=sun,c=us", "(&(cn=Bob)))", scs); + } catch (InvalidSearchFilterException isfe) { + // ignore, it is the expected filter exception. + System.out.println("Expected exception: " + isfe.getMessage()); + } catch (NamingException ne) { + // maybe a read timeout exception, as the server does not response. + throw new Exception("Expect a InvalidSearchFilterException", ne); + } + + try { + NamingEnumeration answer = context.search( + "o=sun,c=us", ")(&(cn=Bob)", scs); + } catch (InvalidSearchFilterException isfe) { + // ignore, it is the expected filter exception. + System.out.println("Expected exception: " + isfe.getMessage()); + } catch (NamingException ne) { + // maybe a read timeout exception, as the server does not response. + throw new Exception("Expect a InvalidSearchFilterException", ne); + } + + try { + NamingEnumeration answer = context.search( + "o=sun,c=us", "(&(cn=Bob))", scs); + } catch (InvalidSearchFilterException isfe) { + // ignore, it is the expected filter exception. + throw new Exception("Unexpected ISFE", isfe); + } catch (NamingException ne) { + // maybe a read timeout exception, as the server does not response. + System.out.println("Expected exception: " + ne.getMessage()); + } + + context.close(); + } + + /* + * ============================================================ + * The remainder is just support stuff + */ + + // client and server thread + Thread clientThread = null; + Thread serverThread = null; + + // client and server exceptions + volatile Exception serverException = null; + volatile Exception clientException = null; + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + System.err.println(e); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } + + // Primary constructor, used to drive remainder of the test. + BalancedParentheses() throws Exception { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) { + System.out.print("Server Exception:"); + throw serverException; + } + if (clientException != null) { + System.out.print("Client Exception:"); + throw clientException; + } + } + + public static void main(String[] args) throws Exception { + // start the test + new BalancedParentheses(); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/nio/sctp/SctpChannel/CommUp.java Mon Jul 27 22:28:29 2009 -0700 @@ -0,0 +1,364 @@ +/* + * 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 6863110 + * @summary Newly connected/accepted SctpChannel should fire OP_READ if registered with a Selector + * @author chegar + */ + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.io.IOException; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.nio.ByteBuffer; +import java.nio.channels.Selector; +import java.nio.channels.SelectionKey; +import com.sun.nio.sctp.AbstractNotificationHandler; +import com.sun.nio.sctp.AssociationChangeNotification; +import com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent; +import com.sun.nio.sctp.HandlerResult; +import com.sun.nio.sctp.Notification; +import com.sun.nio.sctp.SctpChannel; +import com.sun.nio.sctp.SctpServerChannel; +import com.sun.nio.sctp.ShutdownNotification; +import static java.lang.System.out; +import static java.lang.System.err; +import static java.nio.channels.SelectionKey.OP_CONNECT; +import static java.nio.channels.SelectionKey.OP_READ; + +public class CommUp { + static CountDownLatch acceptLatch = new CountDownLatch(1); + static final int TIMEOUT = 10000; + + CommUpNotificationHandler clientHandler = new CommUpNotificationHandler(); + CommUpNotificationHandler serverHandler = new CommUpNotificationHandler(); + CommUpServer server; + Thread clientThread; + + void test(String[] args) { + SocketAddress address = null; + + if (!Util.isSCTPSupported()) { + out.println("SCTP protocol is not supported"); + out.println("Test cannot be run"); + return; + } + + if (args.length == 2) { + /* requested to connecct to a specific address */ + try { + int port = Integer.valueOf(args[1]); + address = new InetSocketAddress(args[0], port); + } catch (NumberFormatException nfe) { + err.println(nfe); + } + } else { + /* start server on local machine, default */ + try { + server = new CommUpServer(); + server.start(); + address = server.address(); + debug("Server started and listening on " + address); + } catch (IOException ioe) { + ioe.printStackTrace(); + return; + } + } + + /* store the main thread so that the server can interrupt it, if necessary */ + clientThread = Thread.currentThread(); + + doClient(address); + } + + void doClient(SocketAddress peerAddress) { + SctpChannel sc = null; + try { + debug("connecting to " + peerAddress); + sc = SctpChannel.open(); + sc.configureBlocking(false); + check(sc.isBlocking() == false, "Should be in non-blocking mode"); + sc.connect(peerAddress); + + Selector selector = Selector.open(); + SelectionKey selectiontKey = sc.register(selector, OP_CONNECT); + + /* Expect two interest Ops */ + boolean opConnectReceived = false; + boolean opReadReceived = false; + for (int z=0; z<2; z++) { + debug("select " + z); + int keysAdded = selector.select(TIMEOUT); + debug("returned " + keysAdded + " keys"); + if (keysAdded > 0) { + Set<SelectionKey> keys = selector.selectedKeys(); + Iterator<SelectionKey> i = keys.iterator(); + while(i.hasNext()) { + SelectionKey sk = i.next(); + i.remove(); + SctpChannel readyChannel = + (SctpChannel)sk.channel(); + + /* OP_CONNECT */ + if (sk.isConnectable()) { + /* some trivial checks */ + check(opConnectReceived == false, + "should only received one OP_CONNECT"); + check(opReadReceived == false, + "should not receive OP_READ before OP_CONNECT"); + check(readyChannel.equals(sc), + "channels should be equal"); + check(!sk.isAcceptable(), + "key should not be acceptable"); + check(!sk.isReadable(), + "key should not be readable"); + check(!sk.isWritable(), + "key should not be writable"); + + /* now process the OP_CONNECT */ + opConnectReceived = true; + check((sk.interestOps() & OP_CONNECT) == OP_CONNECT, + "selection key interest ops should contain OP_CONNECT"); + sk.interestOps(OP_READ); + check((sk.interestOps() & OP_CONNECT) != OP_CONNECT, + "selection key interest ops should not contain OP_CONNECT"); + check(sc.finishConnect(), + "finishConnect should return true"); + } /* OP_READ */ + else if (sk.isReadable()) { + /* some trivial checks */ + check(opConnectReceived == true, + "should receive one OP_CONNECT before OP_READ"); + check(opReadReceived == false, + "should not receive OP_READ before OP_CONNECT"); + check(readyChannel.equals(sc), + "channels should be equal"); + check(!sk.isAcceptable(), + "key should not be acceptable"); + check(sk.isReadable(), + "key should be readable"); + check(!sk.isWritable(), + "key should not be writable"); + check(!sk.isConnectable(), + "key should not be connectable"); + + /* now process the OP_READ */ + opReadReceived = true; + selectiontKey.cancel(); + + /* try with small buffer to see if native + * implementation can handle this */ + ByteBuffer buffer = ByteBuffer.allocateDirect(1); + readyChannel.receive(buffer, null, clientHandler); + check(clientHandler.receivedCommUp(), + "Client should have received COMM_UP"); + + /* dont close (or put anything on) the channel until + * we check that the server's accepted channel also + * received COMM_UP */ + serverHandler.waitForCommUp(); + } else { + fail("Unexpected selection key"); + } + } + } else { + fail("Client selector returned 0 ready keys"); + /* stop the server */ + server.thread().interrupt(); + } + } //for + + } catch (IOException ioe) { + unexpected(ioe); + } catch (InterruptedException ie) { + unexpected(ie); + } + } + + class CommUpServer implements Runnable + { + final InetSocketAddress serverAddr; + private SctpServerChannel ssc; + private Thread serverThread; + + public CommUpServer() throws IOException { + ssc = SctpServerChannel.open().bind(null); + java.util.Set<SocketAddress> addrs = ssc.getAllLocalAddresses(); + if (addrs.isEmpty()) + debug("addrs should not be empty"); + + serverAddr = (InetSocketAddress) addrs.iterator().next(); + } + + void start() { + serverThread = new Thread(this, "CommUpServer-" + + serverAddr.getPort()); + serverThread.start(); + } + + InetSocketAddress address () { + return serverAddr; + } + + Thread thread() { + return serverThread; + } + + @Override + public void run() { + Selector selector = null; + SctpChannel sc = null; + SelectionKey readKey = null; + try { + sc = ssc.accept(); + debug("accepted " + sc); + + selector = Selector.open(); + sc.configureBlocking(false); + check(sc.isBlocking() == false, "Should be in non-blocking mode"); + readKey = sc.register(selector, SelectionKey.OP_READ); + + debug("select"); + int keysAdded = selector.select(TIMEOUT); + debug("returned " + keysAdded + " keys"); + if (keysAdded > 0) { + Set<SelectionKey> keys = selector.selectedKeys(); + Iterator<SelectionKey> i = keys.iterator(); + while(i.hasNext()) { + SelectionKey sk = i.next(); + i.remove(); + SctpChannel readyChannel = + (SctpChannel)sk.channel(); + check(readyChannel.equals(sc), + "channels should be equal"); + check(!sk.isAcceptable(), + "key should not be acceptable"); + check(sk.isReadable(), + "key should be readable"); + check(!sk.isWritable(), + "key should not be writable"); + check(!sk.isConnectable(), + "key should not be connectable"); + + /* block until we check if the client has received its COMM_UP*/ + clientHandler.waitForCommUp(); + + ByteBuffer buffer = ByteBuffer.allocateDirect(1); + sc.receive(buffer, null, serverHandler); + check(serverHandler.receivedCommUp(), + "Accepted channel should have received COMM_UP"); + } + } else { + fail("Server selector returned 0 ready keys"); + /* stop the client */ + clientThread.interrupt(); + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } catch (InterruptedException unused) { + } finally { + if (readKey != null) readKey.cancel(); + try { if (selector != null) selector.close(); } + catch (IOException ioe) { unexpected(ioe); } + try { if (ssc != null) ssc.close(); } + catch (IOException ioe) { unexpected(ioe); } + try { if (sc != null) sc.close(); } + catch (IOException ioe) { unexpected(ioe); } + } + } + } + + class CommUpNotificationHandler extends AbstractNotificationHandler<Object> + { + private boolean receivedCommUp; // false + + public synchronized boolean receivedCommUp() { + return receivedCommUp; + } + + public synchronized boolean waitForCommUp() throws InterruptedException { + while (receivedCommUp == false) { + wait(); + } + + return false; + } + + @Override + public HandlerResult handleNotification( + Notification notification, Object attachment) { + fail("Unknown notification type"); + return HandlerResult.CONTINUE; + } + + @Override + public synchronized HandlerResult handleNotification( + AssociationChangeNotification notification, Object attachment) { + AssocChangeEvent event = notification.event(); + debug("AssociationChangeNotification"); + debug(" Association: " + notification.association()); + debug(" Event: " + event); + + if (event.equals(AssocChangeEvent.COMM_UP)) { + receivedCommUp = true; + notifyAll(); + } + + return HandlerResult.RETURN; + } + + @Override + public HandlerResult handleNotification( + ShutdownNotification notification, Object attachment) { + debug("ShutdownNotification"); + debug(" Association: " + notification.association()); + return HandlerResult.RETURN; + } + } + + //--------------------- Infrastructure --------------------------- + boolean debug = true; + volatile int passed = 0, failed = 0; + void pass() {passed++;} + void fail() {failed++; Thread.dumpStack();} + void fail(String msg) {err.println(msg); fail();} + void unexpected(Throwable t) {failed++; t.printStackTrace();} + void check(boolean cond) {if (cond) pass(); else fail();} + void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);} + void debug(String message) {if(debug) { out.println(Thread.currentThread().getName() + ": " + message); } } + void sleep(long millis) { try { Thread.currentThread().sleep(millis); } + catch(InterruptedException ie) { unexpected(ie); }} + public static void main(String[] args) throws Throwable { + Class<?> k = new Object(){}.getClass().getEnclosingClass(); + try {k.getMethod("instanceMain",String[].class) + .invoke( k.newInstance(), (Object) args);} + catch (Throwable e) {throw e.getCause();}} + public void instanceMain(String[] args) throws Throwable { + try {test(args);} catch (Throwable t) {unexpected(t);} + out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new AssertionError("Some tests failed");} + +}
--- a/test/com/sun/nio/sctp/SctpMultiChannel/Branch.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/com/sun/nio/sctp/SctpMultiChannel/Branch.java Mon Jul 27 22:28:29 2009 -0700 @@ -115,7 +115,6 @@ /* Receive the COMM_UP */ buffer.clear(); BranchNotificationHandler handler = new BranchNotificationHandler(); - channel.configureBlocking(false); info = channel.receive(buffer, null, handler); check(handler.receivedCommUp(), "COMM_UP no received"); Set<Association> associations = channel.associations();
--- a/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java Mon Jul 27 22:28:29 2009 -0700 @@ -181,7 +181,6 @@ /* Receive the COMM_UP */ buffer.clear(); SOTNotificationHandler handler = new SOTNotificationHandler(); - smc.configureBlocking(false); info = smc.receive(buffer, null, handler); check(handler.receivedCommUp(), "COMM_UP no received"); Set<Association> associations = smc.associations(); @@ -220,6 +219,7 @@ } check(found, "SCTP_PRIMARY_ADDR returned bogus address!"); + System.out.println("Try SCTP_PRIMARY_ADDR set to: " + addrToSet); smc.setOption(SCTP_PRIMARY_ADDR, addrToSet, assoc); System.out.println("SCTP_PRIMARY_ADDR set to: " + addrToSet); primaryAddr = smc.getOption(SCTP_PRIMARY_ADDR, assoc);
--- a/test/java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java Mon Jul 27 22:28:29 2009 -0700 @@ -44,9 +44,9 @@ final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open() .bind(new InetSocketAddress(0)); - listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { + listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(AsynchronousSocketChannel ch, Void att) { - listener.accept(null, this); + listener.accept((Void)null, this); } public void failed(Throwable exc, Void att) { } @@ -81,13 +81,13 @@ // 2. the close/shutdown completes final CountDownLatch latch = new CountDownLatch(2); - ch.connect(sa, null, new CompletionHandler<Void,Void>() { + ch.connect(sa, (Void)null, new CompletionHandler<Void,Void>() { public void completed(Void result, Void att) { System.out.println("Connected"); // initiate I/O operation that does not complete (successfully) ByteBuffer buf = ByteBuffer.allocate(100); - ch.read(buf, null, new CompletionHandler<Integer,Void>() { + ch.read(buf, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { throw new RuntimeException(); }
--- a/test/java/nio/channels/AsynchronousChannelGroup/Identity.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousChannelGroup/Identity.java Mon Jul 27 22:28:29 2009 -0700 @@ -78,15 +78,15 @@ final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open() .bind(new InetSocketAddress(0)); - listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { + listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(final AsynchronousSocketChannel ch, Void att) { - listener.accept(null, this); + listener.accept((Void)null, this); final ByteBuffer buf = ByteBuffer.allocate(100); - ch.read(buf, null, new CompletionHandler<Integer,Void>() { + ch.read(buf, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { buf.clear(); - ch.read(buf, null, this); + ch.read(buf, (Void)null, this); } public void failed(Throwable exc, Void att) { }
--- a/test/java/nio/channels/AsynchronousChannelGroup/Restart.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousChannelGroup/Restart.java Mon Jul 27 22:28:29 2009 -0700 @@ -94,7 +94,7 @@ for (int i=0; i<count; i++) { final CountDownLatch latch = new CountDownLatch(1); - listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { + listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(AsynchronousSocketChannel ch, Void att) { try { ch.close();
--- a/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Mon Jul 27 22:28:29 2009 -0700 @@ -45,10 +45,10 @@ final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open() .bind(new InetSocketAddress(0)); - listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { + listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(AsynchronousSocketChannel ch, Void att) { queue.add(ch); - listener.accept(null, this); + listener.accept((Void)null, this); } public void failed(Throwable exc, Void att) { }
--- a/test/java/nio/channels/AsynchronousDatagramChannel/Basic.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousDatagramChannel/Basic.java Mon Jul 27 22:28:29 2009 -0700 @@ -66,7 +66,7 @@ // Test: datagram packet not received immediately dst.clear(); final CountDownLatch latch = new CountDownLatch(1); - ch.receive(dst, null, new CompletionHandler<SocketAddress,Void>() { + ch.receive(dst, (Void)null, new CompletionHandler<SocketAddress,Void>() { public void completed(SocketAddress source, Void att) { latch.countDown(); } @@ -82,7 +82,7 @@ // Test: timeout dst.clear(); final AtomicReference<Throwable> exception = new AtomicReference<Throwable>(); - ch.receive(dst, 2, TimeUnit.SECONDS, null, new CompletionHandler<SocketAddress,Void>() { + ch.receive(dst, 2, TimeUnit.SECONDS, (Void)null, new CompletionHandler<SocketAddress,Void>() { public void completed(SocketAddress source, Void att) { } public void failed (Throwable exc, Void att) { @@ -101,7 +101,7 @@ // AsynchronousCloseException dst = ByteBuffer.allocateDirect(100); exception.set(null); - ch.receive(dst, null, new CompletionHandler<SocketAddress,Void>() { + ch.receive(dst, (Void)null, new CompletionHandler<SocketAddress,Void>() { public void completed(SocketAddress source, Void att) { } public void failed (Throwable exc, Void att) { @@ -156,7 +156,7 @@ // Test: datagram packet not received immediately dst.clear(); final CountDownLatch l1 = new CountDownLatch(1); - ch.read(dst, null, new CompletionHandler<Integer,Void>() { + ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { l1.countDown(); } @@ -172,7 +172,7 @@ // Test: timeout dst.clear(); final AtomicReference<Throwable> exception = new AtomicReference<Throwable>(); - ch.read(dst, 2, TimeUnit.SECONDS, null, new CompletionHandler<Integer,Void>() { + ch.read(dst, 2, TimeUnit.SECONDS, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { } public void failed (Throwable exc, Void att) { @@ -191,7 +191,7 @@ // AsynchronousCloseException dst.clear(); exception.set(null); - ch.read(dst, null, new CompletionHandler<Integer,Void>() { + ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { } public void failed (Throwable exc, Void att) { @@ -238,7 +238,7 @@ // Test: send datagram packet to reader and check completion handler // is invoked final CountDownLatch l2 = new CountDownLatch(1); - ch.send(ByteBuffer.wrap(msg), sa, null, new CompletionHandler<Integer,Void>() { + ch.send(ByteBuffer.wrap(msg), sa, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesSent, Void att) { if (bytesSent != msg.length) throw new RuntimeException("Unexpected number of bytes received"); @@ -261,7 +261,7 @@ // Test: check that failed method is invoked ch.close(); final CountDownLatch l3 = new CountDownLatch(1); - ch.send(ByteBuffer.wrap(msg), sa, null, new CompletionHandler<Integer,Void>() { + ch.send(ByteBuffer.wrap(msg), sa, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesSent, Void att) { throw new RuntimeException("completed method invoked"); } @@ -315,7 +315,7 @@ // Test: write datagram and check completion handler is invoked final CountDownLatch l2 = new CountDownLatch(1); - ch.write(ByteBuffer.wrap(msg), null, new CompletionHandler<Integer,Void>() { + ch.write(ByteBuffer.wrap(msg), (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesSent, Void att) { if (bytesSent != msg.length) throw new RuntimeException("Unexpected number of bytes received"); @@ -372,7 +372,7 @@ final CountDownLatch latch = new CountDownLatch(1); long timeout = (i == 0) ? 0L : 60L; Future<SocketAddress> remote = ch - .receive(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, null, + .receive(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, (Void)null, new CompletionHandler<SocketAddress,Void>() { public void completed(SocketAddress source, Void att) { } @@ -395,7 +395,7 @@ final CountDownLatch latch = new CountDownLatch(1); long timeout = (i == 0) ? 0L : 60L; Future<Integer> result = ch - .read(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, null, + .read(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer bytesRead, Void att) { }
--- a/test/java/nio/channels/AsynchronousFileChannel/Basic.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousFileChannel/Basic.java Mon Jul 27 22:28:29 2009 -0700 @@ -190,7 +190,7 @@ if (fl == null) throw new RuntimeException("Unable to acquire lock"); try { - ch.lock(null, new CompletionHandler<FileLock,Void> () { + ch.lock((Void)null, new CompletionHandler<FileLock,Void> () { public void completed(FileLock result, Void att) { } public void failed(Throwable exc, Void att) { @@ -217,7 +217,7 @@ ByteBuffer buf = ByteBuffer.allocateDirect(100); final CountDownLatch latch = new CountDownLatch(1); - ch.read(buf, 0L, null, new CompletionHandler<Integer,Void>() { + ch.read(buf, 0L, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { try { Thread.currentThread().interrupt(); @@ -311,7 +311,7 @@ final AtomicReference<Thread> invoker = new AtomicReference<Thread>(); final CountDownLatch latch = new CountDownLatch(1); - ch.write(genBuffer(), 0L, null, new CompletionHandler<Integer,Void>() { + ch.write(genBuffer(), 0L, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { invoker.set(Thread.currentThread()); latch.countDown(); @@ -410,7 +410,7 @@ // start write operation final CountDownLatch latch = new CountDownLatch(1); - Future<Integer> res = ch.write(genBuffer(), 0L, null, + Future<Integer> res = ch.write(genBuffer(), 0L, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { }
--- a/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java Mon Jul 27 22:28:29 2009 -0700 @@ -95,7 +95,7 @@ final AtomicReference<Throwable> exception = new AtomicReference<Throwable>(); // start accepting - listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { + listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(AsynchronousSocketChannel ch, Void att) { try { ch.close();
--- a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Mon Jul 27 22:28:29 2009 -0700 @@ -181,7 +181,7 @@ } final AtomicReference<Throwable> connectException = new AtomicReference<Throwable>(); - ch.connect(server.address(), null, new CompletionHandler<Void,Void>() { + ch.connect(server.address(), (Void)null, new CompletionHandler<Void,Void>() { public void completed(Void result, Void att) { } public void failed(Throwable exc, Void att) { @@ -332,7 +332,7 @@ // start read operation final CountDownLatch latch = new CountDownLatch(1); ByteBuffer buf = ByteBuffer.allocate(1); - Future<Integer> res = ch.read(buf, null, + Future<Integer> res = ch.read(buf, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { } @@ -397,11 +397,11 @@ // reads should complete immediately final ByteBuffer dst = ByteBuffer.allocateDirect(src.capacity() + 100); final CountDownLatch latch = new CountDownLatch(1); - ch.read(dst, null, new CompletionHandler<Integer,Void>() { + ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { int n = result; if (n > 0) { - ch.read(dst, null, this); + ch.read(dst, (Void)null, this); } else { latch.countDown(); } @@ -450,10 +450,10 @@ // read until the buffer is full final ByteBuffer dst = ByteBuffer.allocateDirect(src.capacity()); final CountDownLatch latch = new CountDownLatch(1); - ch.read(dst, null, new CompletionHandler<Integer,Void>() { + ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { if (dst.hasRemaining()) { - ch.read(dst, null, this); + ch.read(dst, (Void)null, this); } else { latch.countDown(); } @@ -508,7 +508,7 @@ // scattering read that completes ascynhronously final CountDownLatch latch = new CountDownLatch(1); - ch.read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, null, + ch.read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, (Void)null, new CompletionHandler<Long,Void>() { public void completed(Long result, Void att) { long n = result; @@ -536,7 +536,7 @@ dsts[i].rewind(); } long n = ch - .read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, null, null).get(); + .read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, (Void)null, null).get(); if (n <= 0) throw new RuntimeException("No bytes read"); @@ -562,10 +562,10 @@ // write all bytes and close connection when done final ByteBuffer src = genBuffer(); - ch.write(src, null, new CompletionHandler<Integer,Void>() { + ch.write(src, (Void)null, new CompletionHandler<Integer,Void>() { public void completed(Integer result, Void att) { if (src.hasRemaining()) { - ch.write(src, null, this); + ch.write(src, (Void)null, this); } else { try { ch.close(); @@ -616,7 +616,7 @@ // write buffers (should complete immediately) ByteBuffer[] srcs = genBuffers(1); long n = ch - .write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, null, null).get(); + .write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, (Void)null, null).get(); if (n <= 0) throw new RuntimeException("No bytes written"); @@ -629,7 +629,7 @@ // write until socket buffer is full so as to create the conditions // for when a write does not complete immediately srcs = genBuffers(1); - ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, null, + ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, (Void)null, new CompletionHandler<Long,Void>() { public void completed(Long result, Void att) { long n = result; @@ -639,7 +639,7 @@ if (continueWriting.get()) { ByteBuffer[] srcs = genBuffers(8); ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, - null, this); + (Void)null, this); } } public void failed(Throwable exc, Void att) { @@ -717,7 +717,7 @@ // this read should timeout ByteBuffer dst = ByteBuffer.allocate(512); try { - ch.read(dst, 3, TimeUnit.SECONDS, null, null).get(); + ch.read(dst, 3, TimeUnit.SECONDS, (Void)null, null).get(); throw new RuntimeException("Read did not timeout"); } catch (ExecutionException x) { if (!(x.getCause() instanceof InterruptedByTimeoutException))
--- a/test/java/nio/channels/AsynchronousSocketChannel/StressLoopback.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/channels/AsynchronousSocketChannel/StressLoopback.java Mon Jul 27 22:28:29 2009 -0700 @@ -99,7 +99,7 @@ void start() { sentBuffer.position(0); sentBuffer.limit(sentBuffer.capacity()); - channel.write(sentBuffer, null, new CompletionHandler<Integer,Void> () { + channel.write(sentBuffer, (Void)null, new CompletionHandler<Integer,Void> () { public void completed(Integer nwrote, Void att) { bytesSent += nwrote; if (finished) { @@ -107,7 +107,7 @@ } else { sentBuffer.position(0); sentBuffer.limit(sentBuffer.capacity()); - channel.write(sentBuffer, null, this); + channel.write(sentBuffer, (Void)null, this); } } public void failed(Throwable exc, Void att) { @@ -142,14 +142,14 @@ } void start() { - channel.read(readBuffer, null, new CompletionHandler<Integer,Void> () { + channel.read(readBuffer, (Void)null, new CompletionHandler<Integer,Void> () { public void completed(Integer nread, Void att) { if (nread < 0) { closeUnchecked(channel); } else { bytesRead += nread; readBuffer.clear(); - channel.read(readBuffer, null, this); + channel.read(readBuffer, (Void)null, this); } } public void failed(Throwable exc, Void att) {
--- a/test/java/nio/file/Path/Links.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/java/nio/file/Path/Links.java Mon Jul 27 22:28:29 2009 -0700 @@ -22,7 +22,7 @@ */ /* @test - * @bug 4313887 6838333 + * @bug 4313887 6838333 6863864 * @summary Unit test for java.nio.file.Path createSymbolicLink, * readSymbolicLink, and createLink methods * @library .. @@ -31,7 +31,6 @@ import java.nio.file.*; import java.nio.file.attribute.*; import java.io.*; -import java.util.*; public class Links { @@ -47,7 +46,7 @@ * Exercise createSymbolicLink and readLink methods */ static void testSymLinks(Path dir) throws IOException { - Path link = dir.resolve("link"); + final Path link = dir.resolve("link"); // Check if sym links are supported try { @@ -76,6 +75,63 @@ link.delete(); } } + + // Test links to directory + Path mydir = dir.resolve("mydir"); + Path myfile = mydir.resolve("myfile"); + try { + mydir.createDirectory(); + myfile.createFile(); + + // link -> "mydir" + link.createSymbolicLink(mydir.getName()); + assertTrue(link.readSymbolicLink().equals(mydir.getName())); + + // Test access to directory via link + DirectoryStream<Path> stream = link.newDirectoryStream(); + try { + boolean found = false; + for (Path entry: stream) { + if (entry.getName().equals(myfile.getName())) { + found = true; + break; + } + } + assertTrue(found); + } finally { + stream.close(); + } + + // Test link2 -> link -> mydir + final Path link2 = dir.resolve("link2"); + Path target2 = link.getName(); + link2.createSymbolicLink(target2); + try { + assertTrue(link2.readSymbolicLink().equals(target2)); + link2.newDirectoryStream().close(); + } finally { + link2.delete(); + } + + // Remove mydir and re-create link2 before re-creating mydir + // (This is a useful test on Windows to ensure that creating a + // sym link to a directory sym link creates the right type of link). + myfile.delete(); + mydir.delete(); + link2.createSymbolicLink(target2); + try { + assertTrue(link2.readSymbolicLink().equals(target2)); + mydir.createDirectory(); + link2.newDirectoryStream().close(); + } finally { + link2.delete(); + } + + } finally { + myfile.deleteIfExists(); + mydir.deleteIfExists(); + link.deleteIfExists(); + } } /**
--- a/test/sun/security/krb5/ConfPlusProp.java Tue Jul 21 13:06:30 2009 -0700 +++ b/test/sun/security/krb5/ConfPlusProp.java Mon Jul 27 22:28:29 2009 -0700 @@ -23,31 +23,56 @@ /* * @test * @bug 6857795 + * @buf 6858589 * @summary krb5.conf ignored if system properties on realm and kdc are provided */ import sun.security.krb5.Config; -import sun.security.krb5.KrbException; public class ConfPlusProp { + Config config; public static void main(String[] args) throws Exception { - System.setProperty("java.security.krb5.realm", "R2"); - System.setProperty("java.security.krb5.kdc", "k2"); + new ConfPlusProp().run(); + } + + void refresh() throws Exception { + Config.refresh(); + config = Config.getInstance(); + } + + void checkDefaultRealm(String r) throws Exception { + try { + if (!config.getDefaultRealm().equals(r)) { + throw new AssertionError("Default realm error"); + } + } catch (Exception e) { + if (r != null) throw e; + } + } + + void check(String r, String k) throws Exception { + try { + if (!config.getKDCList(r).equals(k)) { + throw new AssertionError(r + " kdc not " + k); + } + } catch (Exception e) { + if (k != null) throw e; + } + } + + void run() throws Exception { + + // No prop, only conf // Point to a file with existing default_realm System.setProperty("java.security.krb5.conf", System.getProperty("test.src", ".") +"/confplusprop.conf"); - Config config = Config.getInstance(); + refresh(); - if (!config.getDefaultRealm().equals("R2")) { - throw new Exception("Default realm error"); - } - if (!config.getKDCList("R1").equals("k1")) { - throw new Exception("R1 kdc error"); - } - if (!config.getKDCList("R2").equals("k2")) { - throw new Exception("R2 kdc error"); - } + checkDefaultRealm("R1"); + check("R1", "k1"); + check("R2", "old"); + check("R3", null); if (!config.getDefault("forwardable", "libdefaults").equals("well")) { throw new Exception("Extra config error"); } @@ -55,38 +80,66 @@ // Point to a file with no libdefaults System.setProperty("java.security.krb5.conf", System.getProperty("test.src", ".") +"/confplusprop2.conf"); - Config.refresh(); + refresh(); + + checkDefaultRealm(null); + check("R1", "k12"); + check("R2", "old"); + check("R3", null); + + int version = System.getProperty("java.version").charAt(2) - '0'; + System.out.println("JDK version is " + version); - config = Config.getInstance(); + // Zero-config is supported since 1.7 + if (version >= 7) { + // Point to a non-existing file + System.setProperty("java.security.krb5.conf", "i-am-not-a file"); + refresh(); - if (!config.getDefaultRealm().equals("R2")) { - throw new Exception("Default realm error again"); + checkDefaultRealm(null); + check("R1", null); + check("R2", null); + check("R3", null); + if (config.getDefault("forwardable", "libdefaults") != null) { + throw new Exception("Extra config error"); + } } - if (!config.getKDCList("R1").equals("k12")) { - throw new Exception("R1 kdc error"); + + // Add prop + System.setProperty("java.security.krb5.realm", "R2"); + System.setProperty("java.security.krb5.kdc", "k2"); + + // Point to a file with existing default_realm + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/confplusprop.conf"); + refresh(); + + checkDefaultRealm("R2"); + check("R1", "k1"); + check("R2", "k2"); + check("R3", "k2"); + if (!config.getDefault("forwardable", "libdefaults").equals("well")) { + throw new Exception("Extra config error"); } - if (!config.getKDCList("R2").equals("k2")) { - throw new Exception("R2 kdc error"); - } + + // Point to a file with no libdefaults + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/confplusprop2.conf"); + refresh(); + + checkDefaultRealm("R2"); + check("R1", "k12"); + check("R2", "k2"); + check("R3", "k2"); // Point to a non-existing file System.setProperty("java.security.krb5.conf", "i-am-not-a file"); - Config.refresh(); - - config = Config.getInstance(); + refresh(); - if (!config.getDefaultRealm().equals("R2")) { - throw new Exception("Default realm error"); - } - try { - config.getKDCList("R1"); - throw new Exception("R1 is nowhere"); - } catch (KrbException ke) { - // OK - } - if (!config.getKDCList("R2").equals("k2")) { - throw new Exception("R2 kdc error"); - } + checkDefaultRealm("R2"); + check("R1", "k2"); + check("R2", "k2"); + check("R3", "k2"); if (config.getDefault("forwardable", "libdefaults") != null) { throw new Exception("Extra config error"); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/tools/jarsigner/newsize7.sh Mon Jul 27 22:28:29 2009 -0700 @@ -0,0 +1,73 @@ +# +# 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 6561126 +# @summary keytool should use larger default keysize for keypairs +# +# @run shell newsize7.sh + +# set a few environment variables so that the shell-script can run stand-alone +# in the source directory +if [ "${TESTSRC}" = "" ] ; then + TESTSRC="." +fi + +if [ "${TESTJAVA}" = "" ] ; then + JAVA_CMD=`which java` + TESTJAVA=`dirname $JAVA_CMD`/.. +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +KSFILE=ns7.jks + +KT="${TESTJAVA}${FS}bin${FS}keytool -keystore ns7.jks -storepass changeit -keypass changeit" +JAR="${TESTJAVA}${FS}bin${FS}jar" +JS="${TESTJAVA}${FS}bin${FS}jarsigner -keystore ns7.jks -storepass changeit" + +rm ns7.* + +$KT -genkeypair -alias me -dname CN=Me + +touch ns7.txt +$JAR cvf ns7.jar ns7.txt + +$JS ns7.jar me +$JAR xvf ns7.jar + +grep SHA-256 META-INF/MANIFEST.MF || exit 1 +grep SHA-256 META-INF/ME.SF || exit 2 + +#rm -rf META-INF + +exit 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/tools/keytool/NewSize7.java Mon Jul 27 22:28:29 2009 -0700 @@ -0,0 +1,56 @@ +/* + * 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 6561126 + * @summary keytool should use larger default keysize for keypairs + */ + +import java.io.File; +import java.io.FileInputStream; +import java.security.KeyStore; +import java.security.cert.X509Certificate; +import java.security.interfaces.RSAPublicKey; +import sun.security.tools.KeyTool; + +public class NewSize7 { + public static void main(String[] args) throws Exception { + String FILE = "newsize7-ks"; + new File(FILE).delete(); + KeyTool.main(("-debug -genkeypair -keystore " + FILE + + " -alias a -dname cn=c -storepass changeit" + + " -keypass changeit -keyalg rsa").split(" ")); + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(new FileInputStream(FILE), null); + new File(FILE).delete(); + RSAPublicKey r = (RSAPublicKey)ks.getCertificate("a").getPublicKey(); + if (r.getModulus().bitLength() != 2048) { + throw new Exception("Bad keysize"); + } + X509Certificate x = (X509Certificate)ks.getCertificate("a"); + if (!x.getSigAlgName().equals("SHA256withRSA")) { + throw new Exception("Bad sigalg"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/tools/keytool/emptysubject.sh Mon Jul 27 22:28:29 2009 -0700 @@ -0,0 +1,68 @@ +# +# 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 6847026 +# @summary keytool should be able to generate certreq and cert without subject name +# +# @run shell emptysubject.sh +# + +if [ "${TESTJAVA}" = "" ] ; then + JAVAC_CMD=`which javac` + TESTJAVA=`dirname $JAVAC_CMD`/.. +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +KS=emptysubject.jks +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS" + +rm $KS + +$KT -alias ca -dname CN=CA -genkeypair +$KT -alias me -dname CN=Me -genkeypair + +# When -dname is recognized, SAN must be specfied, otherwise, -printcert fails. +$KT -alias me -certreq -dname "" | \ + $KT -alias ca -gencert | $KT -printcert && exit 1 +$KT -alias me -certreq | \ + $KT -alias ca -gencert -dname "" | $KT -printcert && exit 2 +$KT -alias me -certreq -dname "" | \ + $KT -alias ca -gencert -ext san:c=email:me@me.com | \ + $KT -printcert || exit 3 +$KT -alias me -certreq | \ + $KT -alias ca -gencert -dname "" -ext san:c=email:me@me.com | \ + $KT -printcert || exit 4 + +exit 0 +