diff options
Diffstat (limited to 'pki/base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java')
-rw-r--r-- | pki/base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java | 1591 |
1 files changed, 0 insertions, 1591 deletions
diff --git a/pki/base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java b/pki/base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java deleted file mode 100644 index 82c45d1cd..000000000 --- a/pki/base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java +++ /dev/null @@ -1,1591 +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.csadmin; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Random; -import java.util.StringTokenizer; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import netscape.ldap.LDAPAttribute; -import netscape.ldap.LDAPAttributeSet; -import netscape.ldap.LDAPConnection; -import netscape.ldap.LDAPDN; -import netscape.ldap.LDAPEntry; -import netscape.ldap.LDAPException; -import netscape.ldap.LDAPModification; -import netscape.ldap.LDAPSearchConstraints; -import netscape.ldap.LDAPSearchResults; -import netscape.ldap.LDAPv3; - -import org.apache.velocity.context.Context; - -import com.netscape.certsrv.apps.CMS; -import com.netscape.certsrv.authentication.IAuthSubsystem; -import com.netscape.certsrv.authorization.IAuthzSubsystem; -import com.netscape.certsrv.base.EBaseException; -import com.netscape.certsrv.base.IConfigStore; -import com.netscape.certsrv.ca.ICertificateAuthority; -import com.netscape.certsrv.dbs.IDBSubsystem; -import com.netscape.certsrv.ldap.ILdapConnFactory; -import com.netscape.certsrv.property.Descriptor; -import com.netscape.certsrv.property.IDescriptor; -import com.netscape.certsrv.property.PropertySet; -import com.netscape.certsrv.usrgrp.IUGSubsystem; -import com.netscape.certsrv.util.HttpInput; -import com.netscape.cms.servlet.wizard.WizardServlet; -import com.netscape.cmsutil.ldap.LDAPUtil; - -public class DatabasePanel extends WizardPanelBase { - - private static final String HOST = "localhost"; - private static final String CLONE_HOST = "Enter FQDN here"; - private static final String PORT = "389"; - private static final String BINDDN = "cn=Directory Manager"; - - private WizardServlet mServlet = null; - - public DatabasePanel() { - } - - /** - * Initializes this panel. - */ - public void init(ServletConfig config, int panelno) - throws ServletException { - setPanelNo(panelno); - setName("Internal Database"); - } - - public void init(WizardServlet servlet, ServletConfig config, int panelno, String id) - throws ServletException { - setPanelNo(panelno); - setName("Internal Database"); - setId(id); - mServlet = servlet; - } - - public void cleanUp() throws IOException { - IConfigStore cs = CMS.getConfigStore(); - cs.putBoolean("preop.Database.done", false); - } - - public boolean isPanelDone() { - IConfigStore cs = CMS.getConfigStore(); - try { - boolean s = cs.getBoolean("preop.Database.done", - false); - - if (s != true) { - return false; - } else { - return true; - } - } catch (EBaseException e) { - } - - return false; - } - - public PropertySet getUsage() { - PropertySet set = new PropertySet(); - Descriptor hostDesc = new Descriptor(IDescriptor.STRING, null, null, - "Host name"); - - set.add("hostname", hostDesc); - - Descriptor portDesc = new Descriptor(IDescriptor.INTEGER, null, null, - "Port"); - - set.add("portStr", portDesc); - - Descriptor basednDesc = new Descriptor(IDescriptor.STRING, null, null, - "Base DN"); - - set.add("basedn", basednDesc); - - Descriptor binddnDesc = new Descriptor(IDescriptor.STRING, null, null, - "Bind DN"); - - set.add("binddn", binddnDesc); - - Descriptor bindpwdDesc = new Descriptor(IDescriptor.PASSWORD, null, null, - "Bind Password"); - - set.add("bindpwd", bindpwdDesc); - - Descriptor databaseDesc = new Descriptor(IDescriptor.STRING, null, null, - "Database"); - - set.add("database", databaseDesc); - - return set; - } - - /** - * Display the panel. - */ - public void display(HttpServletRequest request, - HttpServletResponse response, - Context context) { - CMS.debug("DatabasePanel: display()"); - context.put("title", "Internal Database"); - context.put("firsttime", "false"); - IConfigStore cs = CMS.getConfigStore(); - String hostname = null; - String portStr = null; - String basedn = null; - String binddn = null; - String bindpwd = ""; - String database = null; - String errorString = ""; - String secure = "false"; - String masterReplicationPort = ""; - String cloneReplicationPort = ""; - String replicationSecurity = ""; - - try { - @SuppressWarnings("unused") - String s = cs.getString("preop.database.removeData"); // check whether it's first time - } catch (Exception e) { - context.put("firsttime", "true"); - } - - String select = ""; - try { - select = cs.getString("preop.subsystem.select", ""); - } catch (Exception e) { - } - - if (isPanelDone()) { - try { - hostname = cs.getString("internaldb.ldapconn.host", ""); - portStr = cs.getString("internaldb.ldapconn.port", ""); - basedn = cs.getString("internaldb.basedn", ""); - binddn = cs.getString("internaldb.ldapauth.bindDN", ""); - database = cs.getString("internaldb.database", ""); - secure = cs.getString("internaldb.ldapconn.secureConn", ""); - replicationSecurity = cs.getString("internaldb.ldapconn.replicationSecurity", "None"); - masterReplicationPort = cs.getString("internaldb.ldapconn.masterReplicationPort", ""); - cloneReplicationPort = cs.getString("internaldb.ldapconn.cloneReplicationPort", ""); - errorString = cs.getString("preop.database.errorString", ""); - } catch (Exception e) { - CMS.debug("DatabasePanel display: " + e.toString()); - } - } else if (select.equals("clone")) { - hostname = CLONE_HOST; - portStr = PORT; - try { - basedn = cs.getString("internaldb.basedn", ""); - } catch (Exception e) { - CMS.debug("DatabasePanel::display() - " - + "Exception=" + e.toString()); - return; - } - binddn = BINDDN; - database = basedn.substring(basedn.lastIndexOf('=') + 1); - CMS.debug("Clone: database=" + database); - } else { - hostname = HOST; - portStr = PORT; - String instanceId = ""; - String machineName = ""; - - try { - instanceId = cs.getString("instanceId", ""); - machineName = cs.getString("machineName", ""); - } catch (Exception e) { - CMS.debug("DatabasePanel display: " + e.toString()); - } - String suffix = "dc=" + machineName + "-" + instanceId; - - boolean multipleEnable = false; - try { - multipleEnable = cs.getBoolean( - "internaldb.multipleSuffix.enable", false); - } catch (Exception e) { - } - - if (multipleEnable) - basedn = "ou=" + instanceId + "," + suffix; - else - basedn = suffix; - binddn = BINDDN; - database = machineName + "-" + instanceId; - } - - context.put("clone", select); - context.put("hostname", hostname); - context.put("portStr", portStr); - context.put("basedn", basedn); - context.put("binddn", binddn); - context.put("bindpwd", bindpwd); - context.put("database", database); - context.put("secureConn", (secure.equals("true") ? "on" : "off")); - context.put("masterReplicationPort", masterReplicationPort); - context.put("cloneReplicationPort", cloneReplicationPort); - context.put("replicationSecurity", replicationSecurity); - context.put("panel", "admin/console/config/databasepanel.vm"); - context.put("errorString", errorString); - } - - public void initParams(HttpServletRequest request, Context context) - throws IOException { - IConfigStore config = CMS.getConfigStore(); - String select = ""; - try { - select = config.getString("preop.subsystem.select", ""); - } catch (Exception e) { - } - context.put("clone", select); - context.put("hostname", (request.getParameter("host") != null) ? request.getParameter("host") : ""); - context.put("portStr", (request.getParameter("port") != null) ? request.getParameter("port") : ""); - context.put("basedn", (request.getParameter("basedn") != null) ? request.getParameter("basedn") : ""); - context.put("binddn", (request.getParameter("binddn") != null) ? request.getParameter("binddn") : ""); - context.put("bindpwd", (request.getParameter("__bindpwd") != null) ? - request.getParameter("__bindpwd"): ""); - context.put("database", (request.getParameter("database") != null) ? - request.getParameter("database") : ""); - context.put("masterReplicationPort", (request.getParameter("masterReplicationPort") != null) ? - request.getParameter("masterReplicationPort"): ""); - context.put("cloneReplicationPort", (request.getParameter("cloneReplicationPort") != null) ? - request.getParameter("cloneReplicationPort"): ""); - context.put("replicationSecurity", (request.getParameter("replicationSecurity") != null) ? - request.getParameter("replicationSecurity"): "None"); - } - - /** - * Parses and validates the parameters in the request. - */ - public void parseParameters(HttpServletRequest request, - HttpServletResponse response, Context context) throws IOException { - IConfigStore cs = CMS.getConfigStore(); - - String select = ""; - try { - select = cs.getString("preop.subsystem.select", ""); - } catch (Exception e) { - } - - String hostname = HttpInput.getHostname(request, "host"); - if (hostname == null || hostname.length() == 0) { - throw new IOException("hostname is empty string"); - } - context.put("hostname", hostname); - - // this validates that port is an integer - String portStr = HttpInput.getPortNumber(request, "port"); - context.put("portStr", portStr); - - String basedn = HttpInput.getDN(request, "basedn"); - if (basedn == null || basedn.length() == 0) { - throw new IOException("basedn is empty string"); - } - context.put("basedn", basedn); - - String binddn = HttpInput.getDN(request, "binddn"); - if (binddn == null || binddn.length() == 0) { - throw new IOException("binddn is empty string"); - } - context.put("binddn", binddn); - - String database = HttpInput.getLdapDatabase(request, "database"); - if (database == null || database.length() == 0) { - throw new IOException("Database is empty string"); - } - context.put("database", database); - - String bindpwd = HttpInput.getPassword(request, "__bindpwd"); - if (bindpwd == null || bindpwd.length() == 0) { - throw new IOException("Bind password is empty string"); - } - context.put("bindpwd", bindpwd); - - String secure = HttpInput.getCheckbox(request, "secureConn"); - context.put("secureConn", secure); - - String masterReplicationPort = HttpInput.getString(request, "masterReplicationPort"); - if (masterReplicationPort != null && masterReplicationPort.length() > 0) { - try { - Integer.parseInt(masterReplicationPort); // check for errors - } catch (NumberFormatException e) { - throw new IOException("Master replication port is invalid"); - } - } - context.put("masterReplicationPort", masterReplicationPort); - - String cloneReplicationPort = HttpInput.getString(request, "cloneReplicationPort"); - if (cloneReplicationPort != null && cloneReplicationPort.length() > 0) { - try { - Integer.parseInt(cloneReplicationPort); // check for errors - } catch (Exception e) { - throw new IOException("Clone replication port is invalid"); - } - } - context.put("cloneReplicationPort", cloneReplicationPort); - - String replicationSecurity = HttpInput.getString(request, "replicationSecurity"); - context.put("replicationSecurity", replicationSecurity); - - if (select.equals("clone")) { - String masterhost = ""; - String masterport = ""; - String masterbasedn = ""; - String realhostname = ""; - try { - masterhost = cs.getString("preop.internaldb.master.ldapconn.host", ""); - masterport = cs.getString("preop.internaldb.master.ldapconn.port", ""); - masterbasedn = cs.getString("preop.internaldb.master.basedn", ""); - realhostname = cs.getString("machineName", ""); - } catch (Exception e) { - } - - if (masterhost.equals(realhostname) && masterport.equals(portStr)) { - throw new IOException("Master and clone must not share the same internal database"); - } - - if (!masterbasedn.equals(basedn)) { - throw new IOException("Master and clone should have the same base DN"); - } - } - - context.put("errorString", ""); - cs.putString("preop.database.errorString", ""); - } - - /** - * Checks if the given parameters are valid. - */ - public void validate(HttpServletRequest request, - HttpServletResponse response, - Context context) throws IOException { - - IConfigStore cs = CMS.getConfigStore(); - context.put("firsttime", "false"); - try { - @SuppressWarnings("unused") - String s = cs.getString("preop.database.removeData"); // check whether it's first time - } catch (Exception e) { - context.put("firsttime", "true"); - } - - try { - parseParameters(request, response, context); - } catch (IOException e) { - context.put("errorString", e.getMessage()); - cs.putString("preop.database.errorString", e.getMessage()); - context.put("updateStatus", "validate-failure"); - throw e; - } - - context.put("errorString", ""); - cs.putString("preop.database.errorString", ""); - } - - private LDAPConnection getLocalLDAPConn(Context context, String secure) - throws IOException { - IConfigStore cs = CMS.getConfigStore(); - - String host = ""; - String port = ""; - String pwd = ""; - String binddn = ""; - String security = ""; - - try { - host = cs.getString("internaldb.ldapconn.host"); - port = cs.getString("internaldb.ldapconn.port"); - binddn = cs.getString("internaldb.ldapauth.bindDN"); - pwd = (String) context.get("bindpwd"); - security = cs.getString("internaldb.ldapconn.secureConn"); - } catch (Exception e) { - CMS.debug("DatabasePanel populateDB: " + e.toString()); - throw new IOException( - "Failed to retrieve LDAP information from CS.cfg."); - } - - int p = -1; - - try { - p = Integer.parseInt(port); - } catch (Exception e) { - CMS.debug("DatabasePanel populateDB: " + e.toString()); - throw new IOException("Port is not valid"); - } - - LDAPConnection conn = null; - if (security.equals("true")) { - CMS.debug("DatabasePanel populateDB: creating secure (SSL) connection for internal ldap"); - conn = new LDAPConnection(CMS.getLdapJssSSLSocketFactory()); - } else { - CMS.debug("DatabasePanel populateDB: creating non-secure (non-SSL) connection for internal ldap"); - conn = new LDAPConnection(); - } - - CMS.debug("DatabasePanel connecting to " + host + ":" + p); - try { - conn.connect(host, p, binddn, pwd); - } catch (LDAPException e) { - CMS.debug("DatabasePanel populateDB: " + e.toString()); - throw new IOException("Failed to connect to the internal database."); - } - - return conn; - } - - private boolean deleteDir(File dir) { - if (dir.isDirectory()) { - String[] children = dir.list(); - for (int i = 0; i < children.length; i++) { - boolean success = deleteDir(new File(dir, children[i])); - if (!success) { - return false; - } - } - } - - // The directory is now empty so delete it - return dir.delete(); - } - - private void cleanupDB(LDAPConnection conn, String baseDN, String database) { - String[] entries = {}; - String filter = "objectclass=*"; - LDAPSearchConstraints cons = null; - String[] attrs = null; - String dn = ""; - try { - CMS.debug("Deleting baseDN: " + baseDN); - LDAPSearchResults res = conn.search(baseDN, LDAPConnection.SCOPE_BASE, filter, - attrs, true, cons); - if (res != null) - deleteEntries(res, conn, baseDN, entries); - } catch (LDAPException e) { - } - - try { - dn = "cn=mapping tree, cn=config"; - filter = "nsslapd-backend=" + database; - LDAPSearchResults res = conn.search(dn, LDAPConnection.SCOPE_ONE, filter, - attrs, true, cons); - if (res != null) { - while (res.hasMoreElements()) { - dn = res.next().getDN(); - filter = "objectclass=*"; - LDAPSearchResults res2 = conn.search(dn, LDAPConnection.SCOPE_BASE, filter, - attrs, true, cons); - if (res2 != null) - deleteEntries(res2, conn, dn, entries); - } - } - } catch (LDAPException e) { - } - - try { - dn = "cn=" + database + ",cn=ldbm database, cn=plugins, cn=config"; - LDAPSearchResults res = conn.search(dn, LDAPConnection.SCOPE_BASE, filter, - attrs, true, cons); - if (res != null) { - deleteEntries(res, conn, dn, entries); - String dbdir = getInstanceDir(conn) + "/db/" + database; - if (dbdir != null) { - CMS.debug(" Deleting dbdir " + dbdir); - boolean success = deleteDir(new File(dbdir)); - if (!success) { - CMS.debug("Unable to delete database directory " + dbdir); - } - } - } - } catch (LDAPException e) { - } - } - - private void populateDB(HttpServletRequest request, Context context, String secure) - throws IOException { - IConfigStore cs = CMS.getConfigStore(); - - String baseDN = ""; - String database = ""; - String dn = ""; - - try { - baseDN = cs.getString("internaldb.basedn"); - database = cs.getString("internaldb.database", ""); - } catch (Exception e) { - CMS.debug("DatabasePanel populateDB: " + e.toString()); - throw new IOException( - "Failed to retrieve LDAP information from CS.cfg."); - } - - String remove = HttpInput.getID(request, "removeData"); - LDAPConnection conn = getLocalLDAPConn(context, secure); - - // check that the database and baseDN do not exist - - boolean foundBaseDN = false; - boolean foundDatabase = false; - try { - LDAPEntry entry = conn.read(baseDN); - if (entry != null) - foundBaseDN = true; - } catch (LDAPException e) { - switch (e.getLDAPResultCode()) { - case LDAPException.NO_SUCH_OBJECT: - break; - default: - CMS.debug("DatabasePanel update: LDAPException " + e.toString()); - throw new IOException("Failed to create the database"); - } - } - - try { - dn = "cn=" + database + ",cn=ldbm database, cn=plugins, cn=config"; - LDAPEntry entry = conn.read(dn); - if (entry != null) - foundDatabase = true; - } catch (LDAPException e) { - switch (e.getLDAPResultCode()) { - case LDAPException.NO_SUCH_OBJECT: - break; - default: - CMS.debug("DatabasePanel update: LDAPException " + e.toString()); - throw new IOException("Failed to create the database"); - } - } - try { - dn = "cn=\"" + baseDN + "\",cn=mapping tree, cn=config"; - LDAPEntry entry = conn.read(dn); - if (entry != null) - foundDatabase = true; - } catch (LDAPException e) { - switch (e.getLDAPResultCode()) { - case LDAPException.NO_SUCH_OBJECT: - break; - default: - CMS.debug("DatabasePanel update: LDAPException " + e.toString()); - throw new IOException("Failed to create the database"); - } - } - - if (foundDatabase) { - CMS.debug("DatabasePanel update: This database has already been used."); - if (remove == null) { - throw new IOException( - "This database has already been used. Select the checkbox below to remove all data and reuse this database"); - } else { - CMS.debug("DatabasePanel update: Deleting existing DB and reusing base DN"); - cleanupDB(conn, baseDN, database); - foundBaseDN = false; - foundDatabase = false; - } - } - - if (foundBaseDN) { - CMS.debug("DatabasePanel update: This base DN has already been used."); - if (remove == null) { - throw new IOException( - "This base DN (" - + baseDN - + ") has already been used. Select the checkbox below to remove all data and reuse this base DN"); - } else { - CMS.debug("DatabasePanel update: Deleting existing DB and reusing base DN"); - cleanupDB(conn, baseDN, database); - foundBaseDN = false; - foundDatabase = false; - } - } - - // create database - try { - LDAPAttributeSet attrs = new LDAPAttributeSet(); - String oc[] = { "top", "extensibleObject", "nsBackendInstance" }; - attrs.add(new LDAPAttribute("objectClass", oc)); - attrs.add(new LDAPAttribute("cn", database)); - attrs.add(new LDAPAttribute("nsslapd-suffix", baseDN)); - dn = "cn=" + database + ",cn=ldbm database, cn=plugins, cn=config"; - LDAPEntry entry = new LDAPEntry(dn, attrs); - conn.add(entry); - } catch (Exception e) { - CMS.debug("Warning: database creation error - " + e.toString()); - throw new IOException("Failed to create the database."); - } - - try { - LDAPAttributeSet attrs = new LDAPAttributeSet(); - String oc2[] = { "top", "extensibleObject", "nsMappingTree" }; - attrs.add(new LDAPAttribute("objectClass", oc2)); - attrs.add(new LDAPAttribute("cn", baseDN)); - attrs.add(new LDAPAttribute("nsslapd-backend", database)); - attrs.add(new LDAPAttribute("nsslapd-state", "Backend")); - dn = "cn=\"" + baseDN + "\",cn=mapping tree, cn=config"; - LDAPEntry entry = new LDAPEntry(dn, attrs); - conn.add(entry); - } catch (Exception e) { - CMS.debug("Warning: database mapping tree creation error - " + e.toString()); - throw new IOException("Failed to create the database."); - } - - try { - // create base dn - CMS.debug("Creating base DN: " + baseDN); - String dns3[] = LDAPDN.explodeDN(baseDN, false); - StringTokenizer st = new StringTokenizer(dns3[0], "="); - String n = st.nextToken(); - String v = st.nextToken(); - LDAPAttributeSet attrs = new LDAPAttributeSet(); - String oc3[] = { "top", "domain" }; - if (n.equals("o")) { - oc3[1] = "organization"; - } else if (n.equals("ou")) { - oc3[1] = "organizationalUnit"; - } - attrs.add(new LDAPAttribute("objectClass", oc3)); - attrs.add(new LDAPAttribute(n, v)); - - LDAPEntry entry = new LDAPEntry(baseDN, attrs); - conn.add(entry); - } catch (Exception e) { - CMS.debug("Warning: suffix creation error - " + e.toString()); - throw new IOException("Failed to create the base DN: " + baseDN); - } - - // check to see if the base dn exists - CMS.debug("DatabasePanel checking existing " + baseDN); - - try { - LDAPEntry entry = conn.read(baseDN); - - if (entry != null) { - foundBaseDN = true; - } - } catch (LDAPException e) { - } - boolean createBaseDN = true; - - boolean testing = false; - try { - testing = cs.getBoolean("internaldb.multipleSuffix.enable", false); - } catch (Exception e) { - } - - if (!foundBaseDN) { - if (!testing) { - context.put("errorString", - "Base DN was not found. Please make sure to create the suffix in the internal database."); - throw new IOException("Base DN not found"); - } - - if (createBaseDN) { - // only auto create if it is an ou entry - String dns1[] = LDAPDN.explodeDN(baseDN, false); - - if (dns1 == null) { - throw new IOException("Invalid base DN"); - } - if (!dns1[0].startsWith("ou")) { - throw new IOException( - "Failed to find base DN, and failed to create non ou entry."); - } - String dns2[] = LDAPDN.explodeDN(baseDN, true); - // support only one level creation - create new entry - // right under the suffix - LDAPAttributeSet attrs = new LDAPAttributeSet(); - String oc[] = { "top", "organizationalUnit" }; - - attrs.add(new LDAPAttribute("objectClass", oc)); - attrs.add(new LDAPAttribute("ou", dns2[0])); - LDAPEntry entry = new LDAPEntry(baseDN, attrs); - - try { - conn.add(entry); - foundBaseDN = true; - CMS.debug("DatabasePanel added " + baseDN); - } catch (LDAPException e) { - throw new IOException("Failed to create " + baseDN); - } - } - } - if (!foundBaseDN) { - throw new IOException("Failed to find base DN"); - } - - String select = ""; - try { - select = cs.getString("preop.subsystem.select", ""); - } catch (Exception e) { - } - - if (select.equals("clone")) { - // if this is clone, add index before replication - // don't put in the schema or bad things will happen - importLDIFS("preop.internaldb.ldif", conn); - importLDIFS("preop.internaldb.index_ldif", conn); - importLDIFS("preop.internaldb.manager_ldif", conn); - } else { - // data will be replicated from the master to the clone - // so clone does not need the data - importLDIFS("preop.internaldb.schema.ldif", conn); - importLDIFS("preop.internaldb.ldif", conn); - importLDIFS("preop.internaldb.data_ldif", conn); - importLDIFS("preop.internaldb.index_ldif", conn); - importLDIFS("preop.internaldb.manager_ldif", conn); - } - - try { - conn.disconnect(); - } catch (LDAPException e) { - } - } - - private void importLDIFS(String param, LDAPConnection conn) throws IOException { - IConfigStore cs = CMS.getConfigStore(); - String v = null; - - CMS.debug("DatabasePanel populateDB param=" + param); - try { - v = cs.getString(param); - } catch (EBaseException e) { - CMS.debug("DatabasePanel populateDB: " + e.toString()); - throw new IOException("Cant find ldif files."); - } - - StringTokenizer tokenizer = new StringTokenizer(v, ","); - String baseDN = null; - String database = null; - - try { - baseDN = cs.getString("internaldb.basedn"); - } catch (EBaseException e) { - throw new IOException("internaldb.basedn is missing."); - } - - try { - database = cs.getString("internaldb.database"); - CMS.debug("DatabasePanel update: database=" + database); - } catch (EBaseException e) { - CMS.debug( - "DatabasePanel update: Failed to get database name. Exception: " - + e.toString()); - database = "userRoot"; - } - - String instancePath = null; - - try { - instancePath = cs.getString("instanceRoot"); - } catch (EBaseException e) { - throw new IOException("instanceRoot is missing"); - } - - String instanceId = null; - - try { - instanceId = cs.getString("instanceId"); - } catch (EBaseException e) { - throw new IOException("instanceId is missing"); - } - - String dbuser = null; - try { - dbuser = "uid=" + cs.getString("cs.type") + "-" + cs.getString("machineName") + "-" - + cs.getString("service.securePort") + ",ou=people," + baseDN; - } catch (EBaseException e) { - CMS.debug("Unable to construct dbuser" + e.toString()); - e.printStackTrace(); - throw new IOException("unable to construct dbuser"); - } - - String configDir = instancePath + File.separator + "conf"; - - while (tokenizer.hasMoreTokens()) { - String token = tokenizer.nextToken().trim(); - int index = token.lastIndexOf("/"); - String name = token; - - if (index != -1) { - name = token.substring(index + 1); - } - - CMS.debug("DatabasePanel importLDIFS: ldif file = " + token); - String filename = configDir + File.separator + name; - - CMS.debug("DatabasePanel importLDIFS: ldif file copy to " + filename); - PrintStream ps = null; - BufferedReader in = null; - - try { - in = new BufferedReader(new FileReader(token)); - ps = new PrintStream(new FileOutputStream(filename, false)); - while (in.ready()) { - String s = in.readLine(); - int n = s.indexOf("{"); - - if (n == -1) { - ps.println(s); - } else { - boolean endOfline = false; - - while (n != -1) { - ps.print(s.substring(0, n)); - int n1 = s.indexOf("}"); - String tok = s.substring(n + 1, n1); - - if (tok.equals("instanceId")) { - ps.print(instanceId); - } else if (tok.equals("rootSuffix")) { - ps.print(baseDN); - } else if (tok.equals("database")) { - ps.print(database); - } else if (tok.equals("dbuser")) { - ps.print(dbuser); - } - if ((s.length() + 1) == n1) { - endOfline = true; - break; - } - s = s.substring(n1 + 1); - n = s.indexOf("{"); - } - - if (!endOfline) { - ps.println(s); - } - } - } - in.close(); - ps.close(); - } catch (Exception e) { - CMS.debug("DBSubsystem popuateDB: " + e.toString()); - throw new IOException( - "Problem of copying ldif file: " + filename); - } - ArrayList<String> errors = new ArrayList<String>(); - LDAPUtil.importLDIF(conn, filename, errors); - if (! errors.isEmpty()) { - CMS.debug("DatabasePanel: importLDIFS: LDAP Errors in importing " + filename); - for (String error: errors) { - CMS.debug(error); - } - } - } - } - - - /** - * Commit parameter changes - */ - public void update(HttpServletRequest request, - HttpServletResponse response, - Context context) throws IOException { - IConfigStore cs = CMS.getConfigStore(); - boolean hasErr = false; - - context.put("firsttime", "false"); - try { - @SuppressWarnings("unused") - String s = cs.getString("preop.database.removeData"); // check whether it's first time - } catch (Exception e) { - context.put("firsttime", "true"); - } - - String hostname1 = ""; - String portStr1 = ""; - String database1 = ""; - String masterPortStr = ""; - - try { - hostname1 = cs.getString("internaldb.ldapconn.host", ""); - portStr1 = cs.getString("internaldb.ldapconn.port", ""); - database1 = cs.getString("internaldb.database", ""); - masterPortStr = cs.getString("preop.internaldb.master.ldapconn.port", "0"); - } catch (Exception e) { - } - - try { - parseParameters(request, response, context); - } catch (IOException e) { - context.put("errorString", e.getMessage()); - cs.putString("preop.database.errorString", e.getMessage()); - context.put("updateStatus", "validate-failure"); - throw e; - } - - String hostname2 = (String) context.get("hostname"); - String portStr2 = (String) context.get("portStr"); - String database2 = (String) context.get("database"); - String basedn2 = (String) context.get("basedn"); - String binddn = (String) context.get("binddn"); - String secure = (String) context.get("secureConn"); - String masterReplicationPortStr = (String) context.get("masterReplicationPort"); - String cloneReplicationPortStr = (String) context.get("cloneReplicationPort"); - - cs.putString("internaldb.ldapconn.host", hostname2); - cs.putString("internaldb.ldapconn.port", portStr2); - cs.putString("internaldb.database", database2); - cs.putString("internaldb.basedn", basedn2); - cs.putString("internaldb.ldapauth.bindDN", binddn); - cs.putString("internaldb.ldapconn.secureConn", (secure.equals("on") ? "true" : "false")); - - int masterReplicationPort = 0; - if ((masterReplicationPortStr == null) || (masterReplicationPortStr.length() == 0)) { - masterReplicationPortStr = masterPortStr; - } - masterReplicationPort = Integer.parseInt(masterReplicationPortStr); - cs.putString("internaldb.ldapconn.masterReplicationPort", masterReplicationPortStr); - - int cloneReplicationPort = 0; - int port = Integer.parseInt(portStr2); - if ((cloneReplicationPortStr == null) || (cloneReplicationPortStr.length() == 0)) { - cloneReplicationPortStr = portStr2; - } - cloneReplicationPort = Integer.parseInt(cloneReplicationPortStr); - cs.putString("internaldb.ldapconn.cloneReplicationPort", cloneReplicationPortStr); - - String replicationSecurity = HttpInput.getString(request, "replicationSecurity"); - if ((cloneReplicationPort == port) && (secure.equals("true"))) { - replicationSecurity = "SSL"; - } else if (replicationSecurity == null) { - replicationSecurity = "None"; - } - cs.putString("internaldb.ldapconn.replicationSecurity", replicationSecurity); - - String remove = HttpInput.getID(request, "removeData"); - if (isPanelDone() && (remove == null || remove.equals(""))) { - /* if user submits the same data, they just want to skip - to the next panel, no database population is required. */ - if (hostname1.equals(hostname2) && - portStr1.equals(portStr2) && - database1.equals(database2)) { - context.put("updateStatus", "success"); - return; - } - } - - mServlet.cleanUpFromPanel(mServlet.getPanelNo(request)); - - try { - populateDB(request, context, (secure.equals("on") ? "true" : "false")); - } catch (IOException e) { - CMS.debug("DatabasePanel update: populateDB Exception: " + e.toString()); - context.put("updateStatus", "failure"); - throw e; - } catch (Exception e) { - CMS.debug("DatabasePanel update: populateDB Exception: " + e.toString()); - context.put("errorString", e.toString()); - cs.putString("preop.database.errorString", e.toString()); - context.put("updateStatus", "failure"); - throw new IOException(e.toString()); - } - - String bindpwd = HttpInput.getPassword(request, "__bindpwd"); - - /* BZ 430745 create password for replication manager */ - String replicationpwd = Integer.toString(new Random().nextInt()); - - IConfigStore psStore = null; - String passwordFile = null; - - try { - passwordFile = cs.getString("passwordFile"); - psStore = CMS.createFileConfigStore(passwordFile); - } catch (Exception e) { - CMS.debug("ConfigDatabaseServlet update: " + e.toString()); - context.put("updateStatus", "failure"); - throw new IOException(e.toString()); - } - psStore.putString("internaldb", bindpwd); - psStore.putString("replicationdb", replicationpwd); - cs.putString("preop.internaldb.replicationpwd", replicationpwd); - cs.putString("preop.database.removeData", "false"); - - try { - cs.commit(false); - psStore.commit(false); - CMS.reinit(IDBSubsystem.SUB_ID); - String type = cs.getString("cs.type", ""); - if (type.equals("CA")) - CMS.reinit(ICertificateAuthority.ID); - CMS.reinit(IAuthSubsystem.ID); - CMS.reinit(IAuthzSubsystem.ID); - CMS.reinit(IUGSubsystem.ID); - } catch (Exception e) { - CMS.debug("DatabasePanel update: " + e.toString()); - context.put("errorString", e.toString()); - cs.putString("preop.database.errorString", e.toString()); - context.put("updateStatus", "failure"); - throw new IOException(e.toString()); - } - - String select = ""; - try { - select = cs.getString("preop.subsystem.select", ""); - } catch (Exception e) { - } - - // always populate the index the last - try { - CMS.debug("Populating local indexes"); - LDAPConnection conn = getLocalLDAPConn(context, - (secure.equals("on") ? "true" : "false")); - importLDIFS("preop.internaldb.post_ldif", conn); - - /* For vlvtask, we need to check if the task has - been completed or not. Presence of nsTaskExitCode means task is complete - */ - String wait_dn = cs.getString("preop.internaldb.wait_dn", ""); - if (!wait_dn.equals("")) { - int i = 0; - LDAPEntry task = null; - boolean taskComplete = false; - CMS.debug("Checking wait_dn " + wait_dn); - do { - Thread.sleep(1000); - try { - task = conn.read(wait_dn, (String[]) null); - if (task != null) { - LDAPAttribute attr = task.getAttribute("nsTaskExitCode"); - if (attr != null) { - taskComplete = true; - String val = (String) attr.getStringValues().nextElement(); - if (val.compareTo("0") != 0) { - CMS.debug("Error in populating local indexes: nsTaskExitCode=" + val); - } - } - } - } catch (LDAPException le) { - CMS.debug("Still checking wait_dn '" + wait_dn + "' (" + le.toString() + ")"); - } catch (Exception e) { - CMS.debug("Still checking wait_dn '" + wait_dn + "' (" + e.toString() + ")."); - } - } while ((!taskComplete) && (i < 20)); - if (i < 20) { - CMS.debug("Done checking wait_dn " + wait_dn); - } else { - CMS.debug("Done checking wait_dn " + wait_dn + " due to timeout."); - } - } - - conn.disconnect(); - CMS.debug("Done populating local indexes"); - } catch (Exception e) { - CMS.debug("Populating index failure - " + e); - } - - // setup replication after indexes have been created - if (select.equals("clone")) { - CMS.debug("Start setting up replication."); - setupReplication(request, context, (secure.equals("on") ? "true" : "false"), - replicationSecurity, masterReplicationPort, cloneReplicationPort); - CMS.debug("Finish setting up replication."); - - try { - CMS.reinit(IDBSubsystem.SUB_ID); - String type = cs.getString("cs.type", ""); - if (type.equals("CA")) - CMS.reinit(ICertificateAuthority.ID); - CMS.reinit(IAuthSubsystem.ID); - CMS.reinit(IAuthzSubsystem.ID); - CMS.reinit(IUGSubsystem.ID); - } catch (Exception e) { - } - } - - if (hasErr == false) { - cs.putBoolean("preop.Database.done", true); - try { - cs.commit(false); - } catch (EBaseException e) { - CMS.debug( - "DatabasePanel: update() Exception caught at config commit: " - + e.toString()); - } - } - context.put("updateStatus", "success"); - } - - private void setupReplication(HttpServletRequest request, - Context context, String secure, String replicationSecurity, - int masterReplicationPort, int cloneReplicationPort) - throws IOException { - IConfigStore cs = CMS.getConfigStore(); - - String cstype = ""; - String machinename = ""; - String instanceId = ""; - try { - cstype = cs.getString("cs.type"); - cstype = toLowerCaseSubsystemType(cstype); - machinename = cs.getString("machineName", ""); - instanceId = cs.getString("instanceId", ""); - } catch (Exception e) { - } - - //setup replication agreement - String masterAgreementName = "masterAgreement1-" + machinename + "-" + instanceId; - cs.putString("internaldb.replication.master", masterAgreementName); - String cloneAgreementName = "cloneAgreement1-" + machinename + "-" + instanceId; - cs.putString("internaldb.replication.consumer", cloneAgreementName); - - try { - cs.commit(false); - } catch (Exception e) { - } - - // get connection to master - LDAPConnection masterConn = null; - ILdapConnFactory masterFactory = null; - try { - IConfigStore masterCfg = cs.getSubStore("preop.internaldb.master"); - masterFactory = CMS.getLdapBoundConnFactory(); - masterFactory.init(masterCfg); - masterConn = masterFactory.getConn(); - } catch (Exception e) { - CMS.debug("Failed to set up connection to master:" + e.toString()); - e.printStackTrace(); - throw new IOException("Failed to set up replication: No connection to master"); - } - - // get connection to replica - LDAPConnection replicaConn = null; - ILdapConnFactory replicaFactory = null; - try { - IConfigStore replicaCfg = cs.getSubStore("internaldb"); - replicaFactory = CMS.getLdapBoundConnFactory(); - replicaFactory.init(replicaCfg); - replicaConn = replicaFactory.getConn(); - } catch (Exception e) { - CMS.debug("Failed to set up connection to replica:" + e.toString()); - e.printStackTrace(); - throw new IOException("Failed to set up replication: No connection to replica"); - } - - String master_hostname = ""; - String master_replicationpwd = ""; - String replica_hostname = ""; - String replica_replicationpwd = ""; - - try { - master_hostname = cs.getString("preop.internaldb.master.ldapconn.host", ""); - master_replicationpwd = cs.getString("preop.internaldb.master.replication.password", ""); - replica_hostname = cs.getString("internaldb.ldapconn.host", ""); - replica_replicationpwd = cs.getString("preop.internaldb.replicationpwd", ""); - } catch (Exception e) { - } - - String basedn = ""; - try { - basedn = cs.getString("internaldb.basedn"); - } catch (Exception e) { - } - - try { - String suffix = cs.getString("internaldb.basedn", ""); - - String replicadn = "cn=replica,cn=\"" + suffix + "\",cn=mapping tree,cn=config"; - CMS.debug("DatabasePanel setupReplication: replicadn=" + replicadn); - - String masterBindUser = "Replication Manager " + masterAgreementName; - String cloneBindUser = "Replication Manager " + cloneAgreementName; - - createReplicationManager(masterConn, masterBindUser, master_replicationpwd); - createReplicationManager(replicaConn, cloneBindUser, replica_replicationpwd); - - String dir1 = getInstanceDir(masterConn); - createChangeLog(masterConn, dir1 + "/changelogs"); - - String dir2 = getInstanceDir(replicaConn); - createChangeLog(replicaConn, dir2 + "/changelogs"); - - int replicaId = cs.getInteger("dbs.beginReplicaNumber", 1); - - replicaId = enableReplication(replicadn, masterConn, masterBindUser, basedn, replicaId); - replicaId = enableReplication(replicadn, replicaConn, cloneBindUser, basedn, replicaId); - cs.putString("dbs.beginReplicaNumber", Integer.toString(replicaId)); - - CMS.debug("DatabasePanel setupReplication: Finished enabling replication"); - - createReplicationAgreement(replicadn, masterConn, masterAgreementName, - replica_hostname, cloneReplicationPort, replica_replicationpwd, basedn, - cloneBindUser, secure, replicationSecurity); - - createReplicationAgreement(replicadn, replicaConn, cloneAgreementName, - master_hostname, masterReplicationPort, master_replicationpwd, basedn, - masterBindUser, secure, replicationSecurity); - - // initialize consumer - initializeConsumer(replicadn, masterConn, masterAgreementName); - - while (!replicationDone(replicadn, masterConn, masterAgreementName)) { - CMS.debug("DatabasePanel setupReplication: Waiting for replication to complete"); - Thread.sleep(1000); - } - - String status = replicationStatus(replicadn, masterConn, masterAgreementName); - if (!status.startsWith("0 ")) { - CMS.debug("DatabasePanel setupReplication: consumer initialization failed. " + - status); - throw new IOException("consumer initialization failed. " + status); - } - - // remove master ldap password from password.conf (if present) - String passwordFile = cs.getString("passwordFile"); - IConfigStore psStore = CMS.createFileConfigStore(passwordFile); - psStore.remove("master_internaldb"); - psStore.commit(false); - - } catch (Exception e) { - CMS.debug("DatabasePanel setupReplication: " + e.toString()); - throw new IOException("Failed to setup the replication for cloning."); - } - } - - /** - * If validiate() returns false, this method will be called. - */ - public void displayError(HttpServletRequest request, - HttpServletResponse response, - Context context) { - - try { - initParams(request, context); - } catch (IOException e) { - } - context.put("title", "Database"); - context.put("panel", "admin/console/config/databasepanel.vm"); - } - - private void createReplicationManager(LDAPConnection conn, String bindUser, String pwd) - throws LDAPException { - LDAPAttributeSet attrs = null; - LDAPEntry entry = null; - String dn = "cn=" + bindUser + ",ou=csusers,cn=config"; - try { - attrs = new LDAPAttributeSet(); - attrs.add(new LDAPAttribute("objectclass", "top")); - attrs.add(new LDAPAttribute("objectclass", "person")); - attrs.add(new LDAPAttribute("userpassword", pwd)); - attrs.add(new LDAPAttribute("cn", bindUser)); - attrs.add(new LDAPAttribute("sn", "manager")); - entry = new LDAPEntry(dn, attrs); - conn.add(entry); - } catch (LDAPException e) { - if (e.getLDAPResultCode() == LDAPException.ENTRY_ALREADY_EXISTS) { - CMS.debug("DatabasePanel createReplicationManager: Replication Manager has already used"); - try { - conn.delete(dn); - conn.add(entry); - } catch (LDAPException ee) { - CMS.debug("DatabasePanel createReplicationManager: " + ee.toString()); - } - return; - } else { - CMS.debug("DatabasePanel createReplicationManager: Failed to create replication manager. Exception: " - + e.toString()); - throw e; - } - } - - CMS.debug("DatabasePanel createReplicationManager: Successfully created Replication Manager"); - } - - private void createChangeLog(LDAPConnection conn, String dir) - throws LDAPException { - LDAPAttributeSet attrs = null; - LDAPEntry entry = null; - String dn = "cn=changelog5,cn=config"; - try { - attrs = new LDAPAttributeSet(); - attrs.add(new LDAPAttribute("objectclass", "top")); - attrs.add(new LDAPAttribute("objectclass", "extensibleObject")); - attrs.add(new LDAPAttribute("cn", "changelog5")); - attrs.add(new LDAPAttribute("nsslapd-changelogdir", dir)); - entry = new LDAPEntry(dn, attrs); - conn.add(entry); - } catch (LDAPException e) { - if (e.getLDAPResultCode() == LDAPException.ENTRY_ALREADY_EXISTS) { - CMS.debug("DatabasePanel createChangeLog: Changelog entry has already used"); - /* leave it, dont delete it because it will have operation error - try { - conn.delete(dn); - conn.add(entry); - } catch (LDAPException ee) { - CMS.debug("DatabasePanel createChangeLog: "+ee.toString()); - } - */ - return; - } else { - CMS.debug("DatabasePanel createChangeLog: Failed to create changelog entry. Exception: " + e.toString()); - throw e; - } - } - - CMS.debug("DatabasePanel createChangeLog: Successfully create change log entry"); - } - - private int enableReplication(String replicadn, LDAPConnection conn, String bindUser, String basedn, int id) - throws LDAPException { - CMS.debug("DatabasePanel enableReplication: replicadn: " + replicadn); - LDAPAttributeSet attrs = null; - LDAPEntry entry = null; - try { - attrs = new LDAPAttributeSet(); - attrs.add(new LDAPAttribute("objectclass", "top")); - attrs.add(new LDAPAttribute("objectclass", "nsDS5Replica")); - attrs.add(new LDAPAttribute("objectclass", "extensibleobject")); - attrs.add(new LDAPAttribute("nsDS5ReplicaRoot", basedn)); - attrs.add(new LDAPAttribute("nsDS5ReplicaType", "3")); - attrs.add(new LDAPAttribute("nsDS5ReplicaBindDN", - "cn=" + bindUser + ",ou=csusers,cn=config")); - attrs.add(new LDAPAttribute("cn", "replica")); - attrs.add(new LDAPAttribute("nsDS5ReplicaId", Integer.toString(id))); - attrs.add(new LDAPAttribute("nsds5flags", "1")); - entry = new LDAPEntry(replicadn, attrs); - conn.add(entry); - } catch (LDAPException e) { - if (e.getLDAPResultCode() == LDAPException.ENTRY_ALREADY_EXISTS) { - /* BZ 470918 -we cant just add the new dn. We need to do a replace instead - * until the DS code is fixed */ - CMS.debug("DatabasePanel enableReplication: " + replicadn + " has already been used"); - - try { - entry = conn.read(replicadn); - LDAPAttribute attr = entry.getAttribute("nsDS5ReplicaBindDN"); - attr.addValue("cn=" + bindUser + ",ou=csusers,cn=config"); - LDAPModification mod = new LDAPModification(LDAPModification.REPLACE, attr); - conn.modify(replicadn, mod); - } catch (LDAPException ee) { - CMS.debug("DatabasePanel enableReplication: Failed to modify " - + replicadn + " entry. Exception: " + e.toString()); - } - return id; - } else { - CMS.debug("DatabasePanel enableReplication: Failed to create " - + replicadn + " entry. Exception: " + e.toString()); - return id; - } - } - - CMS.debug("DatabasePanel enableReplication: Successfully create " + replicadn + " entry."); - return id + 1; - } - - private void createReplicationAgreement(String replicadn, - LDAPConnection conn, String name, String replicahost, int replicaport, - String replicapwd, String basedn, String bindUser, String secure, String replicationSecurity) - throws LDAPException { - String dn = "cn=" + name + "," + replicadn; - CMS.debug("DatabasePanel createReplicationAgreement: dn: " + dn); - LDAPEntry entry = null; - LDAPAttributeSet attrs = null; - try { - attrs = new LDAPAttributeSet(); - attrs.add(new LDAPAttribute("objectclass", "top")); - attrs.add(new LDAPAttribute("objectclass", - "nsds5replicationagreement")); - attrs.add(new LDAPAttribute("cn", name)); - attrs.add(new LDAPAttribute("nsDS5ReplicaRoot", basedn)); - attrs.add(new LDAPAttribute("nsDS5ReplicaHost", replicahost)); - - attrs.add(new LDAPAttribute("nsDS5ReplicaPort", "" + replicaport)); - attrs.add(new LDAPAttribute("nsDS5ReplicaBindDN", - "cn=" + bindUser + ",ou=csusers,cn=config")); - attrs.add(new LDAPAttribute("nsDS5ReplicaBindMethod", "Simple")); - attrs.add(new LDAPAttribute("nsds5replicacredentials", replicapwd)); - - if (replicationSecurity.equals("SSL")) { - attrs.add(new LDAPAttribute("nsDS5ReplicaTransportInfo", "SSL")); - } else if (replicationSecurity.equals("TLS")) { - attrs.add(new LDAPAttribute("nsDS5ReplicaTransportInfo", "TLS")); - } - - CMS.debug("About to set description attr to " + name); - attrs.add(new LDAPAttribute("description", name)); - - entry = new LDAPEntry(dn, attrs); - conn.add(entry); - } catch (LDAPException e) { - if (e.getLDAPResultCode() == LDAPException.ENTRY_ALREADY_EXISTS) { - CMS.debug("DatabasePanel createReplicationAgreement: " + dn + " has already used"); - try { - conn.delete(dn); - } catch (LDAPException ee) { - CMS.debug("DatabasePanel createReplicationAgreement: " + ee.toString()); - throw ee; - } - - try { - conn.add(entry); - } catch (LDAPException ee) { - CMS.debug("DatabasePanel createReplicationAgreement: " + ee.toString()); - throw ee; - } - } else { - CMS.debug("DatabasePanel createReplicationAgreement: Failed to create " - + dn + " entry. Exception: " + e.toString()); - throw e; - } - } - - CMS.debug("DatabasePanel createReplicationAgreement: Successfully create replication agreement " + name); - } - - private void initializeConsumer(String replicadn, LDAPConnection conn, - String name) { - String dn = "cn=" + name + "," + replicadn; - CMS.debug("DatabasePanel initializeConsumer: initializeConsumer dn: " + dn); - CMS.debug("DatabasePanel initializeConsumer: initializeConsumer host: " - + conn.getHost() + " port: " + conn.getPort()); - try { - LDAPAttribute attr = new LDAPAttribute("nsds5beginreplicarefresh", - "start"); - LDAPModification mod = new LDAPModification( - LDAPModification.REPLACE, attr); - CMS.debug("DatabasePanel initializeConsumer: start modifying"); - conn.modify(dn, mod); - CMS.debug("DatabasePanel initializeConsumer: Finish modification."); - } catch (LDAPException e) { - CMS.debug("DatabasePanel initializeConsumer: Failed to modify " + dn + " entry. Exception: " + e.toString()); - return; - } catch (Exception e) { - CMS.debug("DatabasePanel initializeConsumer: exception " + e); - } - - try { - CMS.debug("DatabasePanel initializeConsumer: thread sleeping for 5 seconds."); - Thread.sleep(5000); - CMS.debug("DatabasePanel initializeConsumer: finish sleeping."); - } catch (InterruptedException ee) { - CMS.debug("DatabasePanel initializeConsumer: exception: " + ee.toString()); - } - - CMS.debug("DatabasePanel initializeConsumer: Successfully initialize consumer"); - } - - private boolean replicationDone(String replicadn, LDAPConnection conn, String name) - throws IOException { - String dn = "cn=" + name + "," + replicadn; - String filter = "(objectclass=*)"; - String[] attrs = { "nsds5beginreplicarefresh" }; - - CMS.debug("DatabasePanel replicationDone: dn: " + dn); - try { - LDAPSearchResults results = conn.search(dn, LDAPConnection.SCOPE_BASE, filter, - attrs, true); - - int count = results.getCount(); - if (count < 1) { - throw new IOException("Replication entry not found"); - } - - LDAPEntry entry = results.next(); - LDAPAttribute refresh = entry.getAttribute("nsds5beginreplicarefresh"); - if (refresh == null) { - return true; - } - return false; - } catch (Exception e) { - CMS.debug("DatabasePanel replicationDone: exception " + e); - throw new IOException("Exception in replicationDone: " + e); - } - } - - private String replicationStatus(String replicadn, LDAPConnection conn, String name) - throws IOException { - String dn = "cn=" + name + "," + replicadn; - String filter = "(objectclass=*)"; - String[] attrs = { "nsds5replicalastinitstatus" }; - - CMS.debug("DatabasePanel replicationStatus: dn: " + dn); - try { - LDAPSearchResults results = conn.search(dn, LDAPConnection.SCOPE_BASE, filter, - attrs, false); - - int count = results.getCount(); - if (count < 1) { - throw new IOException("Replication entry not found"); - } - - LDAPEntry entry = results.next(); - LDAPAttribute attr = entry.getAttribute("nsds5replicalastinitstatus"); - if (attr != null) { - @SuppressWarnings("unchecked") - Enumeration<String> valsInAttr = attr.getStringValues(); - if (valsInAttr.hasMoreElements()) { - return valsInAttr.nextElement(); - } else { - throw new IOException("No value returned for nsds5replicalastinitstatus"); - } - } else { - throw new IOException("nsDS5ReplicaLastInitStatus is null."); - } - } catch (Exception e) { - CMS.debug("DatabasePanel replicationStatus: exception " + e); - throw new IOException("Exception in replicationStatus: " + e); - } - } - - private String getInstanceDir(LDAPConnection conn) { - String instancedir = ""; - try { - String filter = "(objectclass=*)"; - String[] attrs = { "nsslapd-directory" }; - LDAPSearchResults results = - conn.search("cn=config,cn=ldbm database,cn=plugins,cn=config", LDAPv3.SCOPE_SUB, - filter, attrs, false); - - while (results.hasMoreElements()) { - LDAPEntry entry = results.next(); - String dn = entry.getDN(); - CMS.debug("DatabasePanel getInstanceDir: DN for storing nsslapd-directory: " + dn); - LDAPAttributeSet entryAttrs = entry.getAttributeSet(); - @SuppressWarnings("unchecked") - Enumeration<LDAPAttribute> attrsInSet = entryAttrs.getAttributes(); - while (attrsInSet.hasMoreElements()) { - LDAPAttribute nextAttr = attrsInSet.nextElement(); - String attrName = nextAttr.getName(); - CMS.debug("DatabasePanel getInstanceDir: attribute name: " + attrName); - @SuppressWarnings("unchecked") - Enumeration<String> valsInAttr = nextAttr.getStringValues(); - while (valsInAttr.hasMoreElements()) { - String nextValue = valsInAttr.nextElement(); - if (attrName.equalsIgnoreCase("nsslapd-directory")) { - CMS.debug("DatabasePanel getInstanceDir: instanceDir=" + nextValue); - return nextValue.substring(0, nextValue.lastIndexOf("/db")); - } - } - } - } - } catch (LDAPException e) { - CMS.debug("DatabasePanel getInstanceDir: Error in retrieving the instance directory. Exception: " - + e.toString()); - } - - return instancedir; - } -} |