You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2004/11/15 07:12:52 UTC

svn commit: rev 71493 - in geronimo/trunk/modules: assembly assembly/src/plan assembly/src/var/config common/src/java/org/apache/geronimo/common connector connector/src/java/org/apache/geronimo/connector/outbound/security deployment/src/java/org/apache/geronimo/deployment/service jetty/src/java/org/apache/geronimo/jetty security/src/java/org/apache/geronimo/security security/src/java/org/apache/geronimo/security/jaas security/src/java/org/apache/geronimo/security/jacc security/src/java/org/apache/geronimo/security/realm security/src/java/org/apache/geronimo/security/realm/providers security/src/test/org/apache/geronimo/security/jaas

Author: ammulder
Date: Sun Nov 14 22:12:48 2004
New Revision: 71493

Added:
   geronimo/trunk/modules/common/src/java/org/apache/geronimo/common/GeronimoSecurityException.java
Modified:
   geronimo/trunk/modules/assembly/project.xml
   geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml
   geronimo/trunk/modules/assembly/src/var/config/config.list
   geronimo/trunk/modules/connector/project.xml
   geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialRealm.java
   geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/GBeanBuilder.java
   geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java
   geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceMBean.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LocalLoginModule.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginService.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginServiceMBean.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModule.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModuleRemoteWrapper.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/AbstractModuleConfiguration.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/ModuleConfiguration.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/SecurityRealm.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/KerberosSecurityRealm.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/PropertiesFileSecurityRealm.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLLoginModule.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLSecurityRealm.java
   geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SimpleSecurityRealm.java
   geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/jaas/LoginSQLTest.java
Log:
Add JACC to the repository and the Server configuration
Add the Runtime Deployer to the default configuration
When setting GBean attributes on services, ignore leading/trailing whitespace
Move GeronimoSecurityException to common so both "client" and "server" can
  refer to it w/out loading all the classes in the Security JAR (which
  causes a variety of CL problems)
Support setting a driver for JDBC security realm


Modified: geronimo/trunk/modules/assembly/project.xml
==============================================================================
--- geronimo/trunk/modules/assembly/project.xml	(original)
+++ geronimo/trunk/modules/assembly/project.xml	Sun Nov 14 22:12:48 2004
@@ -318,6 +318,15 @@
         </dependency>
 
         <dependency>
+            <groupId>geronimo-spec</groupId>
+            <artifactId>geronimo-spec-j2ee-jacc</artifactId>
+            <version>&geronimo-spec-j2ee-jacc-version;</version>
+            <properties>
+                <repository>true</repository>
+            </properties>
+        </dependency>
+
+        <dependency>
             <groupId>geronimo</groupId>
             <artifactId>geronimo-j2ee-schema</artifactId>
             <version>${pom.currentVersion}</version>

Modified: geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml
==============================================================================
--- geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml	(original)
+++ geronimo/trunk/modules/assembly/src/plan/j2ee-server-plan.xml	Sun Nov 14 22:12:48 2004
@@ -36,6 +36,9 @@
         <uri>geronimo-spec/jars/geronimo-spec-j2ee-${geronimo_spec_j2ee_version}.jar</uri>
     </dependency>
     <dependency>
+        <uri>geronimo-spec/jars/geronimo-spec-j2ee-jacc-${geronimo_spec_j2ee_jacc_version}.jar</uri>
+    </dependency>
+    <dependency>
         <uri>geronimo/jars/geronimo-j2ee-${geronimo_version}.jar</uri>
     </dependency>
     <dependency>

Modified: geronimo/trunk/modules/assembly/src/var/config/config.list
==============================================================================
--- geronimo/trunk/modules/assembly/src/var/config/config.list	(original)
+++ geronimo/trunk/modules/assembly/src/var/config/config.list	Sun Nov 14 22:12:48 2004
@@ -2,3 +2,4 @@
 org/apache/geronimo/Server
 org/apache/geronimo/SystemDatabase
 org/apache/geronimo/SystemJMS
+org/apache/geronimo/RuntimeDeployer

Added: geronimo/trunk/modules/common/src/java/org/apache/geronimo/common/GeronimoSecurityException.java
==============================================================================
--- (empty file)
+++ geronimo/trunk/modules/common/src/java/org/apache/geronimo/common/GeronimoSecurityException.java	Sun Nov 14 22:12:48 2004
@@ -0,0 +1,38 @@
+/**
+ *
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.geronimo.common;
+
+/**
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class GeronimoSecurityException extends RuntimeException {
+    public GeronimoSecurityException() {
+    }
+
+    public GeronimoSecurityException(String message) {
+        super(message);
+    }
+
+    public GeronimoSecurityException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public GeronimoSecurityException(Throwable cause) {
+        super(cause);
+    }
+}

Modified: geronimo/trunk/modules/connector/project.xml
==============================================================================
--- geronimo/trunk/modules/connector/project.xml	(original)
+++ geronimo/trunk/modules/connector/project.xml	Sun Nov 14 22:12:48 2004
@@ -68,6 +68,12 @@
 
         <dependency>
             <groupId>geronimo</groupId>
+            <artifactId>geronimo-common</artifactId>
+            <version>${pom.currentVersion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
             <artifactId>geronimo-kernel</artifactId>
             <version>${pom.currentVersion}</version>
         </dependency>

Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialRealm.java
==============================================================================
--- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialRealm.java	(original)
+++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialRealm.java	Sun Nov 14 22:12:48 2004
@@ -26,7 +26,7 @@
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.realm.SecurityRealm;
 import org.apache.geronimo.security.realm.providers.AbstractSecurityRealm;
 import org.apache.regexp.RE;

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/GBeanBuilder.java
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/GBeanBuilder.java	(original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/GBeanBuilder.java	Sun Nov 14 22:12:48 2004
@@ -56,6 +56,9 @@
     }
 
     public void setAttribute(String name, String type, String text) throws DeploymentException {
+        if(text != null) {
+            text = text.trim(); // avoid formatting errors due to extra whitespace in XML configuration file
+        }
         try {
             // @todo we should not need all of common just for this
             if (type == null) {

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java	(original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyWebAppJACCContext.java	Sun Nov 14 22:12:48 2004
@@ -46,7 +46,7 @@
 import org.apache.geronimo.gbean.WaitingException;
 import org.apache.geronimo.naming.java.ReadOnlyContext;
 import org.apache.geronimo.security.ContextManager;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.IdentificationPrincipal;
 import org.apache.geronimo.security.PrimaryRealmPrincipal;
 import org.apache.geronimo.security.RealmPrincipal;

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java	(original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/JettyXMLConfiguration.java	Sun Nov 14 22:12:48 2004
@@ -38,7 +38,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.RealmPrincipal;
 import org.apache.geronimo.security.deploy.AutoMapAssistant;
 import org.apache.geronimo.security.deploy.Principal;

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityService.java	Sun Nov 14 22:12:48 2004
@@ -32,6 +32,7 @@
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.gbean.WaitingException;
 import org.apache.geronimo.kernel.jmx.JMXUtil;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.jacc.ModuleConfiguration;
 import org.apache.geronimo.security.jacc.PolicyContextHandlerContainerSubject;
 import org.apache.geronimo.security.jacc.PolicyContextHandlerHttpServletRequest;

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceMBean.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceMBean.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/SecurityServiceMBean.java	Sun Nov 14 22:12:48 2004
@@ -18,6 +18,7 @@
 package org.apache.geronimo.security;
 
 import java.util.Collection;
+import org.apache.geronimo.common.GeronimoSecurityException;
 
 
 /**

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LocalLoginModule.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LocalLoginModule.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LocalLoginModule.java	Sun Nov 14 22:12:48 2004
@@ -31,7 +31,7 @@
 
 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.jmx.MBeanProxyFactory;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.RealmPrincipal;
 
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginService.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginService.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginService.java	Sun Nov 14 22:12:48 2004
@@ -55,7 +55,7 @@
 import org.apache.geronimo.gbean.WaitingException;
 import org.apache.geronimo.kernel.jmx.JMXUtil;
 import org.apache.geronimo.security.ContextManager;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.IdentificationPrincipal;
 import org.apache.geronimo.security.RealmPrincipal;
 import org.apache.geronimo.security.SubjectId;

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginServiceMBean.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginServiceMBean.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/LoginServiceMBean.java	Sun Nov 14 22:12:48 2004
@@ -20,8 +20,7 @@
 import java.util.Collection;
 import javax.security.auth.Subject;
 import javax.security.auth.login.LoginException;
-
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 
 
 /**

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModule.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModule.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModule.java	Sun Nov 14 22:12:48 2004
@@ -29,7 +29,7 @@
 import javax.security.auth.login.LoginException;
 import javax.security.auth.spi.LoginModule;
 
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.remoting.jmx.RemoteLoginServiceFactory;
 
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModuleRemoteWrapper.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModuleRemoteWrapper.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jaas/RemoteLoginModuleRemoteWrapper.java	Sun Nov 14 22:12:48 2004
@@ -28,7 +28,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.RealmPrincipal;
 
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/AbstractModuleConfiguration.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/AbstractModuleConfiguration.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/AbstractModuleConfiguration.java	Sun Nov 14 22:12:48 2004
@@ -26,7 +26,7 @@
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 
 
 /**

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/ModuleConfiguration.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/ModuleConfiguration.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/ModuleConfiguration.java	Sun Nov 14 22:12:48 2004
@@ -20,7 +20,7 @@
 import java.util.Collection;
 import java.util.HashSet;
 
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 
 
 /**
@@ -47,7 +47,7 @@
      * will cause a <code>PolicyContextException</code> to be thrown.
      * @param role The role that is to be mapped to a set of principals.
      * @param principals The set of principals that are to be mapped to to role.
-     * @throws org.apache.geronimo.security.GeronimoSecurityException if the mapping principals to the same role twice occurs.
+     * @throws org.apache.geronimo.common.GeronimoSecurityException if the mapping principals to the same role twice occurs.
      */
     public void addRoleMapping(String role, Collection principals) throws GeronimoSecurityException;
 
@@ -70,7 +70,7 @@
      * <code>EjbModuleConfigurationMBean</code> Object is "deleted" or "inService" when this method is called.
      * @throws java.lang.IllegalArgumentException if called with an argument <code>EjbModuleConfigurationMBean</code>
      * whose Policy context is equivalent to that of this <code>EjbModuleConfigurationMBean</code>.
-     * @throws org.apache.geronimo.security.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
+     * @throws org.apache.geronimo.common.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
      * the linkConfiguration method signature. The exception thrown by the implementation class will be encapsulated
      * (during construction) in the thrown <code>GeronimoSecurityException</code>.
      */
@@ -86,7 +86,7 @@
      * involving the deleted <code>PolicyConfiguration<code>.</p>
      * @throws java.lang.SecurityException if called by an <code>AccessControlContext</code> that has not been granted
      * the "setPolicy" <code>SecurityPermission</code>.
-     * @throws org.apache.geronimo.security.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
+     * @throws org.apache.geronimo.common.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
      * the delete method signature. The exception thrown by the implementation class will be encapsulated (during
      * construction) in the thrown <code>GeronimoSecurityException</code>.
      */
@@ -106,7 +106,7 @@
      * the "setPolicy" <code>SecurityPermission</code>.
      * @throws java.lang.UnsupportedOperationException if the state of the policy context whose interface is this
      * <code>PolicyConfiguration</code> Object is "deleted" when this method is called.
-     * @throws org.apache.geronimo.security.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
+     * @throws org.apache.geronimo.common.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by
      * the commit method signature. The exception thrown by the implementation class will be encapsulated (during
      * construction) in the thrown <code>GeronimoSecurityException</code>.
      */
@@ -119,7 +119,7 @@
      * otherwise.
      * @throws java.lang.SecurityException if called by an <code>AccessControlContext</code> that has not been granted
      * the "setPolicy" <code>SecurityPermission</code>.
-     * @throws org.apache.geronimo.security.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by the
+     * @throws org.apache.geronimo.common.GeronimoSecurityException if the implementation throws a checked exception that has not been accounted for by the
      * <code>inService</code> method signature. The exception thrown by the implementation class will be encapsulated
      * (during construction) in the thrown <code>GeronimoSecurityException</code>.
      */

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/SecurityRealm.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/SecurityRealm.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/SecurityRealm.java	Sun Nov 14 22:12:48 2004
@@ -21,7 +21,7 @@
 
 import java.util.Set;
 
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.regexp.RE;
 
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/KerberosSecurityRealm.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/KerberosSecurityRealm.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/KerberosSecurityRealm.java	Sun Nov 14 22:12:48 2004
@@ -25,7 +25,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.regexp.RE;
 
 

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/PropertiesFileSecurityRealm.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/PropertiesFileSecurityRealm.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/PropertiesFileSecurityRealm.java	Sun Nov 14 22:12:48 2004
@@ -31,7 +31,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.deploy.Principal;
 import org.apache.geronimo.security.realm.AutoMapAssistant;
 import org.apache.geronimo.system.serverinfo.ServerInfo;

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLLoginModule.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLLoginModule.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLLoginModule.java	Sun Nov 14 22:12:48 2004
@@ -18,15 +18,8 @@
 package org.apache.geronimo.security.realm.providers;
 
 import java.io.IOException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
+import java.sql.*;
+import java.util.*;
 import javax.security.auth.Subject;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -47,8 +40,8 @@
     private String cbUsername;
     private String cbPassword;
     private String connectionURL;
-    private String sqlUser;
-    private String sqlPassword;
+    private Properties properties;
+    private Driver driver;
     private String userSelect;
     private String groupSelect;
     Set groups = new HashSet();
@@ -58,10 +51,10 @@
         this.handler = callbackHandler;
 
         connectionURL = (String) options.get(SQLSecurityRealm.CONNECTION_URL);
-        sqlUser = (String) options.get(SQLSecurityRealm.USERNAME);
-        sqlPassword = (String) options.get(SQLSecurityRealm.PASSWORD);
+        properties = (Properties) options.get(SQLSecurityRealm.PROPERTIES);
         userSelect = (String) options.get(SQLSecurityRealm.USER_SELECT);
         groupSelect = (String) options.get(SQLSecurityRealm.GROUP_SELECT);
+        driver = (Driver) options.get(SQLSecurityRealm.DRIVER);
     }
 
     public boolean login() throws LoginException {
@@ -81,7 +74,7 @@
 
         boolean found = false;
         try {
-            Connection conn = DriverManager.getConnection(connectionURL, sqlUser, sqlPassword);
+            Connection conn = driver.connect(connectionURL, properties);
 
             try {
                 PreparedStatement statement = conn.prepareStatement(userSelect);

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLSecurityRealm.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLSecurityRealm.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SQLSecurityRealm.java	Sun Nov 14 22:12:48 2004
@@ -18,17 +18,8 @@
 package org.apache.geronimo.security.realm.providers;
 
 import javax.security.auth.login.AppConfigurationEntry;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
+import java.sql.*;
+import java.util.*;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -36,7 +27,7 @@
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 import org.apache.geronimo.security.deploy.Principal;
 import org.apache.geronimo.security.realm.AutoMapAssistant;
 
@@ -51,15 +42,15 @@
     public final static String USER_SELECT = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.USER_SELECT";
     public final static String GROUP_SELECT = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.GROUP_SELECT";
     public final static String CONNECTION_URL = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.CONNECTION_URL";
-    public final static String USERNAME = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.USERNAME";
-    public final static String PASSWORD = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.PASSWORD";
+    public final static String PROPERTIES = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.PROPERTIES";
+    public final static String DRIVER = "org.apache.geronimo.security.realm.providers.SQLSecurityRealm.DRIVER";
 
     private boolean running = false;
     private String connectionURL;
-    private String user = "";
-    private String password = "";
     private String userSelect = "SELECT UserName, Password FROM Users";
     private String groupSelect = "SELECT GroupName, UserName FROM Groups";
+    private Driver driver;
+    private Properties properties;
     private final Map users = new HashMap();
     private final Map groups = new HashMap();
     private String defaultPrincipal;
@@ -70,13 +61,21 @@
     public SQLSecurityRealm() {
     }
 
-    public SQLSecurityRealm(String realmName, String connectionURL, String user, String password, String userSelect, String groupSelect) {
+    public SQLSecurityRealm(String realmName, String driver, String connectionURL, String user, String password, String userSelect, String groupSelect, ClassLoader classLoader) {
         super(realmName);
         this.connectionURL = connectionURL;
-        this.user = user;
-        this.password = password;
+        properties = new Properties();
+        properties.setProperty("user", user);
+        properties.setProperty("password", password);
         this.userSelect = userSelect;
         this.groupSelect = groupSelect;
+        try {
+            this.driver = (Driver) classLoader.loadClass(driver).newInstance();
+        } catch (ClassNotFoundException e) {
+            throw new IllegalArgumentException("Driver class "+driver+" is not available.  Perhaps you need to add it as a dependency in your deployment plan?");
+        } catch(Exception e) {
+            throw new IllegalArgumentException("Unable to load, instantiate, register driver "+driver+": "+e.getMessage());
+        }
     }
 
     public void doStart() {
@@ -101,68 +100,26 @@
         return connectionURL;
     }
 
-    public void setConnectionURL(String connectionURL) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the Connection URI after the realm is started");
-        }
-        this.connectionURL = connectionURL;
-    }
-
     public String getUser() {
-        return user;
-    }
-
-    public void setPassword(String password) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the connection password after the realm is started");
-        }
-        this.password = password;
+        return properties.getProperty("user");
     }
 
     public String getPassword() {
-        return password;
-    }
-
-    public void setUser(String user) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the connection user after the realm is started");
-        }
-        this.user = user;
+        return properties.getProperty("password");
     }
 
     public String getUserSelect() {
         return userSelect;
     }
 
-    public void setUserSelect(String userSelect) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the user SQL select statement after the realm is started");
-        }
-        this.userSelect = userSelect;
-    }
-
     public String getGroupSelect() {
         return groupSelect;
     }
 
-    public void setGroupSelect(String groupSelect) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the group SQL select statement after the realm is started");
-        }
-        this.groupSelect = groupSelect;
-    }
-
     public String getDefaultPrincipal() {
         return defaultPrincipal;
     }
 
-    public void setDefaultPrincipal(String defaultPrincipal) {
-        if (running) {
-            throw new IllegalStateException("Cannot change the default principal after the realm is started");
-        }
-        this.defaultPrincipal = defaultPrincipal;
-    }
-
     public Set getGroupPrincipals() throws GeronimoSecurityException {
         if (!running) {
             throw new IllegalStateException("Cannot obtain Groups until the realm is started");
@@ -214,12 +171,15 @@
     }
 
     public void refresh() throws GeronimoSecurityException {
+        java.util.Enumeration e = DriverManager.getDrivers();
+        while(e.hasMoreElements()) {System.err.println("Refresh Driver: "+e.nextElement().getClass().getName());}
+
         users.clear();
         groups.clear();
         Map users = new HashMap();
         Map groups = new HashMap();
         try {
-            Connection conn = DriverManager.getConnection(connectionURL, user, password);
+            Connection conn = driver.connect(connectionURL, properties);
 
             try {
                 PreparedStatement statement = conn.prepareStatement(userSelect);
@@ -288,8 +248,8 @@
         options.put(USER_SELECT, userSelect);
         options.put(GROUP_SELECT, groupSelect);
         options.put(CONNECTION_URL, connectionURL);
-        options.put(USERNAME, user);
-        options.put(PASSWORD, password);
+        options.put(PROPERTIES, properties);
+        options.put(DRIVER, driver);
 
         AppConfigurationEntry entry = new AppConfigurationEntry("org.apache.geronimo.security.realm.providers.SQLLoginModule",
                                                                 AppConfigurationEntry.LoginModuleControlFlag.SUFFICIENT,
@@ -339,18 +299,22 @@
         infoFactory.addInterface(AutoMapAssistant.class);
         infoFactory.addAttribute("connectionURL", String.class, true);
         infoFactory.addAttribute("user", String.class, true);
+        infoFactory.addAttribute("driver", String.class, true);
         infoFactory.addAttribute("password", String.class, true);
         infoFactory.addAttribute("userSelect", String.class, true);
         infoFactory.addAttribute("groupSelect", String.class, true);
         infoFactory.addAttribute("defaultPrincipal", String.class, true);
+        infoFactory.addAttribute("classLoader", ClassLoader.class, false);
 
         infoFactory.setConstructor(new String[]{
             "realmName",
+            "driver",
             "connectionURL",
             "user",
             "password",
             "userSelect",
-            "groupSelect"});
+            "groupSelect",
+            "classLoader"});
 
         GBEAN_INFO = infoFactory.getBeanInfo();
     }

Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SimpleSecurityRealm.java
==============================================================================
--- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SimpleSecurityRealm.java	(original)
+++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/realm/providers/SimpleSecurityRealm.java	Sun Nov 14 22:12:48 2004
@@ -26,7 +26,7 @@
 
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.security.GeronimoSecurityException;
+import org.apache.geronimo.common.GeronimoSecurityException;
 
 
 /**

Modified: geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/jaas/LoginSQLTest.java
==============================================================================
--- geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/jaas/LoginSQLTest.java	(original)
+++ geronimo/trunk/modules/security/src/test/org/apache/geronimo/security/jaas/LoginSQLTest.java	Sun Nov 14 22:12:48 2004
@@ -81,6 +81,7 @@
         gbean.setAttribute("realmName", "sql-realm");
         gbean.setAttribute("maxLoginModuleAge", new Long(1 * 1000));
         gbean.setAttribute("connectionURL", hsqldbURL);
+        gbean.setAttribute("driver","org.hsqldb.jdbcDriver");
         gbean.setAttribute("user", "loginmodule");
         gbean.setAttribute("password", "password");
         gbean.setAttribute("userSelect", "SELECT UserName, Password FROM Users");