From 44f221ae9d427a08f8aa56219ec98166142630c2 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Wed, 11 Feb 2015 13:57:44 -0500 Subject: [PATCH] Refactored LDAPDatabase.createFilter(). The createFilter() method in LDAPDatabase has been changed to construct an LDAP filter based on a keyword and a set of attributes with their values. This will allow searching the database based on specific attribute values. The subclasses of LDAPDatabase have been updated accordingly. https://fedorahosted.org/pki/ticket/1164 --- .../src/com/netscape/cmscore/dbs/LDAPDatabase.java | 26 +++++++++++++++++++--- .../dogtagpki/server/tps/dbs/ActivityDatabase.java | 20 ++++++++++++----- .../dogtagpki/server/tps/dbs/TPSCertDatabase.java | 21 +++++++++++------ .../dogtagpki/server/tps/dbs/TokenDatabase.java | 21 +++++++++++------ 4 files changed, 65 insertions(+), 23 deletions(-) diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java index 0e3ffc13bc13bdbbeb0a2687793770297508a1d1..3e9f25e95ca1f41402bed2510b5139c452a57e5a 100644 --- a/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java +++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/LDAPDatabase.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Enumeration; +import java.util.Map; import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.EBaseException; @@ -17,6 +18,7 @@ import com.netscape.certsrv.dbs.IDBSearchResults; import com.netscape.certsrv.dbs.IDBSubsystem; import com.netscape.certsrv.dbs.Modification; import com.netscape.certsrv.dbs.ModificationSet; +import com.netscape.cmsutil.ldap.LDAPUtil; /** * This class implements LDAP database. @@ -98,15 +100,33 @@ public abstract class LDAPDatabase extends Database { } public abstract String createDN(String id); - public abstract String createFilter(String filter); + public abstract String createFilter(String keyword, Map attributes); + + public void createFilter(StringBuilder sb, Map attributes) { + + // if no attributes specified, don't change filter + if (attributes == null || attributes.isEmpty()) return; + + // wrap current filter with attribute matching filter + sb.insert(0, "(&"); + for (Map.Entry entry : attributes.entrySet()) { + sb.append("(" + entry.getKey() + "=" + LDAPUtil.escapeFilter(entry.getValue()) + ")"); + } + sb.append(")"); + } @Override - public Collection findRecords(String filter) throws Exception { + public Collection findRecords(String keyword) throws Exception { + return findRecords(keyword, null); + } + + public Collection findRecords(String keyword, Map attributes) throws Exception { + CMS.debug("LDAPDatabase: findRecords()"); try (IDBSSession session = dbSubsystem.createSession()) { Collection list = new ArrayList(); - String ldapFilter = createFilter(filter); + String ldapFilter = createFilter(keyword, attributes); CMS.debug("LDAPDatabase: searching " + baseDN + " with filter " + ldapFilter); IDBSearchResults results = session.search(baseDN, ldapFilter); diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java index 4eb3e11e756a73475cc306cde42d7fe9937424dc..c15ff92550362ab63b61c10a78f8fc0de521a901 100644 --- a/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java +++ b/base/tps/src/org/dogtagpki/server/tps/dbs/ActivityDatabase.java @@ -20,8 +20,8 @@ package org.dogtagpki.server.tps.dbs; import java.util.Calendar; import java.util.Date; +import java.util.Map; -import org.apache.commons.lang.StringUtils; import org.dogtagpki.tps.main.Util; import com.netscape.certsrv.base.EBaseException; @@ -89,13 +89,21 @@ public class ActivityDatabase extends LDAPDatabase { } @Override - public String createFilter(String filter) { + public String createFilter(String keyword, Map attributes) { - if (StringUtils.isEmpty(filter)) { - return "(id=*)"; + StringBuilder sb = new StringBuilder(); + + if (keyword != null) { + keyword = LDAPUtil.escapeFilter(keyword); + sb.append("(|(tokenID=*" + keyword + "*)(userID=*" + keyword + "*))"); + } + + createFilter(sb, attributes); + + if (sb.length() == 0) { + sb.append("(id=*)"); } - filter = LDAPUtil.escapeFilter(filter); - return "(|(tokenID=*" + filter + "*)(userID=*" + filter + "*))"; + return sb.toString(); } } diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java index 7450b06654d32095eb55c8b6c7e255dc7492ee8f..b593f9918f8350344f32e48bf279efbb20161bbd 100644 --- a/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java +++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TPSCertDatabase.java @@ -19,8 +19,7 @@ package org.dogtagpki.server.tps.dbs; import java.util.Date; - -import org.apache.commons.lang.StringUtils; +import java.util.Map; import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.dbs.IDBSubsystem; @@ -59,13 +58,21 @@ public class TPSCertDatabase extends LDAPDatabase { } @Override - public String createFilter(String filter) { + public String createFilter(String keyword, Map attributes) { - if (StringUtils.isEmpty(filter)) { - return "(id=*)"; + StringBuilder sb = new StringBuilder(); + + if (keyword != null) { + keyword = LDAPUtil.escapeFilter(keyword); + sb.append("(|(id=*" + keyword + "*)(tokenID=*" + keyword + "*)(userID=*" + keyword + "*))"); + } + + createFilter(sb, attributes); + + if (sb.length() == 0) { + sb.append("(id=*)"); } - filter = LDAPUtil.escapeFilter(filter); - return "(|(id=*" + filter + "*)(tokenID=*" + filter + "*)(userID=*" + filter + "*))"; + return sb.toString(); } } diff --git a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java index f86c6e203badb119549290ab3db8e8d9079fa944..19f4830b3776838375c75d54d5442f9234efd57b 100644 --- a/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java +++ b/base/tps/src/org/dogtagpki/server/tps/dbs/TokenDatabase.java @@ -19,8 +19,7 @@ package org.dogtagpki.server.tps.dbs; import java.util.Date; - -import org.apache.commons.lang.StringUtils; +import java.util.Map; import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.dbs.IDBSubsystem; @@ -56,13 +55,21 @@ public class TokenDatabase extends LDAPDatabase { } @Override - public String createFilter(String filter) { + public String createFilter(String keyword, Map attributes) { - if (StringUtils.isEmpty(filter)) { - return "(id=*)"; + StringBuilder sb = new StringBuilder(); + + if (keyword != null) { + keyword = LDAPUtil.escapeFilter(keyword); + sb.append("(|(id=*" + keyword + "*)(userID=*" + keyword + "*))"); + } + + createFilter(sb, attributes); + + if (sb.length() == 0) { + sb.append("(id=*)"); } - filter = LDAPUtil.escapeFilter(filter); - return "(|(id=*" + filter + "*)(userID=*" + filter + "*))"; + return sb.toString(); } } -- 1.8.4.2