You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2010/06/03 23:27:48 UTC

svn commit: r951159 - in /qpid/trunk/qpid/java: broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/ broke...

Author: ritchiem
Date: Thu Jun  3 21:27:48 2010
New Revision: 951159

URL: http://svn.apache.org/viewvc?rev=951159&view=rev
Log:
QPID-2581 : Update Plugins that use configuration to only throw ConfigurationExceptions during the configuration phase of loading configuration.
Creating a plugin and providing it with configuration should not throw a configuration exception.
Added configuration validation to newer plugins SimpleXML still needs validation.
todo Docuement Configuration mechanism.

Modified:
    qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControl.java
    qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControlConfiguration.java
    qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java
    qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java
    qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/Firewall.java
    qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/FirewallConfiguration.java
    qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXML.java
    qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXMLConfiguration.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java

Modified: qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControl.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControl.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControl.java Thu Jun  3 21:27:48 2010
@@ -79,13 +79,6 @@ public class AccessControl extends Abstr
         return _ruleSet.getDefault();
     }
 
-    /** Parse a version two access control file. */
-    private void parseFile(File aclFile) throws ConfigurationException
-    {
-        ConfigurationFile configFile = new PlainConfiguration(aclFile);
-        _ruleSet = configFile.load();
-    }
-    
     /**
      * Object instance access authorisation.
      *
@@ -115,14 +108,12 @@ public class AccessControl extends Abstr
         return _ruleSet.check(principal.getName(), operation, objectType, properties);
     }
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {
         super.configure(config);
 
         AccessControlConfiguration accessConfig = (AccessControlConfiguration) _config;
 
-        String fileName = accessConfig.getFileName();
-        File aclFile = new File(fileName);
-        parseFile(aclFile);
+        _ruleSet = accessConfig.getRuleSet();
     }
 }

Modified: qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControlConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControlConfiguration.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControlConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AccessControlConfiguration.java Thu Jun  3 21:27:48 2010
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.security.access.plugins;
 
+import java.io.File;
 import java.util.Arrays;
 import java.util.List;
 
@@ -27,6 +28,9 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
+import org.apache.qpid.server.security.access.config.ConfigurationFile;
+import org.apache.qpid.server.security.access.config.PlainConfiguration;
+import org.apache.qpid.server.security.access.config.RuleSet;
 
 public class AccessControlConfiguration extends ConfigurationPlugin
 {
@@ -41,17 +45,39 @@ public class AccessControlConfiguration 
 
         public List<String> getParentPaths()
         {
-            return Arrays.asList("security", "virtualhosts.virtualhost.security");
+            return Arrays.asList("security.aclv2", "virtualhosts.virtualhost.security.aclv2");
         }
     };
 
+    private RuleSet _ruleSet;
+
     public String[] getElementsProcessed()
     {
-        return new String[] { "aclv2" };
+        return new String[] { "" };
     }
 
     public String getFileName()
     {
-        return _configuration.getString("aclv2");
+        return _configuration.getString("");
     }
+
+    public void validateConfiguration() throws ConfigurationException
+    {
+        String filename = getFileName();
+        if (filename == null)
+        {
+            throw new ConfigurationException("No ACL file name specified");
+        }
+
+        File aclFile = new File(filename);
+        
+        ConfigurationFile configFile = new PlainConfiguration(aclFile);
+        _ruleSet = configFile.load();
+    }
+
+    public RuleSet getRuleSet()
+    {
+        return _ruleSet;
+    }
+
 }

Modified: qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/SlowConsumerDetection.java Thu Jun  3 21:27:48 2010
@@ -38,32 +38,24 @@ class SlowConsumerDetection extends Virt
 
     public static class SlowConsumerFactory implements VirtualHostPluginFactory
     {
-        public Class<SlowConsumerDetection> getPluginClass()
+        public SlowConsumerDetection newInstance(VirtualHost vhost)
         {
-            return SlowConsumerDetection.class;
-        }
+            SlowConsumerDetectionConfiguration config = vhost.getConfiguration().getConfiguration(SlowConsumerDetectionConfiguration.class);
 
-        public String getPluginName()
-        {
-            return SlowConsumerDetection.class.getName();
-        }
+            if (config == null)
+            {
+                return null;
+            }
 
-        public SlowConsumerDetection newInstance(VirtualHost vhost) throws ConfigurationException
-        {
             SlowConsumerDetection plugin = new SlowConsumerDetection(vhost);
-            plugin.configure(vhost.getConfiguration());
+            plugin.configure(config);
             return plugin;
         }
     }
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {        
-        _config = config.getConfiguration(SlowConsumerDetectionConfiguration.class);
-        
-        if (_config == null)
-        {
-            throw new IllegalArgumentException("Plugin has not been configured");
-        }
+        _config = (SlowConsumerDetectionConfiguration) config;
     }
     
     public SlowConsumerDetection(VirtualHost vhost)

Modified: qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java Thu Jun  3 21:27:48 2010
@@ -128,7 +128,7 @@ public class TopicDeletePolicy implement
         return false;
     }
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {
         _configuration = (TopicDeletePolicyConfiguration) config;
     }

Modified: qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/Firewall.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/Firewall.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/Firewall.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/Firewall.java Thu Jun  3 21:27:48 2010
@@ -25,6 +25,7 @@ import java.net.UnknownHostException;
 import java.util.List;
 
 import org.apache.commons.configuration.CompositeConfiguration;
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
@@ -127,32 +128,15 @@ public class Firewall extends AbstractPl
     }
     
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {
         super.configure(config);
         FirewallConfiguration firewallConfiguration = (FirewallConfiguration) _config;
 
         // Get default action
-        String defaultAction = firewallConfiguration.getConfiguration().getString("[@default-action]");
-        if (defaultAction == null)
-        {
-            _default = Result.ABSTAIN;
-        }
-        else if (defaultAction.equalsIgnoreCase(FirewallRule.ALLOW))
-        {
-            _default = Result.ALLOWED;
-        }
-        else
-        {
-            _default = Result.DENIED;
-        }
+        _default = firewallConfiguration.getDefaultAction();
 
-        CompositeConfiguration finalConfig = new CompositeConfiguration(firewallConfiguration.getConfiguration());
-        List subFiles = firewallConfiguration.getConfiguration().getList("xml[@fileName]");
-        for (Object subFile : subFiles)
-        {
-            finalConfig.addConfiguration(new XMLConfiguration((String) subFile));
-        }
+        Configuration finalConfig = firewallConfiguration.getConfiguration();
 
         // all rules must have an access attribute
         int numRules = finalConfig.getList("rule[@access]").size();

Modified: qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/FirewallConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/FirewallConfiguration.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/FirewallConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/firewall/src/main/java/org/apache/qpid/server/security/access/plugins/FirewallConfiguration.java Thu Jun  3 21:27:48 2010
@@ -23,14 +23,20 @@ package org.apache.qpid.server.security.
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.commons.configuration.CompositeConfiguration;
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
+import org.apache.qpid.server.security.Result;
+import org.apache.qpid.server.security.access.config.FirewallRule;
 
 public class FirewallConfiguration extends ConfigurationPlugin
 {
-    public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory() 
+    CompositeConfiguration _finalConfig;
+
+    public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory()
     {
         public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
         {
@@ -41,17 +47,55 @@ public class FirewallConfiguration exten
 
         public List<String> getParentPaths()
         {
-            return Arrays.asList("security", "virtualhosts.virtualhost.security");
+            return Arrays.asList("security.firewall", "virtualhosts.virtualhost.security.firewall");
         }
     };
 
     public String[] getElementsProcessed()
     {
-        return new String[] { "firewall" };
+        return new String[] { "" };
     }
 
     public Configuration getConfiguration()
     {
-        return _configuration.subset("firewall");
+        return _finalConfig;
     }
+
+    public Result getDefaultAction()
+    {
+        String defaultAction = _configuration.getString("[@default-action]");
+        if (defaultAction == null)
+        {
+            return Result.ABSTAIN;
+        }
+        else if (defaultAction.equalsIgnoreCase(FirewallRule.ALLOW))
+        {
+            return Result.ALLOWED;
+        }
+        else
+        {
+            return Result.DENIED;
+        }
+    }
+
+
+
+    @Override
+    public void validateConfiguration() throws ConfigurationException
+    {
+        // Valid Configuration either has xml links to new files
+        _finalConfig = new CompositeConfiguration(_configuration);
+        List subFiles = _configuration.getList("xml[@fileName]");
+        for (Object subFile : subFiles)
+        {
+            _finalConfig.addConfiguration(new XMLConfiguration((String) subFile));
+        }
+
+        // all rules must have an access attribute
+        if (_finalConfig.getList("rule[@access]").size() == 0)
+        {
+            throw new ConfigurationException("No rules found in firewall configuration.");
+        }
+    }
+
 }

Modified: qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXML.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXML.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXML.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXML.java Thu Jun  3 21:27:48 2010
@@ -76,7 +76,7 @@ public class SimpleXML extends AbstractP
         }
     };
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {
         super.configure(config);
 

Modified: qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXMLConfiguration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXMLConfiguration.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXMLConfiguration.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/simple-xml/src/main/java/org/apache/qpid/server/security/access/plugins/SimpleXMLConfiguration.java Thu Jun  3 21:27:48 2010
@@ -41,17 +41,17 @@ public class SimpleXMLConfiguration exte
 
         public List<String> getParentPaths()
         {
-            return Arrays.asList("security", "virtualhosts.virtualhost.security");
+            return Arrays.asList("security.access_control_list", "virtualhosts.virtualhost.security.access_control_list");
         }
     };
 
     public String[] getElementsProcessed()
     {
-        return new String[] { "access_control_list" };
+        return new String[] { "" };
     }
 
     public Configuration getConfiguration()
     {
-        return _configuration.subset("access_control_list");
+        return _configuration;
     }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/Plugin.java Thu Jun  3 21:27:48 2010
@@ -26,9 +26,6 @@ public interface Plugin
 
     /**
      * Provide Configuration to this plugin
-     *
-     * FIXME Should not throw ConfigurationException,
-     * Only ConfigurationPlugin should throw ConfigurationException 
      */
-    public void configure(ConfigurationPlugin config) throws ConfigurationException;
+    public void configure(ConfigurationPlugin config);
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/PluginManager.java Thu Jun  3 21:27:48 2010
@@ -36,6 +36,7 @@ import org.apache.log4j.Logger;
 import org.apache.qpid.common.Closeable;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
 import org.apache.qpid.server.exchange.ExchangeType;
+import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.security.SecurityPluginFactory;
 import org.apache.qpid.server.security.access.plugins.AllowAll;
 import org.apache.qpid.server.security.access.plugins.DenyAll;
@@ -78,6 +79,7 @@ public class PluginManager implements Cl
             _securityPlugins.put(pluginFactory.getPluginName(), pluginFactory);
         }
         for (ConfigurationPluginFactory configFactory : Arrays.asList(
+                SecurityManager.SecurityConfiguration.FACTORY,
                 AllowAll.AllowAllConfiguration.FACTORY,
                 DenyAll.DenyAllConfiguration.FACTORY,
                 LegacyAccess.LegacyAccessConfiguration.FACTORY))

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java Thu Jun  3 21:27:48 2010
@@ -45,7 +45,7 @@ public abstract class AbstractPlugin imp
 
     public abstract Result authorise(Operation operation, ObjectType object, ObjectProperties properties);
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
+    public void configure(ConfigurationPlugin config)
     {
         _config = config;
     }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java Thu Jun  3 21:27:48 2010
@@ -22,14 +22,18 @@ import static org.apache.qpid.server.sec
 import static org.apache.qpid.server.security.access.Operation.*;
 
 import java.security.Principal;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.log4j.Logger;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
+import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
 import org.apache.qpid.server.exchange.Exchange;
 import org.apache.qpid.server.plugins.PluginManager;
 import org.apache.qpid.server.protocol.AMQProtocolSession;
@@ -57,6 +61,39 @@ public class SecurityManager
     private Map<String, SecurityPlugin> _globalPlugins = new HashMap<String, SecurityPlugin>();
     private Map<String, SecurityPlugin> _hostPlugins = new HashMap<String, SecurityPlugin>();
 
+    public static class SecurityConfiguration extends ConfigurationPlugin
+    {
+        public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory()
+        {
+            public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
+            {
+                ConfigurationPlugin instance = new SecurityConfiguration();
+                instance.setConfiguration(path, config);
+                return instance;
+            }
+
+            public List<String> getParentPaths()
+            {
+                return Arrays.asList("security", "virtualhosts.virtualhost.security");
+            }
+        };
+
+        @Override
+        public String[] getElementsProcessed()
+        {
+            return new String[]{"security"};
+        }
+
+        public void validateConfiguration() throws ConfigurationException
+        {
+            if (_configuration.isEmpty())
+            {
+                throw new ConfigurationException("security section is incomplete, no elements found.");
+            }
+        }
+    }
+
+
     public SecurityManager(SecurityManager parent) throws ConfigurationException
     {
         _pluginManager = parent._pluginManager;
@@ -116,12 +153,18 @@ public class SecurityManager
     public Map<String, SecurityPlugin> configurePlugins(ConfigurationPlugin hostConfig) throws ConfigurationException
     {
         Map<String, SecurityPlugin> plugins = new HashMap<String, SecurityPlugin>();
-        for (SecurityPluginFactory<?> factory : _pluginFactories.values())
+        SecurityConfiguration securityConfig = hostConfig.getConfiguration(SecurityConfiguration.class);
+
+        // If we have no security Configuration then there is nothing to configure.        
+        if (securityConfig != null)
         {
-            SecurityPlugin plugin = factory.newInstance(hostConfig);
-            if (plugin.isConfigured())
+            for (SecurityPluginFactory<?> factory : _pluginFactories.values())
             {
-                plugins.put(factory.getPluginName(), plugin);
+                SecurityPlugin plugin = factory.newInstance(securityConfig);
+                if (plugin != null)
+                {
+                    plugins.put(factory.getPluginName(), plugin);
+                }
             }
         }
         return plugins;

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java Thu Jun  3 21:27:48 2010
@@ -36,7 +36,7 @@ public class AllowAll extends BasicPlugi
         {
             public List<String> getParentPaths()
             {
-                return Arrays.asList("security", "virtualhosts.virtualhost.security");
+                return Arrays.asList("security.allow-all", "virtualhosts.virtualhost.security.allow-all");
             }
 
             public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
@@ -49,16 +49,33 @@ public class AllowAll extends BasicPlugi
         
         public String[] getElementsProcessed()
         {
-            return new String[] { "allow-all" };
+            return new String[] { "" };
         }
+
+        public void validateConfiguration() throws ConfigurationException
+        {
+            if (!_configuration.isEmpty())
+            {
+                throw new ConfigurationException("allow-all section takes no elements.");
+            }
+        }
+
     }
     
     public static final SecurityPluginFactory<AllowAll> FACTORY = new SecurityPluginFactory<AllowAll>()
     {
-        public AllowAll newInstance(ConfigurationPlugin config) throws ConfigurationException
+        public AllowAll newInstance(ConfigurationPlugin config) throws ConfigurationException                    
         {
+            AllowAllConfiguration configuration = config.getConfiguration(AllowAllConfiguration.class);
+
+            // If there is no configuration for this plugin then don't load it.
+            if (configuration == null)
+            {
+                return null;
+            }
+
             AllowAll plugin = new AllowAll();
-            plugin.configure(config);
+            plugin.configure(configuration);
             return plugin;
         }
 
@@ -79,8 +96,4 @@ public class AllowAll extends BasicPlugi
 		return Result.ALLOWED;
     }
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
-    {
-        _config = config.getConfiguration(AllowAllConfiguration.class);
-    }    
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java Thu Jun  3 21:27:48 2010
@@ -36,7 +36,7 @@ public class DenyAll extends BasicPlugin
         {
             public List<String> getParentPaths()
             {
-                return Arrays.asList("security", "virtualhosts.virtualhost.security");
+                return Arrays.asList("security.deny-all", "virtualhosts.virtualhost.security.deny-all");
             }
 
             public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
@@ -49,16 +49,33 @@ public class DenyAll extends BasicPlugin
         
         public String[] getElementsProcessed()
         {
-            return new String[] { "deny-all" };
+            return new String[] { "" };
         }
+
+        public void validateConfiguration() throws ConfigurationException
+        {
+            if (!_configuration.isEmpty())
+            {
+                throw new ConfigurationException("deny-all section takes no elements.");
+            }
+        }
+
     }
     
     public static final SecurityPluginFactory<DenyAll> FACTORY = new SecurityPluginFactory<DenyAll>()
     {
         public DenyAll newInstance(ConfigurationPlugin config) throws ConfigurationException
         {
+            DenyAllConfiguration configuration = config.getConfiguration(DenyAllConfiguration.class);
+
+            // If there is no configuration for this plugin then don't load it.
+            if (configuration == null)
+            {
+                return null;
+            }
+
             DenyAll plugin = new DenyAll();
-            plugin.configure(config);
+            plugin.configure(configuration);
             return plugin;
         }
 
@@ -79,9 +96,4 @@ public class DenyAll extends BasicPlugin
 		return Result.DENIED;
     }
 
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
-    {
-        _config = config.getConfiguration(DenyAllConfiguration.class);
-    }
-
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java Thu Jun  3 21:27:48 2010
@@ -37,7 +37,11 @@ public class LegacyAccess extends BasicP
         {
             public List<String> getParentPaths()
             {
-                return Arrays.asList("security", "virtualhosts.virtualhost.security");
+                return Arrays.asList("security.jmx", "virtualhosts.virtualhost.security.jmx",
+                                     "security.false", "virtualhosts.virtualhost.security.false",
+                                     "security.msg-auth", "virtualhosts.virtualhost.security.msg-auth",
+                                     "security.access", "virtualhosts.virtualhost.security.access",
+                                     "security.principal-databases", "virtualhosts.virtualhost.security.principal-databases");
             }
 
             public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
@@ -50,7 +54,7 @@ public class LegacyAccess extends BasicP
         
         public String[] getElementsProcessed()
         {
-            return new String[] { "principal-databases", "access", "msg-auth", "false", "jmx" };
+            return new String[] { "" };
         }
     }
     
@@ -58,8 +62,16 @@ public class LegacyAccess extends BasicP
     {
         public LegacyAccess newInstance(ConfigurationPlugin config) throws ConfigurationException
         {
+            LegacyAccessConfiguration configuration = config.getConfiguration(LegacyAccessConfiguration.class);
+
+            // If there is no configuration for this plugin then don't load it.
+            if (configuration == null)
+            {
+                return null;
+            }
+
             LegacyAccess plugin = new LegacyAccess();
-            plugin.configure(config);
+            plugin.configure(configuration);
             return plugin;
         }
 
@@ -74,8 +86,4 @@ public class LegacyAccess extends BasicP
         }
     };
     
-    public void configure(ConfigurationPlugin config) throws ConfigurationException
-    {
-        _config = config.getConfiguration(LegacyAccessConfiguration.class);
-    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Thu Jun  3 21:27:48 2010
@@ -308,11 +308,7 @@ public class VirtualHostImpl implements 
 
                         _logger.info("Loaded VirtualHostPlugin:" + plugin);
                     }
-                    catch (IllegalArgumentException iae)
-                    {
-                        _logger.warn("VirtualHostPlugin:" + pluginName + " has not been configured for this virtualhost(" + getName() + ")");
-                    }
-                    catch (Exception e)
+                    catch (RuntimeException e)
                     {
                         _logger.error("Unable to load VirtualHostPlugin:" + pluginName + " due to:" + e.getMessage(), e);
                     }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java?rev=951159&r1=951158&r2=951159&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/VirtualHostPluginFactory.java Thu Jun  3 21:27:48 2010
@@ -20,10 +20,9 @@
  */
 package org.apache.qpid.server.virtualhost.plugins;
 
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 
 public interface VirtualHostPluginFactory
 {
-    public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost) throws ConfigurationException;
+    public VirtualHostHouseKeepingPlugin newInstance(VirtualHost vhost);
 }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org