diff options
| author | Jack Magne <jmagne@dhcp-16-206.sjc.redhat.com> | 2016-08-03 18:01:23 -0700 |
|---|---|---|
| committer | Jack Magne <jmagne@dhcp-16-206.sjc.redhat.com> | 2016-08-05 11:12:09 -0700 |
| commit | f0b1854a8f5cfe97d2d267ea16e4556d94666bb6 (patch) | |
| tree | 695a043097e9034b091bc237f4f012f30a6ff034 /base/server/cmscore | |
| parent | 5178567bf5c65d23d3903b0956a47813bdc1fe23 (diff) | |
Fix to sort the output of a cert search by serialno.
Diffstat (limited to 'base/server/cmscore')
| -rw-r--r-- | base/server/cmscore/src/com/netscape/cmscore/dbs/CertificateRepository.java | 37 | ||||
| -rw-r--r-- | base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java | 97 |
2 files changed, 121 insertions, 13 deletions
diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/CertificateRepository.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/CertificateRepository.java index d0a604ec2..8406f367b 100644 --- a/base/server/cmscore/src/com/netscape/cmscore/dbs/CertificateRepository.java +++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/CertificateRepository.java @@ -1124,7 +1124,7 @@ public class CertificateRepository extends Repository ModificationSet mods = new ModificationSet(); if (isAlreadyOnHold) { mods.add(CertRecord.ATTR_REVO_INFO, Modification.MOD_REPLACE, info); - } else { + } else { mods.add(CertRecord.ATTR_REVO_INFO, Modification.MOD_ADD, info); } SessionContext ctx = SessionContext.getContext(); @@ -1190,6 +1190,21 @@ public class CertificateRepository extends Repository modifyCertificateRecord(id, mods); } + public Enumeration<Object> searchCertificates(String filter, int maxSize,String sortAttribute) + throws EBaseException { + IDBSSession s = mDBService.createSession(); + Enumeration<Object> e = null; + + CMS.debug("searchCertificates filter " + filter + " maxSize " + maxSize); + try { + e = s.search(getDN(), filter, maxSize,sortAttribute); + } finally { + if (s != null) + s.close(); + } + return e; + } + public Enumeration<Object> searchCertificates(String filter, int maxSize) throws EBaseException { IDBSSession s = mDBService.createSession(); @@ -1223,6 +1238,26 @@ public class CertificateRepository extends Repository return v.elements(); } + public Enumeration<ICertRecord> searchCertificates(String filter, int maxSize, + int timeLimit,String sortAttribute) throws EBaseException { + IDBSSession s = mDBService.createSession(); + Vector<ICertRecord> v = new Vector<ICertRecord>(); + + CMS.debug("searchCertificateswith time limit filter " + filter); + try { + IDBSearchResults sr = s.search(getDN(), filter, maxSize, timeLimit,sortAttribute); + while (sr.hasMoreElements()) { + v.add((ICertRecord) sr.nextElement()); + } + } finally { + if (s != null) + s.close(); + } + return v.elements(); + + } + + /** * Returns a list of X509CertImp that satisfies the filter. * diff --git a/base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java b/base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java index 2bfd5f2da..853dfe41a 100644 --- a/base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java +++ b/base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java @@ -19,6 +19,20 @@ package com.netscape.cmscore.dbs; import java.util.Enumeration; +import netscape.ldap.LDAPAttribute; +import netscape.ldap.LDAPAttributeSet; +import netscape.ldap.LDAPConnection; +import netscape.ldap.LDAPEntry; +import netscape.ldap.LDAPException; +import netscape.ldap.LDAPModification; +import netscape.ldap.LDAPModificationSet; +import netscape.ldap.LDAPSearchConstraints; +import netscape.ldap.LDAPSearchResults; +import netscape.ldap.LDAPSortKey; +import netscape.ldap.LDAPv2; +import netscape.ldap.controls.LDAPPersistSearchControl; +import netscape.ldap.controls.LDAPSortControl; + import com.netscape.certsrv.apps.CMS; import com.netscape.certsrv.base.EBaseException; import com.netscape.certsrv.base.ISubsystem; @@ -34,18 +48,6 @@ import com.netscape.certsrv.dbs.Modification; import com.netscape.certsrv.dbs.ModificationSet; import com.netscape.certsrv.logging.ILogger; -import netscape.ldap.LDAPAttribute; -import netscape.ldap.LDAPAttributeSet; -import netscape.ldap.LDAPConnection; -import netscape.ldap.LDAPEntry; -import netscape.ldap.LDAPException; -import netscape.ldap.LDAPModification; -import netscape.ldap.LDAPModificationSet; -import netscape.ldap.LDAPSearchConstraints; -import netscape.ldap.LDAPSearchResults; -import netscape.ldap.LDAPv2; -import netscape.ldap.controls.LDAPPersistSearchControl; - /** * A class represents the database session. Operations * can be performed with a session. @@ -295,6 +297,40 @@ public class DBSSession implements IDBSSession { } @SuppressWarnings("unchecked") + public IDBSearchResults search(String base, String filter, int maxSize,String sortAttribute) + throws EBaseException { + try { + String ldapattrs[] = null; + String ldapfilter = + mDBSystem.getRegistry().getFilter(filter); + + LDAPSearchConstraints cons = new LDAPSearchConstraints(); + + cons.setMaxResults(maxSize); + + if(sortAttribute != null) { + LDAPSortKey sortOrder = new LDAPSortKey( sortAttribute ); + LDAPSortControl sortCtrl = new LDAPSortControl(sortOrder,true); + cons.setServerControls( sortCtrl ); + } + + LDAPSearchResults res = mConn.search(base, + LDAPv2.SCOPE_ONE, ldapfilter, ldapattrs, false, cons); + + return new DBSearchResults(mDBSystem.getRegistry(), + res); + } catch (LDAPException e) { + if (e.getLDAPResultCode() == LDAPException.UNAVAILABLE) + throw new EDBNotAvailException( + CMS.getUserMessage("CMS_DBS_INTERNAL_DIR_UNAVAILABLE")); + // XXX error handling, should not raise exception if + // entry not found + throw new EDBException(CMS.getUserMessage("CMS_DBS_LDAP_OP_FAILURE", + e.toString())); + } + } + + @SuppressWarnings("unchecked") public IDBSearchResults search(String base, String filter, int maxSize, int timeLimit) throws EBaseException { try { @@ -323,6 +359,43 @@ public class DBSSession implements IDBSSession { } } + @SuppressWarnings("unchecked") + public IDBSearchResults search(String base, String filter, int maxSize, + int timeLimit, String sortAttribute) throws EBaseException { + + try { + String ldapattrs[] = null; + String ldapfilter = + mDBSystem.getRegistry().getFilter(filter); + + LDAPSearchConstraints cons = new LDAPSearchConstraints(); + + cons.setMaxResults(maxSize); + cons.setServerTimeLimit(timeLimit); + + if(sortAttribute != null) { + LDAPSortKey sortOrder = new LDAPSortKey( sortAttribute ); + LDAPSortControl sortCtrl = new LDAPSortControl(sortOrder,true); + cons.setServerControls( sortCtrl ); + } + + LDAPSearchResults res = mConn.search(base, + LDAPv2.SCOPE_ONE, ldapfilter, ldapattrs, false, cons); + + return new DBSearchResults(mDBSystem.getRegistry(), + res); + } catch (LDAPException e) { + if (e.getLDAPResultCode() == LDAPException.UNAVAILABLE) + throw new EDBNotAvailException( + CMS.getUserMessage("CMS_DBS_INTERNAL_DIR_UNAVAILABLE")); + // XXX error handling, should not raise exception if + // entry not found + throw new EDBException(CMS.getUserMessage("CMS_DBS_LDAP_OP_FAILURE", + e.toString())); + } + + } + /** * Retrieves a list of object that satifies the given * filter. |
