--- a/jdk/src/share/classes/com/sun/jndi/ldap/ClientId.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/ClientId.java Tue Aug 30 14:41:12 2011 +0100
@@ -25,6 +25,7 @@
package com.sun.jndi.ldap;
+import java.util.Locale;
import java.util.Arrays; // JDK 1.2
import java.io.OutputStream;
import javax.naming.ldap.Control;
@@ -71,7 +72,7 @@
ClientId(int version, String hostname, int port, String protocol,
Control[] bindCtls, OutputStream trace, String socketFactory) {
this.version = version;
- this.hostname = hostname.toLowerCase(); // ignore case
+ this.hostname = hostname.toLowerCase(Locale.ENGLISH); // ignore case
this.port = port;
this.protocol = protocol;
this.bindCtls = (bindCtls != null ? bindCtls.clone() : null);
@@ -83,13 +84,15 @@
if ((socketFactory != null) &&
!socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
try {
- Class<?> socketFactoryClass = Obj.helper.loadClass(socketFactory);
+ Class<?> socketFactoryClass =
+ Obj.helper.loadClass(socketFactory);
Class<?> objClass = Class.forName("java.lang.Object");
this.sockComparator = socketFactoryClass.getMethod(
"compare", new Class<?>[]{objClass, objClass});
- Method getDefault =
- socketFactoryClass.getMethod("getDefault", new Class<?>[]{});
- this.factory = (SocketFactory) getDefault.invoke(null, new Object[]{});
+ Method getDefault = socketFactoryClass.getMethod(
+ "getDefault", new Class<?>[]{});
+ this.factory =
+ (SocketFactory)getDefault.invoke(null, new Object[]{});
} catch (Exception e) {
// Ignore it here, the same exceptions are/will be handled by
// LdapPoolManager and Connection classes.
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java Tue Aug 30 14:41:12 2011 +0100
@@ -26,6 +26,7 @@
package com.sun.jndi.ldap;
import java.io.*;
+import java.util.Locale;
import java.util.Vector;
import java.util.Hashtable;
@@ -738,14 +739,15 @@
if (hasBinaryValues) {
la.add(ber.parseOctetString(ber.peekByte(), len));
} else {
- la.add(ber.parseStringWithTag(Ber.ASN_SIMPLE_STRING, isLdapv3, len));
+ la.add(ber.parseStringWithTag(
+ Ber.ASN_SIMPLE_STRING, isLdapv3, len));
}
return len[0];
}
private boolean isBinaryValued(String attrid,
Hashtable<String, Boolean> binaryAttrs) {
- String id = attrid.toLowerCase();
+ String id = attrid.toLowerCase(Locale.ENGLISH);
return ((id.indexOf(";binary") != -1) ||
defaultBinaryAttrs.containsKey(id) ||
@@ -753,8 +755,8 @@
}
// package entry point; used by Connection
- static void parseResult(BerDecoder replyBer, LdapResult res, boolean isLdapv3)
- throws IOException {
+ static void parseResult(BerDecoder replyBer, LdapResult res,
+ boolean isLdapv3) throws IOException {
res.status = replyBer.parseEnumeration();
res.matchedDN = replyBer.parseString(isLdapv3);
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapCtx.java Tue Aug 30 14:41:12 2011 +0100
@@ -33,6 +33,7 @@
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
+import java.util.Locale;
import java.util.Vector;
import java.util.Hashtable;
import java.util.List;
@@ -2597,7 +2598,7 @@
} else {
binaryAttrs = new Hashtable<>(11, 0.75f);
StringTokenizer tokens =
- new StringTokenizer(attrIds.toLowerCase(), " ");
+ new StringTokenizer(attrIds.toLowerCase(Locale.ENGLISH), " ");
while (tokens.hasMoreTokens()) {
binaryAttrs.put(tokens.nextToken(), Boolean.TRUE);
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapName.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapName.java Tue Aug 30 14:41:12 2011 +0100
@@ -28,6 +28,7 @@
import java.util.Enumeration;
import java.util.Vector;
+import java.util.Locale;
import javax.naming.*;
import javax.naming.directory.Attributes;
@@ -707,7 +708,7 @@
TypeAndValue that = (TypeAndValue)obj;
- int diff = type.toUpperCase().compareTo(that.type.toUpperCase());
+ int diff = type.compareToIgnoreCase(that.type);
if (diff != 0) {
return diff;
}
@@ -730,7 +731,7 @@
public int hashCode() {
// If two objects are equal, their hash codes must match.
- return (type.toUpperCase().hashCode() +
+ return (type.toUpperCase(Locale.ENGLISH).hashCode() +
getValueComparable().hashCode());
}
@@ -764,11 +765,12 @@
// cache result
if (binary) {
- comparable = value.toUpperCase();
+ comparable = value.toUpperCase(Locale.ENGLISH);
} else {
comparable = (String)unescapeValue(value);
if (!valueCaseSensitive) {
- comparable = comparable.toUpperCase(); // ignore case
+ // ignore case
+ comparable = comparable.toUpperCase(Locale.ENGLISH);
}
}
return comparable;
@@ -836,7 +838,7 @@
buf.append(Character.forDigit(0xF & b, 16));
}
- return (new String(buf)).toUpperCase();
+ return (new String(buf)).toUpperCase(Locale.ENGLISH);
}
/*
--- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapPoolManager.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapPoolManager.java Tue Aug 30 14:41:12 2011 +0100
@@ -28,6 +28,7 @@
import java.io.PrintStream;
import java.io.OutputStream;
import java.util.Hashtable;
+import java.util.Locale;
import java.util.StringTokenizer;
import javax.naming.ldap.Control;
@@ -133,7 +134,7 @@
String mech;
int p;
for (int i = 0; i < count; i++) {
- mech = parser.nextToken().toLowerCase();
+ mech = parser.nextToken().toLowerCase(Locale.ENGLISH);
if (mech.equals("anonymous")) {
mech = "none";
}
--- a/jdk/src/share/classes/com/sun/jndi/toolkit/dir/HierMemDirCtx.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/toolkit/dir/HierMemDirCtx.java Tue Aug 30 14:41:12 2011 +0100
@@ -910,7 +910,7 @@
public int hashCode() {
if (hashValue == -1) {
- String name = toString().toUpperCase();
+ String name = toString().toUpperCase(Locale.ENGLISH);
int len = name.length();
int off = 0;
char val[] = new char[len];
--- a/jdk/src/share/classes/com/sun/jndi/toolkit/dir/SearchFilter.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/jndi/toolkit/dir/SearchFilter.java Tue Aug 30 14:41:12 2011 +0100
@@ -29,6 +29,7 @@
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;
+import java.util.Locale;
/**
* A class for parsing LDAP search filters (defined in RFC 1960, 2254)
@@ -395,19 +396,21 @@
// do we need to begin with the first token?
if(proto.charAt(0) != WILDCARD_TOKEN &&
- !value.toString().toLowerCase().startsWith(
- subStrs.nextToken().toLowerCase())) {
- if(debug) {System.out.println("faild initial test");}
+ !value.toString().toLowerCase(Locale.ENGLISH).startsWith(
+ subStrs.nextToken().toLowerCase(Locale.ENGLISH))) {
+ if(debug) {
+ System.out.println("faild initial test");
+ }
return false;
}
-
while(subStrs.hasMoreTokens()) {
String currentStr = subStrs.nextToken();
if (debug) {System.out.println("looking for \"" +
currentStr +"\"");}
- currentPos = value.toLowerCase().indexOf(
- currentStr.toLowerCase(), currentPos);
+ currentPos = value.toLowerCase(Locale.ENGLISH).indexOf(
+ currentStr.toLowerCase(Locale.ENGLISH), currentPos);
+
if(currentPos == -1) {
return false;
}
--- a/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/com/sun/security/ntlm/NTLM.java Tue Aug 30 14:41:12 2011 +0100
@@ -33,6 +33,7 @@
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
+import java.util.Locale;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
@@ -410,7 +411,8 @@
static byte[] getP1(char[] password) {
try {
- return new String(password).toUpperCase().getBytes("ISO8859_1");
+ return new String(password).toUpperCase(
+ Locale.ENGLISH).getBytes("ISO8859_1");
} catch (UnsupportedEncodingException ex) {
return null;
}
--- a/jdk/src/share/classes/java/security/KeyRep.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/java/security/KeyRep.java Tue Aug 30 14:41:12 2011 +0100
@@ -26,6 +26,7 @@
package java.security;
import java.io.*;
+import java.util.Locale;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
@@ -137,7 +138,7 @@
this.type = type;
this.algorithm = algorithm;
- this.format = format.toUpperCase();
+ this.format = format.toUpperCase(Locale.ENGLISH);
this.encoded = encoded.clone();
}
--- a/jdk/src/share/classes/java/security/Security.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/java/security/Security.java Tue Aug 30 14:41:12 2011 +0100
@@ -1087,8 +1087,10 @@
// Check the keys for each provider.
for (Enumeration<Object> e = providers[i].keys();
e.hasMoreElements(); ) {
- String currentKey = ((String)e.nextElement()).toUpperCase();
- if (currentKey.startsWith(serviceName.toUpperCase())) {
+ String currentKey =
+ ((String)e.nextElement()).toUpperCase(Locale.ENGLISH);
+ if (currentKey.startsWith(
+ serviceName.toUpperCase(Locale.ENGLISH))) {
// We should skip the currentKey if it contains a
// whitespace. The reason is: such an entry in the
// provider property contains attributes for the
@@ -1096,7 +1098,8 @@
// in entries which lead to the implementation
// classes.
if (currentKey.indexOf(" ") < 0) {
- result.add(currentKey.substring(serviceName.length() + 1));
+ result.add(currentKey.substring(
+ serviceName.length() + 1));
}
}
}
--- a/jdk/src/share/classes/javax/naming/NameImpl.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/javax/naming/NameImpl.java Tue Aug 30 14:41:12 2011 +0100
@@ -25,6 +25,7 @@
package javax.naming;
+import java.util.Locale;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Properties;
@@ -216,7 +217,8 @@
}
private static boolean toBoolean(String name) {
- return ((name != null) && name.toLowerCase().equals("true"));
+ return ((name != null) &&
+ name.toLowerCase(Locale.ENGLISH).equals("true"));
}
private final void recordNamingConvention(Properties p) {
@@ -526,11 +528,14 @@
comp1 = comp1.trim();
comp2 = comp2.trim();
}
+
+ int local;
if (syntaxCaseInsensitive) {
- comp1 = comp1.toLowerCase();
- comp2 = comp2.toLowerCase();
+ local = comp1.compareToIgnoreCase(comp2);
+ } else {
+ local = comp1.compareTo(comp2);
}
- int local = comp1.compareTo(comp2);
+
if (local != 0) {
return local;
}
@@ -696,7 +701,7 @@
comp = comp.trim();
}
if (syntaxCaseInsensitive) {
- comp = comp.toLowerCase();
+ comp = comp.toLowerCase(Locale.ENGLISH);
}
hash += comp.hashCode();
--- a/jdk/src/share/classes/javax/naming/directory/BasicAttributes.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/javax/naming/directory/BasicAttributes.java Tue Aug 30 14:41:12 2011 +0100
@@ -28,6 +28,7 @@
import java.util.Hashtable;
import java.util.Enumeration;
+import java.util.Locale;
import javax.naming.NamingException;
import javax.naming.NamingEnumeration;
@@ -160,7 +161,7 @@
public Attribute get(String attrID) {
Attribute attr = attrs.get(
- ignoreCase ? attrID.toLowerCase() : attrID);
+ ignoreCase ? attrID.toLowerCase(Locale.ENGLISH) : attrID);
return (attr);
}
@@ -179,13 +180,13 @@
public Attribute put(Attribute attr) {
String id = attr.getID();
if (ignoreCase) {
- id = id.toLowerCase();
+ id = id.toLowerCase(Locale.ENGLISH);
}
return attrs.put(id, attr);
}
public Attribute remove(String attrID) {
- String id = (ignoreCase ? attrID.toLowerCase() : attrID);
+ String id = (ignoreCase ? attrID.toLowerCase(Locale.ENGLISH) : attrID);
return attrs.remove(id);
}
--- a/jdk/src/share/classes/javax/naming/ldap/Rdn.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/javax/naming/ldap/Rdn.java Tue Aug 30 14:41:12 2011 +0100
@@ -28,6 +28,7 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.ArrayList;
+import java.util.Locale;
import java.util.Collections;
import javax.naming.InvalidNameException;
@@ -434,8 +435,7 @@
}
public int compareTo(RdnEntry that) {
- int diff = type.toUpperCase().compareTo(
- that.type.toUpperCase());
+ int diff = type.compareToIgnoreCase(that.type);
if (diff != 0) {
return diff;
}
@@ -462,7 +462,7 @@
}
public int hashCode() {
- return (type.toUpperCase().hashCode() +
+ return (type.toUpperCase(Locale.ENGLISH).hashCode() +
getValueComparable().hashCode());
}
@@ -479,7 +479,7 @@
if (value instanceof byte[]) {
comparable = escapeBinaryValue((byte[]) value);
} else {
- comparable = ((String) value).toUpperCase();
+ comparable = ((String) value).toUpperCase(Locale.ENGLISH);
}
return comparable;
}
@@ -569,7 +569,6 @@
builder.append(Character.forDigit(0xF & b, 16));
}
return builder.toString();
- // return builder.toString().toUpperCase();
}
/**
--- a/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java Tue Aug 30 14:41:12 2011 +0100
@@ -35,6 +35,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.Provider;
+import java.util.Locale;
/**
* Implements the GSSNameSpi for the krb5 mechanism.
@@ -184,7 +185,7 @@
} catch (UnknownHostException e) {
// use hostname as it is
}
- hostName = hostName.toLowerCase();
+ hostName = hostName.toLowerCase(Locale.ENGLISH);
temp = temp.append('/').append(hostName);
return temp.toString();
--- a/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/krb5/PrincipalName.java Tue Aug 30 14:41:12 2011 +0100
@@ -35,6 +35,7 @@
import sun.security.util.*;
import java.net.*;
import java.util.Vector;
+import java.util.Locale;
import java.io.IOException;
import java.math.BigInteger;
import sun.security.krb5.internal.ccache.CCacheOutputStream;
@@ -389,14 +390,14 @@
// Looks if canonicalized is a longer format of hostName,
// we accept cases like
// bunny -> bunny.rabbit.hole
- if (canonicalized.toLowerCase()
- .startsWith(hostName.toLowerCase()+".")) {
+ if (canonicalized.toLowerCase(Locale.ENGLISH).startsWith(
+ hostName.toLowerCase(Locale.ENGLISH)+".")) {
hostName = canonicalized;
}
} catch (UnknownHostException e) {
// no canonicalization, use old
}
- nameParts[1] = hostName.toLowerCase();
+ nameParts[1] = hostName.toLowerCase(Locale.ENGLISH);
}
nameStrings = nameParts;
nameType = type;
--- a/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java Tue Aug 30 14:41:12 2011 +0100
@@ -219,7 +219,7 @@
public Key engineGetKey(String alias, char[] password)
throws NoSuchAlgorithmException, UnrecoverableKeyException
{
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
Key key = null;
if (entry == null) {
@@ -296,7 +296,7 @@
* <i>key entry</i> without a certificate chain).
*/
public Certificate[] engineGetCertificateChain(String alias) {
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
if (entry != null) {
if (entry.chain == null) {
return null;
@@ -324,7 +324,7 @@
* does not contain a certificate.
*/
public Certificate engineGetCertificate(String alias) {
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
if (entry != null) {
if (entry.chain == null) {
return null;
@@ -345,7 +345,7 @@
* not exist
*/
public Date engineGetCreationDate(String alias) {
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
if (entry != null) {
return new Date(entry.date.getTime());
} else {
@@ -409,10 +409,10 @@
// set the keyId to current date
entry.keyId = ("Time " + (entry.date).getTime()).getBytes("UTF8");
// set the alias
- entry.alias = alias.toLowerCase();
+ entry.alias = alias.toLowerCase(Locale.ENGLISH);
// add the entry
- entries.put(alias.toLowerCase(), entry);
+ entries.put(alias.toLowerCase(Locale.ENGLISH), entry);
} catch (Exception nsae) {
throw new KeyStoreException("Key protection " +
" algorithm not found: " + nsae, nsae);
@@ -465,7 +465,7 @@
// Won't happen
}
// set the alias
- entry.alias = alias.toLowerCase();
+ entry.alias = alias.toLowerCase(Locale.ENGLISH);
entry.protectedPrivKey = key.clone();
if (chain != null) {
@@ -473,7 +473,7 @@
}
// add the entry
- entries.put(alias.toLowerCase(), entry);
+ entries.put(alias.toLowerCase(Locale.ENGLISH), entry);
}
@@ -618,7 +618,7 @@
public synchronized void engineSetCertificateEntry(String alias,
Certificate cert) throws KeyStoreException
{
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
if (entry != null) {
throw new KeyStoreException("Cannot overwrite own certificate");
} else
@@ -635,7 +635,7 @@
public synchronized void engineDeleteEntry(String alias)
throws KeyStoreException
{
- entries.remove(alias.toLowerCase());
+ entries.remove(alias.toLowerCase(Locale.ENGLISH));
}
/**
@@ -655,7 +655,7 @@
* @return true if the alias exists, false otherwise
*/
public boolean engineContainsAlias(String alias) {
- return entries.containsKey(alias.toLowerCase());
+ return entries.containsKey(alias.toLowerCase(Locale.ENGLISH));
}
/**
@@ -675,7 +675,7 @@
* <i>key entry</i>, false otherwise.
*/
public boolean engineIsKeyEntry(String alias) {
- KeyEntry entry = entries.get(alias.toLowerCase());
+ KeyEntry entry = entries.get(alias.toLowerCase(Locale.ENGLISH));
if (entry != null) {
return true;
} else {
@@ -1274,7 +1274,8 @@
if (password != null && s.available() > 0) {
MacData macData = new MacData(s);
try {
- String algName = macData.getDigestAlgName().toUpperCase();
+ String algName =
+ macData.getDigestAlgName().toUpperCase(Locale.ENGLISH);
if (algName.equals("SHA") ||
algName.equals("SHA1") ||
algName.equals("SHA-1")) {
@@ -1479,7 +1480,7 @@
if (alias == null)
alias = getUnfriendlyName();
entry.alias = alias;
- entries.put(alias.toLowerCase(), entry);
+ entries.put(alias.toLowerCase(Locale.ENGLISH), entry);
} else if (bagItem instanceof X509Certificate) {
X509Certificate cert = (X509Certificate)bagItem;
// Insert a localKeyID for the corresponding cert
--- a/jdk/src/share/classes/sun/security/provider/JavaKeyStore.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/provider/JavaKeyStore.java Tue Aug 30 14:41:12 2011 +0100
@@ -54,7 +54,7 @@
// regular JKS
public static final class JKS extends JavaKeyStore {
String convertAlias(String alias) {
- return alias.toLowerCase();
+ return alias.toLowerCase(Locale.ENGLISH);
}
}
--- a/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java Tue Aug 30 14:41:12 2011 +0100
@@ -879,7 +879,8 @@
if (hashCode == 0) {
int result = 17;
result = 37*result + getPort();
- result = 37*result + getServerName().toLowerCase().hashCode();
+ result = 37*result +
+ getServerName().toLowerCase(Locale.ENGLISH).hashCode();
hashCode = result;
}
return hashCode;
--- a/jdk/src/share/classes/sun/security/ssl/SSLSessionContextImpl.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/ssl/SSLSessionContextImpl.java Tue Aug 30 14:41:12 2011 +0100
@@ -33,6 +33,7 @@
import java.util.Hashtable;
import java.util.NoSuchElementException;
import java.util.Vector;
+import java.util.Locale;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSessionContext;
@@ -166,7 +167,8 @@
}
private String getKey(String hostname, int port) {
- return (hostname + ":" + String.valueOf(port)).toLowerCase();
+ return (hostname + ":" +
+ String.valueOf(port)).toLowerCase(Locale.ENGLISH);
}
// cache a SSLSession
--- a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java Tue Aug 30 14:41:12 2011 +0100
@@ -25,6 +25,8 @@
package sun.security.tools;
+import java.util.Locale;
+
/**
* <p> This class provides several utilities to <code>KeyStore</code>.
*
@@ -63,7 +65,7 @@
} else if(storetype.equalsIgnoreCase("Windows-ROOT")) {
return "Windows-ROOT";
} else {
- return storetype.toUpperCase();
+ return storetype.toUpperCase(Locale.ENGLISH);
}
}
}
--- a/jdk/src/share/classes/sun/security/util/HostnameChecker.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/util/HostnameChecker.java Tue Aug 30 14:41:12 2011 +0100
@@ -266,8 +266,8 @@
*/
private static boolean matchAllWildcards(String name,
String template) {
- name = name.toLowerCase();
- template = template.toLowerCase();
+ name = name.toLowerCase(Locale.ENGLISH);
+ template = template.toLowerCase(Locale.ENGLISH);
StringTokenizer nameSt = new StringTokenizer(name, ".");
StringTokenizer templateSt = new StringTokenizer(template, ".");
@@ -296,8 +296,8 @@
*/
private static boolean matchLeftmostWildcard(String name,
String template) {
- name = name.toLowerCase();
- template = template.toLowerCase();
+ name = name.toLowerCase(Locale.ENGLISH);
+ template = template.toLowerCase(Locale.ENGLISH);
// Retreive leftmost component
int templateIdx = template.indexOf(".");
--- a/jdk/src/share/classes/sun/security/x509/AVA.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/x509/AVA.java Tue Aug 30 14:41:12 2011 +0100
@@ -42,7 +42,7 @@
* X.500 Attribute-Value-Assertion (AVA): an attribute, as identified by
* some attribute ID, has some particular value. Values are as a rule ASN.1
* printable strings. A conventional set of type IDs is recognized when
- * parsing (and generating) RFC 1779 or RFC 2253 syntax strings.
+ * parsing (and generating) RFC 1779, 2253 or 4514 syntax strings.
*
* <P>AVAs are components of X.500 relative names. Think of them as being
* individual fields of a database record. The attribute ID is how you
@@ -92,18 +92,20 @@
* Leading and trailing spaces, also multiple internal spaces, also
* call for quoting the whole string.
*/
- private static final String specialChars = ",+=\n<>#;";
+ private static final String specialChars1779 = ",=\n+<>#;\\\"";
/*
* In RFC2253, if the value has any of these characters in it, it
* must be quoted by a preceding \.
*/
- private static final String specialChars2253 = ",+\"\\<>;";
+ private static final String specialChars2253 = ",=+<>#;\\\"";
/*
- * includes special chars from RFC1779 and RFC2253, as well as ' '
+ * includes special chars from RFC1779 and RFC2253, as well as ' ' from
+ * RFC 4514.
*/
- private static final String specialCharsAll = ",=\n+<>#;\\\" ";
+ private static final String specialCharsDefault = ",=\n+<>#;\\\" ";
+ private static final String escapedDefault = ",+<>;\"";
/*
* Values that aren't printable strings are emitted as BER-encoded
@@ -120,26 +122,26 @@
}
/**
- * Parse an RFC 1779 or RFC 2253 style AVA string: CN=fee fie foe fum
+ * Parse an RFC 1779, 2253 or 4514 style AVA string: CN=fee fie foe fum
* or perhaps with quotes. Not all defined AVA tags are supported;
* of current note are X.400 related ones (PRMD, ADMD, etc).
*
* This terminates at unescaped AVA separators ("+") or RDN
- * separators (",", ";"), or DN terminators (">"), and removes
- * cosmetic whitespace at the end of values.
+ * separators (",", ";"), and removes cosmetic whitespace at the end of
+ * values.
*/
AVA(Reader in) throws IOException {
this(in, DEFAULT);
}
/**
- * Parse an RFC 1779 or RFC 2253 style AVA string: CN=fee fie foe fum
+ * Parse an RFC 1779, 2253 or 4514 style AVA string: CN=fee fie foe fum
* or perhaps with quotes. Additional keywords can be specified in the
* keyword/OID map.
*
* This terminates at unescaped AVA separators ("+") or RDN
- * separators (",", ";"), or DN terminators (">"), and removes
- * cosmetic whitespace at the end of values.
+ * separators (",", ";"), and removes cosmetic whitespace at the end of
+ * values.
*/
AVA(Reader in, Map<String, String> keywordMap) throws IOException {
this(in, DEFAULT, keywordMap);
@@ -147,9 +149,6 @@
/**
* Parse an AVA string formatted according to format.
- *
- * XXX format RFC1779 should only allow RFC1779 syntax but is
- * actually DEFAULT with RFC1779 keywords.
*/
AVA(Reader in, int format) throws IOException {
this(in, format, Collections.<String, String>emptyMap());
@@ -158,9 +157,6 @@
/**
* Parse an AVA string formatted according to format.
*
- * XXX format RFC1779 should only allow RFC1779 syntax but is
- * actually DEFAULT with RFC1779 keywords.
- *
* @param in Reader containing AVA String
* @param format parsing format
* @param keywordMap a Map where a keyword String maps to a corresponding
@@ -168,11 +164,11 @@
* If an entry does not exist, it will fallback to the builtin
* keyword/OID mapping.
* @throws IOException if the AVA String is not valid in the specified
- * standard or an OID String from the keywordMap is improperly formatted
+ * format or an OID String from the keywordMap is improperly formatted
*/
AVA(Reader in, int format, Map<String, String> keywordMap)
throws IOException {
- // assume format is one of DEFAULT, RFC1779, RFC2253
+ // assume format is one of DEFAULT or RFC2253
StringBuilder temp = new StringBuilder();
int c;
@@ -193,7 +189,7 @@
/*
* Now parse the value. "#hex", a quoted string, or a string
- * terminated by "+", ",", ";", ">". Whitespace before or after
+ * terminated by "+", ",", ";". Whitespace before or after
* the value is stripped away unless format is RFC2253.
*/
temp.setLength(0);
@@ -202,7 +198,7 @@
c = in.read();
if (c == ' ') {
throw new IOException("Incorrect AVA RFC2253 format - " +
- "leading space must be escaped");
+ "leading space must be escaped");
}
} else {
// read next character skipping whitespace
@@ -331,8 +327,7 @@
continue;
}
- if (c != '\\' && c != '"' &&
- specialChars.indexOf((char)c) < 0) {
+ if (specialChars1779.indexOf((char)c) < 0) {
throw new IOException
("Invalid escaped character in AVA: " +
(char)c);
@@ -386,7 +381,7 @@
private DerValue parseString
(Reader in, int c, int format, StringBuilder temp) throws IOException {
- List<Byte> embeddedHex = new ArrayList<Byte>();
+ List<Byte> embeddedHex = new ArrayList<>();
boolean isPrintableString = true;
boolean escape = false;
boolean leadingChar = true;
@@ -413,24 +408,19 @@
}
// check if character was improperly escaped
- if ((format == DEFAULT &&
- specialCharsAll.indexOf((char)c) == -1) ||
- (format == RFC1779 &&
- specialChars.indexOf((char)c) == -1 &&
- c != '\\' && c != '\"')) {
-
+ if (format == DEFAULT &&
+ specialCharsDefault.indexOf((char)c) == -1) {
throw new IOException
("Invalid escaped character in AVA: '" +
(char)c + "'");
-
} else if (format == RFC2253) {
if (c == ' ') {
// only leading/trailing space can be escaped
if (!leadingChar && !trailingSpace(in)) {
- throw new IOException
- ("Invalid escaped space character " +
- "in AVA. Only a leading or trailing " +
- "space character can be escaped.");
+ throw new IOException
+ ("Invalid escaped space character " +
+ "in AVA. Only a leading or trailing " +
+ "space character can be escaped.");
}
} else if (c == '#') {
// only leading '#' can be escaped
@@ -443,18 +433,20 @@
throw new IOException
("Invalid escaped character in AVA: '" +
(char)c + "'");
-
}
}
-
} else {
// check if character should have been escaped
if (format == RFC2253) {
if (specialChars2253.indexOf((char)c) != -1) {
throw new IOException
("Character '" + (char)c +
- "' in AVA appears without escape");
+ "' in AVA appears without escape");
}
+ } else if (escapedDefault.indexOf((char)c) != -1) {
+ throw new IOException
+ ("Character '" + (char)c +
+ "' in AVA appears without escape");
}
}
@@ -551,7 +543,6 @@
case ',':
return true;
case ';':
- case '>':
return format != RFC2253;
default:
return false;
@@ -1204,18 +1195,6 @@
* Get an object identifier representing the specified keyword (or
* string encoded object identifier) in the given standard.
*
- * @throws IOException If the keyword is not valid in the specified standard
- */
- static ObjectIdentifier getOID(String keyword, int standard)
- throws IOException {
- return getOID
- (keyword, standard, Collections.<String, String>emptyMap());
- }
-
- /**
- * Get an object identifier representing the specified keyword (or
- * string encoded object identifier) in the given standard.
- *
* @param keywordMap a Map where a keyword String maps to a corresponding
* OID String. Each AVA keyword will be mapped to the corresponding OID.
* If an entry does not exist, it will fallback to the builtin
@@ -1249,19 +1228,11 @@
return new ObjectIdentifier(oidString);
}
- // no keyword found or not standard compliant, check if OID string
+ // no keyword found, check if OID string
+ if (standard == AVA.DEFAULT && keyword.startsWith("OID.")) {
+ keyword = keyword.substring(4);
+ }
- // RFC1779 requires, DEFAULT allows OID. prefix
- if (standard == AVA.RFC1779) {
- if (keyword.startsWith("OID.") == false) {
- throw new IOException("Invalid RFC1779 keyword: " + keyword);
- }
- keyword = keyword.substring(4);
- } else if (standard == AVA.DEFAULT) {
- if (keyword.startsWith("OID.")) {
- keyword = keyword.substring(4);
- }
- }
boolean number = false;
if (keyword.length() != 0) {
char ch = keyword.charAt(0);
--- a/jdk/src/share/classes/sun/security/x509/DNSName.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/x509/DNSName.java Tue Aug 30 14:41:12 2011 +0100
@@ -159,7 +159,7 @@
* @return a hash code value for this object.
*/
public int hashCode() {
- return name.toUpperCase().hashCode();
+ return name.toUpperCase(Locale.ENGLISH).hashCode();
}
/**
--- a/jdk/src/share/classes/sun/security/x509/RFC822Name.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/x509/RFC822Name.java Tue Aug 30 14:41:12 2011 +0100
@@ -153,7 +153,7 @@
* @return a hash code value for this object.
*/
public int hashCode() {
- return name.toUpperCase().hashCode();
+ return name.toUpperCase(Locale.ENGLISH).hashCode();
}
/**
--- a/jdk/src/share/classes/sun/security/x509/X500Name.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/src/share/classes/sun/security/x509/X500Name.java Tue Aug 30 14:41:12 2011 +0100
@@ -142,9 +142,9 @@
/**
* Constructs a name from a conventionally formatted string, such
* as "CN=Dave, OU=JavaSoft, O=Sun Microsystems, C=US".
- * (RFC 1779 or RFC 2253 style).
+ * (RFC 1779, 2253, or 4514 style).
*
- * @param DN X.500 Distinguished Name
+ * @param dname the X.500 Distinguished Name
*/
public X500Name(String dname) throws IOException {
this(dname, Collections.<String, String>emptyMap());
@@ -153,9 +153,9 @@
/**
* Constructs a name from a conventionally formatted string, such
* as "CN=Dave, OU=JavaSoft, O=Sun Microsystems, C=US".
- * (RFC 1779 or RFC 2253 style).
+ * (RFC 1779, 2253, or 4514 style).
*
- * @param DN X.500 Distinguished Name
+ * @param dname the X.500 Distinguished Name
* @param keywordMap an additional keyword/OID map
*/
public X500Name(String dname, Map<String, String> keywordMap)
@@ -167,10 +167,11 @@
* Constructs a name from a string formatted according to format.
* Currently, the formats DEFAULT and RFC2253 are supported.
* DEFAULT is the default format used by the X500Name(String)
- * constructor. RFC2253 is format strictly according to RFC2253
+ * constructor. RFC2253 is the format strictly according to RFC2253
* without extensions.
*
- * @param DN X.500 Distinguished Name
+ * @param dname the X.500 Distinguished Name
+ * @param format the specified format of the String DN
*/
public X500Name(String dname, String format) throws IOException {
if (dname == null) {
@@ -865,8 +866,8 @@
* O="Sue, Grabbit and Runn" or
* O=Sue\, Grabbit and Runn
*
- * This method can parse 1779 or 2253 DNs and non-standard 3280 keywords.
- * Additional keywords can be specified in the keyword/OID map.
+ * This method can parse RFC 1779, 2253 or 4514 DNs and non-standard 3280
+ * keywords. Additional keywords can be specified in the keyword/OID map.
*/
private void parseDN(String input, Map<String, String> keywordMap)
throws IOException {
@@ -875,7 +876,7 @@
return;
}
- List<RDN> dnVector = new ArrayList<RDN>();
+ List<RDN> dnVector = new ArrayList<>();
int dnOffset = 0;
int rdnEnd;
String rdnString;
@@ -945,52 +946,51 @@
if (dnString.length() == 0) {
names = new RDN[0];
return;
- }
-
- List<RDN> dnVector = new ArrayList<RDN>();
- int dnOffset = 0;
- String rdnString;
+ }
- int searchOffset = 0;
- int rdnEnd = dnString.indexOf(',');
- while (rdnEnd >=0) {
- /*
- * We have encountered an RDN delimiter (comma).
- * If the comma in the RDN under consideration is
- * preceded by a backslash (escape), it
- * is part of the RDN. Otherwise, it is used as a separator, to
- * delimit the RDN under consideration from any subsequent RDNs.
- */
- if (rdnEnd > 0 && !escaped(rdnEnd, searchOffset, dnString)) {
+ List<RDN> dnVector = new ArrayList<>();
+ int dnOffset = 0;
+ String rdnString;
+ int searchOffset = 0;
+ int rdnEnd = dnString.indexOf(',');
+ while (rdnEnd >=0) {
+ /*
+ * We have encountered an RDN delimiter (comma).
+ * If the comma in the RDN under consideration is
+ * preceded by a backslash (escape), it
+ * is part of the RDN. Otherwise, it is used as a separator, to
+ * delimit the RDN under consideration from any subsequent RDNs.
+ */
+ if (rdnEnd > 0 && !escaped(rdnEnd, searchOffset, dnString)) {
- /*
- * Comma is a separator
- */
- rdnString = dnString.substring(dnOffset, rdnEnd);
+ /*
+ * Comma is a separator
+ */
+ rdnString = dnString.substring(dnOffset, rdnEnd);
- // Parse RDN, and store it in vector
- RDN rdn = new RDN(rdnString, "RFC2253");
- dnVector.add(rdn);
+ // Parse RDN, and store it in vector
+ RDN rdn = new RDN(rdnString, "RFC2253");
+ dnVector.add(rdn);
- // Increase the offset
- dnOffset = rdnEnd + 1;
- }
+ // Increase the offset
+ dnOffset = rdnEnd + 1;
+ }
- searchOffset = rdnEnd + 1;
- rdnEnd = dnString.indexOf(',', searchOffset);
- }
+ searchOffset = rdnEnd + 1;
+ rdnEnd = dnString.indexOf(',', searchOffset);
+ }
- // Parse last or only RDN, and store it in vector
- rdnString = dnString.substring(dnOffset);
- RDN rdn = new RDN(rdnString, "RFC2253");
- dnVector.add(rdn);
+ // Parse last or only RDN, and store it in vector
+ rdnString = dnString.substring(dnOffset);
+ RDN rdn = new RDN(rdnString, "RFC2253");
+ dnVector.add(rdn);
- /*
- * Store the vector elements as an array of RDNs
- * NOTE: It's only on output that little-endian ordering is used.
- */
- Collections.reverse(dnVector);
- names = dnVector.toArray(new RDN[dnVector.size()]);
+ /*
+ * Store the vector elements as an array of RDNs
+ * NOTE: It's only on output that little-endian ordering is used.
+ */
+ Collections.reverse(dnVector);
+ names = dnVector.toArray(new RDN[dnVector.size()]);
}
/*
--- a/jdk/test/Makefile Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/test/Makefile Tue Aug 30 14:41:12 2011 +0100
@@ -535,7 +535,7 @@
# Stable othervm testruns (minus items from PROBLEM_LIST)
# Using samevm has serious problems with these tests
JDK_ALL_TARGETS += jdk_security2
-jdk_security2: $(call TestDirs, javax/crypto com/sun/crypto)
+jdk_security2: $(call TestDirs, javax/crypto javax/xml/crypto com/sun/crypto)
$(call RunSamevmBatch)
# Stable othervm testruns (minus items from PROBLEM_LIST)
--- a/jdk/test/javax/naming/ldap/LdapName/CompareToEqualsTests.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/test/javax/naming/ldap/LdapName/CompareToEqualsTests.java Tue Aug 30 14:41:12 2011 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,12 +23,14 @@
/*
* @test
- * @bug 4635618
+ * @bug 4635618 7059542
* @summary Support for manipulating LDAP Names
+ * JNDI name operations should be locale independent
*/
import javax.naming.ldap.*;
import java.util.ArrayList;
+import java.util.Locale;
import java.util.List;
import javax.naming.InvalidNameException;
@@ -39,52 +41,61 @@
public static void main(String args[])
throws Exception {
-
- /**
- * Test cases:
- * 1) Same RDNs.
- * 2) same RDN sequence with an AVA ordered differently.
- * 3) RDN sequences of a differing AVA.
- * 4) RDN sequence of different length.
- * 5) RDN sequence of different Case.
- * 6) Matching binary return values.
- * 7) Binary values that don't match.
- */
- String names1[] = new String [] {
+ Locale reservedLocale = Locale.getDefault();
+ try {
+ /**
+ * Test cases:
+ * 1) Same RDNs.
+ * 2) same RDN sequence with an AVA ordered differently.
+ * 3) RDN sequences of a differing AVA.
+ * 4) RDN sequence of different length.
+ * 5) RDN sequence of different Case.
+ * 6) Matching binary return values.
+ * 7) Binary values that don't match.
+ */
+ String names1[] = new String [] {
"ou=Sales+cn=Bob", "ou=Sales+cn=Bob", "ou=Sales+cn=Bob",
"ou=Sales+cn=Scott+c=US", "cn=config"};
- String names2[] = new String [] {
+ String names2[] = new String [] {
"ou=Sales+cn=Bob", "cn=Bob+ou=Sales", "ou=Sales+cn=Scott",
"ou=Sales+cn=Scott", "Cn=COnFIG"};
- int expectedResults[] = {0, 0, -1, -1, 0};
-
+ int expectedResults[] = {0, 0, -1, -1, 0};
- for (int i = 0; i < names1.length; i++) {
- checkResults(new LdapName(names1[i]),
+ for (Locale locale : Locale.getAvailableLocales()) {
+ // reset the default locale
+ Locale.setDefault(locale);
+
+ for (int i = 0; i < names1.length; i++) {
+ checkResults(new LdapName(names1[i]),
new LdapName(names2[i]), expectedResults[i]);
- }
+ }
- byte[] value = "abcxyz".getBytes();
- Rdn rdn1 = new Rdn("binary", value);
- ArrayList rdns1 = new ArrayList();
- rdns1.add(rdn1);
- LdapName l1 = new LdapName(rdns1);
+ byte[] value = "abcxyz".getBytes();
+ Rdn rdn1 = new Rdn("binary", value);
+ ArrayList rdns1 = new ArrayList();
+ rdns1.add(rdn1);
+ LdapName l1 = new LdapName(rdns1);
- Rdn rdn2 = new Rdn("binary", value);
- ArrayList rdns2 = new ArrayList();
- rdns2.add(rdn2);
- LdapName l2 = new LdapName(rdns2);
- checkResults(l1, l2, 0);
+ Rdn rdn2 = new Rdn("binary", value);
+ ArrayList rdns2 = new ArrayList();
+ rdns2.add(rdn2);
+ LdapName l2 = new LdapName(rdns2);
+ checkResults(l1, l2, 0);
+
+ l2 = new LdapName("binary=#61626378797A");
+ checkResults(l1, l2, 0);
- l2 = new LdapName("binary=#61626378797A");
- checkResults(l1, l2, 0);
+ l2 = new LdapName("binary=#61626378797B");
+ checkResults(l1, l2, -1);
- l2 = new LdapName("binary=#61626378797B");
- checkResults(l1, l2, -1);
-
- System.out.println("Tests passed");
+ System.out.println("Tests passed");
+ }
+ } finally {
+ // restore the reserved locale
+ Locale.setDefault(reservedLocale);
+ }
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/x500/X500Principal/Parse.java Tue Aug 30 14:41:12 2011 +0100
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7024771
+ * @summary various X500Principal DN parsing tests
+ */
+
+import javax.security.auth.x500.X500Principal;
+
+public class Parse {
+
+ private static TestCase[] testCases = {
+ new TestCase("CN=prefix\\<>suffix", false)
+ };
+
+ public static void main(String args[]) throws Exception {
+ for (int i = 0; i < testCases.length; i++) {
+ testCases[i].run();
+ }
+ System.out.println("Test completed ok.");
+ }
+}
+
+class TestCase {
+
+ private String name;
+ private boolean expectedResult;
+
+ TestCase(String name, boolean expectedResult) {
+ this.name = name;
+ this.expectedResult = expectedResult;
+ }
+
+ void run() throws Exception {
+ Exception f = null;
+ try {
+ System.out.println("Parsing: \"" + name + "\"");
+ new X500Principal(name);
+ if (expectedResult == false) {
+ f = new Exception("Successfully parsed invalid name");
+ }
+ } catch (IllegalArgumentException e) {
+ if (expectedResult == true) {
+ throw e;
+ }
+ }
+ if (f != null) {
+ throw f;
+ }
+ }
+}
--- a/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java Tue Aug 30 14:40:05 2011 +0100
+++ b/jdk/test/javax/xml/crypto/dsig/SecurityManager/XMLDSigWithSecMgr.java Tue Aug 30 14:41:12 2011 +0100
@@ -26,6 +26,7 @@
* @bug 6436919 6460930
* @summary check that XML Signatures can be generated and validated with
* SecurityManager enabled and default policy
+ * @run main/othervm XMLDSigWithSecMgr
* @author Sean Mullan
*/
import java.io.*;