diff options
Diffstat (limited to 'pki/base/common/src/com/netscape/cms/servlet/admin/PublisherAdminServlet.java')
-rw-r--r-- | pki/base/common/src/com/netscape/cms/servlet/admin/PublisherAdminServlet.java | 3127 |
1 files changed, 0 insertions, 3127 deletions
diff --git a/pki/base/common/src/com/netscape/cms/servlet/admin/PublisherAdminServlet.java b/pki/base/common/src/com/netscape/cms/servlet/admin/PublisherAdminServlet.java deleted file mode 100644 index 483ac42ef..000000000 --- a/pki/base/common/src/com/netscape/cms/servlet/admin/PublisherAdminServlet.java +++ /dev/null @@ -1,3127 +0,0 @@ -// --- 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.cms.servlet.admin; - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Locale; -import java.util.Vector; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import netscape.ldap.LDAPConnection; -import netscape.ldap.LDAPException; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.authority.IAuthority; -import com.netscape.certsrv.authority.ICertAuthority; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.base.ExtendedPluginInfo; -import com.netscape.certsrv.base.IConfigStore; -import com.netscape.certsrv.base.IExtendedPluginInfo; -import com.netscape.certsrv.base.Plugin; -import com.netscape.certsrv.ca.ICertificateAuthority; -import com.netscape.certsrv.common.ConfigConstants; -import com.netscape.certsrv.common.Constants; -import com.netscape.certsrv.common.NameValuePairs; -import com.netscape.certsrv.common.OpDef; -import com.netscape.certsrv.common.ScopeDef; -import com.netscape.certsrv.ldap.ELdapException; -import com.netscape.certsrv.ldap.ILdapAuthInfo; -import com.netscape.certsrv.ldap.ILdapBoundConnFactory; -import com.netscape.certsrv.ldap.ILdapConnInfo; -import com.netscape.certsrv.logging.ILogger; -import com.netscape.certsrv.publish.EMapperNotFound; -import com.netscape.certsrv.publish.EMapperPluginNotFound; -import com.netscape.certsrv.publish.EPublisherNotFound; -import com.netscape.certsrv.publish.EPublisherPluginNotFound; -import com.netscape.certsrv.publish.ERuleNotFound; -import com.netscape.certsrv.publish.ERulePluginNotFound; -import com.netscape.certsrv.publish.ILdapMapper; -import com.netscape.certsrv.publish.ILdapPublisher; -import com.netscape.certsrv.publish.ILdapRule; -import com.netscape.certsrv.publish.IPublisherProcessor; -import com.netscape.certsrv.publish.MapperPlugin; -import com.netscape.certsrv.publish.MapperProxy; -import com.netscape.certsrv.publish.PublisherPlugin; -import com.netscape.certsrv.publish.PublisherProxy; -import com.netscape.certsrv.publish.RulePlugin; -import com.netscape.certsrv.security.ICryptoSubsystem; -import com.netscape.cmsutil.password.IPasswordStore; - -/** - * A class representing an publishing servlet for the - * Publishing subsystem. This servlet is responsible - * to serve configuration requests for the Publishing subsystem. - * - * @version $Revision$, $Date$ - */ -public class PublisherAdminServlet extends AdminServlet { - /** - * - */ - private static final long serialVersionUID = 7055088618787207262L; - - public final static String PROP_AUTHORITY = "authority"; - - private final static String INFO = "PublisherAdminServlet"; - private final static String PW_TAG_CA_LDAP_PUBLISHING = - "CA LDAP Publishing"; - public final static String NOMAPPER = "<NONE>"; - private IPublisherProcessor mProcessor = null; - private IAuthority mAuth = null; - - private final static String VIEW = ";" + Constants.VIEW; - private final static String EDIT = ";" + Constants.EDIT; - - public PublisherAdminServlet() { - super(); - } - - /** - * Initializes this servlet. - */ - public void init(ServletConfig config) throws ServletException { - super.init(config); - String authority = config.getInitParameter(PROP_AUTHORITY); - - if (authority != null) - mAuth = (IAuthority) CMS.getSubsystem(authority); - if (mAuth != null) - if (mAuth instanceof ICertificateAuthority) { - mProcessor = ((ICertificateAuthority) mAuth).getPublisherProcessor(); - } else - throw new ServletException(authority + " does not have publishing processor!"); - } - - /** - * Returns serlvet information. - */ - public String getServletInfo() { - return INFO; - } - - /** - * Serves HTTP admin request. - */ - public void service(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - super.service(req, resp); - - CMS.debug("PublisherAdminServlet: in service"); - String scope = req.getParameter(Constants.OP_SCOPE); - String op = req.getParameter(Constants.OP_TYPE); - - if (op == null) { - //System.out.println("SRVLT_INVALID_PROTOCOL"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_INVALID_PROTOCOL"), - null, resp); - return; - } - - // for the rest - try { - super.authenticate(req); - - if (op.equals(OpDef.OP_AUTH)) { // for admin authentication only - sendResponse(SUCCESS, null, null, resp); - return; - } - } catch (IOException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHS_FAILED"), - null, resp); - return; - } - try { - AUTHZ_RES_NAME = "certServer.publisher.configuration"; - if (scope != null) { - if (op.equals(OpDef.OP_READ)) { - mOp = "read"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_LDAP)) { - getLDAPDest(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_IMPLS)) { - getConfig(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_RULES)) { - getInstConfig(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_IMPLS)) { - getMapperConfig(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_RULES)) { - getMapperInstConfig(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_RULE_IMPLS)) { - getRuleConfig(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_EXTENDED_PLUGIN_INFO)) { - getExtendedPluginInfo(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_RULE_RULES)) { - getRuleInstConfig(req, resp); - return; - } - } else if (op.equals(OpDef.OP_MODIFY)) { - mOp = "modify"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_LDAP)) { - setLDAPDest(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_RULES)) { - modPublisherInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_RULES)) { - modMapperInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_RULE_RULES)) { - modRuleInst(req, resp, scope); - return; - } - } else if (op.equals(OpDef.OP_PROCESS)) { - mOp = "modify"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_LDAP)) { - testSetLDAPDest(req, resp); - return; - } - } else if (op.equals(OpDef.OP_SEARCH)) { - mOp = "read"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_PUBLISHER_IMPLS)) { - listPublisherPlugins(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_RULES)) { - listPublisherInsts(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_IMPLS)) { - listMapperPlugins(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_RULES)) { - listMapperInsts(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_RULE_IMPLS)) { - listRulePlugins(req, resp); - return; - } else if (scope.equals(ScopeDef.SC_RULE_RULES)) { - listRuleInsts(req, resp); - return; - } - } else if (op.equals(OpDef.OP_ADD)) { - mOp = "modify"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_PUBLISHER_IMPLS)) { - addPublisherPlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_RULES)) { - addPublisherInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_IMPLS)) { - addMapperPlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_RULES)) { - addMapperInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_RULE_IMPLS)) { - addRulePlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_RULE_RULES)) { - addRuleInst(req, resp, scope); - return; - } - } else if (op.equals(OpDef.OP_DELETE)) { - mOp = "modify"; - if ((mToken = super.authorize(req)) == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_AUTHZ_FAILED"), - null, resp); - return; - } - if (scope.equals(ScopeDef.SC_PUBLISHER_IMPLS)) { - delPublisherPlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_PUBLISHER_RULES)) { - delPublisherInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_IMPLS)) { - delMapperPlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_MAPPER_RULES)) { - delMapperInst(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_RULE_IMPLS)) { - delRulePlugin(req, resp, scope); - return; - } else if (scope.equals(ScopeDef.SC_RULE_RULES)) { - delRuleInst(req, resp, scope); - return; - } - } else { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_INVALID_OP_TYPE", op), - null, resp); - return; - } - } else { - //System.out.println("SRVLT_INVALID_OP_SCOPE"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_INVALID_OP_SCOPE"), - null, resp); - return; - } - } catch (EBaseException e) { - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } - //System.out.println("SRVLT_FAIL_PERFORM 2"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_PERFORM_FAILED"), - null, resp); - return; - } - - private IExtendedPluginInfo getExtendedPluginInfo(IPublisherProcessor - p) { - Enumeration<String> mappers = p.getMapperInsts().keys(); - Enumeration<String> publishers = p.getPublisherInsts().keys(); - - StringBuffer map = new StringBuffer(); - - for (; mappers.hasMoreElements();) { - String name = mappers.nextElement(); - - if (map.length() == 0) { - map.append(name); - } else { - map.append(","); - map.append(name); - } - } - StringBuffer publish = new StringBuffer(); - - for (; publishers.hasMoreElements();) { - String name = (String) publishers.nextElement(); - - publish.append(","); - publish.append(name); - } - - String epi[] = new String[] { - "type;choice(cacert,crl,certs,xcert);The certType of the request", - "mapper;choice(" - + map.toString() - + ");Use the mapper to find the ldap dn to publish the certificate or crl", - "publisher;choice(" - + publish.toString() - + ");Use the publisher to publish the certificate or crl a directory etc", - "enable;boolean;", - "predicate;string;" - }; - - return new ExtendedPluginInfo(epi); - } - - private NameValuePairs getExtendedPluginInfo(Locale locale, String implType, String implName) { - IExtendedPluginInfo ext_info = null; - Object impl = null; - - if (implType.equals(Constants.PR_EXT_PLUGIN_IMPLTYPE_PUBLISHRULE)) { - IPublisherProcessor p_processor = mProcessor; - - // Should get the registered rules from processor - // instead of plugin - // OLD: impl = getClassByNameAsExtendedPluginInfo(plugin.getClassPath()); - impl = getExtendedPluginInfo(p_processor); - } else if (implType.equals(Constants.PR_EXT_PLUGIN_IMPLTYPE_MAPPER)) { - IPublisherProcessor p_processor = mProcessor; - Plugin plugin = (Plugin) p_processor.getMapperPlugins().get(implName - ); - - impl = getClassByNameAsExtendedPluginInfo(plugin.getClassPath()); - - } else if (implType.equals(Constants.PR_EXT_PLUGIN_IMPLTYPE_PUBLISHER)) { - IPublisherProcessor p_processor = mProcessor; - Plugin plugin = (Plugin) p_processor.getPublisherPlugins().get(implName); - - impl = getClassByNameAsExtendedPluginInfo(plugin.getClassPath()); - } - if (impl != null) { - if (impl instanceof IExtendedPluginInfo) { - ext_info = (IExtendedPluginInfo) impl; - } - } - - NameValuePairs nvps = null; - - if (ext_info == null) { - nvps = new NameValuePairs(); - } else { - nvps = convertStringArrayToNVPairs(ext_info.getExtendedPluginInfo(locale)); - } - - return nvps; - - } - - /** - * retrieve extended plugin info such as brief description, type info - * from policy, authentication, - * need to add: listener, mapper and publishing plugins - */ - private void getExtendedPluginInfo(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - int colon = id.indexOf(':'); - - String implType = id.substring(0, colon); - String implName = id.substring(colon + 1); - - NameValuePairs params = - getExtendedPluginInfo(getLocale(req), implType, implName); - - sendResponse(SUCCESS, null, params, resp); - } - - private void getLDAPDest(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - IConfigStore config = mAuth.getConfigStore(); - IConfigStore publishcfg = config.getSubStore(IPublisherProcessor.PROP_PUBLISH_SUBSTORE); - IConfigStore ldapcfg = publishcfg.getSubStore(IPublisherProcessor.PROP_LDAP_PUBLISH_SUBSTORE); - IConfigStore ldap = ldapcfg.getSubStore(IPublisherProcessor.PROP_LDAP); - - @SuppressWarnings("unchecked") - Enumeration<String> e = req.getParameterNames(); - - while (e.hasMoreElements()) { - String name = e.nextElement(); - - if (name.equals(Constants.OP_TYPE)) - continue; - if (name.equals(Constants.RS_ID)) - continue; - if (name.equals(Constants.OP_SCOPE)) - continue; - if (name.equals(Constants.PR_ENABLE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_ENABLE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_QUEUE_ENABLE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_QUEUE_THREADS)) - continue; - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PAGE_SIZE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PRIORITY)) - continue; - if (name.equals(Constants.PR_PUBLISHING_QUEUE_STATUS)) - continue; - if (name.equals(Constants.PR_CERT_NAMES)) { - ICryptoSubsystem jss = (ICryptoSubsystem) CMS.getSubsystem(CMS.SUBSYSTEM_CRYPTO); - - params.put(name, jss.getAllCerts()); - } else { - String value = ldap.getString(name, ""); - - if (value == null || value.equals("")) { - if (name.equals(ILdapBoundConnFactory.PROP_LDAPCONNINFO + "." + ILdapConnInfo.PROP_HOST)) { - value = mConfig.getString(ConfigConstants.PR_MACHINE_NAME, null); - } else if (name.equals(ILdapBoundConnFactory.PROP_LDAPCONNINFO + "." + ILdapConnInfo.PROP_PORT)) { - value = ILdapConnInfo.PROP_PORT_DEFAULT; - } else if (name.equals(ILdapBoundConnFactory.PROP_LDAPAUTHINFO + "." + ILdapAuthInfo.PROP_BINDDN)) { - value = ILdapAuthInfo.PROP_BINDDN_DEFAULT; - } - } - params.put(name, value); - } - } - params.put(Constants.PR_PUBLISHING_ENABLE, - publishcfg.getString(IPublisherProcessor.PROP_ENABLE, Constants.FALSE)); - params.put(Constants.PR_PUBLISHING_QUEUE_ENABLE, - publishcfg.getString(Constants.PR_PUBLISHING_QUEUE_ENABLE, Constants.TRUE)); - params.put(Constants.PR_PUBLISHING_QUEUE_THREADS, - publishcfg.getString(Constants.PR_PUBLISHING_QUEUE_THREADS, "3")); - params.put(Constants.PR_PUBLISHING_QUEUE_PAGE_SIZE, - publishcfg.getString(Constants.PR_PUBLISHING_QUEUE_PAGE_SIZE, "40")); - params.put(Constants.PR_PUBLISHING_QUEUE_PRIORITY, - publishcfg.getString(Constants.PR_PUBLISHING_QUEUE_PRIORITY, "0")); - params.put(Constants.PR_PUBLISHING_QUEUE_STATUS, - publishcfg.getString(Constants.PR_PUBLISHING_QUEUE_STATUS, "200")); - params.put(Constants.PR_ENABLE, - ldapcfg.getString(IPublisherProcessor.PROP_ENABLE, Constants.FALSE)); - sendResponse(SUCCESS, null, params, resp); - } - - private void setLDAPDest(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException, EBaseException { - - //Save New Settings to the config file - IConfigStore config = mAuth.getConfigStore(); - IConfigStore publishcfg = config.getSubStore(IPublisherProcessor.PROP_PUBLISH_SUBSTORE); - IConfigStore ldapcfg = publishcfg.getSubStore(IPublisherProcessor.PROP_LDAP_PUBLISH_SUBSTORE); - IConfigStore ldap = ldapcfg.getSubStore(IPublisherProcessor.PROP_LDAP); - - //set enable flag - publishcfg.putString(IPublisherProcessor.PROP_ENABLE, req.getParameter(Constants.PR_PUBLISHING_ENABLE)); - String enable = req.getParameter(Constants.PR_ENABLE); - - ldapcfg.putString(IPublisherProcessor.PROP_ENABLE, enable); - if (enable.equals("false")) { - // need to disable the ldap module here - mProcessor.setLdapConnModule(null); - } - - //set reset of the parameters - @SuppressWarnings("unchecked") - Enumeration<String> e = req.getParameterNames(); - String pwd = null; - - while (e.hasMoreElements()) { - String name = e.nextElement(); - - if (name.equals(Constants.OP_TYPE)) - continue; - if (name.equals(Constants.RS_ID)) - continue; - if (name.equals(Constants.OP_SCOPE)) - continue; - if (name.equals(Constants.PR_ENABLE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_ENABLE)) - continue; - // don't store password in the config file. - if (name.equals(Constants.PR_BIND_PASSWD)) - continue; // old style password read from config. - if (name.equals(Constants.PR_DIRECTORY_MANAGER_PWD)) { - pwd = req.getParameter(name); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_ENABLE)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_THREADS)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PAGE_SIZE)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PRIORITY)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_STATUS)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - - /* Don't enter the publishing pw into the config store */ - ldap.putString(name, req.getParameter(name)); - } - - commit(true); - - /* Do a "PUT" of the new pw to the watchdog" - ** do not remove - cfu - if (pwd != null) - CMS.putPasswordCache(PW_TAG_CA_LDAP_PUBLISHING, pwd); - */ - - // support publishing dirsrv with different pwd than internaldb - // update passwordFile - String prompt = ldap.getString(Constants.PR_BINDPWD_PROMPT); - IPasswordStore pwdStore = CMS.getPasswordStore(); - CMS.debug("PublisherAdminServlet: setLDAPDest(): saving password for " + prompt + " to password file"); - pwdStore.putPassword(prompt, pwd); - pwdStore.commit(); - CMS.debug("PublisherAdminServlet: setLDAPDest(): password saved"); - - /* we'll shut down and restart the PublisherProcessor instead - // what a hack to do this without require restart server - // ILdapAuthInfo authInfo = CMS.getLdapAuthInfo(); - ILdapConnModule connModule = mProcessor.getLdapConnModule(); - ILdapAuthInfo authInfo = null; - if (connModule != null) { - authInfo = connModule.getLdapAuthInfo(); - } - - // authInfo.addPassword(PW_TAG_CA_LDAP_PUBLISHING, pwd); - if (authInfo != null) { - CMS.debug("PublisherAdminServlet: setLDAPDest(): adding password to memory cache"); - authInfo.addPassword(prompt, pwd); - } else - CMS.debug("PublisherAdminServlet: setLDAPDest(): authInfo null"); - */ - - try { - CMS.debug("PublisherAdminServlet: setLDAPDest(): restarting publishing processor"); - mProcessor.shutdown(); - mProcessor.startup(); - CMS.debug("PublisherAdminServlet: setLDAPDest(): publishing processor restarted"); - } catch (Exception ex) { - // force to save the config even there is error - // ignore any exception - log(ILogger.LL_FAILURE, CMS.getLogMessage("ADMIN_SRVLT_FAIL_RES_LDAP", ex.toString())); - } - - //XXX See if we can dynamically in B2 - sendResponse(SUCCESS, null, null, resp); - } - - private void testSetLDAPDest(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - - CMS.debug("PublisherAdmineServlet: in testSetLDAPDest"); - //Save New Settings to the config file - IConfigStore config = mAuth.getConfigStore(); - IConfigStore publishcfg = config.getSubStore(IPublisherProcessor.PROP_PUBLISH_SUBSTORE); - IConfigStore ldapcfg = publishcfg.getSubStore(IPublisherProcessor.PROP_LDAP_PUBLISH_SUBSTORE); - IConfigStore ldap = ldapcfg.getSubStore(IPublisherProcessor.PROP_LDAP); - - //set enable flag - publishcfg.putString(IPublisherProcessor.PROP_ENABLE, - req.getParameter(Constants.PR_PUBLISHING_ENABLE)); - String ldapPublish = req.getParameter(Constants.PR_ENABLE); - - ldapcfg.putString(IPublisherProcessor.PROP_ENABLE, ldapPublish); - if (ldapPublish.equals("false")) { - // need to disable the ldap module here - mProcessor.setLdapConnModule(null); - } - - //set reset of the parameters - @SuppressWarnings("unchecked") - Enumeration<String> e = req.getParameterNames(); - String pwd = null; - - while (e.hasMoreElements()) { - String name = e.nextElement(); - - if (name.equals(Constants.OP_TYPE)) - continue; - if (name.equals(Constants.RS_ID)) - continue; - if (name.equals(Constants.OP_SCOPE)) - continue; - if (name.equals(Constants.PR_ENABLE)) - continue; - if (name.equals(Constants.PR_PUBLISHING_ENABLE)) - continue; - // don't store password in the config file. - if (name.equals(Constants.PR_BIND_PASSWD)) - continue; // old style password read from config. - if (name.equals(Constants.PR_DIRECTORY_MANAGER_PWD)) { - pwd = req.getParameter(name); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_ENABLE)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_THREADS)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PAGE_SIZE)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_PRIORITY)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - if (name.equals(Constants.PR_PUBLISHING_QUEUE_STATUS)) { - publishcfg.putString(name, req.getParameter(name)); - continue; - } - - /* Don't enter the publishing pw into the config store */ - ldap.putString(name, req.getParameter(name)); - } - - // test before commit - if (publishcfg.getBoolean(IPublisherProcessor.PROP_ENABLE) && - ldapcfg.getBoolean(IPublisherProcessor.PROP_ENABLE)) { - params.put("title", - "You've attempted to configure CMS to connect" + - " to a LDAP directory. The connection status is" + - " as follows:\n \n"); - LDAPConnection conn = null; - ILdapConnInfo connInfo = - CMS.getLdapConnInfo(ldap.getSubStore( - ILdapBoundConnFactory.PROP_LDAPCONNINFO)); - //LdapAuthInfo authInfo = - //new LdapAuthInfo(ldap.getSubStore( - // ILdapBoundConnFactory.PROP_LDAPAUTHINFO)); - String host = connInfo.getHost(); - int port = connInfo.getPort(); - boolean secure = connInfo.getSecure(); - //int authType = authInfo.getAuthType(); - String authType = ldap.getSubStore( - ILdapBoundConnFactory.PROP_LDAPAUTHINFO).getString(ILdapAuthInfo.PROP_LDAPAUTHTYPE); - int version = connInfo.getVersion(); - String bindAs = null; - String certNickName = null; - - if (authType.equals(ILdapAuthInfo.LDAP_SSLCLIENTAUTH_STR)) { - try { - //certNickName = authInfo.getParms()[0]; - certNickName = - ldap.getSubStore( - ILdapBoundConnFactory.PROP_LDAPAUTHINFO).getString( - ILdapAuthInfo.PROP_CLIENTCERTNICKNAME); - conn = new LDAPConnection(CMS.getLdapJssSSLSocketFactory( - certNickName)); - CMS.debug("Publishing Test certNickName=" + certNickName); - params.put(Constants.PR_CONN_INITED, - "Create ssl LDAPConnection with certificate: " + - certNickName + dashes(70 - 44 - certNickName.length()) + " Success"); - } catch (Exception ex) { - params.put(Constants.PR_CONN_INIT_FAIL, - "Create ssl LDAPConnection with certificate: " - + - certNickName + dashes(70 - 44 - certNickName.length()) + " failure\n" - + " exception: " + ex); - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then LDAP publishing will fail.\n" + - "Do you want to save the configuration anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - try { - conn.connect(host, port); - params.put(Constants.PR_CONN_OK, - "Connect to directory server " - + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) - + " Success"); - params.put(Constants.PR_AUTH_OK, - "Authentication: SSL client authentication" + - dashes(70 - 41) + " Success" + - "\nBind to the directory as: " + certNickName + - dashes(70 - 26 - certNickName.length()) + " Success"); - } catch (LDAPException ex) { - if (ex.getLDAPResultCode() == LDAPException.UNAVAILABLE) { - // need to intercept this because message from LDAP is - // "DSA is unavailable" which confuses with DSA PKI. - params.put(Constants.PR_CONN_FAIL, - "Connect to directory server " + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) + - " Failure\n" + - " error: server unavailable"); - } else { - params.put(Constants.PR_CONN_FAIL, - "Connect to directory server " + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) + - " Failure"); - } - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "LDAP publishing will fail.\n" + - "Do you want to save the configuration anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - } else { - try { - if (secure) { - conn = new LDAPConnection( - CMS.getLdapJssSSLSocketFactory()); - params.put(Constants.PR_CONN_INITED, - "Create ssl LDAPConnection" + - dashes(70 - 25) + " Success"); - } else { - conn = new LDAPConnection(); - params.put(Constants.PR_CONN_INITED, - "Create LDAPConnection" + - dashes(70 - 21) + " Success"); - } - } catch (Exception ex) { - params.put(Constants.PR_CONN_INIT_FAIL, - "Create LDAPConnection" + - dashes(70 - 21) + " Failure\n" + - "exception: " + ex); - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "LDAP publishing will fail.\n" + - "Do you want to save the configuration anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - try { - conn.connect(host, port); - params.put(Constants.PR_CONN_OK, - "Connect to directory server " - + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) - + " Success"); - } catch (LDAPException ex) { - if (ex.getLDAPResultCode() == LDAPException.UNAVAILABLE) { - // need to intercept this because message from LDAP is - // "DSA is unavailable" which confuses with DSA PKI. - params.put(Constants.PR_CONN_FAIL, - "Connect to directory server " - + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) - + " Failure" + - "\nerror: server unavailable"); - } else { - params.put(Constants.PR_CONN_FAIL, - "Connect to directory server " - + - host + " at port " + port + - dashes(70 - 37 - host.length() - (Integer.valueOf(port)).toString().length()) - + " Failure" + - "\nexception: " + ex); - } - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "LDAP publishing will fail.\n" + - "Do you want to save the configuration anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - try { - //bindAs = authInfo.getParms()[0]; - bindAs = ldap.getSubStore( - ILdapBoundConnFactory.PROP_LDAPAUTHINFO).getString(ILdapAuthInfo.PROP_BINDDN); - conn.authenticate(version, bindAs, pwd); - params.put(Constants.PR_AUTH_OK, - "Authentication: Basic authentication" + - dashes(70 - 36) + " Success" + - "\nBind to the directory as: " + bindAs + - dashes(70 - 26 - bindAs.length()) + " Success"); - } catch (LDAPException ex) { - if (ex.getLDAPResultCode() == LDAPException.NO_SUCH_OBJECT) { - params.put(Constants.PR_AUTH_FAIL, - "Authentication: Basic authentication" + - dashes(70 - 36) + "Failure" + - "\nBind to the directory as: " + bindAs + - dashes(70 - 26 - bindAs.length()) + - "Failure" + "\nThe object doesn't exist. " + - "Please correct the value assigned in the" + - " \"Directory manager DN\" field."); - } else if (ex.getLDAPResultCode() == LDAPException.INVALID_CREDENTIALS) { - params.put(Constants.PR_AUTH_FAIL, - "Authentication: Basic authentication" + - dashes(70 - 36) + " Failure" + - "\nBind to the directory as: " + bindAs + - dashes(70 - 26 - bindAs.length()) + - " Failure" + "\nInvalid password. " + - "Please correct the value assigned in the" + - " \"Password\" field."); - } else { - params.put(Constants.PR_AUTH_FAIL, - "Authentication: Basic authentication" + - dashes(70 - 36) + " Failure" + - "\nBind to the directory as: " + bindAs + - dashes(70 - 26 - bindAs.length()) + - " Failure"); - } - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "LDAP publishing will fail.\n" + - "Do you want to save the configuration anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - } - - } - - //commit(true); - if (ldapcfg.getBoolean(IPublisherProcessor.PROP_ENABLE) && - pwd != null) { - - /* Do a "PUT" of the new pw to the watchdog" - ** do not remove - cfu - CMS.putPasswordCache(PW_TAG_CA_LDAP_PUBLISHING, pwd); - */ - - // support publishing dirsrv with different pwd than internaldb - // update passwordFile - String prompt = ldap.getString(Constants.PR_BINDPWD_PROMPT); - IPasswordStore pwdStore = CMS.getPasswordStore(); - CMS.debug("PublisherAdminServlet: testSetLDAPDest(): saving password for " + - prompt + " to password file"); - pwdStore.putPassword(prompt, pwd); - pwdStore.commit(); - CMS.debug("PublisherAdminServlet: testSetLDAPDest(): password saved"); - /* we'll shut down and restart the PublisherProcessor instead - // what a hack to do this without require restart server - // ILdapAuthInfo authInfo = CMS.getLdapAuthInfo(); - ILdapConnModule connModule = mProcessor.getLdapConnModule(); - ILdapAuthInfo authInfo = null; - if (connModule != null) { - authInfo = connModule.getLdapAuthInfo(); - } else - CMS.debug("PublisherAdminServlet: testSetLDAPDest(): connModule null"); - - // authInfo.addPassword(PW_TAG_CA_LDAP_PUBLISHING, pwd); - if (authInfo != null) { - CMS.debug("PublisherAdminServlet: testSetLDAPDest(): adding password to memory cache"); - authInfo.addPassword(prompt, pwd); - } else - CMS.debug("PublisherAdminServlet: testSetLDAPDest(): authInfo null"); - */ - } - //params.add(Constants.PR_SAVE_OK, - // "\n \nConfiguration changes are now committed."); - - mProcessor.shutdown(); - - if (publishcfg.getBoolean(IPublisherProcessor.PROP_ENABLE)) { - mProcessor.startup(); - //params.add("restarted", "Publishing is restarted."); - - if (ldapcfg.getBoolean(IPublisherProcessor.PROP_ENABLE)) { - ICertAuthority authority = (ICertAuthority) mProcessor.getAuthority(); - - if (!(authority instanceof ICertificateAuthority)) - return; - ICertificateAuthority ca = (ICertificateAuthority) authority; - - // publish ca cert - try { - mProcessor.publishCACert(ca.getCACert()); - CMS.debug("PublisherAdminServlet: " + CMS.getLogMessage("ADMIN_SRVLT_PUB_CA_CERT")); - params.put("publishCA", - "CA certificate is published."); - } catch (Exception ex) { - // exception not thrown - not seen as a fatal error. - log(ILogger.LL_FAILURE, - CMS.getLogMessage("ADMIN_SRVLT_NO_PUB_CA_CERT", ex.toString())); - params.put("publishCA", - "Failed to publish CA certificate."); - int index = ex.toString().indexOf("Failed to create CA"); - - if (index > -1) { - params.put("createError", - ex.toString().substring(index)); - } - mProcessor.shutdown(); - // Do you want to enable LDAP publishing anyway - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "the CA certificate won't be published.\n" + - "Do you want to enable LDAP publishing anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - - } - // publish crl - try { - CMS.debug("PublisherAdminServlet: about to update CRL"); - ca.publishCRLNow(); - CMS.debug(CMS.getLogMessage("ADMIN_SRVLT_PUB_CRL")); - params.put("publishCRL", - "CRL is published."); - } catch (Exception ex) { - // exception not thrown - not seen as a fatal error. - log(ILogger.LL_FAILURE, - "Could not publish crl " + ex.toString()); - params.put("publishCRL", - "Failed to publish CRL."); - mProcessor.shutdown(); - // Do you want to enable LDAP publishing anyway - params.put(Constants.PR_SAVE_NOT, - "\n \nIf the problem is not fixed then " + - "the CRL won't be published.\n" + - "Do you want to enable LDAP publishing anyway?"); - sendResponse(SUCCESS, null, params, resp); - return; - } - } - commit(true); - params.put(Constants.PR_SAVE_OK, - "\n \nConfiguration changes are now committed."); - params.put("restarted", "Publishing is restarted."); - } else { - commit(true); - params.put(Constants.PR_SAVE_OK, - "\n \nConfiguration changes are now committed."); - params.put("stopped", - "Publishing is stopped."); - } - - //XXX See if we can dynamically in B2 - sendResponse(SUCCESS, null, params, resp); - } - - private synchronized void addMapperPlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // is the manager id unique? - if (mProcessor.getMapperPlugins().containsKey((Object) id)) { - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_PLUGIN_ID", id)) - .toString(), - null, resp); - return; - } - - String classPath = req.getParameter(Constants.PR_MAPPER_CLASS); - - if (classPath == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NULL_CLASS"), null, resp); - return; - } - - IConfigStore destStore = null; - - destStore = mConfig.getSubStore(mAuth.getId() + ".publish.mapper"); - IConfigStore instancesConfig = destStore.getSubStore("impl"); - - // Does the class exist? - Class<?> newImpl = null; - - try { - newImpl = Class.forName(classPath); - } catch (ClassNotFoundException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } catch (IllegalArgumentException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } - - // is the class an ILdapMapper? - try { - if (ILdapMapper.class.isAssignableFrom(newImpl) == false) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, - resp); - return; - } - } catch (NullPointerException e) { // unlikely, only if newImpl null. - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, resp); - return; - } - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put(Constants.PR_MAPPER_CLASS, classPath); - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // add mapper to registry. - MapperPlugin plugin = new MapperPlugin(id, classPath); - - mProcessor.getMapperPlugins().put(id, plugin); - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_MAPPER_ADDED", "")); - - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private boolean isValidID(String id) { - if (id == null) - return false; - for (int i = 0; i < id.length(); i++) { - if (!Character.isLetterOrDigit(id.charAt(i))) - return false; - } - return true; - } - - private synchronized void addMapperInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - if (!isValidID(id)) { - sendResponse(ERROR, "Invalid ID '" + id + "'", - null, resp); - return; - } - - if (mProcessor.getMapperInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get required parameters - String implname = req.getParameter( - Constants.PR_MAPPER_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - - // check if implementation exists. - MapperPlugin plugin = - (MapperPlugin) mProcessor.getMapperPlugins().get( - implname); - - if (plugin == null) { - sendResponse( - ERROR, - new EMapperPluginNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_MAPPER_PLUGIN_NOT_FOUND", - implname)).toString(), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getMapperDefaultParams(implname); - - IConfigStore destStore = mConfig.getSubStore(mAuth.getId() + ".publish.mapper"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - IConfigStore substore = instancesConfig.makeSubStore(id); - - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - String val = req.getParameter(kv.substring(0, index)); - - if (val == null) { - substore.put(kv.substring(0, index), - kv.substring(index + 1)); - } else { - substore.put(kv.substring(0, index), - val); - } - } - } - substore.put("pluginName", implname); - - // Instantiate an object for this implementation - String className = plugin.getClassPath(); - ILdapMapper mapperInst = null; - - try { - mapperInst = (ILdapMapper) Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - - // initialize the mapper - try { - mapperInst.init(substore); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } catch (Throwable e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(), null, resp); - return; - } - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // inited and commited ok. now add mapper instance to list. - mProcessor.getMapperInsts().put(id, new MapperProxy(true, mapperInst)); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_MAPPER_INST_ADDED", id)); - - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_MAPPER_IMPL_NAME, implname); - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void listMapperPlugins(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getMapperPlugins().keys(); - - while (e.hasMoreElements()) { - String name = e.nextElement(); - MapperPlugin value = (MapperPlugin) - mProcessor.getMapperPlugins().get(name); - // get Description - String c = value.getClassPath(); - String desc = "unknown"; - - try { - ILdapMapper lp = (ILdapMapper) - Class.forName(c).newInstance(); - - desc = lp.getDescription(); - } catch (Exception exp) { - sendResponse(ERROR, exp.toString(), null, - resp); - return; - } - params.put(name, value.getClassPath() + "," + desc); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - public String getMapperPluginName(ILdapMapper mapper) { - IConfigStore cs = mapper.getConfigStore(); - - try { - return cs.getString("pluginName", ""); - } catch (EBaseException e) { - return ""; - } - } - - private synchronized void listMapperInsts(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getMapperInsts().keys(); - - for (; e.hasMoreElements();) { - String name = e.nextElement(); - ILdapMapper value = mProcessor.getMapperInstance(name); - - params.put(name, getMapperPluginName(value) + ";visible"); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void delMapperInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does a`mapper instance exist? - if (mProcessor.getMapperInsts().containsKey(id) == false) { - sendResponse( - ERROR, - new EMapperNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_MAPPER_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - // only remove from memory - // cannot shutdown because we don't keep track of whether it's - // being used. - mProcessor.getMapperInsts().remove(id); - - // remove the configuration. - IConfigStore destStore = - mConfig.getSubStore( - mAuth.getId() + ".publish.mapper"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void delMapperPlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - if (mProcessor.getMapperPlugins().containsKey(id) == false) { - sendResponse( - ERROR, - new EMapperPluginNotFound(CMS - .getUserMessage(getLocale(req), "CMS_LDAP_MAPPER_PLUGIN_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - // first check if any instances from this mapper - // DON'T remove mapper if any instance - for (Enumeration<String> e = mProcessor.getMapperInsts().keys(); e.hasMoreElements();) { - String name = (String) e.nextElement(); - ILdapMapper mapper = mProcessor.getMapperInstance(name); - - if (id.equals(getMapperPluginName(mapper))) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_IN_USE"), null, resp); - return; - } - } - - // then delete this mapper - mProcessor.getMapperPlugins().remove((Object) id); - - IConfigStore destStore = - mConfig.getSubStore( - mAuth.getId() + ".publish.mapper"); - IConfigStore instancesConfig = - destStore.getSubStore("impl"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void getMapperConfig(HttpServletRequest req, - HttpServletResponse resp) - throws ServletException, IOException, EBaseException { - - String implname = req.getParameter(Constants.RS_ID); - - if (implname == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getMapperDefaultParams(implname); - NameValuePairs params = new NameValuePairs(); - - // implName is always required so always send it. - params.put(Constants.PR_MAPPER_IMPL_NAME, ""); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - sendResponse(0, null, params, resp); - return; - } - - private synchronized void getMapperInstConfig(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does mapper instance exist? - if (mProcessor.getMapperInsts().containsKey(id) == false) { - sendResponse( - ERROR, - new EMapperNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_MAPPER_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - ILdapMapper mapperInst = (ILdapMapper) - mProcessor.getMapperInstance(id); - Vector<String> configParams = mapperInst.getInstanceParams(); - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_MAPPER_IMPL_NAME, - getMapperPluginName(mapperInst)); - // implName is always required so always send it. - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void modMapperInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // Does the manager instance exist? - if (!mProcessor.getMapperInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get new implementation (same or different.) - String implname = req.getParameter(Constants.PR_MAPPER_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - // get plugin for implementation - MapperPlugin plugin = - (MapperPlugin) mProcessor.getMapperPlugins().get(implname); - - if (plugin == null) { - sendResponse( - ERROR, - new EMapperPluginNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_MAPPER_PLUGIN_NOT_FOUND", - implname)).toString(), - null, resp); - return; - } - - // save old instance substore params in case new one fails. - - ILdapMapper oldinst = - (ILdapMapper) mProcessor.getMapperInstance(id); - Vector<String> oldConfigParms = oldinst.getInstanceParams(); - NameValuePairs saveParams = new NameValuePairs(); - - // implName is always required so always include it it. - saveParams.put("pluginName", implname); - if (oldConfigParms != null) { - for (int i = 0; i < oldConfigParms.size(); i++) { - String kv = oldConfigParms.elementAt(i); - int index = kv.indexOf('='); - - saveParams.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - - // on to the new instance. - - // remove old substore. - - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() + - ".publish.mapper"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - // create new substore. - - Vector<String> configParams = mProcessor.getMapperInstanceParams(id); - - instancesConfig.removeSubStore(id); - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put("pluginName", implname); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - String key = kv.substring(0, index); - String val = req.getParameter(key); - - if (val != null) { - substore.put(key, val); - } - } - } - - // Instantiate an object for new implementation - - String className = plugin.getClassPath(); - ILdapMapper newMgrInst = null; - - try { - newMgrInst = (ILdapMapper) - Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - // initialize the mapper - - try { - newMgrInst.init(substore); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(getLocale(req)), null, - resp); - return; - } catch (Throwable e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(), null, - resp); - return; - } - - // initialized ok. commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - restore(instancesConfig, id, saveParams); - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // commited ok. replace instance. - - mProcessor.getMapperInsts().put(id, new MapperProxy(true, newMgrInst)); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_MAPPER_REPLACED", id)); - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void addRulePlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // is the rule id unique? - if (mProcessor.getRulePlugins().containsKey((Object) id)) { - sendResponse( - ERROR, - new ELdapException(CMS.getUserMessage("CMS_LDAP_SRVLT_ILL_PLUGIN_ID", id)).toString(getLocale(req)), - null, resp); - return; - } - - String classPath = req.getParameter(Constants.PR_RULE_CLASS); - - if (classPath == null) { - sendResponse(ERROR, CMS.getUserMessage("CMS_LDAP_SRVLT_NULL_CLASS"), null, resp); - return; - } - - IConfigStore destStore = null; - - destStore = mConfig.getSubStore( - mAuth.getId() + ".publish.rule"); - IConfigStore instancesConfig = destStore.getSubStore("impl"); - - // Does the class exist? - Class<?> newImpl = null; - - try { - newImpl = Class.forName(classPath); - } catch (ClassNotFoundException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } catch (IllegalArgumentException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } - - // is the class an ILdapRule? - try { - if (ILdapRule.class.isAssignableFrom(newImpl) == false) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, - resp); - return; - } - } catch (NullPointerException e) { // unlikely, only if newImpl null. - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, resp); - return; - } - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put(Constants.PR_RULE_CLASS, classPath); - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // add rule to registry. - RulePlugin plugin = new RulePlugin(id, classPath); - - mProcessor.getRulePlugins().put(id, plugin); - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_RULE_PLUG_ADDED", id)); - - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void addRuleInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - if (!isValidID(id)) { - sendResponse(ERROR, "Invalid ID '" + id + "'", - null, resp); - return; - } - - if (mProcessor.getRuleInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get required parameters - String implname = req.getParameter( - Constants.PR_RULE_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - - // check if implementation exists. - RulePlugin plugin = - (RulePlugin) mProcessor.getRulePlugins().get( - implname); - - if (plugin == null) { - sendResponse( - ERROR, - new EPublisherPluginNotFound(CMS.getUserMessage(getLocale(req), - "CMS_LDAP_PUBLISHER_PLUGIN_NOT_FOUND", implname)).toString(), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getRuleDefaultParams(implname); - - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() - + ".publish.rule"); - IConfigStore instancesConfig = - destStore.getSubStore("instance"); - IConfigStore substore = instancesConfig.makeSubStore(id); - - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - String val = req.getParameter(kv.substring(0, index)); - - if (val == null) { - substore.put(kv.substring(0, index), - kv.substring(index + 1)); - } else { - if (val.equals(NOMAPPER)) - val = ""; - substore.put(kv.substring(0, index), - val); - } - } - } - substore.put("pluginName", implname); - - // Instantiate an object for this implementation - String className = plugin.getClassPath(); - ILdapRule ruleInst = null; - - try { - ruleInst = (ILdapRule) Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - - // initialize the rule - try { - ruleInst.init(mProcessor, substore); - ruleInst.setInstanceName(id); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } catch (Throwable e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(), null, resp); - return; - } - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - // inited and commited ok. now add manager instance to list. - mProcessor.getRuleInsts().put(id, ruleInst); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_RULE_INST_ADDED", id)); - - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_RULE_IMPL_NAME, implname); - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void listRulePlugins(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getRulePlugins().keys(); - - while (e.hasMoreElements()) { - String name = e.nextElement(); - RulePlugin value = (RulePlugin) - mProcessor.getRulePlugins().get(name); - // get Description - String c = value.getClassPath(); - String desc = "unknown"; - - try { - ILdapRule lp = (ILdapRule) - Class.forName(c).newInstance(); - - desc = lp.getDescription(); - } catch (Exception exp) { - } - params.put(name, value.getClassPath() + "," + desc); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void listRuleInsts(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getRuleInsts().keys(); - - for (; e.hasMoreElements();) { - String name = e.nextElement(); - ILdapRule value = (ILdapRule) - mProcessor.getRuleInsts().get((Object) name); - String enabled = value.enabled() ? "enabled" : "disabled"; - - params.put(name, value.getInstanceName() + ";visible;" + enabled); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - public String getRulePluginName(ILdapRule rule) { - IConfigStore cs = rule.getConfigStore(); - - try { - return cs.getString("pluginName", ""); - } catch (EBaseException e) { - return ""; - } - } - - private synchronized void delRulePlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does rule exist? - if (mProcessor.getRulePlugins().containsKey(id) == false) { - sendResponse(ERROR, - new ERulePluginNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_RULE_PLUGIN_NOT_FOUND", id)) - .toString(), - null, resp); - return; - } - - // first check if any instances from this rule - // DON'T remove rule if any instance - for (Enumeration<ILdapRule> e = mProcessor.getRuleInsts().elements(); e.hasMoreElements();) { - ILdapRule rule = e.nextElement(); - - if (id.equals(getRulePluginName(rule))) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_IN_USE"), null, resp); - return; - } - } - - // then delete this rule - mProcessor.getRulePlugins().remove((Object) id); - - IConfigStore destStore = - mConfig.getSubStore( - mAuth.getId() + ".rule"); - IConfigStore instancesConfig = destStore.getSubStore("impl"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void delRuleInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // prevent deletion of admin and agent. - - // does rule instance exist? - if (mProcessor.getRuleInsts().containsKey(id) == false) { - sendResponse(ERROR, - new ERuleNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_RULE_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - // only remove from memory - // cannot shutdown because we don't keep track of whether it's - // being used. - mProcessor.getRuleInsts().remove(id); - - // remove the configuration. - IConfigStore destStore = - mConfig.getSubStore( - mAuth.getId() + ".publish.rule"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void getRuleConfig(HttpServletRequest req, - HttpServletResponse resp) - throws ServletException, IOException, EBaseException { - String implname = req.getParameter(Constants.RS_ID); - - if (implname == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getRuleDefaultParams(implname); - NameValuePairs params = new NameValuePairs(); - - // implName is always required so always send it. - params.put(Constants.PR_RULE_IMPL_NAME, ""); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - sendResponse(0, null, params, resp); - return; - } - - private synchronized void getRuleInstConfig(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does rule instance exist? - if (mProcessor.getRuleInsts().containsKey(id) == false) { - sendResponse(ERROR, - new ERuleNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_RULE_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - ILdapRule ruleInst = (ILdapRule) - mProcessor.getRuleInsts().get(id); - Vector<String> configParams = ruleInst.getInstanceParams(); - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_RULE_IMPL_NAME, - getRulePluginName(ruleInst)); - // implName is always required so always send it. - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void modRuleInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // Does the manager instance exist? - if (!mProcessor.getRuleInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get new implementation (same or different.) - String implname = req.getParameter(Constants.PR_RULE_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - - // get plugin for implementation - RulePlugin plugin = - (RulePlugin) mProcessor.getRulePlugins().get(implname); - - if (plugin == null) { - sendResponse(ERROR, - //new ERulePluginNotFound(implname).toString(getLocale(req)), - "", - null, resp); - return; - } - - // save old instance substore params in case new one fails. - - ILdapRule oldinst = - (ILdapRule) mProcessor.getRuleInsts().get((Object) id); - Vector<String> oldConfigParms = oldinst.getInstanceParams(); - NameValuePairs saveParams = new NameValuePairs(); - - // implName is always required so always include it it. - saveParams.put("pluginName", implname); - if (oldConfigParms != null) { - for (int i = 0; i < oldConfigParms.size(); i++) { - String kv = oldConfigParms.elementAt(i); - int index = kv.indexOf('='); - - saveParams.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - - // on to the new instance. - - // remove old substore. - - IConfigStore destStore = - mConfig.getSubStore( - mAuth.getId() + ".publish.rule"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - // create new substore. - - Vector<String> configParams = mProcessor.getRuleDefaultParams(implname); - - instancesConfig.removeSubStore(id); - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put("pluginName", implname); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - String key = kv.substring(0, index); - String val = req.getParameter(key); - - if (val == null) { - substore.put(key, - kv.substring(index + 1)); - } else { - if (val.equals(NOMAPPER)) - val = ""; - substore.put(key, val); - } - } - } - - // Instantiate an object for new implementation - - String className = plugin.getClassPath(); - ILdapRule newRuleInst = null; - - try { - newRuleInst = (ILdapRule) Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - - // initialize the rule - - try { - newRuleInst.init(mProcessor, substore); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } catch (Throwable e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(), null, resp); - return; - } - - // initialized ok. commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - restore(instancesConfig, id, saveParams); - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // commited ok. replace instance. - - mProcessor.getRuleInsts().put(id, newRuleInst); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_RULE_INST_REP", id)); - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void addPublisherPlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // is the manager id unique? - if (mProcessor.getPublisherPlugins().containsKey((Object) id)) { - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_PLUGIN_ID", id)) - .toString(), - null, resp); - return; - } - - String classPath = req.getParameter(Constants.PR_PUBLISHER_CLASS); - - if (classPath == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NULL_CLASS"), null, resp); - return; - } - - IConfigStore destStore = null; - - destStore = mConfig.getSubStore( - mAuth.getId() + ".publish.publisher"); - IConfigStore instancesConfig = destStore.getSubStore("impl"); - - // Does the class exist? - Class<?> newImpl = null; - - try { - newImpl = Class.forName(classPath); - } catch (ClassNotFoundException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } catch (IllegalArgumentException e) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_NO_CLASS"), null, resp); - return; - } - - // is the class an ILdapPublisher? - try { - if (ILdapPublisher.class.isAssignableFrom(newImpl) == false) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, - resp); - return; - } - } catch (NullPointerException e) { // unlikely, only if newImpl null. - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_CLASS", classPath), null, resp); - return; - } - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put(Constants.PR_PUBLISHER_CLASS, classPath); - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // add publisher to registry. - PublisherPlugin plugin = new PublisherPlugin(id, classPath); - - mProcessor.getPublisherPlugins().put(id, plugin); - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_PUB_PLUG_ADDED", id)); - - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void addPublisherInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - if (!isValidID(id)) { - sendResponse(ERROR, "Invalid ID '" + id + "'", - null, resp); - return; - } - - if (mProcessor.getPublisherInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get required parameters - String implname = req.getParameter( - Constants.PR_PUBLISHER_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - - // check if implementation exists. - PublisherPlugin plugin = - (PublisherPlugin) mProcessor.getPublisherPlugins().get( - implname); - - if (plugin == null) { - sendResponse( - ERROR, - new EPublisherPluginNotFound(CMS.getUserMessage(getLocale(req), - "CMS_LDAP_PUBLISHER_PLUGIN_NOT_FOUND", implname)).toString(), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getPublisherDefaultParams(implname); - - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() + ".publish.publisher"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - IConfigStore substore = instancesConfig.makeSubStore(id); - - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = configParams.elementAt(i); - int index = kv.indexOf('='); - String val = null; - - if (index == -1) { - val = req.getParameter(kv); - } else { - val = req.getParameter(kv.substring(0, index)); - } - if (val == null) { - if (index == -1) { - substore.put(kv, ""); - } else { - substore.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } else { - if (index == -1) { - substore.put(kv, val); - } else { - substore.put(kv.substring(0, index), - val); - } - } - } - } - substore.put("pluginName", implname); - - // Instantiate an object for this implementation - String className = plugin.getClassPath(); - ILdapPublisher publisherInst = null; - - try { - publisherInst = (ILdapPublisher) Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - - // initialize the publisher - try { - publisherInst.init(substore); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } catch (Throwable e) { - instancesConfig.removeSubStore(id); - sendResponse(ERROR, e.toString(), null, resp); - return; - } - - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - instancesConfig.removeSubStore(id); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // inited and commited ok. now add manager instance to list. - mProcessor.getPublisherInsts().put(id, new PublisherProxy(true, publisherInst)); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_PUB_INST_ADDED", id)); - - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_PUBLISHER_IMPL_NAME, implname); - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void listPublisherPlugins(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getPublisherPlugins().keys(); - - while (e.hasMoreElements()) { - String name = e.nextElement(); - PublisherPlugin value = (PublisherPlugin) - mProcessor.getPublisherPlugins().get(name); - // get Description - String c = value.getClassPath(); - String desc = "unknown"; - - try { - ILdapPublisher lp = (ILdapPublisher) - Class.forName(c).newInstance(); - - desc = lp.getDescription(); - } catch (Exception exp) { - } - params.put(name, value.getClassPath() + "," + desc); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - public String getPublisherPluginName(ILdapPublisher pub) { - IConfigStore cs = pub.getConfigStore(); - - try { - return cs.getString("pluginName", ""); - } catch (EBaseException e) { - return ""; - } - } - - private synchronized void listPublisherInsts(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - - NameValuePairs params = new NameValuePairs(); - Enumeration<String> e = mProcessor.getPublisherInsts().keys(); - - for (; e.hasMoreElements();) { - String name = e.nextElement(); - ILdapPublisher value = mProcessor.getPublisherInstance(name); - - if (value == null) - continue; - params.put(name, getPublisherPluginName(value) + ";visible"); - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void delPublisherPlugin(HttpServletRequest req, - HttpServletResponse resp, String scope) throws ServletException, - IOException, EBaseException { - - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does publisher exist? - if (mProcessor.getPublisherPlugins().containsKey(id) == false) { - sendResponse( - ERROR, - new EPublisherPluginNotFound(CMS.getUserMessage(getLocale(req), - "CMS_LDAP_PUBLISHER_PLUGIN_NOT_FOUND", id)).toString(), - null, resp); - return; - } - - // first check if any instances from this publisher - // DON'T remove publisher if any instance - for (Enumeration<String> e = mProcessor.getPublisherInsts().keys(); e.hasMoreElements();) { - String name = e.nextElement(); - ILdapPublisher publisher = - mProcessor.getPublisherInstance(name); - - if (id.equals(getPublisherPluginName(publisher))) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_IN_USE"), null, resp); - return; - } - } - - // then delete this publisher - mProcessor.getPublisherPlugins().remove((Object) id); - - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() + ".publish.publisher"); - IConfigStore instancesConfig = destStore.getSubStore("impl"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - private synchronized void delPublisherInst(HttpServletRequest req, - HttpServletResponse resp, String scope) throws ServletException, - IOException, EBaseException { - - NameValuePairs params = new NameValuePairs(); - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // prevent deletion of admin and agent. - - // does publisher instance exist? - if (mProcessor.getPublisherInsts().containsKey(id) == false) { - sendResponse(ERROR, - new EPublisherNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_PUBLISHER_NOT_FOUND", id)) - .toString(), - null, resp); - return; - } - - // only remove from memory - // cannot shutdown because we don't keep track of whether it's - // being used. - mProcessor.getPublisherInsts().remove(id); - - // remove the configuration. - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() + ".publish.publisher"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - instancesConfig.removeSubStore(id); - // commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - sendResponse(SUCCESS, null, params, resp); - return; - } - - /** - * used for getting the required configuration parameters (with - * possible default values) for a particular plugin - * implementation name specified in the RS_ID. Actually, there is - * no logic in here to set any default value here...there's no - * default value for any parameter in this publishing subsystem - * at this point. Later, if we do have one (or some), it can be - * added. The interface remains the same. - */ - private synchronized void getConfig(HttpServletRequest req, - HttpServletResponse resp) - throws ServletException, IOException, EBaseException { - - String implname = req.getParameter(Constants.RS_ID); - - if (implname == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - Vector<String> configParams = mProcessor.getPublisherDefaultParams(implname); - NameValuePairs params = new NameValuePairs(); - - // implName is always required so always send it. - params.put(Constants.PR_PUBLISHER_IMPL_NAME, ""); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - - if (index == -1) { - params.put(kv, ""); - } else { - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - } - sendResponse(0, null, params, resp); - return; - } - - private synchronized void getInstConfig(HttpServletRequest req, - HttpServletResponse resp) throws ServletException, - IOException, EBaseException { - - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // does publisher instance exist? - if (mProcessor.getPublisherInsts().containsKey(id) == false) { - sendResponse(ERROR, - new EPublisherNotFound(CMS.getUserMessage(getLocale(req), "CMS_LDAP_PUBLISHER_NOT_FOUND", id)) - .toString(), - null, resp); - return; - } - - ILdapPublisher publisherInst = (ILdapPublisher) - mProcessor.getPublisherInstance(id); - Vector<String> configParams = publisherInst.getInstanceParams(); - NameValuePairs params = new NameValuePairs(); - - params.put(Constants.PR_PUBLISHER_IMPL_NAME, - getPublisherPluginName(publisherInst)); - // implName is always required so always send it. - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - - params.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - - sendResponse(SUCCESS, null, params, resp); - return; - } - - /** - * Modify publisher instance. - * This will actually create a new instance with new configuration - * parameters and replace the old instance, if the new instance - * created and initialized successfully. - * The old instance is left running. so this is very expensive. - * Restart of server recommended. - */ - private synchronized void modPublisherInst(HttpServletRequest req, - HttpServletResponse resp, String scope) - throws ServletException, IOException, EBaseException { - - // expensive operation. - - String id = req.getParameter(Constants.RS_ID); - - if (id == null) { - //System.out.println("SRVLT_NULL_RS_ID"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_NULL_RS_ID"), - null, resp); - return; - } - - // Does the manager instance exist? - if (!mProcessor.getPublisherInsts().containsKey((Object) id)) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ILL_INST_ID", id), - null, resp); - return; - } - - // get new implementation (same or different.) - String implname = req.getParameter(Constants.PR_PUBLISHER_IMPL_NAME); - - if (implname == null) { - sendResponse(ERROR, CMS.getUserMessage(getLocale(req), "CMS_LDAP_SRVLT_ADD_MISSING_PARAMS"), null, resp); - return; - } - - // get plugin for implementation - PublisherPlugin plugin = - (PublisherPlugin) mProcessor.getPublisherPlugins().get(implname); - - if (plugin == null) { - sendResponse( - ERROR, - new EPublisherPluginNotFound(CMS.getUserMessage(getLocale(req), - "CMS_LDAP_PUBLISHER_PLUGIN_NOT_FOUND", implname)).toString(), - null, resp); - return; - } - - // save old instance substore params in case new one fails. - - ILdapPublisher oldinst = mProcessor.getPublisherInstance(id); - Vector<String> oldConfigParms = oldinst.getInstanceParams(); - NameValuePairs saveParams = new NameValuePairs(); - String pubType = ""; - - // implName is always required so always include it it. - saveParams.put("pluginName", implname); - if (oldConfigParms != null) { - for (int i = 0; i < oldConfigParms.size(); i++) { - String kv = (String) oldConfigParms.elementAt(i); - int index = kv.indexOf('='); - if (index > -1) { - if (kv.substring(0, index).equalsIgnoreCase("caObjectClass")) { - pubType = "cacert"; - } else if (kv.substring(0, index).equalsIgnoreCase("crlObjectClass")) { - pubType = "crl"; - } - - saveParams.put(kv.substring(0, index), - kv.substring(index + 1)); - } - } - } - - // on to the new instance. - - // remove old substore. - - IConfigStore destStore = - mConfig.getSubStore(mAuth.getId() + ".publish.publisher"); - IConfigStore instancesConfig = destStore.getSubStore("instance"); - - // get objects added and deleted - if (pubType.equals("cacert")) { - saveParams.put("caObjectClassAdded", instancesConfig.getString(id + ".caObjectClassAdded", "")); - saveParams.put("caObjectClassDeleted", instancesConfig.getString(id + ".caObjectClassDeleted", "")); - } else if (pubType.equals("crl")) { - saveParams.put("crlObjectClassAdded", instancesConfig.getString(id + ".crlObjectClassAdded", "")); - saveParams.put("crlObjectClassDeleted", instancesConfig.getString(id + ".crlObjectClassDeleted", "")); - } - - // create new substore. - - Vector<String> configParams = mProcessor.getPublisherInstanceParams(id); - - instancesConfig.removeSubStore(id); - - IConfigStore substore = instancesConfig.makeSubStore(id); - - substore.put("pluginName", implname); - if (configParams != null) { - for (int i = 0; i < configParams.size(); i++) { - String kv = (String) configParams.elementAt(i); - int index = kv.indexOf('='); - String key = kv.substring(0, index); - String val = req.getParameter(key); - - if (val != null) { - substore.put(key, val); - } - } - } - - // process any changes to the ldap object class definitions - if (pubType.equals("cacert")) { - processChangedOC(saveParams, substore, "caObjectClass"); - substore.put("pubtype", "cacert"); - } - - if (pubType.equals("crl")) { - processChangedOC(saveParams, substore, "crlObjectClass"); - substore.put("pubtype", "crl"); - } - - // Instantiate an object for new implementation - - String className = plugin.getClassPath(); - ILdapPublisher newMgrInst = null; - - try { - newMgrInst = (ILdapPublisher) Class.forName(className).newInstance(); - } catch (ClassNotFoundException e) { - // cleanup - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (InstantiationException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } catch (IllegalAccessException e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, - new ELdapException(CMS.getUserMessage(getLocale(req), "CMS_LDAP_FAIL_LOAD_CLASS", className)) - .toString(), - null, resp); - return; - } - - // initialize the publisher - - try { - newMgrInst.init(substore); - } catch (EBaseException e) { - // don't commit in this case and cleanup the new substore. - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(getLocale(req)), null, resp); - return; - } catch (Throwable e) { - restore(instancesConfig, id, saveParams); - sendResponse(ERROR, e.toString(), null, resp); - return; - } - - // initialized ok. commiting - try { - mConfig.commit(true); - } catch (EBaseException e) { - // clean up. - restore(instancesConfig, id, saveParams); - //System.out.println("SRVLT_FAIL_COMMIT"); - sendResponse(ERROR, - CMS.getUserMessage(getLocale(req), "CMS_ADMIN_SRVLT_COMMIT_FAILED"), - null, resp); - return; - } - - // commited ok. replace instance. - - mProcessor.getPublisherInsts().put(id, new PublisherProxy(true, newMgrInst)); - - mProcessor.log(ILogger.LL_INFO, - CMS.getLogMessage("ADMIN_SRVLT_PUB_INST_REP", id)); - - NameValuePairs params = new NameValuePairs(); - - sendResponse(SUCCESS, null, params, resp); - return; - } - - // convenience function - takes list1, list2. Returns what is in list1 - // but not in list2 - private String[] getExtras(String[] list1, String[] list2) { - Vector<String> extras = new Vector<String>(); - for (int i = 0; i < list1.length; i++) { - boolean match = false; - for (int j = 0; j < list2.length; j++) { - if ((list1[i].trim()).equalsIgnoreCase(list2[j].trim())) { - match = true; - break; - } - } - if (!match) - extras.add(list1[i].trim()); - } - - return (String[]) extras.toArray(new String[extras.size()]); - } - - // convenience function - takes list1, list2. Concatenates the two - // lists removing duplicates - private String[] joinLists(String[] list1, String[] list2) { - Vector<String> sum = new Vector<String>(); - for (int i = 0; i < list1.length; i++) { - sum.add(list1[i]); - } - - for (int i = 0; i < list2.length; i++) { - boolean match = false; - for (int j = 0; j < list1.length; j++) { - if ((list2[i].trim()).equalsIgnoreCase(list1[j].trim())) { - match = true; - break; - } - } - if (!match) - sum.add(list2[i].trim()); - } - - return (String[]) sum.toArray(new String[sum.size()]); - } - - // convenience funtion. Takes a string array and delimiter - // and returns a String with the concatenation - private static String join(String[] s, String delimiter) { - if (s.length == 0) - return ""; - - StringBuffer buffer = new StringBuffer(s[0]); - if (s.length > 1) { - for (int i = 1; i < s.length; i++) { - buffer.append(delimiter).append(s[i].trim()); - } - } - return buffer.toString(); - } - - private void processChangedOC(NameValuePairs saveParams, IConfigStore newstore, String objName) { - String newOC = null, oldOC = null; - String oldAdded = null, oldDeleted = null; - - try { - newOC = newstore.getString(objName); - } catch (Exception e) { - } - - oldOC = saveParams.get(objName); - oldAdded = saveParams.get(objName + "Added"); - oldDeleted = saveParams.get(objName + "Deleted"); - - if ((oldOC == null) || (newOC == null)) - return; - if (oldOC.equalsIgnoreCase(newOC)) - return; - - String[] oldList = oldOC.split(","); - String[] newList = newOC.split(","); - String[] deletedList = getExtras(oldList, newList); - String[] addedList = getExtras(newList, oldList); - - // CMS.debug("addedList = " + join(addedList, ",")); - // CMS.debug("deletedList = " + join(deletedList, ",")); - - if ((addedList.length == 0) && (deletedList.length == 0)) - return; // no changes - - if (oldAdded != null) { - // CMS.debug("oldAdded is " + oldAdded); - String[] oldAddedList = oldAdded.split(","); - addedList = joinLists(addedList, oldAddedList); - } - - if (oldDeleted != null) { - // CMS.debug("oldDeleted is " + oldDeleted); - String[] oldDeletedList = oldDeleted.split(","); - deletedList = joinLists(deletedList, oldDeletedList); - } - - String[] addedList1 = getExtras(addedList, deletedList); - String[] deletedList1 = getExtras(deletedList, addedList); - - //create the final strings and write to config - String addedListStr = join(addedList1, ","); - String deletedListStr = join(deletedList1, ","); - - CMS.debug("processChangedOC: added list is " + addedListStr); - CMS.debug("processChangedOC: deleted list is " + deletedListStr); - - newstore.put(objName + "Added", addedListStr); - newstore.put(objName + "Deleted", deletedListStr); - } - - // convenience routine. - private static void restore(IConfigStore store, - String id, NameValuePairs saveParams) { - store.removeSubStore(id); - IConfigStore rstore = store.makeSubStore(id); - - for (String key : saveParams.keySet()) { - String value = saveParams.get(key); - - if (value != null) - rstore.put(key, value); - } - } - - private String dashes(int len) { - String dashes = "..................................................."; - - if (len <= 0) - return ""; - String new1 = dashes.substring(0, len); - - return new1; - } - - /** - * logs an entry in the log file. - */ - public void log(int level, String msg) { - if (mLogger == null) - return; - mLogger.log(ILogger.EV_SYSTEM, - ILogger.S_LDAP, level, "PublishingAdminServlet: " + msg); - } -} |