Author: gnodet
Date: Tue Sep 14 20:57:32 2010
New Revision: 997094

URL: http://svn.apache.org/viewvc?rev=997094&view=rev
Log:
KARAF-34: Fix jasypt encryption service

Modified:
    
karaf/trunk/assembly/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg
    
karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
    
karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
    
karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
    karaf/trunk/jaas/modules/pom.xml
    
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
    
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
    
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
    
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
    
karaf/trunk/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml

Modified: 
karaf/trunk/assembly/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg
URL: 
http://svn.apache.org/viewvc/karaf/trunk/assembly/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/assembly/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg 
(original)
+++ 
karaf/trunk/assembly/src/main/distribution/text/etc/org.apache.karaf.jaas.cfg 
Tue Sep 14 20:57:32 2010
@@ -18,6 +18,19 @@
 
################################################################################
 
 #
+# Boolean enabling / disabling encrypted passwords
+#
+encryption.enabled = false
+
+#
+# Encryption Service name
+#   the default one is 'basic'
+#   a more powerful one named 'jasypt' is available
+#       when installing the encryption feature
+#
+encryption.name =
+
+#
 # Set the encryption algorithm to use in Karaf JAAS login module
 # Supported encryption algorithms follow:
 #   MD2
@@ -27,4 +40,12 @@
 #   SHA-384
 #   SHA-512
 #
-#encryption=MD5
+encryption.algorithm = MD5
+
+#
+# Encoding of the encrypted password.
+# Can be:
+#   hexadecimal
+#   base64
+#
+encryption.encoding = hexadecimal

Modified: 
karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
 (original)
+++ 
karaf/trunk/jaas/jasypt/src/main/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryption.java
 Tue Sep 14 20:57:32 2010
@@ -31,6 +31,11 @@ package org.apache.karaf.jaas.jasypt.imp
 import java.util.Map;
 
 import org.apache.karaf.jaas.modules.Encryption;
+import org.apache.karaf.jaas.modules.EncryptionService;
+import org.jasypt.digest.config.DigesterConfig;
+import org.jasypt.digest.config.SimpleDigesterConfig;
+import org.jasypt.digest.config.SimpleStringDigesterConfig;
+import org.jasypt.exceptions.EncryptionInitializationException;
 import org.jasypt.util.password.ConfigurablePasswordEncryptor;
 
 /**
@@ -52,9 +57,33 @@ public class JasyptEncryption implements
      * @param params encryption parameters
      */
     public JasyptEncryption(Map<String,String> params) {
+        SimpleStringDigesterConfig config = new SimpleStringDigesterConfig();
+        for (String key : params.keySet()) {
+            if (EncryptionService.ALGORITHM.equalsIgnoreCase(key)) {
+                config.setAlgorithm(params.get(key));
+            } else if (EncryptionService.ENCODING.equalsIgnoreCase(key)) {
+                config.setStringOutputType(params.get(key));
+            } else if ("providerName".equalsIgnoreCase(key)) {
+                config.setProviderName(params.get(key));
+            } else if ("saltSizeBytes".equalsIgnoreCase(key)) {
+                config.setSaltSizeBytes(params.get(key));
+            } else if ("iterations".equalsIgnoreCase(key)) {
+                config.setIterations(params.get(key));
+            } else if ("providerClassName".equalsIgnoreCase(key)) {
+                config.setProviderClassName(params.get(key));
+            } else if ("saltGeneratorClassName".equalsIgnoreCase(key)) {
+                config.setSaltGeneratorClassName(params.get(key));
+            } else {
+                throw new IllegalArgumentException("Unsupported encryption 
parameter: " + key);
+            }
+        }
         this.passwordEncryptor = new ConfigurablePasswordEncryptor();
-
-        // TODO: configure
+        this.passwordEncryptor.setConfig(config);
+        try {
+            this.passwordEncryptor.encryptPassword("test");
+        } catch (EncryptionInitializationException e) {
+            throw new IllegalArgumentException(e);
+        }
     }
     
     /*

Modified: 
karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
 (original)
+++ 
karaf/trunk/jaas/jasypt/src/main/resources/OSGI-INF/blueprint/karaf-jaas-jasypt.xml
 Tue Sep 14 20:57:32 2010
@@ -19,58 +19,11 @@
 -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
 
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
+    <service interface="org.apache.karaf.jaas.modules.EncryptionService">
         <service-properties>
-            <entry key="algorithm" value="MD2" />
+            <entry key="name" value="jasypt" />
         </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="MD2" />
-        </bean>
-    </service>
-
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
-        <service-properties>
-            <entry key="algorithm" value="MD5" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="MD5" />
-        </bean>
-    </service>
-    
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
-        <service-properties>
-            <entry key="algorithm" value="SHA-1" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="SHA-1" />
-        </bean>
-    </service>
-
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
-        <service-properties>
-            <entry key="algorithm" value="SHA-256" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="SHA-256" />
-        </bean>
-    </service>    
-
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
-        <service-properties>
-            <entry key="algorithm" value="SHA-384" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="SHA-384" />
-        </bean>
-    </service>
-    
-    <service interface="org.apache.karaf.jaas.modules.Encryption">
-        <service-properties>
-            <entry key="algorithm" value="SHA-512" />
-        </service-properties>
-        <bean class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryption">
-            <argument value="SHA-512" />
-        </bean>
+        <bean 
class="org.apache.karaf.jaas.jasypt.impl.JasyptEncryptionService"/>
     </service>
 
 </blueprint>
\ No newline at end of file

Modified: 
karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
 (original)
+++ 
karaf/trunk/jaas/jasypt/src/test/java/org/apache/karaf/jaas/jasypt/impl/JasyptEncryptionTest.java
 Tue Sep 14 20:57:32 2010
@@ -14,7 +14,11 @@
  */
 package org.apache.karaf.jaas.jasypt.impl;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import junit.framework.TestCase;
+import org.apache.karaf.jaas.modules.EncryptionService;
 
 /**
  * <p>
@@ -32,7 +36,9 @@ public class JasyptEncryptionTest extend
      * @see junit.framework.TestCase#setUp()
      */
     public void setUp() {
-        this.encryption = new JasyptEncryption("MD5");
+        Map<String,String> props = new HashMap<String,String>();
+        props.put(EncryptionService.ALGORITHM, "MD5");
+        this.encryption = new JasyptEncryption(props);
     }
     
     /**

Modified: karaf/trunk/jaas/modules/pom.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/pom.xml?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- karaf/trunk/jaas/modules/pom.xml (original)
+++ karaf/trunk/jaas/modules/pom.xml Tue Sep 14 20:57:32 2010
@@ -47,6 +47,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.karaf</groupId>
+            <artifactId>org.apache.karaf.util</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
         </dependency>
@@ -89,6 +94,9 @@
                             org.apache.aries.blueprint.ext,
                             *
                         </Import-Package>
+                        <Private-Package>
+                            org.apache.karaf.util
+                        </Private-Package>
                         <_versionpolicy>${bnd.version.policy}</_versionpolicy>
                     </instructions>
                 </configuration>

Modified: 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
 (original)
+++ 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/AbstractKarafLoginModule.java
 Tue Sep 14 20:57:32 2010
@@ -100,7 +100,7 @@ public abstract class AbstractKarafLogin
             } else {
                 String name = encOpts.remove("name");
                 if (debug) {
-                    if (name != null) {
+                    if (name != null && name.length() > 0) {
                         LOG.debug("Encryption is enabled. Using service " + 
name + " with options " + encOpts);
                     } else {
                         LOG.debug("Encryption is enabled. Using options " + 
encOpts);

Modified: 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
 (original)
+++ 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/EncryptionService.java
 Tue Sep 14 20:57:32 2010
@@ -21,8 +21,19 @@ import java.util.Map;
 public interface EncryptionService {
 
     String ALGORITHM = "algorithm";
+
+    String ALGORITHM_MD2 = "MD2";
+    String ALGORITHM_MD5 = "MD5";
+    String ALGORITHM_SHA1 = "SHA-1";
+    String ALGORITHM_SHA256 = "SHA-256";
+    String ALGORITHM_SHA384 = "SHA-384";
+    String ALGORITHM_SHA512 = "SHA-512";
+
     String ENCODING = "encoding";
 
+    String ENCODING_HEXADECIMAL = "hexadecimal";
+    String ENCODING_BASE64 = "base64";
+
     /**
      * Create an encryption service with the specified parameters.
      * If the parameters are not supported, a <code>null</code> should

Modified: 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
 (original)
+++ 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/encryption/BasicEncryption.java
 Tue Sep 14 20:57:32 2010
@@ -30,32 +30,34 @@ public class BasicEncryption implements 
 
     private static final Logger log = 
LoggerFactory.getLogger(BasicEncryption.class);
 
-    private String digest;
+    private String algorithm;
     private String encoding;
     private MessageDigest md;
 
     public BasicEncryption(Map<String, String> params) {
         for (String key : params.keySet()) {
             if (EncryptionService.ALGORITHM.equalsIgnoreCase(key)) {
-                digest = params.get(key);
+                algorithm = params.get(key);
             } else if (EncryptionService.ENCODING.equalsIgnoreCase(key)) {
                 encoding = params.get(key);
             } else {
                 throw new IllegalArgumentException("Unsupported encryption 
parameter: " + key);
             }
         }
-        if (digest == null) {
+        if (algorithm == null) {
             throw new IllegalArgumentException("Digest algorithm must be 
specified");
         }
-        // Check if the digest algorithm is available
+        // Check if the algorithm algorithm is available
         try {
-            md = MessageDigest.getInstance(digest);
+            md = MessageDigest.getInstance(algorithm);
         } catch (NoSuchAlgorithmException e) {
-            log.error("Initialization failed. Digest algorithm " + digest + " 
is not available.", e);
+            log.error("Initialization failed. Digest algorithm " + algorithm + 
" is not available.", e);
             throw new IllegalArgumentException("Unable to configure login 
module: " + e.getMessage(), e);
         }
-        if (encoding != null && !"hex".equalsIgnoreCase(encoding) && 
!"base64".equalsIgnoreCase(encoding)) {
-            log.error("Initialization failed. Digest Encoding " + encoding + " 
is not supported.");
+        if (encoding != null && encoding.length() > 0
+                && 
!EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)
+                && 
!EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
+            log.error("Initialization failed. Digest encoding " + encoding + " 
is not supported.");
             throw new IllegalArgumentException(
                     "Unable to configure login module. Digest Encoding " + 
encoding + " not supported.");
         }
@@ -67,9 +69,9 @@ public class BasicEncryption implements 
         }
         // Digest the user provided password
         byte[] data = md.digest(password.getBytes());
-        if (encoding == null || "hex".equalsIgnoreCase(encoding)) {
+        if (encoding == null || encoding.length() == 0 || 
EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)) {
             return hexEncode(data);
-        } else if ("base64".equalsIgnoreCase(encoding)) {
+        } else if 
(EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
             return base64Encode(data);
         } else {
             throw new IllegalArgumentException(
@@ -86,9 +88,9 @@ public class BasicEncryption implements 
         }
         // both are non-null
         String encoded = encryptPassword(provided);
-        if (encoding == null || "hex".equalsIgnoreCase(encoding)) {
+        if (encoding == null || encoding.length() == 0 || 
EncryptionService.ENCODING_HEXADECIMAL.equalsIgnoreCase(encoding)) {
             return real.equalsIgnoreCase(encoded);
-        } else if ("base64".equalsIgnoreCase(encoding)) {
+        } else if 
(EncryptionService.ENCODING_BASE64.equalsIgnoreCase(encoding)) {
             return real.equals(encoded);
         }
         return false;

Modified: 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
 (original)
+++ 
karaf/trunk/jaas/modules/src/main/java/org/apache/karaf/jaas/modules/properties/PropertiesLoginModule.java
 Tue Sep 14 20:57:32 2010
@@ -17,13 +17,10 @@
 package org.apache.karaf.jaas.modules.properties;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.security.Principal;
 import java.util.HashSet;
 import java.util.Map;
-import java.util.Properties;
-
 import javax.security.auth.Subject;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -39,6 +36,7 @@ import org.apache.karaf.jaas.modules.Abs
 import org.apache.karaf.jaas.modules.Encryption;
 import org.apache.karaf.jaas.modules.RolePrincipal;
 import org.apache.karaf.jaas.modules.UserPrincipal;
+import org.apache.karaf.util.Properties;
 
 /**
  * <p>
@@ -64,10 +62,10 @@ public class PropertiesLoginModule exten
     }
 
     public boolean login() throws LoginException {
-        Properties users = new Properties();
         File f = new File(usersFile);
+        Properties users;
         try {
-            users.load(new java.io.FileInputStream(f));
+            users = new Properties(f);
         } catch (IOException ioe) {
             throw new LoginException("Unable to load user properties file " + 
f);
         }
@@ -135,9 +133,7 @@ public class PropertiesLoginModule exten
                     if (debug) {
                         LOG.debug("Store the users properties file.");
                     }
-                    // TODO use Karaf Properties (to maintain comments, etc)
-                    // TODO close the stream to avoid leaks
-                    users.store(new FileOutputStream(f), null);
+                    users.save();
                 } catch (IOException ioe) {
                     LOG.warn("Unable to write user properties file " + f, ioe);
                 }

Modified: 
karaf/trunk/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml?rev=997094&r1=997093&r2=997094&view=diff
==============================================================================
--- 
karaf/trunk/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml
 (original)
+++ 
karaf/trunk/jaas/modules/src/main/resources/OSGI-INF/blueprint/karaf-jaas-module.xml
 Tue Sep 14 20:57:32 2010
@@ -32,18 +32,24 @@
     <!-- AdminConfig property place holder for the org.apache.karaf.jaas  -->
     <cm:property-placeholder persistent-id="org.apache.karaf.jaas">
         <cm:default-properties>
-            <cm:property name="encryption.digest" value="" />
+            <cm:property name="encryption.name" value="" />
+            <cm:property name="encryption.enabled" value="false" />
+            <cm:property name="encryption.algorithm" value="MD5" />
+            <cm:property name="encryption.encoding" value="" />
         </cm:default-properties>
     </cm:property-placeholder>
 
     <jaas:config name="karaf">
         <jaas:module 
className="org.apache.karaf.jaas.modules.properties.PropertiesLoginModule" 
flags="required">
             users = $[karaf.base]/etc/users.properties
-            encryption.digest = ${encryption.digest}
+            encryption.name = ${encryption.name}
+            encryption.enabled = ${encryption.enabled}
+            encryption.algorithm = ${encryption.algorithm}
+            encryption.encoding = ${encryption.encoding}
         </jaas:module>
     </jaas:config>
 
-    <service interface="org.apache.karaf.jaas.modules.EncrypionService">
+    <service interface="org.apache.karaf.jaas.modules.EncryptionService" 
ranking="-1">
         <service-properties>
             <entry key="name" value="basic"/>
         </service-properties>


Reply via email to