package org.apache.manifoldcf.connectorcommon.common; | |
/** | |
* Helper class to encode LDAP names and filter values. | |
*/ | |
public class LdapEscaper { | |
private LdapEscaper() { | |
// private | |
} | |
/** | |
* Escape data for use in a LDAP distinguished name (DN). | |
* | |
* @param name the data to escape for a DN. | |
* | |
* @return name escaped for use in a DN. | |
*/ | |
public static String escapeDN(String name) { | |
StringBuilder sb = new StringBuilder(); | |
if ((name.length() > 0) && ((name.charAt(0) == ' ') || (name.charAt(0) == '#'))) { | |
sb.append('\\'); // add the leading backslash if needed | |
} | |
for (int i = 0; i < name.length(); i++) { | |
char curChar = name.charAt(i); | |
switch (curChar) { | |
case '\\': | |
sb.append("\\\\"); | |
break; | |
case ',': | |
sb.append("\\,"); | |
break; | |
case '+': | |
sb.append("\\+"); | |
break; | |
case '"': | |
sb.append("\\\""); | |
break; | |
case '<': | |
sb.append("\\<"); | |
break; | |
case '>': | |
sb.append("\\>"); | |
break; | |
case ';': | |
sb.append("\\;"); | |
break; | |
default: | |
sb.append(curChar); | |
} | |
} | |
if ((name.length() > 1) && (name.charAt(name.length() - 1) == ' ')) { | |
sb.insert(sb.length() - 1, '\\'); // add the trailing backslash if needed | |
} | |
return sb.toString(); | |
} | |
/** | |
* Escape data for use in a LDAP filter query. | |
* | |
* @param filter the data to escape for a filter query. | |
* | |
* @return name escaped for use in a filter query. | |
*/ | |
public static String escapeFilter(String filter) { | |
StringBuilder sb = new StringBuilder(); // If using JDK >= 1.5 consider using StringBuilder | |
for (int i = 0; i < filter.length(); i++) { | |
char curChar = filter.charAt(i); | |
switch (curChar) { | |
case '\\': | |
sb.append("\\5c"); | |
break; | |
case '*': | |
sb.append("\\2a"); | |
break; | |
case '(': | |
sb.append("\\28"); | |
break; | |
case ')': | |
sb.append("\\29"); | |
break; | |
case '\u0000': | |
sb.append("\\00"); | |
break; | |
default: | |
sb.append(curChar); | |
} | |
} | |
return sb.toString(); | |
}} |