djencks     2004/01/19 17:36:59

  Modified:    .        maven.xml
               modules/core/src/java/org/apache/geronimo/security
                        AbstractModuleConfiguration.java
                        AbstractSecurityRealm.java
                        EJBModuleConfiguration.java SecurityService.java
                        WebModuleConfiguration.java
               modules/core/src/java/org/apache/geronimo/security/providers
                        PropertiesFileSecurityRealm.java
                        SQLSecurityRealm.java
               modules/core/src/test/org/apache/geronimo/security
                        LoginPropertiesFileTest.java
                        SecurityServiceTest.java
               modules/deployment/src/test-resources/etc
                        bootstrapped-service.xml
  Log:
  gbeanization of security
  
  Revision  Changes    Path
  1.51      +9 -1      incubator-geronimo/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/maven.xml,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- maven.xml 19 Jan 2004 06:43:32 -0000      1.50
  +++ maven.xml 20 Jan 2004 01:36:58 -0000      1.51
  @@ -659,6 +659,10 @@
                           <include name="jasper-compiler-4.0.4.jar"/>
                           <include name="jasper-runtime-4.0.4.jar"/>
                       </fileset>
  +                    <!-- security -->
  +                    <fileset dir="${maven.repo.local}/regexp/jars">
  +                          <include name="regexp-1.3-dev.jar"/>
  +                    </fileset>
                   </classpath>
   
                   <arg 
value="file:${run.dir}/deployment/src/test-resources/etc/bootstrapped-service.xml"/>
  @@ -727,6 +731,10 @@
                       <fileset dir="${maven.repo.local}/tomcat/jars">
                           <include name="jasper-compiler-4.0.4.jar"/>
                           <include name="jasper-runtime-4.0.4.jar"/>
  +                    </fileset>
  +                    <!-- security -->
  +                    <fileset dir="${maven.repo.local}/regexp/jars">
  +                          <include name="regexp-1.3-dev.jar"/>
                       </fileset>
                   </classpath>
   
  
  
  
  1.5       +33 -23    
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractModuleConfiguration.java
  
  Index: AbstractModuleConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractModuleConfiguration.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractModuleConfiguration.java  16 Jan 2004 02:10:46 -0000      1.4
  +++ AbstractModuleConfiguration.java  20 Jan 2004 01:36:58 -0000      1.5
  @@ -67,13 +67,20 @@
   import org.apache.geronimo.kernel.service.GeronimoMBeanContext;
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
   import org.apache.geronimo.kernel.service.GeronimoMBeanTarget;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GOperationInfo;
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GBean;
   
   
   /**
    *
    * @version $Revision$ $Date$
    */
  -public abstract class AbstractModuleConfiguration implements 
ModuleConfiguration, GeronimoMBeanTarget {
  +public abstract class AbstractModuleConfiguration implements 
ModuleConfiguration, GeronimoMBeanTarget, GBean {
  +
  +    private static final GBeanInfo GBEAN_INFO;
   
       public static final String BASE_OBJECT_NAME = 
"geronimo.security:type=ModuleConfiguration";
   
  @@ -97,13 +104,15 @@
           }
       }
   
  -
  +    /**
  +     * Implement configuration from supplied metadata (dds) in subclasses.
  +     */
       public void doStart() {
   
       }
   
       public void doStop() {
  -
  +        delete();
       }
   
       public void doFail() {
  @@ -228,6 +237,7 @@
        *
        * <p> This operation has no affect on any linked 
<code>PolicyConfigurations</code> other than removing any links
        * 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 GeronimoSecurityException if the implementation throws a 
checked exception that has not been accounted for by
  @@ -235,26 +245,10 @@
        * construction) in the thrown <code>GeronimoSecurityException</code>.
        */
       public void delete() throws GeronimoSecurityException {
  -
           try {
  -            if (context != null) {
  -                try {
  -                    context.stop();
  -                } catch (Exception e) {
  -                }
  -                try {
  -                    
context.getServer().unregisterMBean(context.getObjectName());
  -                } catch (InstanceNotFoundException e) {
  -                    throw new GeronimoSecurityException("Already deleted", 
e);
  -                } catch (MBeanRegistrationException e) {
  -                }
  -            }
  -        }finally {
  -            try {
  -                policyConfiguration.delete();
  -            } catch (PolicyContextException e) {
  -                throw new GeronimoSecurityException("Unable to delete 
configuration", e.getCause());
  -            }
  +            policyConfiguration.delete();
  +        } catch (PolicyContextException e) {
  +            throw new GeronimoSecurityException("Unable to delete 
configuration", e.getCause());
           }
       }
   
  @@ -301,6 +295,22 @@
           } catch (PolicyContextException e) {
               throw new GeronimoSecurityException("Unable to obtain inService 
state", e.getCause());
           }
  +    }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(AbstractModuleConfiguration.class.getName());
  +        infoFactory.addAttribute(new GAttributeInfo("ContextID", true));
  +        infoFactory.addAttribute(new GAttributeInfo("Roles", 
true));//??persistent
  +        infoFactory.addOperation(new GOperationInfo("addRoleMapping",
  +                new String[]{String.class.getName(), 
Collection.class.getName()}));
  +        infoFactory.addOperation(new GOperationInfo("linkConfiguration", new 
String[]{ModuleConfiguration.class.getName()}));
  +        infoFactory.addOperation(new GOperationInfo("commit"));
  +        infoFactory.addOperation(new GOperationInfo("inService"));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
       }
   
       public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  
  
  
  1.5       +36 -2     
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractSecurityRealm.java
  
  Index: AbstractSecurityRealm.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/AbstractSecurityRealm.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractSecurityRealm.java        2 Jan 2004 04:31:44 -0000       1.4
  +++ AbstractSecurityRealm.java        20 Jan 2004 01:36:59 -0000      1.5
  @@ -57,18 +57,35 @@
   
   import org.apache.geronimo.kernel.service.GeronimoMBeanContext;
   import org.apache.geronimo.kernel.service.GeronimoMBeanTarget;
  +import org.apache.geronimo.gbean.GBean;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GOperationInfo;
  +import org.apache.geronimo.gbean.GConstructorInfo;
  +import org.apache.regexp.RE;
   
   
   /**
    *
    * @version $Revision$ $Date$
    */
  -public abstract class AbstractSecurityRealm  implements SecurityRealm, 
GeronimoMBeanTarget {
  +public abstract class AbstractSecurityRealm  implements SecurityRealm, 
GeronimoMBeanTarget, GBean {
  +
  +    private static final GBeanInfo GBEAN_INFO;
   
       private String realmName;
   
       protected GeronimoMBeanContext context;
   
  +    //deprecated, GeronimoMBean only
  +    public AbstractSecurityRealm() {}
  +
  +
  +    public AbstractSecurityRealm(String realmName) {
  +        this.realmName = realmName;
  +    }
  +
       public String getRealmName() {
           return realmName;
       }
  @@ -96,5 +113,22 @@
       }
   
       public void doFail() {
  +    }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(AbstractSecurityRealm.class.getName());
  +        infoFactory.addAttribute(new GAttributeInfo("RealmName", true));
  +        infoFactory.addOperation(new GOperationInfo("getGroupPrincipals"));
  +        infoFactory.addOperation(new GOperationInfo("getGroupPrincipals", 
new String[] {RE.class.getName()}));
  +        infoFactory.addOperation(new GOperationInfo("getUserPrincipals"));
  +        infoFactory.addOperation(new GOperationInfo("getUserPrincipals", new 
String[] {RE.class.getName()}));
  +        infoFactory.addOperation(new GOperationInfo("refresh"));
  +        infoFactory.addOperation(new 
GOperationInfo("getAppConfigurationEntry"));
  +        infoFactory.setConstructor(new GConstructorInfo(new String[] 
{"RealmName"}, new Class[] {String.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
       }
   }
  
  
  
  1.8       +25 -5     
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/EJBModuleConfiguration.java
  
  Index: EJBModuleConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/EJBModuleConfiguration.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- EJBModuleConfiguration.java       16 Jan 2004 02:10:46 -0000      1.7
  +++ EJBModuleConfiguration.java       20 Jan 2004 01:36:59 -0000      1.8
  @@ -71,6 +71,10 @@
   import org.apache.geronimo.deployment.model.j2ee.SecurityRole;
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
   import org.apache.geronimo.security.util.ConfigurationUtil;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GConstructorInfo;
  +import org.apache.geronimo.gbean.GAttributeInfo;
   
   
   /**
  @@ -80,23 +84,25 @@
    */
   public class EJBModuleConfiguration extends AbstractModuleConfiguration {
   
  +    private static final GBeanInfo GBEAN_INFO;
  +
  +    private EjbJar ejbJar;
  +
       public EJBModuleConfiguration(String contextId, EjbJar ejbJar) throws 
GeronimoSecurityException {
           super(contextId);
  -        configure(ejbJar);
  +        this.ejbJar = ejbJar;
       }
   
       /**
        * Translate the EJB deployment descriptors into equivalent security
        * permissions.  These permissions are placed into the appropriate
        * <code>PolicyConfiguration</code> object as defined in the JAAC spec.
  -     * @param ejbJar the deployment descriptor from which to obtain the
  -     * security constraints that are to be translated.
        * @throws GeronimoSecurityException if there is any violation of the 
semantics of
        * the security descriptor or the state of the module configuration.
        * @see javax.security.jacc.PolicyConfiguration
        * @see "Java Authorization Contract for Containers", section 3.1.3
        */
  -    private void configure(EjbJar ejbJar) throws GeronimoSecurityException {
  +    public void doStart() {
           PolicyConfiguration configuration = getPolicyConfiguration();
   
           AssemblyDescriptor assemblyDescriptor = 
ejbJar.getAssemblyDescriptor();
  @@ -147,6 +153,20 @@
                   }
               }
           }
  +    }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(EJBModuleConfiguration.class.getName(), 
AbstractModuleConfiguration.getGBeanInfo());
  +        //TODO make sure this attribute not backed by a getter or setter 
works.
  +        infoFactory.addAttribute(new GAttributeInfo("EJBJar", true));
  +        infoFactory.setConstructor(new GConstructorInfo(
  +                new String[] {"ContextID", "EJBJar"},
  +                new Class[] {String.class, EjbJar.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
       }
   
       public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  
  
  
  1.8       +55 -25    
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/SecurityService.java
  
  Index: SecurityService.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/SecurityService.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SecurityService.java      16 Jan 2004 02:10:46 -0000      1.7
  +++ SecurityService.java      20 Jan 2004 01:36:59 -0000      1.8
  @@ -72,6 +72,12 @@
   import org.apache.geronimo.kernel.service.GeronimoOperationInfo;
   import org.apache.geronimo.kernel.service.GeronimoParameterInfo;
   import org.apache.geronimo.security.util.ConfigurationUtil;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GOperationInfo;
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GEndpointInfo;
  +import org.apache.geronimo.gbean.GConstructorInfo;
   
   
   /**
  @@ -81,6 +87,7 @@
    */
   public class SecurityService  {
   
  +    private static final GBeanInfo GBEAN_INFO;
   
       private final Log log = LogFactory.getLog(SecurityService.class);
   
  @@ -93,31 +100,13 @@
        * Permissions that protect access to sensitive security information
        */
       public static final GeronimoSecurityPermission CONFIGURE = new 
GeronimoSecurityPermission("configure");
  -
  -    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  -        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  -        mbeanInfo.setTargetClass(SecurityService.class.getName());
  -
  -        mbeanInfo.addOperationInfo(new 
GeronimoOperationInfo("getModuleConfiguration",
  -                new GeronimoParameterInfo[] {
  -                    new GeronimoParameterInfo("contextID", String.class, ""),
  -                    new GeronimoParameterInfo("remove", Boolean.TYPE, "")},
  -                GeronimoOperationInfo.ACTION_INFO,
  -                "Get security configuration for module identified by 
contextID"));
  -
  -        mbeanInfo.addAttributeInfo(new 
GeronimoAttributeInfo("PolicyConfigurationFactory",
  -                                                             true, true,
  -                                                             "The 
PolicyConfigurationFactory to use",
  -                                                             
(Object)"org.apache.geronimo.security.GeronimoPolicyConfigurationFactory"));
  -
  -        mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("Realms", 
SecurityRealm.class, ObjectName.getInstance(SecurityRealm.BASE_OBJECT_NAME + 
",*")));
  -        mbeanInfo.addEndpoint(new 
GeronimoMBeanEndpoint("ModuleConfigurations", ModuleConfiguration.class, 
ObjectName.getInstance(AbstractModuleConfiguration.BASE_OBJECT_NAME + ",*")));
  -
  -        return mbeanInfo;
  +    //deprecated, for geronimo mbean only
  +    public SecurityService() {
  +        this(null);
       }
   
   
  -    public SecurityService() {
  +    public SecurityService(String policyConfigurationFactory) {
           AccessController.doPrivileged(
                   new java.security.PrivilegedAction() {
                       public Object run() {
  @@ -137,6 +126,7 @@
   
               throw (IllegalStateException)new 
IllegalStateException().initCause(pce);
           }
  +        setPolicyConfigurationFactory(policyConfigurationFactory);
       }
   
       public String getPolicyConfigurationFactory() {
  @@ -145,8 +135,10 @@
   
       public void setPolicyConfigurationFactory(String 
policyConfigurationFactory) {
           this.policyConfigurationFactory = policyConfigurationFactory;
  -
  -        
System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", 
policyConfigurationFactory);
  +        //TODO remove this if wrapper when GeronimoMBean leaves.
  +        if (policyConfigurationFactory != null) {
  +            
System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", 
policyConfigurationFactory);
  +        }
       }
   
       /**
  @@ -224,6 +216,44 @@
               }
           }
           return null;
  +    }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(SecurityService.class.getName());
  +        infoFactory.addAttribute(new 
GAttributeInfo("PolicyConfigurationFactory", true));
  +        infoFactory.addOperation(new 
GOperationInfo("getModuleConfiguration", new String[] {String.class.getName(), 
Boolean.TYPE.getName()}));
  +        infoFactory.addEndpoint(new GEndpointInfo("Realms", 
SecurityRealm.class.getName()));
  +        infoFactory.addEndpoint(new GEndpointInfo("ModuleConfigurations", 
ModuleConfiguration.class.getName()));
  +        infoFactory.setConstructor(new GConstructorInfo(
  +                new String[] {"PolicyConfigurationFactory"},
  +                new Class[] {String.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
  +    }
  +
  +    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  +        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  +        mbeanInfo.setTargetClass(SecurityService.class.getName());
  +
  +        mbeanInfo.addOperationInfo(new 
GeronimoOperationInfo("getModuleConfiguration",
  +                new GeronimoParameterInfo[] {
  +                    new GeronimoParameterInfo("contextID", String.class, ""),
  +                    new GeronimoParameterInfo("remove", Boolean.TYPE, "")},
  +                GeronimoOperationInfo.ACTION_INFO,
  +                "Get security configuration for module identified by 
contextID"));
  +
  +        mbeanInfo.addAttributeInfo(new 
GeronimoAttributeInfo("PolicyConfigurationFactory",
  +                                                             true, true,
  +                                                             "The 
PolicyConfigurationFactory to use",
  +                                                             
(Object)"org.apache.geronimo.security.GeronimoPolicyConfigurationFactory"));
  +
  +        mbeanInfo.addEndpoint(new GeronimoMBeanEndpoint("Realms", 
SecurityRealm.class, ObjectName.getInstance(SecurityRealm.BASE_OBJECT_NAME + 
",*")));
  +        mbeanInfo.addEndpoint(new 
GeronimoMBeanEndpoint("ModuleConfigurations", ModuleConfiguration.class, 
ObjectName.getInstance(AbstractModuleConfiguration.BASE_OBJECT_NAME + ",*")));
  +
  +        return mbeanInfo;
       }
   
   }
  
  
  
  1.8       +26 -6     
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/WebModuleConfiguration.java
  
  Index: WebModuleConfiguration.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/WebModuleConfiguration.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- WebModuleConfiguration.java       16 Jan 2004 02:10:46 -0000      1.7
  +++ WebModuleConfiguration.java       20 Jan 2004 01:36:59 -0000      1.8
  @@ -68,6 +68,10 @@
   import org.apache.geronimo.deployment.model.geronimo.j2ee.RoleMappings;
   import org.apache.geronimo.deployment.model.geronimo.j2ee.Security;
   import org.apache.geronimo.deployment.model.geronimo.web.WebApp;
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GConstructorInfo;
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
   import org.apache.geronimo.security.util.ConfigurationUtil;
   
  @@ -88,23 +92,25 @@
    */
   public class WebModuleConfiguration extends AbstractModuleConfiguration {
   
  -    public WebModuleConfiguration(String contextId, WebApp webApp) throws 
GeronimoSecurityException {
  +    private static final GBeanInfo GBEAN_INFO;
  +
  +    private WebApp webApp;
  +
  +    public WebModuleConfiguration(String contextId, WebApp webApp) {
           super(contextId);
  -        configure(webApp);
  +        this.webApp = webApp;
       }
   
       /**
        * Translate the web deployment descriptors into equivalent security
        * permissions.  These permissions are placed into the appropriate
        * <code>PolicyConfiguration</code> object as defined in the JAAC spec.
  -     * @param webApp the deployment descriptor from which to obtain the
  -     * security constraints that are to be translated.
        * @throws GeronimoSecurityException if there is any violation of the 
semantics of
        * the security descriptor or the state of the module configuration.
        * @see javax.security.jacc.PolicyConfiguration
        * @see "Java Authorization Contract for Containers", section 3.1.3
        */
  -    private void configure(WebApp webApp) throws GeronimoSecurityException {
  +    public void doStart() {
   
           PolicyConfiguration configuration = getPolicyConfiguration();
   
  @@ -149,6 +155,20 @@
                   }
               }
           }
  +    }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(WebModuleConfiguration.class.getName(), 
AbstractModuleConfiguration.getGBeanInfo());
  +        //TODO make sure this attribute not backed by a getter or setter 
works.
  +        infoFactory.addAttribute(new GAttributeInfo("WebApp", true));
  +        infoFactory.setConstructor(new GConstructorInfo(
  +                new String[] {"ContextID", "WebApp"},
  +                new Class[] {String.class, WebApp.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
       }
   
       public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  
  
  
  1.6       +48 -18    
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/PropertiesFileSecurityRealm.java
  
  Index: PropertiesFileSecurityRealm.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/PropertiesFileSecurityRealm.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- PropertiesFileSecurityRealm.java  5 Jan 2004 18:56:34 -0000       1.5
  +++ PropertiesFileSecurityRealm.java  20 Jan 2004 01:36:59 -0000      1.6
  @@ -72,6 +72,10 @@
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
   import org.apache.geronimo.security.AbstractSecurityRealm;
   import org.apache.geronimo.security.GeronimoSecurityException;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GConstructorInfo;
   import org.apache.regexp.RE;
   
   
  @@ -80,6 +84,9 @@
    * @version $Revision$ $Date$
    */
   public class PropertiesFileSecurityRealm extends AbstractSecurityRealm {
  +
  +    private static final GBeanInfo GBEAN_INFO;
  +
       private boolean running = false;
       private URI usersURI;
       private URI groupsURI;
  @@ -87,17 +94,14 @@
       Properties groups = new Properties();
   
       final static String REALM_INSTANCE = 
"org.apache.geronimo.security.providers.PropertiesFileSecurityRealm";
  +    //deprecated for geronimombeans only
  +    public PropertiesFileSecurityRealm() {
  +    }
   
  -    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  -        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  -
  -        
mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName());
  -
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", 
true, true, "The name of this security realm"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UsersURI", 
true, true, "The location of the users property file"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupsURI", 
true, true, "The location of the groups property file"));
  -
  -        return mbeanInfo;
  +    public PropertiesFileSecurityRealm(String realmName, URI usersURI, URI 
groupsURI) {
  +        super(realmName);
  +        setUsersURI(usersURI);
  +        setGroupsURI(groupsURI);
       }
   
       public void doStart() {
  @@ -109,9 +113,6 @@
       }
   
       public void doStop() {
  -        usersURI = null;
  -        groupsURI = null;
  -
           users.clear();
           groups.clear();
           running = false;
  @@ -125,7 +126,7 @@
           if (running) {
               throw new IllegalStateException("Cannot change the Users URI 
after the realm is started");
           }
  -        this.usersURI = usersURI;
  +        this.usersURI = usersURI == null ? null : usersURI.normalize();
       }
   
       public URI getGroupsURI() {
  @@ -136,7 +137,7 @@
           if (running) {
               throw new IllegalStateException("Cannot change the Groups URI 
after the realm is started");
           }
  -        this.groupsURI = groupsURI;
  +        this.groupsURI = groupsURI == null ? null : groupsURI.normalize();
       }
   
       public Set getGroupPrincipals() throws GeronimoSecurityException {
  @@ -191,8 +192,10 @@
   
       public void refresh() throws GeronimoSecurityException {
           try {
  -            users.load(new FileInputStream(new File(usersURI)));
  -            groups.load(new FileInputStream(new File(groupsURI)));
  +            users.load(usersURI.toURL().openStream());
  +            groups.load(groupsURI.toURL().openStream());
  +            //users.load(new FileInputStream(new File(usersURI)));
  +            //groups.load(new FileInputStream(new File(groupsURI)));
           } catch (IOException e) {
               throw new GeronimoSecurityException(e);
           }
  @@ -209,4 +212,31 @@
   
           return configuration;
       }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(PropertiesFileSecurityRealm.class.getName(), 
AbstractSecurityRealm.getGBeanInfo());
  +        infoFactory.addAttribute(new GAttributeInfo("UsersURI", true));
  +        infoFactory.addAttribute(new GAttributeInfo("GroupsURI", true));
  +        infoFactory.setConstructor(new GConstructorInfo(
  +                new String[]{"RealmName", "UsersURI", "GroupsURI"},
  +                new Class[]{String.class, URI.class, URI.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
  +    }
  +
  +    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  +        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  +
  +        
mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName());
  +
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", 
true, true, "The name of this security realm"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UsersURI", 
true, true, "The location of the users property file"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupsURI", 
true, true, "The location of the groups property file"));
  +
  +        return mbeanInfo;
  +    }
  +
   }
  
  
  
  1.6       +54 -14    
incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/SQLSecurityRealm.java
  
  Index: SQLSecurityRealm.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/security/providers/SQLSecurityRealm.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SQLSecurityRealm.java     11 Jan 2004 08:22:59 -0000      1.5
  +++ SQLSecurityRealm.java     20 Jan 2004 01:36:59 -0000      1.6
  @@ -64,11 +64,15 @@
   import java.util.HashMap;
   import java.util.HashSet;
   import java.util.Iterator;
  -import java.util.Set;
   import java.util.Map;
  +import java.util.Set;
   
   import javax.security.auth.login.AppConfigurationEntry;
   
  +import org.apache.geronimo.gbean.GAttributeInfo;
  +import org.apache.geronimo.gbean.GBeanInfo;
  +import org.apache.geronimo.gbean.GBeanInfoFactory;
  +import org.apache.geronimo.gbean.GConstructorInfo;
   import org.apache.geronimo.kernel.service.GeronimoAttributeInfo;
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
   import org.apache.geronimo.security.AbstractSecurityRealm;
  @@ -82,6 +86,9 @@
    */
   
   public class SQLSecurityRealm extends AbstractSecurityRealm {
  +
  +    private static final GBeanInfo GBEAN_INFO;
  +
       private boolean running = false;
       private String connectionURL;
       private String user = "";
  @@ -93,19 +100,18 @@
   
       final static String REALM_INSTANCE = 
"org.apache.geronimo.security.providers.SQLSecurityRealm";
   
  -    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  -        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  +    /**
  +     * @deprecated
  +     */
  +    public SQLSecurityRealm() {}
   
  -        
mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName());
  -
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", 
true, true, "The name of this security realm"));
  -        mbeanInfo.addAttributeInfo(new 
GeronimoAttributeInfo("ConnectionURL", true, true, "The URL of the data 
source"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("User", true, 
true, "The user name to use when logging in to the data source"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Password", 
true, true, "The password to use when logging in to the data source"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UserSelect", 
true, true, "The SQL statement to used to obtain the list of users"));
  -        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupSelect", 
true, true, "The SQL statement to used to obtain the list of groups"));
  -
  -        return mbeanInfo;
  +    public SQLSecurityRealm(String realmName, String connectionURL, String 
user, String password, String userSelect, String groupSelect) {
  +        super(realmName);
  +        this.connectionURL = connectionURL;
  +        this.user = user;
  +        this.password = password;
  +        this.userSelect = userSelect;
  +        this.groupSelect = groupSelect;
       }
   
       public void doStart() {
  @@ -306,4 +312,38 @@
   
           return configuration;
       }
  +
  +    static {
  +        GBeanInfoFactory infoFactory = new 
GBeanInfoFactory(PropertiesFileSecurityRealm.class.getName(), 
AbstractSecurityRealm.getGBeanInfo());
  +        infoFactory.addAttribute(new GAttributeInfo("RealmName", true));
  +        infoFactory.addAttribute(new GAttributeInfo("ConnectionURL", true));
  +        infoFactory.addAttribute(new GAttributeInfo("User", true));
  +        infoFactory.addAttribute(new GAttributeInfo("Password", true));
  +        infoFactory.addAttribute(new GAttributeInfo("UserSelect", true));
  +        infoFactory.addAttribute(new GAttributeInfo("GroupSelect", true));
  +        infoFactory.setConstructor(new GConstructorInfo(
  +                new String[] {"RealmName", "ConnectionURL", "User", 
"UserSelect", "GroupSelect"},
  +                new Class[] {String.class, String.class, String.class, 
String.class, String.class}));
  +        GBEAN_INFO = infoFactory.getBeanInfo();
  +    }
  +
  +    public static GBeanInfo getGBeanInfo() {
  +        return GBEAN_INFO;
  +    }
  +
  +    public static GeronimoMBeanInfo getGeronimoMBeanInfo() throws Exception {
  +        GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
  +
  +        
mbeanInfo.setTargetClass(PropertiesFileSecurityRealm.class.getName());
  +
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("RealmName", 
true, true, "The name of this security realm"));
  +        mbeanInfo.addAttributeInfo(new 
GeronimoAttributeInfo("ConnectionURL", true, true, "The URL of the data 
source"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("User", true, 
true, "The user name to use when logging in to the data source"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Password", 
true, true, "The password to use when logging in to the data source"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("UserSelect", 
true, true, "The SQL statement to used to obtain the list of users"));
  +        mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("GroupSelect", 
true, true, "The SQL statement to used to obtain the list of groups"));
  +
  +        return mbeanInfo;
  +    }
  +
   }
  
  
  
  1.3       +4 -5      
incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/LoginPropertiesFileTest.java
  
  Index: LoginPropertiesFileTest.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/LoginPropertiesFileTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LoginPropertiesFileTest.java      28 Dec 2003 19:34:05 -0000      1.2
  +++ LoginPropertiesFileTest.java      20 Jan 2004 01:36:59 -0000      1.3
  @@ -82,10 +82,9 @@
   
           securityService = new SecurityService();
   
  -        PropertiesFileSecurityRealm securityRealm = new 
PropertiesFileSecurityRealm();
  -        securityRealm.setRealmName("Foo");
  -        securityRealm.setUsersURI((new File(new File("."), 
"src/test-data/data/users.properties")).toURI());
  -        securityRealm.setGroupsURI((new File(new File("."), 
"src/test-data/data/groups.properties")).toURI());
  +        PropertiesFileSecurityRealm securityRealm = new 
PropertiesFileSecurityRealm("Foo",
  +                (new File(new File("."), 
"src/test-data/data/users.properties")).toURI(),
  +                (new File(new File("."), 
"src/test-data/data/groups.properties")).toURI());
           securityRealm.doStart();
           securityService.setRealms(Collections.singleton(securityRealm));
   
  
  
  
  1.4       +5 -5      
incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/SecurityServiceTest.java
  
  Index: SecurityServiceTest.java
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/security/SecurityServiceTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SecurityServiceTest.java  16 Jan 2004 02:10:46 -0000      1.3
  +++ SecurityServiceTest.java  20 Jan 2004 01:36:59 -0000      1.4
  @@ -82,10 +82,10 @@
   
           securityService = new SecurityService();
   
  -        PropertiesFileSecurityRealm securityRealm = new 
PropertiesFileSecurityRealm();
  -        securityRealm.setRealmName("Foo");
  -        securityRealm.setUsersURI((new File(new File("."), 
"src/test-data/data/users.properties")).toURI());
  -        securityRealm.setGroupsURI((new File(new File("."), 
"src/test-data/data/groups.properties")).toURI());
  +        PropertiesFileSecurityRealm securityRealm = new 
PropertiesFileSecurityRealm("Foo",
  +                (new File(new File("."), 
"src/test-data/data/users.properties")).toURI(),
  +                (new File(new File("."), 
"src/test-data/data/groups.properties")).toURI());
  +        securityRealm.doStart();
   
           securityService.setRealms(Collections.singleton(securityRealm));
           EjbJar ejbJar = new EjbJar();
  
  
  
  1.3       +21 -2     
incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml
  
  Index: bootstrapped-service.xml
  ===================================================================
  RCS file: 
/home/cvs/incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- bootstrapped-service.xml  19 Jan 2004 06:52:33 -0000      1.2
  +++ bootstrapped-service.xml  20 Jan 2004 01:36:59 -0000      1.3
  @@ -18,6 +18,25 @@
           </endpoint>
       </gbean>
   
  +    <!-- security -->
  +    <gbean class="org.apache.geronimo.security.SecurityService" 
objectName="geronimo.security:type=SecurityService">
  +        <default attribute="PolicyConfigurationFactory" 
type="java.lang.String">org.apache.geronimo.security.GeronimoPolicyConfigurationFactory</default>
  +        <endpoint name="Realms">
  +            <pattern>geronimo.security:type=SecurityRealm,*</pattern>
  +        </endpoint>
  +        <endpoint name="ModuleConfigurations">
  +            <pattern>geronimo.security:type=ModuleConfiguration,*</pattern>
  +        </endpoint>
  +    </gbean>
  +
  +    <gbean 
class="org.apache.geronimo.security.providers.PropertiesFileSecurityRealm" 
objectName="geronimo.security:type=SecurityRealm,name=Foo">
  +        <default attribute="RealmName" type="java.lang.String">Foo</default>
  +        <default attribute="UsersURI" 
type="java.net.URI">file:./core/src/test-data/data/users.properties</default>
  +        <default attribute="GroupsURI" 
type="java.net.URI">file:./core/src/test-data/data/groups.properties</default>
  +    </gbean>
  +
  +    <!-- web -->
  +
       <gbean class="org.apache.geronimo.web.jetty.JettyWebContainer" 
objectName="geronimo.web:type=WebContainer,container=Jetty">
           <default attribute="DefaultWebXmlURI" 
type="java.net.URI">web/src/deploy/jetty/webdefault.xml</default>
           <endpoint name="WebAccessLogs">
  @@ -34,8 +53,8 @@
       <gbean class="org.apache.geronimo.web.jetty.JettyWebConnector" 
objectName="geronimo.web:type=WebConnector,container=Jetty,port=8080">
           <default attribute="Protocol" type="java.lang.String">http</default>
           <!-- IMPORTANT localhost here will result in access only from 
127.0.0.1-->
  -        <default attribute="Interface" 
type="java.lang.String">localhost</default>
  -        <!--default attribute="Interface" 
type="java.lang.String">192.168.1.1</default-->
  +        <!-- leaving the Interface attribute out will bind to all 
interfaces-->
  +        <!--default attribute="Interface" 
type="java.lang.String">localhost</default-->
           <default attribute="Port" type="int">8080</default>
           <default attribute="MaxConnections" type="int">10</default>
           <default attribute="MaxIdleTime" type="int">10</default>
  
  
  

Reply via email to