// --- 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.admin.certsrv; import java.util.*; import java.net.*; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import com.netscape.certsrv.common.*; import com.netscape.management.client.*; import com.netscape.management.client.topology.*; import com.netscape.management.client.console.*; import com.netscape.management.client.util.*; import com.netscape.admin.certsrv.config.install.*; import com.netscape.admin.certsrv.task.*; import com.netscape.admin.certsrv.wizard.*; import netscape.ldap.*; /** * Netscape Certificate Server 4.0 configuration entry point. The * directory server needs to contain the name of this class in order * for the topology view to load this class. * * @author Jack Pan-Chen * @author Thomas Kwan * @version $Revision$, $Date$ * @date 01/12/97 */ public class CMSAdmin extends AbstractServerObject implements IWizardDone, IRemovableServerObject, IMenuInfo { /*========================================================== * variables *==========================================================*/ private static final String PREFIX = "CMSADMIN"; private static final String START = "start"; private static final String STOP = "stop"; private static final String CONFIGURE = "configure"; // private static final String START_DAEMON_CGI = "Tasks/Operation/StartDaemon"; private ConsoleInfo mConsoleInfo; // global information private CMSServerInfo mServerInfo; // server-specific information private ConsoleInfo mServerInstanceInfo; private CMSServerInfo mStatusInfo; // server-specific information private CMSUIFramework mFramework; // parent frame private CMSPageFeeder mPagefeeder; // what generates tab views //private CMSInfoPanel mInfoPanel; // information panel private RemoteImage mIconImage = null; // server icon private String mServerID, mServerVersion, mInstallationDate, mServerRoot; private String mHost = null; // server name private int mPort = 0; // server port private String mAdminURL = null; // admin server url private int mServerStatus = STATUS_UNKNOWN; private StatusItemText mAuthid; private JFrame mActiveFrame; protected ResourceBundle mResource; //resource boundle /*========================================================== * constructors *==========================================================*/ public CMSAdmin() { //Debug.setTrace(true); if (mActiveFrame == null) mActiveFrame = UtilConsoleGlobals.getActivatedFrame(); mResource = ResourceBundle.getBundle(CMSAdminResources.class.getName()); // STATUS_UPDATE_INTERVAL = 1500000; } /*========================================================== * public methods *==========================================================*/ public int getServerLastKnownStatus() { return mServerStatus; } /** * Initialize the page with global information. * * @param info global information. */ public void initialize(ConsoleInfo info) { mConsoleInfo = info; mIconImage = CMSAdminUtil.getImage(CMSAdminResources.IMAGE_CERTICON_SMALL); getInfo( info.getCurrentDN()); //getServerStatus(); if (info.getCurrentDN() == null) { Debug.println( "initialized CMSAdmin (Standalone mode)"); } else { super.initialize( info ); } Debug.println( "initialized CMSAdmin for " + mConsoleInfo.getCurrentDN() ); } /** * overwrite the base class to add admin port number * Not sure we want to do this. * protected Vector initializeNodeDataVector(String dataKeys[]) { Vector v = super.initializeNodeDataVector(dataKeys); if ( mServerInfo != null ) { int port = mServerInfo.getPort(); if ( port > 0 ) { String label = mResource.getString(PREFIX+"_ADMINPORT_LABEL"); v.addElement(new NodeData("nsServerPort", label, Integer.toString(port))); } } return v; } */ /** * return the server instance name instead for now * * @return return the server name * */ public String getName() { return ("Certificate Server ("+ mServerID +")"); } /** * Return the information panel. - Admin take over this already * * @return information panel * public Component getCustomPanel() { if(mInfoPanel == null) mInfoPanel = new CMSInfoPanel( (IServerObject)this, mHost, mPort, mServerVersion, mInstallationDate, mAdminURL); return mInfoPanel; } */ /** * Return connection info for a server instance. * @return Connection info for a server instance. */ public CMSServerInfo getServerInfo() { return mServerInfo; } public ConsoleInfo getServerInstanceInfo() { mServerInstanceInfo = (ConsoleInfo)mConsoleInfo.clone(); return mServerInstanceInfo; } /** * Returns the global console info. * * @return Global console info reference. **/ public ConsoleInfo getConsoleInfo() { return mConsoleInfo; } /** * This function is called when the certificate server is deselected * on the topology view. */ public void unselect(IPage viewInstance) { // Debug.println( "DSAdmin unselect" ); super.unselect(viewInstance); fireRemoveMenuItems( viewInstance, this ); } /** * This function is called when the directory server is selected * on the topology view. */ public void select(IPage viewInstance) { /* if (_removed) return; */ HourGlass hglass = new HourGlass(mActiveFrame); super.select(viewInstance); // sets _viewInstance used // by getViewInstance() Debug.println( "CMSAdmin.select(): viewInstance =" + getViewInstance() ); fireAddMenuItems( viewInstance, this ); if (mPort == 0) { fireDisableMenuItem(viewInstance, START); fireDisableMenuItem(viewInstance, STOP); fireEnableMenuItem(viewInstance, CONFIGURE); } else if ( getServerStatus() == STATUS_STARTED ) { fireDisableMenuItem( viewInstance, START ); fireEnableMenuItem(viewInstance, STOP); fireDisableMenuItem(viewInstance, CONFIGURE); } else { fireEnableMenuItem( viewInstance, START ); fireDisableMenuItem( viewInstance, STOP ); fireDisableMenuItem(viewInstance, CONFIGURE); } if (hglass != null) { hglass.setNonWaitCursor(); hglass = null; } } /** * Returns supported menu categories */ public String[] getMenuCategoryIDs() { return new String[] { ResourcePage.MENU_CONTEXT, ResourcePage.MENU_OBJECT }; } /** * Add menu items for this page. * * @param category Which menu */ public IMenuItem[] getMenuItems(String category) { /* Same for both CONTEXT and OBJECT menus */ return new IMenuItem[] { new MenuItemText( CONFIGURE, CMSAdminResources.MENU_CONFIGURE_SERVER, CMSAdminResources.MENU_CONFIGURE_SERVER_DESC), new MenuItemText( START, CMSAdminResources.MENU_START_SERVER, CMSAdminResources.MENU_START_SERVER_DESC), new MenuItemText( STOP, CMSAdminResources.MENU_STOP_SERVER, CMSAdminResources.MENU_STOP_SERVER_DESC), new MenuItemSeparator() }; } /** * Notification that a menu item has been selected. */ public void actionMenuSelected(IPage viewInstance, IMenuItem item) { if (item.getID().equals(START)) { ConsoleInfo info = getServerInstanceInfo(); /* Fire off the Start task */ CMSStart task = new CMSStart(); mConsoleInfo.put(CMSStart.START_TASK_CGI, mServerID); mConsoleInfo.put("serverRoot",mServerRoot); mConsoleInfo.put("servid", mServerID); task.initialize(mConsoleInfo); //task.setConsoleInfo( info ); boolean status = task.run( null ); if( status ) { getServerStatus(); enableStartStop(viewInstance); } } else if(item.getID().equals(STOP)) { CMSStop task = new CMSStop(); ConsoleInfo info = getServerInstanceInfo(); mConsoleInfo.put(CMSStop.STOP_TASK_CGI, mServerID); mConsoleInfo.put("servid", mServerID); mConsoleInfo.put("serverRoot",mServerRoot); task.initialize(mConsoleInfo); boolean status = task.run( null ); if ( status ) { getServerStatus(); enableStartStop(viewInstance); } } else if (item.getID().equals(CONFIGURE)) { startupInstallationWizard(viewInstance); } } public void updateMenu(IPage viewInstance) { getInfo(getConsoleInfo().getCurrentDN()); if (mPort != 0) { fireDisableMenuItem(viewInstance, CONFIGURE); getServerStatus(); enableStartStop(viewInstance); } } /** * Enable/Disable start/stop action menu. */ private void enableStartStop(IPage viewInstance) { if (mServerStatus == STATUS_STOPPED) { fireEnableMenuItem( viewInstance, START ); fireDisableMenuItem( viewInstance, STOP ); } else if (mServerStatus == STATUS_STARTED) { fireEnableMenuItem( viewInstance, STOP ); fireDisableMenuItem( viewInstance, START ); } } /** * Set the title bar in the following format:

     *      [server information] - [server type] - [nickname]
* Administrator id is shown at lower status bar */ public void updateTitle () { /* mAuthid.setState(mResource.getString("CMSADMIN_USER_LABEL")+ " = "+mServerInfo.getUserId()+" "); mFramework.getFramework().changeStatusItemState(mAuthid); */ String id = mServerID; int i = id.indexOf( '-' ); if ( (i > 0) && (i < (id.length()-1)) ) id = id.substring( i + 1 ); mFramework.getFramework().setTitle( mServerInfo.getHost()+" - " + mResource.getString(CMSAdminResources.CERT_SERVER_NAME)+ " - "+ id ); } private Hashtable createWizardInfo() { Hashtable data = new Hashtable(); /* This does nothing data.put(ConfigConstants.TASKID,TaskId.TASK_LIST_PREVIOUS_STAGES); data.put(ConfigConstants.OPTYPE, OpDef.OP_READ); data.put(ConfigConstants.PR_CERT_INSTANCE_NAME, mServerID); data.put(ConfigConstants.PR_SERVER_ROOT, mServerRoot); */ // moved from WIIntroPage.java data.put(ConfigConstants.TASKID,TaskId.TASK_GET_DEFAULT_INFO); data.put(ConfigConstants.OPTYPE, OpDef.OP_READ); data.put(ConfigConstants.PR_CERT_INSTANCE_NAME, mConsoleInfo.get(ConfigConstants.PR_CERT_INSTANCE_NAME)); // #344791 - help server to make up the hostname data.put(ConfigConstants.PR_HOST, mConsoleInfo.get(ConfigConstants.PR_HOST)); data.put(ConfigConstants.PR_SERVER_ROOT, mConsoleInfo.get(ConfigConstants.PR_SERVER_ROOT)); return data; } /** * This is called when the installwizard is done. */ public void notify(WizardWidget w) { Debug.println("Configuration Completed"); for (int i = 0; i < 10; i++) { // try to detect 10 times Debug.println("Check Status #" + i); if ( getServerStatus() == STATUS_STARTED ) { return; } try { Thread.currentThread().sleep(2000); // 2 seconds } catch (Exception e) { } } } /** * Start up the installation wizard */ public void startupInstallationWizard(IPage viewInstance) { Hashtable data = new Hashtable(); CMSStartDaemon daemon = new CMSStartDaemon(); mConsoleInfo.put("servid", mServerID); mConsoleInfo.put(CMSStartDaemon.START_DAEMON_CGI, mServerID); mConsoleInfo.put(CMSConfigCert.CONFIG_CERT_CGI, mServerID); daemon.initialize(mConsoleInfo); data.put(ConfigConstants.PR_CERT_INSTANCE_NAME, mServerID); Debug.println("about to run Daemon"); boolean success = daemon.runDaemon(data); Debug.println("run daemon success = "+success); data.clear(); data = null; boolean isInfoReady = false; if (success) { InstallWizardInfo wizardInfo = new InstallWizardInfo(mConsoleInfo); wizardInfo.setAdminFrame(mActiveFrame); Debug.println("CMSAdmin: creating new configCertCgi"); CMSConfigCert configCertCgi = new CMSConfigCert(); configCertCgi.initialize(wizardInfo); Debug.println("CMSAdmin: back from creating new configCertCgi"); data = createWizardInfo(); isInfoReady = configCertCgi.configCert(data); Debug.println("CMSAdmin: isInfoReady = "+isInfoReady); if (isInfoReady) { JFrame frame = new JFrame(); Cursor cursor = new Cursor(Cursor.HAND_CURSOR); frame.setCursor(cursor); frame.invalidate(); frame.validate(); frame.repaint(1); // XXX - checking status is too slow, dont do it now. // InstallWizard wizard = new InstallWizard( // mConsoleInfo.getFrame(), wizardInfo, this); InstallWizard wizard = new InstallWizard(mActiveFrame, wizardInfo, null); wizardInfo.setAdminFrame(mActiveFrame); wizardInfo.put("viewInstance", viewInstance); wizardInfo.put("CMSAdmin", this); new Thread(wizard).start(); } } data.clear(); data = null; mServerStatus = STATUS_UNKNOWN; } /** * This function is called when the server is double clicked on * the topology view. Auth dialog is displayed to get user dn and pwd. */ public boolean run(IPage viewInstance) { Debug.println("The user double click the icon "+getConsoleInfo().getCurrentDN()); Debug.println("View instance in the run method -> "+viewInstance); if (getConsoleInfo().getCurrentDN() == null) { mServerID = (String)mConsoleInfo.get("cmsServerInstance"); } mConsoleInfo.put(CMSRestart.RESTART_TASK_CGI, mServerID); mConsoleInfo.put(CMSStart.START_TASK_CGI, mServerID); mConsoleInfo.put(CMSStop.STOP_TASK_CGI, mServerID); mConsoleInfo.put("CMSAdmin", this); if (mPort == 0) { getInfo(getConsoleInfo().getCurrentDN()); if (mPort == 0) { startupInstallationWizard(viewInstance); return false; } } if (getConsoleInfo().getCurrentDN() == null) { mHost = (String)mConsoleInfo.get("cmsHost"); mPort = Integer.parseInt((String)mConsoleInfo.get("cmsPort")); } else { try { LDAPConnection ldc = mConsoleInfo.getLDAPConnection(); if ( ldc == null ) { Debug.println( "No connection ready in ConsoelInfo" ); ldc = new LDAPConnection(); ldc.connect( mConsoleInfo.getHost(), mConsoleInfo.getPort(), mConsoleInfo.getAuthenticationDN(), mConsoleInfo.getAuthenticationPassword()); } //Debug.println( "Fetching " + sBase + " from " + // mConsoleInfo.getHost() + ":" + mConsoleInfo.getPort() ); LDAPEntry entry = ldc.read( mConsoleInfo.getCurrentDN() ); //Debug.println( "Got " + entry ); try { String port = getAttrVal(entry, "nsserverport"); if (port == null) return false; else { int portnum = Integer.parseInt(port); if (portnum != mPort) mPort = portnum; } } catch (Exception e) { return false; } } catch (LDAPException ex) { CMSAdminUtil.showErrorDialog(mConsoleInfo.getFrame(), mResource, ex.toString(), CMSAdminUtil.ERROR_MESSAGE); } } try { // server off if (getServerStatus() != STATUS_STARTED) { CMSAdminUtil.showMessageDialog(mConsoleInfo.getFrame(), mResource, PREFIX, "SERVEROFF", CMSAdminUtil.ERROR_MESSAGE); return false; } /* mServerInfo = new CMSServerInfo(mHost, mPort, d.getUsername(), d.getPassword(), mServerID, mInstallationDate, mServerVersion, mServerRoot); */ String path = (String)mConsoleInfo.get("cmsPath"); mServerInfo = new CMSServerInfo(mHost, mPort, "","", mServerID, mInstallationDate, mServerVersion, mServerRoot, path); String authType = mServerInfo.getAuthType(); // server is alive, do authenticate if the server asks for // password-based authentication if (authType.equals("pwd")) { CMSPassword d = new CMSPassword(mActiveFrame); d.show(); if (d.isCancel()) return false; mServerInfo = new CMSServerInfo(mHost, mPort, d.getUsername(), d.getPassword(), mServerID, mInstallationDate, mServerVersion, mServerRoot, path); mServerInfo.authenticate(); } mConsoleInfo.put("serverInfo", mServerInfo); } catch (EAdminException ex) { System.exit(0); // exit if authentication fails CMSAdminUtil.showErrorDialog(mConsoleInfo.getFrame(), mResource, ex.getMessage(), CMSAdminUtil.ERROR_MESSAGE); return false; } //LOAD UI FRAMEWORK try { mFramework = new CMSUIFramework(mConsoleInfo, mServerInfo); } catch (EAdminException e) { CMSAdminUtil.showErrorDialog(mConsoleInfo.getFrame(), mResource, e.getMessage(), CMSAdminUtil.ERROR_MESSAGE); return false; } //show secure status StatusItemSecureMode statusSecureMode = new StatusItemSecureMode(Framework.STATUS_SECURE_MODE); statusSecureMode.setSecureMode(true); mFramework.getFramework().addStatusItem(statusSecureMode, IStatusItem.LEFTFIRST); statusSecureMode.setToolTipText(mServerInfo.getHost()+":"+mServerInfo.getPort()); //show login status updateTitle (); return true; } /** * Run the object * @param viewInstance CMSPageFeeder object * @param selectionList List of selected objects */ public boolean run(IPage viewInstance, IResourceObject selectionList[]) { return run( viewInstance ); } /** * perform the specified action. The command string is specified either * from the content menu or the menu bar. * * @param command Command String */ public void performAction(String command) { } /** * Return the server icon. * * @return The Directory Server icon. */ public Icon getIcon() { return mIconImage; } public int getStatus() { return mServerStatus; } /** * Return the current status of the server (running or not). * * @return The Certificate Server status. */ public int getServerStatus() { Debug.println("Check server status"); if (getConsoleInfo().getCurrentDN() == null) { return STATUS_STARTED; } else { if ( mPort == 0) { mServerStatus = STATUS_UNKNOWN; return STATUS_UNKNOWN; } try { ConsoleInfo info = getServerInstanceInfo(); CMSStatus task = new CMSStatus(); mConsoleInfo.put(CMSStatus.STATUS_TASK_CGI, mServerID); mConsoleInfo.put("serverRoot",mServerRoot); mConsoleInfo.put("servid", mServerID); task.initialize(mConsoleInfo); //task.setConsoleInfo( info ); boolean status = task.run( null ); if( status) { mServerStatus = STATUS_STARTED; return STATUS_STARTED; } else{ mServerStatus = STATUS_STOPPED; return STATUS_STOPPED; } } catch (Exception e) { String bob = e.toString(); Debug.println(bob); if (Debug.isEnabled()) e.printStackTrace(); return STATUS_UNKNOWN; } } } /** * Return the current status of the server (running or not) * by pinging the agent HTTPS port. * * @return The Certificate Server status. */ public boolean getStatusFromAgentPort() { if (mPort == 0) { getInfo(getConsoleInfo().getCurrentDN()); if (mPort == 0) { //Debug.println("CMSAdmin: getServerStatus --> "+mServerStatus); return false; } } //check if ssl port is functional try { if ((mServerInfo == null) || (mServerInfo.getPort() == 0)) { String path = (String)mConsoleInfo.get("cmsPath"); mServerInfo = new CMSServerInfo(mHost, mPort, "", "", mServerID, mInstallationDate, mServerVersion, mServerRoot, path); } mServerInfo.ping(); } catch (EAdminException e) { Debug.println("CMSAdmin: getServerStatus() -"+e.toString()); if (e.getMessageString().equals(CMSAdminResources.SERVER_NORESPONSE) || e.getMessageString().equals(CMSAdminResources.SERVER_UNREACHABLE) || e.getMessageString().equals(CMSAdminResources.IOEXCEPTION) || e.getMessageString().equals(CMSAdminResources.UNKNOWNEXCEPTION) || e.getMessageString().equals(CMSAdminResources.UNKNOWNHOST) ) { // mServerStatus = STATUS_STOPPED; return false; } Debug.println("CMSAdmin: getServerStatus() -UNKNOWN"); // mServerStatus = STATUS_UNKNOWN; return false; } Debug.println("CMSAdmin: getServerStatus() -OK"); // mServerStatus = STATUS_STARTED; return true; } /** * The concrete class implementing this method will clone its * configuration from the reference server. This supports using the * GET method for cloning the server. * * @param referenceDN - DN of server to clone from. */ public void cloneFrom(String referenceDN) { //XXX TBD } /** * Implements the IRemovableServerObject interface. * @return true if the server was successfully removed, false otherwise */ public boolean removeServer() { Debug.println("-------------- removeServer() ==== --------------------"); Debug.println("getting console obj"); ConsoleInfo info = getServerInstanceInfo(); Debug.println("constuctor for remove"); /* Fire off the Remove task */ CMSRemove task = new CMSRemove(); mConsoleInfo.put(CMSRemove.REMOVE_TASK_CGI, mServerID); mConsoleInfo.put("serverRoot",mServerRoot); mConsoleInfo.put("servid", mServerID); Debug.println("initalizing remove"); task.initialize(mConsoleInfo); //task.setConsoleInfo( info ); Debug.println("about to run remove rask"); boolean status = task.run( null ); Debug.println("remove run"); Debug.println("Remove server status: "+ status); String instance = (String) mConsoleInfo.get("ServerInstance"); if (null == instance) { instance = ""; } if (true == status) { /* successfully called remove cgi */ Debug.println("removing topology for the server"); LDAPConnection ldc = mConsoleInfo.getLDAPConnection(); Debug.println("got the ldap connection"); String[] attrs = { "*", "numsubordinates" }; String sieDN = mConsoleInfo.getCurrentDN(); Debug.println("removeServer:sieDN:" + sieDN); LDAPEntry sieEntry = null; try { sieEntry = ldc.read( sieDN, attrs ); Debug.println("read a ldap entry"); } catch (Exception ex ) { Debug.println( "removeServer <" + sieDN + "> " + ex); /* args[1] = ex.toString(); DSUtil.showErrorDialog(_info.getFrame(), "removeinstance", args); _removed = false; // remove failed */ return false; } if (sieEntry != null ) { try { Debug.println("Calling delete_sieTree"); status = delete_sieTree(sieEntry ); } catch (Exception ex ) { Debug.println( "removeServer:Unable to delete the " + "tree"); /* args[1] = ex.toString(); DSUtil.showErrorDialog(_info.getFrame(), "removesie", args); _removed = false; // remove failed */ return false; } // Now we need to remove the reference of this server Debug.println("calling remove_serverinstance"); status = remove_serverInstance(sieDN); } /* if ( status == false) { args[1] = ""; DSUtil.showErrorDialog(_info.getFrame(), "removesie", args); } else { DSUtil.showInformationDialog(_info.getFrame(), "121", (String)null) ; } */ } // CMSAdminUtil.showMessageDialog(mConsoleInfo.getFrame(), mResource, PREFIX, // "NOTIMPLEMENTED", CMSAdminUtil.ERROR_MESSAGE); return status; } private boolean delete_sieTree (LDAPEntry entry ) throws LDAPException { LDAPConnection ldc = mConsoleInfo.getLDAPConnection(); boolean ret = false; String dn = entry.getDN(); if ( entryHasChildren( entry ) ) { LDAPSearchResults search_results = null; String[] attrs = { "numsubordinates" }; search_results = ldc.search( dn, LDAPConnection.SCOPE_ONE, "(objectClass=*)", attrs, false ); while ( search_results.hasMoreElements() ) { /* Get the next child */ LDAPEntry child_entry = (LDAPEntry)search_results.nextElement(); ret = delete_sieTree( child_entry ); } } ldc.delete(dn); return true; } static boolean entryHasChildren( LDAPEntry entry ) { boolean hasChildren = false; LDAPAttribute attr = entry.getAttribute( "numsubordinates" ); if ( attr != null ) { Enumeration e = attr.getStringValues(); if ( e.hasMoreElements() ) { String s = (String)e.nextElement(); int count = Integer.parseInt( s ); if ( count > 0 ) { hasChildren = true; } } } return hasChildren; } private boolean remove_serverInstance (String sieDN ) { LDAPSearchResults search_results = null; String baseDN =(String) mConsoleInfo.get("BaseDN"); LDAPConnection ldc = mConsoleInfo.getLDAPConnection(); String[] attrs = { "*", "uniquemember" }; String filter = "(&(objectclass=groupOfUniquenames)(uniquemember=" + sieDN+"))"; try { search_results = ldc.search( baseDN, ldc.SCOPE_SUB, filter, attrs, false); } catch (LDAPException e) { Debug.println( "Failed to search - " + e.toString() ); return false; } LDAPEntry entry = null; while ( search_results.hasMoreElements() ) { // need to remove the reference to the sieDN from // this entry. entry = (LDAPEntry)search_results.nextElement(); String eDN = (String) entry.getDN(); // Now we need to modify the entry to delete the // reference to the serevr. remove_intstanceFromEntry(ldc, eDN, sieDN); } return true; } private boolean remove_intstanceFromEntry ( LDAPConnection ldc, String eDN, String sieDN ) { LDAPModificationSet mods = new LDAPModificationSet(); LDAPAttribute attUmember = new LDAPAttribute("uniquemember", sieDN); Debug.println("DSAdmin:remove_intstanceFromEntry: Modifying entry:" + eDN); mods.add( LDAPModification.DELETE, attUmember ); try { ldc.modify(eDN, mods ); } catch ( LDAPException e ) { Debug.println ( "Modifying " + eDN + ", " + e); return false; } return true; } /*========================================================== * private methods *==========================================================*/ /** * Extract a single string * * @param entry A Directory entry * @param name Name of attribute to fetch * @return A concatenated string */ private String getAttrVal( LDAPEntry entry, String name ) { LDAPAttribute findAttr = entry.getAttribute( name, LDAPUtil.getLDAPAttributeLocale() ); if ( findAttr != null ) { return LDAPUtil.flatting(findAttr); } /* Debug.println( "Attribute " + name + " not found in " + entry.getDN() ); */ return null; } /** * get the attribute information to display in the information panel * * @param sDN DN for the entry. */ private void getInfo(String sDN) { //String sBase = "cn=configuration, " + sDN; if (sDN == null) { mHost = (String)mConsoleInfo.get("cmsHost"); mPort = Integer.parseInt((String)mConsoleInfo.get("cmsPort")); } else { String sBase = sDN; try { LDAPConnection ldc = mConsoleInfo.getLDAPConnection(); if ( ldc == null ) { Debug.println( "No connection ready in ConsoelInfo" ); ldc = new LDAPConnection(); ldc.connect( mConsoleInfo.getHost(), mConsoleInfo.getPort(), mConsoleInfo.getAuthenticationDN(), mConsoleInfo.getAuthenticationPassword()); } //Debug.println( "Fetching " + sBase + " from " + // mConsoleInfo.getHost() + ":" + mConsoleInfo.getPort() ); LDAPEntry entry = ldc.read( sBase ); //Debug.println( "Got " + entry ); mHost = getAttrVal( entry, "serverHostName" ); try { String port = getAttrVal(entry, "nsserverport"); if (port == null) mPort = 0; else mPort = Integer.parseInt(port); } catch (Exception e) { mPort = 0; } // get the attribute information for display purposes mServerVersion = getAttrVal( entry, "serverVersionNumber" ); mInstallationDate = getAttrVal( entry, "installationTimeStamp" ); mServerID = getAttrVal( entry, "nsserverid" ); mServerRoot = getAttrVal( entry, "serverroot" ); Debug.println("CMSAdmin::PR_HOST = " + mHost); mConsoleInfo.put(ConfigConstants.PR_HOST, mHost); mConsoleInfo.put(ConfigConstants.PR_SERVER_ROOT, mServerRoot); mConsoleInfo.put(ConfigConstants.PR_CERT_INSTANCE_NAME, mServerID); } catch( Exception e) { Debug.println( "Fetching " + sBase + " from " + mConsoleInfo.getHost() + ":" + mConsoleInfo.getPort() + ", " + e ); } mAdminURL = mConsoleInfo.getAdminURL(); /* Extract the username part of the admin authentication DN */ String[] rdns = LDAPDN.explodeDN( mConsoleInfo.getAuthenticationDN(), true ); String s = rdns[0].trim(); mConsoleInfo.put( "AdminUsername", s ); //getServerStatus(); } } /** * Note: it would be better if this method were declared in the superclass, * but having it here is better than nothing, since I need access to it * for getServerStatus() . . . */ private IPage getViewInstance() { return _viewInstance; } public boolean isCloningEnabled() { return false; } public boolean isMigrationEnabled() { return false; } }