[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