[jboss-cvs] Picketbox SVN: r279 - in trunk/security-jboss-sx/jbosssx/src: test/java/org/jboss/test/authentication/cbh and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Nov 1 16:48:30 EDT 2011


Author: anil.saldhana at jboss.com
Date: 2011-11-01 16:48:30 -0400 (Tue, 01 Nov 2011)
New Revision: 279

Added:
   trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/AbstractCallbackHandler.java
Modified:
   trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/DatabaseCallbackHandler.java
   trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/SecurityActions.java
   trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/cbh/DatabaseCallbackHandlerUnitTestCase.java
Log:
changes to database cbh

Added: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/AbstractCallbackHandler.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/AbstractCallbackHandler.java	                        (rev 0)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/AbstractCallbackHandler.java	2011-11-01 20:48:30 UTC (rev 279)
@@ -0,0 +1,64 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2011, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors. 
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.security.auth.callback;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+
+/**
+ * Base class for data store driven {@code CallbackHandler}
+ * @author YOUR_NAME
+ * @since Nov 1, 2011
+ */
+public class AbstractCallbackHandler 
+{
+	/**
+	 * User Name that we are interested in getting the password for
+	 */
+	protected String userName;
+	
+	
+	/**
+	 * Given the callbacks, look for {@code NameCallback}
+	 * @param callbacks
+	 * @return
+	 */
+	protected String getUserName(Callback[] callbacks)
+	{
+		if(userName == null)
+		{ 
+			for (int i = 0; i < callbacks.length; i++)
+			{
+				Callback callback = callbacks[i];
+				if(callback instanceof NameCallback)
+				{
+					NameCallback nc = (NameCallback) callback;
+					userName = nc.getName();
+					break;
+				}  
+			}
+		}
+		return userName;
+	}
+
+}
\ No newline at end of file

Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/DatabaseCallbackHandler.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/DatabaseCallbackHandler.java	2011-11-01 15:40:24 UTC (rev 278)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/DatabaseCallbackHandler.java	2011-11-01 20:48:30 UTC (rev 279)
@@ -27,13 +27,13 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.Map;
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.callback.NameCallback;
 import javax.security.auth.callback.PasswordCallback;
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.sql.DataSource;
@@ -61,7 +61,7 @@
  * @author Anil Saldhana
  * @since Oct 31, 2011
  */
-public class DatabaseCallbackHandler implements CallbackHandler 
+public class DatabaseCallbackHandler extends AbstractCallbackHandler implements CallbackHandler 
 {
 	protected static Logger log = Logger.getLogger(DatabaseCallbackHandler.class);
 	protected boolean trace = log.isTraceEnabled();
@@ -89,13 +89,7 @@
 	 * A DB password to connect
 	 */
 	protected String dsUserPass;
-	
 	/**
-	 * User Name that we are interested in getting the password for
-	 */
-	protected String userName;
-	
-	/**
 	 * A DB Driver Class Name
 	 */
 	protected String dbDriverName;
@@ -258,42 +252,39 @@
 	}
 
 	/**
-	 * Given the callbacks, look for {@code NameCallback}
-	 * @param callbacks
-	 * @return
-	 */
-	protected String getUserName(Callback[] callbacks)
-	{
-		if(userName == null)
-		{ 
-			for (int i = 0; i < callbacks.length; i++)
-			{
-				Callback callback = callbacks[i];
-				if(callback instanceof NameCallback)
-				{
-					NameCallback nc = (NameCallback) callback;
-					userName = nc.getName();
-					break;
-				}  
-			}
-		}
-		return userName;
-	}
-
-	/**
 	 * Handle a {@code Callback}
 	 * @param c callback
 	 * @throws UnsupportedCallbackException If the callback is not supported by this handler
 	 */
 	protected void handleCallBack( Callback c ) throws UnsupportedCallbackException
-	{
-		Connection conn = null;
-		String password = null;
+	{ 
+		if(c instanceof VerifyPasswordCallback)
+		{
+			VerifyPasswordCallback vpc = (VerifyPasswordCallback) c;
+			handleVerification(vpc);
+		}
 		if(c instanceof PasswordCallback == false)
 			return;
 
 		PasswordCallback passwdCallback = (PasswordCallback) c;
 
+		passwdCallback.setPassword(getPassword().toCharArray());
+	}
+	
+	protected void handleVerification(VerifyPasswordCallback vpc)
+	{
+		String userPass = vpc.getValue();
+		String passwordFromDB = getPassword();
+		if(userPass.equals(passwordFromDB))
+		{
+			vpc.setVerified(true);
+		}
+	}
+	
+	private String getPassword()
+	{
+		String password = null;
+		Connection conn = null;
 		PreparedStatement ps = null;
 		ResultSet rs = null;
 		try 
@@ -317,17 +308,11 @@
 		}
 		finally
 		{
-			if(conn != null)
-			{
-				try 
-				{
-					conn.close();
-				} 
-				catch (SQLException e) {}
-			}
+			safeClose(rs);
+			safeClose(ps);
+			safeClose(conn);
 		}
-
-		passwdCallback.setPassword(password.toCharArray());
+		return password;
 	}
 
 	private Connection getConnection() throws SQLException, NamingException
@@ -374,4 +359,46 @@
 
 		return conn;
 	}
+	
+	protected void safeClose(ResultSet rs)
+	{
+		if( rs != null)
+		{
+			try 
+			{
+				rs.close();
+			} 
+			catch (SQLException e) 
+			{	
+			}
+		}
+	}
+	
+	protected void safeClose(Connection conn)
+	{
+		if( conn != null)
+		{
+			try 
+			{
+				conn.close();
+			} 
+			catch (SQLException e) 
+			{	
+			}
+		}
+	}
+	
+	protected void safeClose(Statement stat)
+	{
+		if( stat != null)
+		{
+			try 
+			{
+				stat.close();
+			} 
+			catch (SQLException e) 
+			{	
+			}
+		}
+	}
 }
\ No newline at end of file

Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/SecurityActions.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/SecurityActions.java	2011-11-01 15:40:24 UTC (rev 278)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/callback/SecurityActions.java	2011-11-01 20:48:30 UTC (rev 279)
@@ -109,4 +109,27 @@
 		}
       });
    }
+   static ClassLoader getContextClassLoader()
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+      { 
+         public ClassLoader run()
+         { 
+            return Thread.currentThread().getContextClassLoader();
+         }
+       });  
+   }
+   
+
+   static Void setContextClassLoader(final ClassLoader cl)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<Void>()
+      {
+         public Void run()
+         {
+            Thread.currentThread().setContextClassLoader(cl);
+            return null;
+         }
+      });
+   }
 }
\ No newline at end of file

Modified: trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/cbh/DatabaseCallbackHandlerUnitTestCase.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/cbh/DatabaseCallbackHandlerUnitTestCase.java	2011-11-01 15:40:24 UTC (rev 278)
+++ trunk/security-jboss-sx/jbosssx/src/test/java/org/jboss/test/authentication/cbh/DatabaseCallbackHandlerUnitTestCase.java	2011-11-01 20:48:30 UTC (rev 279)
@@ -22,6 +22,7 @@
 package org.jboss.test.authentication.cbh;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 
 import java.sql.Connection;
@@ -80,7 +81,7 @@
 	}
 	
 	@Test
-	public void testCBH() throws Exception
+	public void testPassCBH() throws Exception
 	{
 		query();
 		DatabaseCallbackHandler cbh = new DatabaseCallbackHandler();
@@ -102,6 +103,29 @@
 		assertEquals("anilpass", new String(pcb.getPassword()));
 	}
 	
+	@Test
+	public void testFailCBH() throws Exception
+	{
+		query();
+		DatabaseCallbackHandler cbh = new DatabaseCallbackHandler();
+		
+		Map<String,String> map = new HashMap<String,String>();
+        map.put(DatabaseCallbackHandler.DB_DRIVERNAME, driverName);
+        map.put(DatabaseCallbackHandler.CONNECTION_URL, connectionURL);
+        map.put(DatabaseCallbackHandler.DB_USERNAME, "sa");
+        map.put(DatabaseCallbackHandler.DB_USERPASS, "");
+        
+        cbh.setConfiguration(map);
+        
+		NameCallback ncb = new NameCallback("Enter");
+		ncb.setName("anil");
+		
+		PasswordCallback pcb = new PasswordCallback("Enter", false);
+		cbh.handle(new Callback[] {ncb,pcb} );
+		
+		assertNotSame("anilpass", new String(pcb.getPassword()));
+	}
+	
 	private void query() throws Exception
 	{
 		Connection conn = getConnection();



More information about the jboss-cvs-commits mailing list