[jboss-svn-commits] JBL Code SVN: r35954 - in labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main: webapp/WEB-INF and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 11 16:58:09 EST 2010


Author: kurt.stam at jboss.com
Date: 2010-11-11 16:58:08 -0500 (Thu, 11 Nov 2010)
New Revision: 35954

Modified:
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
   labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/webapp/WEB-INF/components.xml
Log:
BRMS-416, allowing the passwords for admin and mailman to be encrypted

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java	2010-11-11 21:22:38 UTC (rev 35953)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java	2010-11-11 21:58:08 UTC (rev 35954)
@@ -33,10 +33,13 @@
 
 
 
+import java.math.BigInteger;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
 import javax.jcr.LoginException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -67,9 +70,12 @@
 
 	private static final Logger log = LoggerFactory.getLogger(RepositoryStartupService.class);
 	private static final String ADMIN                     = "admin";
+	private static final String ADMIN_USER_PROPERTY       = "org.drools.repository.admin.username";
 	private static final String ADMIN_PASSWORD_PROPERTY   = "org.drools.repository.admin.password";
 	private static final String MAILMAN                   = "mailman";
+	private static final String MAILMAN_USER_PROPERTY     = "org.drools.repository.mailman.username";
 	private static final String MAILMAN_PASSWORD_PROPERTY = "org.drools.repository.mailman.password";
+	private static final String SECURE_PASSWORDS_PROPERTY = "org.drools.repository.secure.passwords";
 	
 	
 	private RulesRepositoryConfigurator configurator;
@@ -94,9 +100,16 @@
     @Create
     public void create() {
     	repository = getRepositoryInstance();
+    	String username = "admin";
+    	if (properties.containsKey(ADMIN_USER_PROPERTY)) {
+    		username = properties.get(ADMIN_USER_PROPERTY);
+    	}
     	String password = "admin";
     	if (properties.containsKey(ADMIN_PASSWORD_PROPERTY)) {
     		password = properties.get(ADMIN_PASSWORD_PROPERTY);
+    		if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
+    			password = decode(password);
+    		}
     	} else {
     		log.debug("Could not find property " + ADMIN_PASSWORD_PROPERTY + " for user " + ADMIN);
     	}
@@ -121,9 +134,16 @@
 
     /** Start up the mailbox, flush out any messages that were left */
     private void startMailboxService() {
+    	String username = "mailman";
+    	if (properties.containsKey(MAILMAN_USER_PROPERTY)) {
+    		username = properties.get(MAILMAN_USER_PROPERTY);
+    	}
     	String password = "mailman";
     	if (properties.containsKey(MAILMAN_PASSWORD_PROPERTY)) {
     		password = properties.get(MAILMAN_PASSWORD_PROPERTY);
+    		if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
+    			password = decode(password);
+    		}
     	} else {
     		log.debug("Could not find property " + MAILMAN_PASSWORD_PROPERTY + " for user " + MAILMAN);
     	}
@@ -199,5 +219,41 @@
             throw new RulesRepositoryException( e );
         }
     }
+    
+    
+    
+    private static String decode(String secret)
+    {
+    	String decodedPassword = secret;
+    	try {
+	    	byte[] kbytes = "jaas is the way".getBytes();
+	    	SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
+	
+	    	BigInteger n = new BigInteger(secret, 16);
+	    	byte[] encoding = n.toByteArray();
+	
+	    	//SECURITY-344: fix leading zeros
+	    	if (encoding.length % 8 != 0)
+	    	{
+	    		int length = encoding.length;
+	    		int newLength = ((length / 8) + 1) * 8;
+	    		int pad = newLength - length; //number of leading zeros
+	    		byte[] old = encoding;
+	    		encoding = new byte[newLength];
+	    		for (int i = old.length - 1; i >= 0; i--)
+	    		{
+	    			encoding[i + pad] = old[i];
+	    		}
+	    	}
+	
+	    	Cipher cipher = Cipher.getInstance("Blowfish");
+	    	cipher.init(Cipher.DECRYPT_MODE, key);
+	    	byte[] decode = cipher.doFinal(encoding);
+	    	decodedPassword =  new String(decode);
+    	} catch (Exception e) {
+    		log.error(e.getMessage(),e);
+    	}
+    	return decodedPassword;
+    }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/webapp/WEB-INF/components.xml
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/webapp/WEB-INF/components.xml	2010-11-11 21:22:38 UTC (rev 35953)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/webapp/WEB-INF/components.xml	2010-11-11 21:58:08 UTC (rev 35954)
@@ -16,42 +16,24 @@
 	<component name="repositoryConfiguration">
 
 		<!-- JackRabbit  -->
+		
 		<property name="properties">
-			<key>org.drools.repository.configurator</key>
-			<value>org.drools.repository.jackrabbit.JackrabbitRepositoryConfigurator</value>
+			<key>org.drools.repository.configurator</key><value>org.drools.repository.jackrabbit.JackrabbitRepositoryConfigurator</value>
+		    <!--  the root directory for the repo storage the directory must exist. -->
+		    <!--  <key>repository.root.directory</key><value>/opt/yourpath</value>  -->
 		</property>
-		<!--
-			*** This is for configuring the root directory for the repo storage.
-			the directory must exist. *** 
-			<property name="properties">
-				<key>repository.root.directory</key>
-				<value>/opt/yourpath</value>
-			</property>
-		-->
 
 		<!-- ModeShape 
-			<property name="properties">
-				<key>org.drools.repository.configurator</key>
-				<value>org.drools.repository.modeshape.ModeShapeRepositoryConfigurator</value>
-			</property>
-			<property name="properties">
-				<key>org.modeshape.jcr.URL</key>
-				<value>jndi:jcr/local?repositoryName=brms</value>
-			</property> 
-		-->
-		<!-- passwords for the background users (admin and mailman), these need to match the setting
+		    passwords for the background users (admin and mailman), these need to match the setting
 			you provided for JAAS (used by ModeShape only). 
-		-->
-		<!--
 			<property name="properties">
-				<key>org.drools.repository.admin.password</key>
-				<value>admin</value>
-			</property>
-			<property name="properties">
-				<key>org.drools.repository.mailman.password</key>
-				<value>mailman</value>
-			</property>
-		-->
+				<key>org.drools.repository.configurator</key>    <value>org.drools.repository.modeshape.ModeShapeRepositoryConfigurator</value>
+				<key>org.modeshape.jcr.URL</key>                 <value>jndi:jcr/local?repositoryName=brms</value>
+				<key>org.drools.repository.secure.passwords</key><value>true</value>
+				<key>org.drools.repository.admin.password</key>  <value>-baefe5e824a431d</value>
+                <key>org.drools.repository.mailman.password</key><value>-7bc1329227603ba5</value>	
+			</property> 
+			-->
 		
 	</component>
 



More information about the jboss-svn-commits mailing list