EN · DE · RU · FR · ES

#511: LdapUtils.java

projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java Type: Java · Role: LDAP Integration · Source: projectforge-business/src/main/java/org/projectforge/business/ldap/LdapUtils.java 334 lines · 262 code · 48 comments · 24 blank
Static utility methods for Ldap. Collection of pure functions with no side effects, providing common helper operations.

Code Structure

Package: org.projectforge.business.ldap

Classes: LdapUtils

Methods (17): encodeForLDAP, encodeForLDAP, escapeCommonName, getOu, getOu, buildOu, buildOu, appendOu, getOrganizationalUnit, getOrganizationalUnit, getAttributeValue, getAttributeStringValue, getAttributeIntegerValue, putAttribute, splitMultipleAttribute, getMissedObjectClasses, addEntry

Fields (1): ATTRIBUTE_SEPARATOR_CHAR

Imports: 8 packages

Source Code (abridged)

package org.projectforge.business.ldap;

import org.apache.commons.lang3.StringUtils;
import org.projectforge.common.StringHelper;

import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class LdapUtils
{
  private static final String ATTRIBUTE_SEPARATOR_CHAR = ",";

  // https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
  public static String encodeForLDAP(String input) {
    return encodeForLDAP(input, true);
  }

  /**
   * '\' -> "\5c", '(' -> "\\28", ')' -> "\\29", '\0' -> "\00"
   * If encodeWildcads == true: '*' -> "\2a"
   * @param input
   * @param encodeWildcards Default ist true
   * @return encode input string.
   * https://github.com/ESAPI/esapi-java-legacy/blob/develop/src/main/java/org/owasp/esapi/reference/DefaultEncoder.java
   */
  public static String encodeForLDAP(String input, boolean encodeWildcards) {
    if (input == null) {
      return null;
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
      char c = input.charAt(i);

      switch (c) {
        case '\\':
          sb.append("\\5c");
          break;
        case '*':
          if (encodeWildcards) {
            sb.append("\\2a");
          } else {
            sb.append(c);
          }

          break;
        case '(':
          sb.append("\\28");
          break;
        case ')':
          sb.append("\\29");
          break;
        case '\0':
          sb.append("\\00");
          break;
        default:
          sb.append(c);
      }
    }
    return sb.toString();
  }

  /**
   * Escapes the following characters: , (comma), = (equals), + (plus), < (less than), > (greater than), # (number sign), ; (semicolon), \
   * (backslash), and " (quotation mark).
   * @param name
   * @return null if name is null otherwise the string name with escaped special characters.
   */
  public static String escapeCommonName(final String name)
  {
    if (name == null) {
      return null;
    }
    final StringBuilder buf = new StringBuilder(name.length() + 5);
    for (int i = 0; i < name.length(); i++) {
      final char ch = name.charAt(i);
      if (",=+<>#;\\\"".indexOf(ch) >= 0) {
        buf.append("\\");
      }
      buf.append(ch);
    }
    return buf.toString();
  }

  public static String getOu(final String... organizationalUnits)
  {
    if (organizationalUnits == null) {
      return "";
    }
    if (organizationalUnits.length == 1 && organizationalUnits[0] != null && organizationalUnits[0].startsWith("ou=")) {
      // organizationalUnit is already in the form ou=...,ou=.... Nothing to be done.
      return organizationalUnits[0];
    }
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, null, organizationalUnits);
    return buf.toString();
  }

  public static String getOu(final String ou, final String[] organizationalUnits)
  {
    final StringBuilder buf = new StringBuilder();
    buildOu(buf, ou, organizationalUnits);
    return buf.toString();
  }

  public static void buildOu(final StringBuilder buf, final String ou, final String[] organizationalUnits)
  {
    if (ou == null && organizationalUnits == null) {
      return;
    }
    boolean first = true;
    if (ou != null) {
      first = false;
// ... (truncated, total 312 lines)

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
a72903e36 *.java, *.kt: StringBuffer -> StringBuilder.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.