Author: schuch
Date: Tue Nov 29 05:58:43 2022
New Revision: 1905590

URL: http://svn.apache.org/viewvc?rev=1905590&view=rev
Log:
CONNECTORS-1739: Reuse escaping facilities.

Added:
    
manifoldcf/branches/CONNECTORS-1739/framework/connector-common/src/main/java/org/apache/manifoldcf/connectorcommon/common/LdapEscaper.java

Added: 
manifoldcf/branches/CONNECTORS-1739/framework/connector-common/src/main/java/org/apache/manifoldcf/connectorcommon/common/LdapEscaper.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1739/framework/connector-common/src/main/java/org/apache/manifoldcf/connectorcommon/common/LdapEscaper.java?rev=1905590&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1739/framework/connector-common/src/main/java/org/apache/manifoldcf/connectorcommon/common/LdapEscaper.java
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1739/framework/connector-common/src/main/java/org/apache/manifoldcf/connectorcommon/common/LdapEscaper.java
 Tue Nov 29 05:58:43 2022
@@ -0,0 +1,90 @@
+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();
+  }}


Reply via email to