From feb5d90ec016c99712f19c5485cf7633cd38f111 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 23 Mar 2007 14:26:04 +0000
Subject: [PATCH] Merge admin framework from config-prototype-branch onto trunk.

---
 opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java |  156 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 153 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java b/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
index 12076b7..78e2110 100644
--- a/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
+++ b/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
@@ -42,6 +42,7 @@
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
 
+import org.opends.server.admin.std.server.FileBasedKeyManagerCfg;
 import org.opends.server.api.ConfigurableComponent;
 import org.opends.server.api.KeyManagerProvider;
 import org.opends.server.config.ConfigAttribute;
@@ -70,7 +71,7 @@
  * file located on the Directory Server filesystem.
  */
 public class FileBasedKeyManagerProvider
-       extends KeyManagerProvider
+       extends KeyManagerProvider<FileBasedKeyManagerCfg>
        implements ConfigurableComponent
 {
 
@@ -483,9 +484,158 @@
 
 
 
+
+
   /**
-   * Performs any finalization that may be necessary for this key manager
-   * provider.
+   * {@inheritDoc}
+   */
+  @Override
+  public void initializeKeyManagerProvider(
+      FileBasedKeyManagerCfg configuration)
+      throws ConfigException, InitializationException {
+    // Store the DN of the configuration entry.
+    configEntryDN = configuration.dn();
+
+    // Get the path to the key store file.
+    keyStoreFile = configuration.getKeyStoreFile();
+    try {
+      File f = getFileForPath(keyStoreFile);
+      if (!(f.exists() && f.isFile())) {
+        int msgID = MSGID_FILE_KEYMANAGER_NO_SUCH_FILE;
+        String message = getMessage(msgID, String
+            .valueOf(keyStoreFile), String.valueOf(configEntryDN));
+        throw new InitializationException(msgID, message);
+      }
+    } catch (SecurityException e) {
+      if (debugEnabled())
+      {
+        debugCaught(DebugLogLevel.ERROR, e);
+      }
+
+      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE;
+      String message = getMessage(msgID, String
+          .valueOf(configEntryDN), stackTraceToSingleLineString(e));
+      throw new InitializationException(msgID, message, e);
+    }
+
+    // Get the keystore type. If none is specified, then use the
+    // default type.
+    if (configuration.getKeyStoreType() != null) {
+      try {
+        KeyStore.getInstance(configuration.getKeyStoreType());
+        keyStoreType = configuration.getKeyStoreType();
+      } catch (KeyStoreException kse) {
+        if (debugEnabled())
+        {
+          debugCaught(DebugLogLevel.ERROR, kse);
+        }
+
+        int msgID = MSGID_FILE_KEYMANAGER_INVALID_TYPE;
+        String message = getMessage(msgID, String
+            .valueOf(configuration.getKeyStoreType()), String
+            .valueOf(configEntryDN),
+            stackTraceToSingleLineString(kse));
+        throw new InitializationException(msgID, message);
+      }
+    } else {
+      keyStoreType = KeyStore.getDefaultType();
+    }
+
+    // Get the PIN needed to access the contents of the keystore file.
+    //
+    // We will offer several places to look for the PIN, and we will
+    // do so in the following order:
+    //
+    // - In a specified Java property
+    // - In a specified environment variable
+    // - In a specified file on the server filesystem.
+    // - As the value of a configuration attribute.
+    //
+    // In any case, the PIN must be in the clear.
+    keyStorePIN = null;
+    keyStorePINEnVar = null;
+    keyStorePINFile = null;
+    keyStorePINProperty = null;
+
+    if (configuration.getKeyStorePinProperty() != null) {
+      String propertyName = configuration.getKeyStorePinProperty();
+      String pinStr = System.getProperty(propertyName);
+
+      if (pinStr == null) {
+        int msgID = MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET;
+        String message = getMessage(msgID, String
+            .valueOf(propertyName), String.valueOf(configEntryDN));
+        throw new InitializationException(msgID, message);
+      }
+
+      keyStorePIN = pinStr.toCharArray();
+      keyStorePINProperty = propertyName;
+    } else if (configuration.getKeyStorePinEnvironmentVariable() != null) {
+      String enVarName = configuration
+          .getKeyStorePinEnvironmentVariable();
+      String pinStr = System.getenv(enVarName);
+
+      if (pinStr == null) {
+        int msgID = MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET;
+        String message = getMessage(msgID, String.valueOf(enVarName),
+            String.valueOf(configEntryDN));
+        throw new InitializationException(msgID, message);
+      }
+
+      keyStorePIN = pinStr.toCharArray();
+      keyStorePINEnVar = enVarName;
+    } else if (configuration.getKeyStorePinFile() != null) {
+      String fileName = configuration.getKeyStorePinFile();
+      File pinFile = getFileForPath(fileName);
+
+      if (!pinFile.exists()) {
+        int msgID = MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE;
+        String message = getMessage(msgID, String.valueOf(fileName),
+            String.valueOf(configEntryDN));
+        throw new InitializationException(msgID, message);
+      }
+
+      String pinStr;
+      try {
+        BufferedReader br = new BufferedReader(
+            new FileReader(pinFile));
+        pinStr = br.readLine();
+        br.close();
+      } catch (IOException ioe) {
+        int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ;
+        String message = getMessage(msgID, String.valueOf(fileName),
+            String.valueOf(configEntryDN),
+            stackTraceToSingleLineString(ioe));
+        throw new InitializationException(msgID, message, ioe);
+      }
+
+      if (pinStr == null) {
+        int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY;
+        String message = getMessage(msgID, String.valueOf(fileName),
+            String.valueOf(configEntryDN));
+        throw new InitializationException(msgID, message);
+      }
+
+      keyStorePIN = pinStr.toCharArray();
+      keyStorePINFile = fileName;
+    } else if (configuration.getKeyStorePin() != null) {
+      keyStorePIN = configuration.getKeyStorePin().toCharArray();
+    } else {
+      // Pin wasn't defined anywhere.
+      int msgID = MSGID_FILE_KEYMANAGER_NO_PIN;
+      String message = getMessage(msgID, String
+          .valueOf(configEntryDN));
+      throw new ConfigException(msgID, message);
+    }
+
+    DirectoryServer.registerConfigurableComponent(this);
+  }
+
+
+
+  /**
+   * Performs any finalization that may be necessary for this key
+   * manager provider.
    */
   public void finalizeKeyManagerProvider()
   {

--
Gitblit v1.10.0