mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jvergara
29.32.2009 2b2e70ba2d25de26f4ec56638ceab1224157c71c
Fix for issue 4152 (Graphical utilities should be consistent with command-line (admin connector certificate)
Load the admin-truststore when creating the keystore to be used by the graphical utilities.
2 files modified
139 ■■■■ changed files
opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java 50 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/util/UIKeyStore.java 89 ●●●●● patch | view | raw | blame | history
opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
@@ -102,6 +102,10 @@
  private static final String INITIAL_CLIENT_HEAP_ARG = "-Xms8m";
  private static final String SERVER_HEAP_ARGS = "-Xms256m -Xmx512m";
  private static final long SERVER_MAX_HEAP_BYTES = 512 * 1024 * 1024;
  /**
   * Invokes the method ConfigureDS.configMain with the provided parameters.
   * @param args the arguments to be passed to ConfigureDS.configMain.
@@ -926,10 +930,17 @@
      boolean supportsClient = supportsClient(javaHome, installPath);
      boolean supportsServer = supportsServer(javaHome, installPath);
      boolean supportsClientInitialHeap = supportsInitialHeap(javaHome,
          installPath);
      boolean supportsClientInitialHeap =
        supportsOption(INITIAL_CLIENT_HEAP_ARG, javaHome, installPath);
      boolean supportsServerInitialHeap = false;
      // If the current max memory is bigger than the max heap we want to set,
      // assume that the JVM ergonomics are going to be able to allocate enough
      // memory.
      if (Runtime.getRuntime().maxMemory() < SERVER_MAX_HEAP_BYTES)
      {
        supportsServerInitialHeap =
          supportsOption(SERVER_HEAP_ARGS, javaHome, installPath);
      }
      // Scripts to which we will pass -client argument
      String[] clientScripts =
      {
@@ -950,12 +961,25 @@
          "upgrade", "verify-index", "dbtest"
      };
      if (supportsServer)
      if (supportsServer || supportsServerInitialHeap)
      {
        for (int i=0; i<serverScripts.length; i++)
        {
          writer.newLine();
          writer.write(serverScripts[i]+".java-args=-server");
          String arg = "";
          if (supportsServer)
          {
            arg = "-server";
          }
          if (supportsServerInitialHeap)
          {
            if (arg.length() > 0)
            {
              arg += " ";
            }
            arg += SERVER_HEAP_ARGS;
          }
          writer.write(serverScripts[i]+".java-args="+arg);
        }
      }
      else
@@ -967,7 +991,6 @@
        }
      }
      if (supportsClient || supportsClientInitialHeap)
      {
        for (int i=0; i<clientScripts.length; i++)
@@ -1085,19 +1108,6 @@
  }
  /**
   * Tells whether the provided java installation supports the server option
   * or not.
   * @param javaHome the java installation path.
   * @param installPath the install path of the server.
   * @return <CODE>true</CODE> if the provided java installation supports the
   * server option and <CODE>false</CODE> otherwise.
   */
  private boolean supportsInitialHeap(String javaHome, String installPath)
  {
    return supportsOption(INITIAL_CLIENT_HEAP_ARG, javaHome, installPath);
  }
  /**
   * Tells whether the provided java installation supports the client option
   * or not.
   * @param javaHome the java installation path.
opends/src/quicksetup/org/opends/quicksetup/util/UIKeyStore.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2008 Sun Microsystems, Inc.
 *      Copyright 2008-2009 Sun Microsystems, Inc.
 */
package org.opends.quicksetup.util;
@@ -37,6 +37,7 @@
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -118,6 +119,7 @@
      {
        keyStore.load(null, null);
      }
      loadLocalAdminTrustStore(keyStore);
    }
    return keyStore;
  }
@@ -150,7 +152,7 @@
    {
      Utils.createFile(f);
    }
    FileOutputStream fos = new FileOutputStream(getKeyStorePath());
    FileOutputStream fos = new FileOutputStream(getKeyStorePath(), true);
    k.store(fos, new char[]{});
    if (fos != null)
    {
@@ -169,4 +171,87 @@
    return System.getProperty("user.home") + File.separator +
    ".opends" + File.separator + "gui-keystore";
  }
  /**
   * Loads the local admin truststore.
   * @param keyStore the keystore where the admin truststore will be loaded.
   */
  private static void loadLocalAdminTrustStore(KeyStore keyStore)
  {
    String adminTrustStorePath = getLocalAdminTrustStorePath();
    File f = new File(adminTrustStorePath);
    if (!f.exists())
    {
      LOG.log(Level.INFO, "Path "+adminTrustStorePath+ " does not exist");
      adminTrustStorePath = null;
    }
    else if (f.isDirectory())
    {
      LOG.log(Level.SEVERE, "Path "+adminTrustStorePath+ " is a directory");
      adminTrustStorePath = null;
    }
    else if (!f.canRead())
    {
      LOG.log(Level.SEVERE, "Path "+adminTrustStorePath+ " is not readable");
      adminTrustStorePath = null;
    }
    if (adminTrustStorePath != null)
    {
      FileInputStream fos = null;
      try
      {
        fos = new FileInputStream(adminTrustStorePath);
        KeyStore adminKeyStore =
          KeyStore.getInstance(KeyStore.getDefaultType());
        adminKeyStore.load(fos, null);
        Enumeration<String> aliases = adminKeyStore.aliases();
        while (aliases.hasMoreElements())
        {
          String alias = aliases.nextElement();
          if (adminKeyStore.isCertificateEntry(alias))
          {
            keyStore.setCertificateEntry(alias,
                adminKeyStore.getCertificate(alias));
          }
          else
          {
            keyStore.setEntry(alias, adminKeyStore.getEntry(alias, null), null);
          }
        }
      }
      catch (Throwable t)
      {
        LOG.log(Level.SEVERE, "Error reading admin key store on "+
            adminTrustStorePath, t);
      }
      finally
      {
        try
        {
          if (fos != null)
          {
            fos.close();
          }
        }
        catch (Throwable t)
        {
          LOG.log(Level.SEVERE, "Error closing admin key store on "+
              adminTrustStorePath, t);
        }
      }
    }
  }
  /**
   * Returns the path where the local admin trust store is.
   * @return the path where the local admin trust store is.
   */
  private static String getLocalAdminTrustStorePath()
  {
    String instancePath =
      Utils.getInstancePathFromClasspath(Utils.getInstallPathFromClasspath());
    return  instancePath + File.separator + "config" +
    File.separator + "admin-truststore";
  }
}