diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2013-06-14 16:45:37 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2013-06-14 16:45:37 +0200 |
| commit | b4f8505e226f8c2e48b9d734f2f10f56f22b1c22 (patch) | |
| tree | 1b88aa73a1e7c6fb9bdd5b14071dc4c0732ae398 /src/main/java/com/c2kernel/lookup | |
| parent | af29e3ddafe6ab1a54962bf0efb527bc8b23067d (diff) | |
Escape DNs with hex codes instead - more compatible
Diffstat (limited to 'src/main/java/com/c2kernel/lookup')
| -rw-r--r-- | src/main/java/com/c2kernel/lookup/LDAPLookup.java | 2 | ||||
| -rw-r--r-- | src/main/java/com/c2kernel/lookup/LDAPLookupUtils.java | 19 |
2 files changed, 11 insertions, 10 deletions
diff --git a/src/main/java/com/c2kernel/lookup/LDAPLookup.java b/src/main/java/com/c2kernel/lookup/LDAPLookup.java index 3a336dd..72a847d 100644 --- a/src/main/java/com/c2kernel/lookup/LDAPLookup.java +++ b/src/main/java/com/c2kernel/lookup/LDAPLookup.java @@ -272,7 +272,7 @@ public class LDAPLookup int i=0;
while (i<listDN.length-1)
{
- name= "cn="+listDN[i]+","+name;
+ name= "cn="+LDAPLookupUtils.escapeDN(listDN[i])+","+name;
if (!LDAPLookupUtils.exists(getConnection(),name))
{
try
diff --git a/src/main/java/com/c2kernel/lookup/LDAPLookupUtils.java b/src/main/java/com/c2kernel/lookup/LDAPLookupUtils.java index 1ac4b3b..0964565 100644 --- a/src/main/java/com/c2kernel/lookup/LDAPLookupUtils.java +++ b/src/main/java/com/c2kernel/lookup/LDAPLookupUtils.java @@ -28,6 +28,7 @@ import com.novell.ldap.LDAPSearchResults; final public class LDAPLookupUtils
{
static final char[] META_CHARS = {'+', '=', '"', ',', '<', '>', ';', '/'};
+ static final String[] META_ESCAPED = {"2B", "3D", "22", "2C", "3C", "3E", "3B", "2F"};
static public LDAPEntry getEntry(LDAPConnection ld, String dn,int dereference)
throws ObjectNotFoundException
{
@@ -296,11 +297,11 @@ final public class LDAPLookupUtils escapedStr = escapedStr.replaceAll("\\\\","\\\\");
//Positional characters - see RFC 2253
- escapedStr = escapedStr.replaceAll("^#","\\\\#"); // TODO: active directory requires hash to be escaped everywhere
- escapedStr = escapedStr.replaceAll("^ | $","\\\\ ");
+ escapedStr = escapedStr.replaceAll("^#","\\\\23"); // TODO: active directory requires hash to be escaped everywhere
+ escapedStr = escapedStr.replaceAll("^ | $","\\\\20");
- for (char element : META_CHARS) {
- escapedStr = escapedStr.replaceAll("\\"+element,"\\\\" + element);
+ for (int i=0; i<META_CHARS.length; i++) {
+ escapedStr = escapedStr.replaceAll("\\"+META_CHARS[i],"\\\\"+ META_ESCAPED[i]);
}
if (!name.equals(escapedStr)) Logger.msg(3, "LDAP DN "+name+" escaped to "+escapedStr);
return escapedStr;
@@ -311,14 +312,14 @@ final public class LDAPLookupUtils String unescapedStr = new String(dn);
//Positional characters - see RFC 2253
- unescapedStr = unescapedStr.replaceAll("^\\\\#", "#"); // TODO: active directory requires hash to be escaped everywhere
- unescapedStr = unescapedStr.replaceAll("^\\\\ |\\\\ $", " ");
+ unescapedStr = unescapedStr.replaceAll("^\\\\23", "#"); // TODO: active directory requires hash to be escaped everywhere
+ unescapedStr = unescapedStr.replaceAll("^\\\\20|\\\\20$", " ");
- for (char element : META_CHARS) {
- unescapedStr = unescapedStr.replaceAll("\\\\" + element, ""+element);
+ for (int i=0; i<META_CHARS.length; i++) {
+ unescapedStr = unescapedStr.replaceAll("\\\\" + META_ESCAPED[i], ""+META_CHARS[i]);
}
- //Any remaining backslashes
+ //Any remaining escaped backslashes
unescapedStr = unescapedStr.replaceAll("\\\\","\\");
if (!dn.equals(unescapedStr)) Logger.msg(3, "LDAP DN "+dn+" unescaped to "+unescapedStr);
|
