summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/ca/src/org/dogtagpki/server/ca/rest/ProfileService.java16
-rw-r--r--base/common/src/com/netscape/certsrv/base/EBaseException.java2
-rw-r--r--base/common/src/com/netscape/certsrv/profile/EProfileException.java4
-rw-r--r--base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java19
-rw-r--r--base/server/cms/src/com/netscape/cms/servlet/admin/ProfileAdminServlet.java30
-rw-r--r--base/server/cmsbundle/src/UserMessages.properties1
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/base/FileConfigStore.java4
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/profile/AbstractProfileSubsystem.java151
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/profile/LDAPProfileSubsystem.java228
-rw-r--r--base/server/cmscore/src/com/netscape/cmscore/profile/ProfileSubsystem.java182
10 files changed, 437 insertions, 200 deletions
diff --git a/base/ca/src/org/dogtagpki/server/ca/rest/ProfileService.java b/base/ca/src/org/dogtagpki/server/ca/rest/ProfileService.java
index 3b2f8a50e..d3f08b270 100644
--- a/base/ca/src/org/dogtagpki/server/ca/rest/ProfileService.java
+++ b/base/ca/src/org/dogtagpki/server/ca/rest/ProfileService.java
@@ -18,7 +18,6 @@
package org.dogtagpki.server.ca.rest;
-import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.security.Principal;
@@ -244,7 +243,7 @@ public class ProfileService extends PKIService implements ProfileResource {
data.setAuthenticatorId(profile.getAuthenticatorId());
data.setAuthzAcl(profile.getAuthzAcl());
- data.setClassId(cs.getString(profileId + ".class_id"));
+ data.setClassId(ps.getProfileClassId(profileId));
data.setDescription(profile.getDescription(getLocale(headers)));
data.setEnabled(ps.isProfileEnable(profileId));
data.setEnabledBy(ps.getProfileEnableBy(profileId));
@@ -472,18 +471,13 @@ public class ProfileService extends PKIService implements ProfileResource {
auditParams.put("description", data.getDescription());
auditParams.put("visible", Boolean.toString(data.isVisible()));
- String config = CMS.getConfigStore().getString("instanceRoot") + "/ca/profiles/ca/" +
- profileId + ".cfg";
- File configFile = new File(config);
- configFile.createNewFile();
IPluginInfo info = registry.getPluginInfo("profile", data.getClassId());
- profile = ps.createProfile(profileId, data.getClassId(), info.getClassName(), config);
+ profile = ps.createProfile(profileId, data.getClassId(), info.getClassName());
profile.setName(getLocale(headers), data.getName());
profile.setDescription(getLocale(headers), data.getDescription());
profile.setVisible(data.isVisible());
profile.getConfigStore().commit(false);
- ps.createProfileConfig(profileId, data.getClassId(), config);
if (profile instanceof IProfileEx) {
// populates profile specific plugins such as
@@ -504,7 +498,7 @@ public class ProfileService extends PKIService implements ProfileResource {
return createCreatedResponse(profileData, profileData.getLink().getHref());
- } catch (EBaseException | IOException e) {
+ } catch (EBaseException e) {
CMS.debug("createProfile: error in creating profile: " + e);
e.printStackTrace();
@@ -983,9 +977,7 @@ public class ProfileService extends PKIService implements ProfileResource {
"`. Profile must be disabled first.");
}
- String configFile = CMS.getConfigStore().getString("profile." + profileId + ".config");
-
- ps.deleteProfile(profileId, configFile);
+ ps.deleteProfile(profileId);
auditProfileChange(
ScopeDef.SC_PROFILE_RULES,
diff --git a/base/common/src/com/netscape/certsrv/base/EBaseException.java b/base/common/src/com/netscape/certsrv/base/EBaseException.java
index 78d9a6d2d..8d8adb66a 100644
--- a/base/common/src/com/netscape/certsrv/base/EBaseException.java
+++ b/base/common/src/com/netscape/certsrv/base/EBaseException.java
@@ -77,7 +77,7 @@ public class EBaseException extends Exception {
* @param msgFormat The resource key
* @param cause The cause exception
*/
- public EBaseException(String msgFormat, Exception cause) {
+ public EBaseException(String msgFormat, Throwable cause) {
super(msgFormat, cause);
mParams = new Exception[1];
mParams[0] = cause;
diff --git a/base/common/src/com/netscape/certsrv/profile/EProfileException.java b/base/common/src/com/netscape/certsrv/profile/EProfileException.java
index 0363139cb..5ad254f74 100644
--- a/base/common/src/com/netscape/certsrv/profile/EProfileException.java
+++ b/base/common/src/com/netscape/certsrv/profile/EProfileException.java
@@ -44,4 +44,8 @@ public class EProfileException extends EBaseException {
public EProfileException(String msg) {
super(msg);
}
+
+ public EProfileException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
}
diff --git a/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java b/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java
index 3238fb2e6..b7071fe75 100644
--- a/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java
+++ b/base/common/src/com/netscape/certsrv/profile/IProfileSubsystem.java
@@ -61,33 +61,18 @@ public interface IProfileSubsystem extends ISubsystem {
* @param id profile id
* @param classid implementation id
* @param className class Name
- * @param configFile configuration file
* @exception EProfileException failed to create profile
*/
- public IProfile createProfile(String id, String classid,
- String className, String configFile)
+ public IProfile createProfile(String id, String classid, String className)
throws EProfileException;
/**
* Deletes profile.
*
* @param id profile id
- * @param configFile configuration file
* @exception EProfileException failed to delete profile
*/
- public void deleteProfile(String id, String configFile)
- throws EProfileException;
-
- /**
- * Creates a new profile configuration file.
- *
- * @param id profile id
- * @param classId implementation id
- * @param configPath location to create the configuration file
- * @exception failed to create profile
- */
- public void createProfileConfig(String id, String classId,
- String configPath) throws EProfileException;
+ public void deleteProfile(String id) throws EProfileException;
/**
* Enables a profile.
diff --git a/base/server/cms/src/com/netscape/cms/servlet/admin/ProfileAdminServlet.java b/base/server/cms/src/com/netscape/cms/servlet/admin/ProfileAdminServlet.java
index 3d25b8b71..b418baf41 100644
--- a/base/server/cms/src/com/netscape/cms/servlet/admin/ProfileAdminServlet.java
+++ b/base/server/cms/src/com/netscape/cms/servlet/admin/ProfileAdminServlet.java
@@ -17,7 +17,6 @@
// --- END COPYRIGHT BLOCK ---
package com.netscape.cms.servlet.admin;
-import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.StringTokenizer;
@@ -2290,26 +2289,8 @@ public class ProfileAdminServlet extends AdminServlet {
return;
}
- String config = null;
-
try {
- config = CMS.getConfigStore().getString("profile." + id + ".config");
- } catch (EBaseException e) {
- // store a message in the signed audit log file
- auditMessage = CMS.getLogMessage(
- LOGGING_SIGNED_AUDIT_CONFIG_CERT_PROFILE,
- auditSubjectID,
- ILogger.FAILURE,
- auditParams(req));
-
- audit(auditMessage);
-
- sendResponse(ERROR, null, null, resp);
- return;
- }
-
- try {
- mProfileSub.deleteProfile(id, config);
+ mProfileSub.deleteProfile(id);
} catch (EProfileException e) {
// store a message in the signed audit log file
auditMessage = CMS.getLogMessage(
@@ -2475,16 +2456,10 @@ public class ProfileAdminServlet extends AdminServlet {
IProfile profile = null;
- // create configuration file
- File configFile = new File(config);
-
- configFile.createNewFile();
-
// create profile
try {
profile = mProfileSub.createProfile(id, impl,
- info.getClassName(),
- config);
+ info.getClassName());
profile.setName(getLocale(req), name);
profile.setDescription(getLocale(req), name);
if (visible != null && visible.equals("true")) {
@@ -2495,7 +2470,6 @@ public class ProfileAdminServlet extends AdminServlet {
profile.setAuthenticatorId(auth);
profile.getConfigStore().commit(false);
- mProfileSub.createProfileConfig(id, impl, config);
if (profile instanceof IProfileEx) {
// populates profile specific plugins such as
// policies, inputs and outputs
diff --git a/base/server/cmsbundle/src/UserMessages.properties b/base/server/cmsbundle/src/UserMessages.properties
index 4861f2da5..6b4dc69b5 100644
--- a/base/server/cmsbundle/src/UserMessages.properties
+++ b/base/server/cmsbundle/src/UserMessages.properties
@@ -754,6 +754,7 @@ CMS_PROFILE_CONFIG_KEY_USAGE_EXTENSION_CHECKING=Allow duplicate subject names wi
CMS_PROFILE_INTERNAL_ERROR=Profile internal error: {0}
CMS_PROFILE_DENY_OPERATION=Not authorized to do this operation.
CMS_PROFILE_DELETE_ENABLEPROFILE=Cannot delete enabled profile: {0}
+CMS_PROFILE_DELETE_ERROR=Failed to delete profile: {0}
CMS_PROFILE_INVALID_REQUEST=Invalid Request
CMS_PROFILE_EMPTY_REQUEST_TYPE=Request type is not specified. Check your profile input.
CMS_PROFILE_CREATE_POLICY_FAILED=Failed to create profile policy: {0}
diff --git a/base/server/cmscore/src/com/netscape/cmscore/base/FileConfigStore.java b/base/server/cmscore/src/com/netscape/cmscore/base/FileConfigStore.java
index b77f86d78..4f8cb2743 100644
--- a/base/server/cmscore/src/com/netscape/cmscore/base/FileConfigStore.java
+++ b/base/server/cmscore/src/com/netscape/cmscore/base/FileConfigStore.java
@@ -33,12 +33,10 @@ import com.netscape.cmsutil.util.Utils;
/**
* FileConfigStore:
- * Extends HashConfigStore with methods to load/save from/to file for
+ * Extends PropConfigStore with methods to load/save from/to file for
* persistent storage. This is a configuration store agent who
* reads data from a file.
* <P>
- * Note that a LdapConfigStore can be implemented so that it reads the configuration stores from the Ldap directory.
- * <P>
*
* @version $Revision$, $Date$
* @see PropConfigStore
diff --git a/base/server/cmscore/src/com/netscape/cmscore/profile/AbstractProfileSubsystem.java b/base/server/cmscore/src/com/netscape/cmscore/profile/AbstractProfileSubsystem.java
new file mode 100644
index 000000000..b7cd503a1
--- /dev/null
+++ b/base/server/cmscore/src/com/netscape/cmscore/profile/AbstractProfileSubsystem.java
@@ -0,0 +1,151 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2007 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.cmscore.profile;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.base.IConfigStore;
+import com.netscape.certsrv.base.ISubsystem;
+import com.netscape.certsrv.profile.EProfileException;
+import com.netscape.certsrv.profile.IProfile;
+import com.netscape.certsrv.profile.IProfileSubsystem;
+
+public abstract class AbstractProfileSubsystem implements IProfileSubsystem {
+ protected static final String PROP_CHECK_OWNER = "checkOwner";
+ protected static final String PROP_ENABLE = "enable";
+ protected static final String PROP_ENABLE_BY = "enableBy";
+
+ protected IConfigStore mConfig = null;
+ @SuppressWarnings("unused")
+ protected ISubsystem mOwner;
+ protected Vector<String> mProfileIds;
+ protected Hashtable<String, IProfile> mProfiles;
+ protected Hashtable<String, String> mProfileClassIds;
+
+ /**
+ * Returns the root configuration storage of this system.
+ * <P>
+ *
+ * @return configuration store of this subsystem
+ */
+ public IConfigStore getConfigStore() {
+ return mConfig;
+ }
+
+ /**
+ * Retrieves the name of this subsystem.
+ */
+ public String getId() {
+ return null;
+ }
+
+ /**
+ * Sets specific to this subsystem.
+ */
+ public void setId(String id) throws EBaseException {
+ }
+
+ public boolean isProfileEnable(String id) {
+ IProfile profile = mProfiles.get(id);
+ String enable = null;
+
+ try {
+ enable = profile.getConfigStore().getString(PROP_ENABLE);
+ } catch (EBaseException e) {
+ }
+ return Boolean.valueOf(enable);
+ }
+
+ public String getProfileEnableBy(String id) {
+ if (!isProfileEnable(id))
+ return null;
+ IProfile profile = mProfiles.get(id);
+ String enableBy = null;
+
+ try {
+ enableBy = profile.getConfigStore().getString(PROP_ENABLE_BY);
+ } catch (EBaseException e) {
+ }
+ return enableBy;
+ }
+
+ /**
+ * Enables a profile for execution.
+ */
+ public void enableProfile(String id, String enableBy)
+ throws EProfileException {
+ IProfile profile = mProfiles.get(id);
+
+ profile.getConfigStore().putString(PROP_ENABLE, "true");
+ profile.getConfigStore().putString(PROP_ENABLE_BY, enableBy);
+ try {
+ profile.getConfigStore().commit(false);
+ } catch (EBaseException e) {
+ }
+ }
+
+ /**
+ * Retrieves a profile by id.
+ */
+ public IProfile getProfile(String id)
+ throws EProfileException {
+ return mProfiles.get(id);
+ }
+
+ /**
+ * Disables a profile for execution.
+ */
+ public void disableProfile(String id)
+ throws EProfileException {
+ IProfile profile = mProfiles.get(id);
+
+ profile.getConfigStore().putString(PROP_ENABLE, "false");
+ try {
+ profile.getConfigStore().commit(false);
+ } catch (EBaseException e) {
+ }
+ }
+
+ public String getProfileClassId(String id) {
+ return mProfileClassIds.get(id);
+ }
+
+ /**
+ * Retrieves a list of profile ids. The return
+ * list is of type String.
+ */
+ public Enumeration<String> getProfileIds() {
+ return mProfileIds.elements();
+ }
+
+ /**
+ * Checks if owner id should be enforced during profile approval.
+ *
+ * @return true if approval should be checked
+ */
+ public boolean checkOwner() {
+ try {
+ return mConfig.getBoolean(PROP_CHECK_OWNER, false);
+ } catch (EBaseException e) {
+ return false;
+ }
+ }
+}
diff --git a/base/server/cmscore/src/com/netscape/cmscore/profile/LDAPProfileSubsystem.java b/base/server/cmscore/src/com/netscape/cmscore/profile/LDAPProfileSubsystem.java
new file mode 100644
index 000000000..3572bd21d
--- /dev/null
+++ b/base/server/cmscore/src/com/netscape/cmscore/profile/LDAPProfileSubsystem.java
@@ -0,0 +1,228 @@
+// --- BEGIN COPYRIGHT BLOCK ---
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; version 2 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// (C) 2007, 2014, 2015 Red Hat, Inc.
+// All rights reserved.
+// --- END COPYRIGHT BLOCK ---
+package com.netscape.cmscore.profile;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import netscape.ldap.LDAPAttribute;
+import netscape.ldap.LDAPConnection;
+import netscape.ldap.LDAPEntry;
+import netscape.ldap.LDAPException;
+import netscape.ldap.LDAPSearchResults;
+
+import com.netscape.certsrv.apps.CMS;
+import com.netscape.certsrv.base.EBaseException;
+import com.netscape.certsrv.base.IConfigStore;
+import com.netscape.certsrv.base.ISubsystem;
+import com.netscape.certsrv.ldap.ELdapException;
+import com.netscape.certsrv.ldap.ILdapConnFactory;
+import com.netscape.certsrv.profile.EProfileException;
+import com.netscape.certsrv.profile.IProfile;
+import com.netscape.certsrv.profile.IProfileSubsystem;
+import com.netscape.certsrv.registry.IPluginInfo;
+import com.netscape.certsrv.registry.IPluginRegistry;
+import com.netscape.cmscore.base.LDAPConfigStore;
+
+public class LDAPProfileSubsystem
+ extends AbstractProfileSubsystem
+ implements IProfileSubsystem {
+
+ private String dn;
+ private ILdapConnFactory dbFactory;
+
+ /**
+ * Initializes this subsystem with the given configuration
+ * store.
+ * <P>
+ *
+ * @param owner owner of this subsystem
+ * @param config configuration store
+ * @exception EBaseException failed to initialize
+ */
+ public void init(ISubsystem owner, IConfigStore config)
+ throws EBaseException {
+ CMS.debug("LDAPProfileSubsystem: start init");
+
+ // (re)init member collections
+ mProfileIds = new Vector<String>();
+ mProfiles = new Hashtable<String, IProfile>();
+ mProfileClassIds = new Hashtable<String, String>();
+
+ IPluginRegistry registry = (IPluginRegistry)
+ CMS.getSubsystem(CMS.SUBSYSTEM_REGISTRY);
+
+ IConfigStore cs = CMS.getConfigStore();
+ IConfigStore dbCfg = cs.getSubStore("internaldb");
+ dbFactory = CMS.getLdapBoundConnFactory();
+ dbFactory.init(dbCfg);
+
+ mConfig = config;
+ mOwner = owner;
+
+ // Configuration File Format:
+ // *.list=profile1,profile2
+ // *.profile1.class=com.netscape.cms.profile.common.BasicProfile
+ // *.profile1.config=config/profiles/profile1.cfg
+ // *.profile2.class=com.netscape.cms.profile.common.BasicProfile
+ // *.profile2.config=config/profiles/profile2.cfg
+
+ // read profile id, implementation, and its configuration files
+ String basedn = cs.getString("internaldb.basedn");
+ String dn = "ou=certificateProfiles,ou=ca," + basedn;
+ LDAPConnection conn = dbFactory.getConn();
+
+ String[] attrs = {"cn", "classId"};
+ try {
+ LDAPSearchResults ldapProfiles = conn.search(
+ dn, LDAPConnection.SCOPE_ONE, "(objectclass=*)", attrs, false);
+
+ while (ldapProfiles.hasMoreElements()) {
+ String id = "<unknown>";
+ try {
+ LDAPEntry ldapProfile = ldapProfiles.next();
+
+ id = (String)
+ ldapProfile.getAttribute("cn").getStringValues().nextElement();
+
+ String classid = (String)
+ ldapProfile.getAttribute("classId").getStringValues().nextElement();
+
+ IPluginInfo info = registry.getPluginInfo("profile", classid);
+ if (info == null) {
+ CMS.debug("Error loading profile: No plugins for type : profile, with id " + classid);
+ } else {
+ CMS.debug("Start Profile Creation - " + id + " " + classid + " " + info.getClassName());
+ createProfile(id, classid, info.getClassName());
+ CMS.debug("Done Profile Creation - " + id);
+ }
+ } catch (LDAPException e) {
+ CMS.debug("Error reading profile '" + id + "'; skipping.");
+ }
+ }
+ } catch (LDAPException e) {
+ throw new EBaseException("Error reading profiles: " + e.toString());
+ } finally {
+ try {
+ dbFactory.returnConn(conn);
+ } catch (Exception e) {
+ throw new EProfileException("Error releasing the ldap connection" + e.toString());
+ }
+ }
+
+ Enumeration<String> ee = getProfileIds();
+
+ while (ee.hasMoreElements()) {
+ String id = ee.nextElement();
+
+ CMS.debug("Registered Confirmation - " + id);
+ }
+ }
+
+ /**
+ * Creates a profile instance.
+ */
+ public IProfile createProfile(String id, String classid, String className)
+ throws EProfileException {
+ try {
+ String[] objectClasses = {"top", "certProfile"};
+ LDAPAttribute[] createAttrs = {
+ new LDAPAttribute("objectclass", objectClasses),
+ new LDAPAttribute("cn", id),
+ new LDAPAttribute("classId", classid)
+ };
+
+ IConfigStore subStoreConfig = new LDAPConfigStore(
+ dbFactory, createProfileDN(id), createAttrs, "certProfileConfig");
+
+ CMS.debug("LDAPProfileSubsystem: initing " + className);
+ IProfile profile = (IProfile) Class.forName(className).newInstance();
+ profile.setId(id);
+ profile.init(this, subStoreConfig);
+ mProfileIds.addElement(id);
+ mProfiles.put(id, profile);
+ mProfileClassIds.put(id, classid);
+ return profile;
+ } catch (Exception e) {
+ throw new EProfileException("Error creating or reading profile", e);
+ }
+ }
+
+ public void deleteProfile(String id) throws EProfileException {
+ if (isProfileEnable(id)) {
+ throw new EProfileException("CMS_PROFILE_DELETE_ENABLEPROFILE");
+ }
+
+ LDAPConnection conn;
+ try {
+ conn = dbFactory.getConn();
+ } catch (ELdapException e) {
+ throw new EProfileException("Error acquiring the ldap connection", e);
+ }
+ try {
+ conn.delete(createProfileDN(id));
+ } catch (LDAPException e) {
+ throw new EProfileException("CMS_PROFILE_DELETE_ERROR", e);
+ } finally {
+ try {
+ dbFactory.returnConn(conn);
+ } catch (Exception e) {
+ throw new EProfileException("Error releasing the ldap connection", e);
+ }
+ }
+
+ mProfileIds.removeElement(id);
+ mProfiles.remove(id);
+ mProfileClassIds.remove(id);
+ }
+
+ /**
+ * Notifies this subsystem if owner is in running mode.
+ */
+ public void startup() throws EBaseException {
+ CMS.debug("LDAPProfileSubsystem: startup");
+ }
+
+ /**
+ * Stops this system. The owner may call shutdown
+ * anytime after initialization.
+ * <P>
+ */
+ public void shutdown() {
+ mProfileIds.clear();
+ mProfiles.clear();
+ mProfileClassIds.clear();
+ }
+
+ /**
+ * Compute the profile DN given an ID.
+ */
+ private String createProfileDN(String id) throws EProfileException {
+ if (id == null) {
+ throw new EProfileException("CMS_PROFILE_ID_NOT_FOUND");
+ }
+ String basedn;
+ try {
+ basedn = CMS.getConfigStore().getString("internaldb.basedn");
+ } catch (EBaseException e) {
+ throw new EProfileException("CMS_PROFILE_DELETE_UNKNOWNPROFILE");
+ }
+ return "cn=" + id + ",ou=certificateProfiles,ou=ca," + basedn;
+ }
+}
diff --git a/base/server/cmscore/src/com/netscape/cmscore/profile/ProfileSubsystem.java b/base/server/cmscore/src/com/netscape/cmscore/profile/ProfileSubsystem.java
index 27e72352e..9a7292f2c 100644
--- a/base/server/cmscore/src/com/netscape/cmscore/profile/ProfileSubsystem.java
+++ b/base/server/cmscore/src/com/netscape/cmscore/profile/ProfileSubsystem.java
@@ -33,34 +33,12 @@ import com.netscape.certsrv.profile.IProfileSubsystem;
import com.netscape.certsrv.registry.IPluginInfo;
import com.netscape.certsrv.registry.IPluginRegistry;
-public class ProfileSubsystem implements IProfileSubsystem {
+public class ProfileSubsystem
+ extends AbstractProfileSubsystem
+ implements IProfileSubsystem {
private static final String PROP_LIST = "list";
private static final String PROP_CLASS_ID = "class_id";
private static final String PROP_CONFIG = "config";
- private static final String PROP_CHECK_OWNER = "checkOwner";
-
- private static final String PROP_ENABLE = "enable";
- private static final String PROP_ENABLE_BY = "enableBy";
-
- private IConfigStore mConfig = null;
- @SuppressWarnings("unused")
- private ISubsystem mOwner;
- private Vector<String> mProfileIds = new Vector<String>();
- private Hashtable<String, IProfile> mProfiles = new Hashtable<String, IProfile>();
- private Hashtable<String, String> mProfileClassIds = new Hashtable<String, String>();
-
- /**
- * Retrieves the name of this subsystem.
- */
- public String getId() {
- return null;
- }
-
- /**
- * Sets specific to this subsystem.
- */
- public void setId(String id) throws EBaseException {
- }
/**
* Initializes this subsystem with the given configuration
@@ -77,6 +55,10 @@ public class ProfileSubsystem implements IProfileSubsystem {
IPluginRegistry registry = (IPluginRegistry)
CMS.getSubsystem(CMS.SUBSYSTEM_REGISTRY);
+ mProfileIds = new Vector<String>();
+ mProfiles = new Hashtable<String, IProfile>();
+ mProfileClassIds = new Hashtable<String, String>();
+
mConfig = config;
mOwner = owner;
@@ -102,8 +84,7 @@ public class ProfileSubsystem implements IProfileSubsystem {
String configPath = subStore.getString(PROP_CONFIG);
CMS.debug("Start Profile Creation - " + id + " " + classid + " " + info.getClassName());
- createProfile(id, classid, info.getClassName(),
- configPath);
+ createProfile(id, classid, info.getClassName(), false);
CMS.debug("Done Profile Creation - " + id);
}
@@ -120,14 +101,27 @@ public class ProfileSubsystem implements IProfileSubsystem {
/**
* Creates a profile instance.
*/
- public IProfile createProfile(String id, String classid, String className,
- String configPath)
+ @Override
+ public IProfile createProfile(String id, String classid, String className)
throws EProfileException {
+ return createProfile(id, classid, className, true);
+ }
+
+ private IProfile createProfile(String id, String classid, String className,
+ boolean isNew) throws EProfileException {
IProfile profile = null;
+ String configPath;
+ try {
+ configPath = CMS.getConfigStore().getString("instanceRoot")
+ + "/ca/profiles/ca/" + id + ".cfg";
+ } catch (EBaseException e) {
+ throw new EProfileException("CMS_PROFILE_DELETE_ERROR");
+ }
+
try {
- profile = (IProfile) Class.forName(className).newInstance();
IConfigStore subStoreConfig = CMS.createFileConfigStore(configPath);
+ profile = (IProfile) Class.forName(className).newInstance();
CMS.debug("ProfileSubsystem: initing " + className);
profile.setId(id);
@@ -135,6 +129,8 @@ public class ProfileSubsystem implements IProfileSubsystem {
mProfileIds.addElement(id);
mProfiles.put(id, profile);
mProfileClassIds.put(id, classid);
+ if (isNew)
+ createProfileConfig(id, classid);
return profile;
} catch (Exception e) {
// throw exceptions
@@ -144,7 +140,14 @@ public class ProfileSubsystem implements IProfileSubsystem {
return null;
}
- public void deleteProfile(String id, String configPath) throws EProfileException {
+ public void deleteProfile(String id) throws EProfileException {
+ String configPath;
+ try {
+ configPath = CMS.getConfigStore().getString("instanceRoot")
+ + "/ca/profiles/ca/" + id + ".cfg";
+ } catch (EBaseException e) {
+ throw new EProfileException("CMS_PROFILE_DELETE_ERROR");
+ }
if (isProfileEnable(id)) {
throw new EProfileException("CMS_PROFILE_DELETE_ENABLEPROFILE");
@@ -185,9 +188,16 @@ public class ProfileSubsystem implements IProfileSubsystem {
}
}
- public void createProfileConfig(String id, String classId,
- String configPath)
+ private void createProfileConfig(String id, String classId)
throws EProfileException {
+ String configPath;
+ try {
+ configPath = CMS.getConfigStore().getString("instanceRoot")
+ + "/ca/profiles/ca/" + id + ".cfg";
+ } catch (EBaseException e) {
+ throw new EProfileException("CMS_PROFILE_DELETE_ERROR");
+ }
+
try {
if (mProfiles.size() > 0) {
mConfig.putString(PROP_LIST,
@@ -220,110 +230,4 @@ public class ProfileSubsystem implements IProfileSubsystem {
mProfiles.clear();
mProfileClassIds.clear();
}
-
- /**
- * Returns the root configuration storage of this system.
- * <P>
- *
- * @return configuration store of this subsystem
- */
- public IConfigStore getConfigStore() {
- return mConfig;
- }
-
- /**
- * Adds a profile.
- */
- public void addProfile(String id, IProfile profile)
- throws EProfileException {
- }
-
- public boolean isProfileEnable(String id) {
- IProfile profile = mProfiles.get(id);
- String enable = null;
-
- try {
- enable = profile.getConfigStore().getString(PROP_ENABLE);
- } catch (EBaseException e) {
- }
- if (enable == null || enable.equals("false"))
- return false;
- else
- return true;
- }
-
- public String getProfileEnableBy(String id) {
- if (!isProfileEnable(id))
- return null;
- IProfile profile = mProfiles.get(id);
- String enableBy = null;
-
- try {
- enableBy = profile.getConfigStore().getString(PROP_ENABLE_BY);
- } catch (EBaseException e) {
- }
- return enableBy;
- }
-
- /**
- * Enables a profile for execution.
- */
- public void enableProfile(String id, String enableBy)
- throws EProfileException {
- IProfile profile = mProfiles.get(id);
-
- profile.getConfigStore().putString(PROP_ENABLE, "true");
- profile.getConfigStore().putString(PROP_ENABLE_BY, enableBy);
- try {
- profile.getConfigStore().commit(false);
- } catch (EBaseException e) {
- }
- }
-
- /**
- * Disables a profile for execution.
- */
- public void disableProfile(String id)
- throws EProfileException {
- IProfile profile = mProfiles.get(id);
-
- profile.getConfigStore().putString(PROP_ENABLE, "false");
- try {
- profile.getConfigStore().commit(false);
- } catch (EBaseException e) {
- }
- }
-
- /**
- * Retrieves a profile by id.
- */
- public IProfile getProfile(String id)
- throws EProfileException {
- return mProfiles.get(id);
- }
-
- public String getProfileClassId(String id) {
- return mProfileClassIds.get(id);
- }
-
- /**
- * Retrieves a list of profile ids. The return
- * list is of type String.
- */
- public Enumeration<String> getProfileIds() {
- return mProfileIds.elements();
- }
-
- /**
- * Checks if owner id should be enforced during profile approval.
- *
- * @return true if approval should be checked
- */
- public boolean checkOwner() {
- try {
- return mConfig.getBoolean(PROP_CHECK_OWNER, false);
- } catch (EBaseException e) {
- return false;
- }
- }
}