You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by qi...@apache.org on 2009/07/15 09:30:02 UTC
svn commit: r794164 - in /harmony/enhanced/classlib/trunk/modules/jndi/src:
main/java/javax/naming/ main/java/org/apache/harmony/jndi/internal/parser/
test/java/org/apache/harmony/jndi/tests/javax/naming/
test/java/org/apache/harmony/jndi/tests/javax/n...
Author: qiuxx
Date: Wed Jul 15 07:30:02 2009
New Revision: 794164
URL: http://svn.apache.org/viewvc?rev=794164&view=rev
Log:
Apply patch for jndi, fix behavior differences while parsing LdapName and CompositeName who contain some meta characters.
Modified:
harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/CompositeName.java
harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapNameParser.java
harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java
harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/CompositeNameTest.java
harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/LdapNameTest.java
Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/CompositeName.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/CompositeName.java?rev=794164&r1=794163&r2=794164&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/CompositeName.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/CompositeName.java Wed Jul 15 07:30:02 2009
@@ -308,7 +308,6 @@
* Format name elements to its string representation.
*/
private static String formatName(Vector<String> elems) {
-
// special case: all empty elements
if (isAllEmptyElements(elems)) {
StringBuilder buf = new StringBuilder();
@@ -325,17 +324,14 @@
if (i > 0) {
buf.append("/"); //$NON-NLS-1$
}
- if (elem.indexOf('/') < 0 && elem.indexOf('\\') < 0
- && elem.indexOf('"') < 0) {
+
+ // Add quotation while elem contains separater char
+ if (elem.indexOf('/') != -1){
+ buf.append("\"");
+ buf.append(elem);
+ buf.append("\"");
+ }else{
buf.append(elem);
- } else {
- char chars[] = elem.toCharArray();
- for (char c : chars) {
- if (c == '/' || c == '\\' || c == '"') {
- buf.append('\\');
- }
- buf.append(c);
- }
}
}
return buf.toString();
Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapNameParser.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapNameParser.java?rev=794164&r1=794163&r2=794164&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapNameParser.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapNameParser.java Wed Jul 15 07:30:02 2009
@@ -70,9 +70,33 @@
throw new InvalidNameException("Invalid name: " + s);
}
+ int mark = 0;
+ boolean isInQuote = false;
for (int i = 0; i < c.length; i++) {
- if ((c[i] == ',' || c[i] == ';') && c[i - 1] != '\\') {
-
+ if (c[i] == '\"' && i > 0 && c[i-1] != '\\'){
+ if (isInQuote){
+ isInQuote = false;
+ continue;
+ }else{
+ isInQuote = true;
+ // Record quotation mark's location in case it is a single one
+ mark = i+1;
+ continue;
+ }
+ }
+
+ // Ignore quoted string
+ if (isInQuote) {
+ if (i == c.length -1){
+ // if the last quotation mark is a single one, ignored it.
+ // and rescan the chars at the marked location.
+ i = mark;
+ isInQuote = false;
+ }
+ continue;
+ }
+
+ if ((c[i] == ',' || c[i] == ';') && i > 0 && c[i - 1] != '\\') {
String sub = s.substring(from, i);
if (sub.equals("")) {
throw new InvalidNameException("Invalid name: " + s);
Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java?rev=794164&r1=794163&r2=794164&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/org/apache/harmony/jndi/internal/parser/LdapRdnParser.java Wed Jul 15 07:30:02 2009
@@ -44,7 +44,7 @@
* Constructor
*/
public LdapRdnParser(String name) {
- if (name.endsWith("+")) {
+ if (name.endsWith("+") && name.length() > 1 && name.charAt(name.length()-2) != '\\') {
this.name = name.substring(0, name.lastIndexOf('+'));
} else {
this.name = name;
Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/CompositeNameTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/CompositeNameTest.java?rev=794164&r1=794163&r2=794164&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/CompositeNameTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/CompositeNameTest.java Wed Jul 15 07:30:02 2009
@@ -153,6 +153,66 @@
assertEquals("test's", new CompositeName("test's").toString());
assertEquals("test", new CompositeName("'test'").toString());
+
+ name = new CompositeName("O=\"s,g");
+ assertEquals("O=\"s,g", name.toString());
+
+ name = new CompositeName("\"O=/s\"");
+ assertEquals("O=/s", name.get(0));
+
+ name.add("s/s");
+ assertEquals(2, name.size());
+ assertEquals("\"O=/s\"/\"s/s\"", name.toString());
+
+ name.add("ss");
+ assertEquals(3, name.size());
+ assertEquals("\"O=/s\"/\"s/s\"/ss", name.toString());
+
+ name = new CompositeName("\"O=\\s\"");
+ assertEquals("O=\\s", name.toString());
+
+ CompositeName name = new CompositeName("");
+ name.add("abc/abc");
+ assertEquals(1, name.size());
+
+ CompositeName newCompositeName = new CompositeName(name.toString());
+ assertEquals(1, newCompositeName.size());
+ assertEquals(newCompositeName, name);
+
+ name = new CompositeName("O=\"s,g\"");
+ assertEquals("O=\"s,g\"", name.toString());
+
+ name = new CompositeName("O=#");
+ assertEquals("O=#", name.toString());
+
+ name = new CompositeName("O=\\s");
+ assertEquals("O=\\s", name.toString());
+
+ name = new CompositeName("\"O=\\s\"");
+ assertEquals("O=\\s", name.toString());
+
+ name = new CompositeName("O=/s");
+ assertEquals("O=/s", name.toString());
+
+ name = new CompositeName("\"O=\"/\"s\"");
+ assertEquals(2,name.size());
+ assertEquals("O=/s", name.toString());
+
+ name = new CompositeName("");
+ assertEquals(0,name.size());
+ assertEquals("", name.toString());
+
+ name = new CompositeName("\"\"");
+ assertEquals(1,name.size());
+ assertEquals("/", name.toString());
+
+ name = new CompositeName("\"\"/\"\"");
+ assertEquals(2,name.size());
+ assertEquals("//", name.toString());
+
+ name = new CompositeName("\"O=/s\"");
+ assertEquals("\"O=/s\"", name.toString());
+
}
/**
Modified: harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/LdapNameTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/LdapNameTest.java?rev=794164&r1=794163&r2=794164&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/LdapNameTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/jndi/src/test/java/org/apache/harmony/jndi/tests/javax/naming/ldap/LdapNameTest.java Wed Jul 15 07:30:02 2009
@@ -621,6 +621,14 @@
new LdapName(" =b");
fail("InvalidNameException expected");
} catch (InvalidNameException e) {}
+
+ LdapName ldapName = new LdapName("cn=a+");
+ assertEquals("cn=a+", ldapName.toString());
+ assertEquals("cn=a", ldapName.getRdns().get(0).toString());
+
+ ldapName = new LdapName("cn=\\+");
+ assertEquals("cn=\\+", ldapName.toString());
+ assertEquals("cn=\\+", ldapName.getRdns().get(0).toString());
}
/**
@@ -646,7 +654,132 @@
fail("InvalidNameException expected");
} catch (InvalidNameException e) {}
}
+
+ /**
+ * <p>
+ * Test method for 'javax.naming.ldap.LdapName(String)'
+ * </p>
+ * <p>
+ * Here we are testing the constructor, this method should accept a
+ * String notice here that here that we are testing the special case
+ * in which the name is quoted and the meta characters in it are ignored.
+ * </p>
+ * <p>
+ * The expected result is an instance of the class.
+ * </p>
+ */
+ public void testLdapNameString054() throws Exception {
+ LdapName ldapName;
+ String stringName;
+
+ stringName = "dc=apacheorg\"";
+ ldapName = new LdapName(stringName);
+ assertEquals(stringName, ldapName.toString());
+
+ stringName = "dc=\"apache,org\"";
+ ldapName = new LdapName(stringName);
+ assertEquals(stringName, ldapName.toString());
+
+ stringName = "dc=\"apache;org\"";
+ ldapName = new LdapName(stringName);
+ assertEquals(stringName, ldapName.toString());
+
+ stringName = "dc=\"apache\\\";org\"";
+ ldapName = new LdapName(stringName);
+ assertEquals(stringName, ldapName.toString());
+
+ stringName = "dc=apache\\\"org,O=org";
+ ldapName = new LdapName(stringName);
+ assertEquals(stringName, ldapName.toString());
+
+ stringName = "\"az=a,O=a\"";
+ try{
+ new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ }catch(InvalidNameException e){
+ //expected
+ }
+
+ stringName = "dc=apache\\\";org,O=org";
+ try{
+ new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ }catch(InvalidNameException e){
+ //expected
+ }
+
+ try{
+ new LdapName("dc=apache,org");
+ fail("Should throw InvalidNameException");
+ }catch(InvalidNameException e){
+ //expected
+ }
+
+ try{
+ new LdapName("dc=apache;org");
+ fail("Should throw InvalidNameException");
+ }catch(InvalidNameException e){
+ //expected
+ }
+
+ try{
+ new LdapName("dc=\"apache\"harmony\"org\"");
+ fail("Should throw InvalidNameException");
+ }catch(InvalidNameException e){
+ //expected
+ }
+
+ stringName = "DC=\"Apache,org\",DC=\"Apacheorg\"";
+ String expectedRdnsName = "DC=\"Apache,org\",DC=\"Apacheorg\"";
+ ldapName = new LdapName(stringName);
+ List rdns = ldapName.getRdns();
+ assertEquals(2, rdns.size());
+ assertEquals(expectedRdnsName, ldapName.toString());
+
+ stringName= "abc=\"DC:O=ab,DC=COM\",cn=apache\"org,O=harmony";
+ new LdapName(stringName);
+
+ try {
+ stringName = "DC=A\"pache,org\",DC=\"Apacheorg\"";
+ ldapName = new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ } catch (InvalidNameException e) {
+ // expected
+ }
+
+ try {
+ stringName = "DC=\"Apache,org,DC=\"Apacheorg\"";
+ ldapName = new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ } catch (InvalidNameException e) {
+ // expected
+ }
+ try {
+ stringName = "DC=\"Apache,org,DC=\"Apacheorg";
+ ldapName = new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ } catch (InvalidNameException e) {
+ // expected
+ }
+
+ try {
+ stringName = "+";
+ ldapName = new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ } catch (InvalidNameException e) {
+ // expected
+ }
+
+ try {
+ stringName = ";";
+ ldapName = new LdapName(stringName);
+ fail("Should throw InvalidNameException");
+ } catch (InvalidNameException e) {
+ // expected
+ }
+ }
+
/**
* <p>
* Test method for 'javax.naming.ldap.LdapName.LdapName(List<Rdn>)'