Skip to content

Commit

Permalink
CAMEL-18696: camel-ldap - Make filter a bit easier to use (#8687)
Browse files Browse the repository at this point in the history
  • Loading branch information
davsclaus committed Nov 8, 2022
1 parent af53529 commit ad44f93
Showing 1 changed file with 58 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ public class LdapProducer extends DefaultProducer {

private static final Logger LOG = LoggerFactory.getLogger(LdapProducer.class);

private String remaining;
private SearchControls searchControls;
private String searchBase;
private Integer pageSize;
private final String remaining;
private final SearchControls searchControls;
private final String searchBase;
private final Integer pageSize;

public LdapProducer(LdapEndpoint endpoint, String remaining, String base, int scope, Integer pageSize,
String returnedAttributes) {
Expand All @@ -59,17 +59,21 @@ public LdapProducer(LdapEndpoint endpoint, String remaining, String base, int sc
this.searchControls = new SearchControls();
this.searchControls.setSearchScope(scope);
if (returnedAttributes != null) {
String returnedAtts[] = returnedAttributes.split(",");
String[] atts = returnedAttributes.split(",");
if (LOG.isDebugEnabled()) {
LOG.debug("Setting returning Attributes to searchControls: {}", Arrays.toString(returnedAtts));
LOG.debug("Setting returning Attributes to searchControls: {}", Arrays.toString(atts));
}
searchControls.setReturningAttributes(returnedAtts);
searchControls.setReturningAttributes(atts);
}
}

@Override
public void process(Exchange exchange) throws Exception {
String filter = exchange.getIn().getBody(String.class);
if (filter != null) {
// filter must be LDAP escaped
filter = escapeFilter(filter);
}
DirContext dirContext = getDirContext();

try {
Expand Down Expand Up @@ -170,4 +174,51 @@ private boolean prepareNextPage(LdapContext ldapContext) throws Exception {
}
}

/**
* Given an LDAP search string, returns the string with certain characters
* escaped according to RFC 2254 guidelines.
*
* The character mapping is as follows:
* char -> Replacement
* ---------------------------
* * -> \2a
* ( -> \28
* ) -> \29
* \ -> \5c
* \0 -> \00
*
* @param filter string to escape according to RFC 2254 guidelines
* @return String the escaped/encoded result
*/
private String escapeFilter(String filter) {
if (filter == null) {
return null;
}
StringBuilder buf = new StringBuilder(filter.length());
for (int i = 0; i < filter.length(); i++) {
char c = filter.charAt(i);
switch (c) {
case '\\':
buf.append("\\5c");
break;
case '*':
buf.append("\\2a");
break;
case '(':
buf.append("\\28");
break;
case ')':
buf.append("\\29");
break;
case '\0':
buf.append("\\00");
break;
default:
buf.append(c);
break;
}
}
return buf.toString();
}

}

0 comments on commit ad44f93

Please sign in to comment.