summaryrefslogtreecommitdiffstats
path: root/base/server/cmscore
diff options
context:
space:
mode:
authorJack Magne <jmagne@dhcp-16-206.sjc.redhat.com>2016-08-03 18:01:23 -0700
committerJack Magne <jmagne@dhcp-16-206.sjc.redhat.com>2016-08-05 11:12:09 -0700
commitf0b1854a8f5cfe97d2d267ea16e4556d94666bb6 (patch)
tree695a043097e9034b091bc237f4f012f30a6ff034 /base/server/cmscore
parent5178567bf5c65d23d3903b0956a47813bdc1fe23 (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.java37
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/dbs/DBSSession.java97
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.