You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/11/08 10:49:46 UTC
[camel] 01/01: CAMEL-18696: camel-ldap - Make filter a bit easier to use
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch ldap
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4450eb1a20b5e06cd457dec326865c9bb4edc6c9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Nov 8 11:49:14 2022 +0100
CAMEL-18696: camel-ldap - Make filter a bit easier to use
---
.../apache/camel/component/ldap/LdapProducer.java | 65 +++++++++++++++++++---
1 file changed, 58 insertions(+), 7 deletions(-)
diff --git a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
index 0079167f390..97a3e750fd9 100644
--- a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
+++ b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
@@ -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) {
@@ -59,17 +59,21 @@ public class LdapProducer extends DefaultProducer {
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 {
@@ -170,4 +174,51 @@ public class LdapProducer extends DefaultProducer {
}
}
+ /**
+ * 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();
+ }
+
}