summaryrefslogtreecommitdiff
path: root/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker/src/main/java/org/apache/qpid/server/security/access')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java318
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectType.java95
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Operation.java55
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Permission.java47
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java99
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java45
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java99
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java87
8 files changed, 845 insertions, 0 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java
new file mode 100644
index 0000000000..70a9ea5356
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java
@@ -0,0 +1,318 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.server.exchange.Exchange;
+import org.apache.qpid.server.queue.AMQQueue;
+
+/**
+ * An set of properties for an access control v2 rule {@link ObjectType}.
+ *
+ * The {@link #matches(ObjectProperties)} method is intended to be used when determining precedence of rules, and
+ * {@link #equals(Object)} and {@link #hashCode()} are intended for use in maps. This is due to the wildcard matching
+ * described above.
+ */
+public class ObjectProperties extends HashMap<ObjectProperties.Property, String>
+{
+ /** serialVersionUID */
+ private static final long serialVersionUID = -1356019341374170495L;
+
+ public static final String STAR= "*";
+
+ public static final ObjectProperties EMPTY = new ObjectProperties();
+
+ public enum Property
+ {
+ ROUTING_KEY,
+ NAME,
+ QUEUE_NAME,
+ OWNER,
+ TYPE,
+ ALTERNATE,
+ IMMEDIATE,
+ INTERNAL,
+ NO_WAIT,
+ NO_LOCAL,
+ NO_ACK,
+ PASSIVE,
+ DURABLE,
+ EXCLUSIVE,
+ TEMPORARY,
+ AUTO_DELETE,
+ COMPONENT,
+ PACKAGE,
+ CLASS;
+
+ public static Property parse(String text)
+ {
+ for (Property property : values())
+ {
+ if (property.getName().equalsIgnoreCase(text))
+ {
+ return property;
+ }
+ }
+ throw new IllegalArgumentException("Not a valid property: " + text);
+ }
+
+ public String getName()
+ {
+ return StringUtils.remove(name(), '_').toLowerCase();
+ }
+
+ public static List<String> getPropertyNames()
+ {
+ List<String> properties = new ArrayList<String>();
+ for (Property property : values())
+ {
+ properties.add(property.getName());
+ }
+ return properties;
+ }
+ }
+
+ public static List<String> getAllPropertyNames()
+ {
+ List<String> properties = new ArrayList<String>();
+ for (Property property : Property.values())
+ {
+ properties.add(StringUtils.remove(property.name(), '_').toLowerCase());
+ }
+ return properties;
+ }
+
+ public ObjectProperties()
+ {
+ super();
+ }
+
+ public ObjectProperties(ObjectProperties copy)
+ {
+ super();
+
+ putAll(copy);
+ }
+
+ public ObjectProperties(String name)
+ {
+ super();
+
+ setName(name);
+ }
+
+
+ public ObjectProperties(AMQShortString name)
+ {
+ super();
+
+ setName(name);
+ }
+
+ public ObjectProperties(AMQQueue queue)
+ {
+ super();
+
+ setName(queue.getName());
+
+ put(Property.AUTO_DELETE, queue.isAutoDelete());
+ put(Property.TEMPORARY, queue.isAutoDelete());
+ put(Property.DURABLE, queue.isDurable());
+ put(Property.EXCLUSIVE, queue.isExclusive());
+ if (queue.getAlternateExchange() != null)
+ {
+ put(Property.ALTERNATE, queue.getAlternateExchange().getName());
+ }
+ if (queue.getOwner() != null)
+ {
+ put(Property.OWNER, queue.getOwner());
+ }
+ else if (queue.getPrincipalHolder() != null)
+ {
+ put(Property.OWNER, queue.getPrincipalHolder().getPrincipal().getName());
+ }
+ }
+
+ public ObjectProperties(Exchange exch, AMQQueue queue, AMQShortString routingKey)
+ {
+ this(queue);
+
+ setName(exch.getName());
+
+ put(Property.QUEUE_NAME, queue.getName());
+ put(Property.ROUTING_KEY, routingKey);
+ }
+
+ public ObjectProperties(Exchange exch, AMQShortString routingKey)
+ {
+ this(exch.getName(), routingKey.asString());
+ }
+
+ public ObjectProperties(String exchangeName, String routingKey, Boolean immediate)
+ {
+ this(exchangeName, routingKey);
+
+ put(Property.IMMEDIATE, immediate);
+ }
+
+ public ObjectProperties(String exchangeName, String routingKey)
+ {
+ super();
+
+ setName(exchangeName);
+
+ put(Property.ROUTING_KEY, routingKey);
+ }
+
+ public ObjectProperties(Boolean autoDelete, Boolean durable, AMQShortString exchangeName,
+ Boolean internal, Boolean nowait, Boolean passive, AMQShortString exchangeType)
+ {
+ super();
+
+ setName(exchangeName);
+
+ put(Property.AUTO_DELETE, autoDelete);
+ put(Property.TEMPORARY, autoDelete);
+ put(Property.DURABLE, durable);
+ put(Property.INTERNAL, internal);
+ put(Property.NO_WAIT, nowait);
+ put(Property.PASSIVE, passive);
+ put(Property.TYPE, exchangeType);
+ }
+
+ public ObjectProperties(Boolean autoDelete, Boolean durable, Boolean exclusive, Boolean nowait, Boolean passive,
+ AMQShortString queueName, String owner)
+ {
+ super();
+
+ setName(queueName);
+
+ put(Property.AUTO_DELETE, autoDelete);
+ put(Property.TEMPORARY, autoDelete);
+ put(Property.DURABLE, durable);
+ put(Property.EXCLUSIVE, exclusive);
+ put(Property.NO_WAIT, nowait);
+ put(Property.PASSIVE, passive);
+ put(Property.OWNER, owner);
+ }
+
+ public ObjectProperties(Boolean exclusive, Boolean noAck, Boolean noLocal, Boolean nowait, AMQQueue queue)
+ {
+ this(queue);
+
+ put(Property.NO_LOCAL, noLocal);
+ put(Property.NO_ACK, noAck);
+ put(Property.EXCLUSIVE, exclusive);
+ put(Property.NO_WAIT, nowait);
+ }
+
+ public List<String> getPropertyNames()
+ {
+ List<String> properties = new ArrayList<String>();
+ for (Property property : keySet())
+ {
+ properties.add(property.getName());
+ }
+ return properties;
+ }
+
+ public Boolean isSet(Property key)
+ {
+ return containsKey(key) && Boolean.valueOf(get(key));
+ }
+
+ public String getName()
+ {
+ return get(Property.NAME);
+ }
+
+ public void setName(String name)
+ {
+ put(Property.NAME, name);
+ }
+
+ public void setName(AMQShortString name)
+ {
+ put(Property.NAME, name);
+ }
+
+ public String put(Property key, AMQShortString value)
+ {
+ return put(key, value == null ? "" : value.asString());
+ }
+
+ @Override
+ public String put(Property key, String value)
+ {
+ return super.put(key, value == null ? "" : value.trim());
+ }
+
+ public void put(Property key, Boolean value)
+ {
+ if (value != null)
+ {
+ super.put(key, Boolean.toString(value));
+ }
+ }
+
+ public boolean matches(ObjectProperties properties)
+ {
+ if (properties.keySet().isEmpty())
+ {
+ return true;
+ }
+
+ if (!keySet().containsAll(properties.keySet()))
+ {
+ return false;
+ }
+
+ for (Map.Entry<Property,String> entry : properties.entrySet())
+ {
+ Property key = entry.getKey();
+ String ruleValue = entry.getValue();
+
+ String thisValue = get(key);
+
+ if (!valueMatches(thisValue, ruleValue))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private boolean valueMatches(String thisValue, String ruleValue)
+ {
+ return (StringUtils.isEmpty(ruleValue)
+ || StringUtils.equals(thisValue, ruleValue))
+ || ruleValue.equals(STAR)
+ || (ruleValue.endsWith(STAR)
+ && thisValue != null
+ && thisValue.length() > ruleValue.length()
+ && thisValue.startsWith(ruleValue.substring(0, ruleValue.length() - 2)));
+ }
+}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectType.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectType.java
new file mode 100644
index 0000000000..7103b30283
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectType.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access;
+
+import static org.apache.qpid.server.security.access.Operation.*;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * An enumeration of all possible object types that can form part of an access control v2 rule.
+ *
+ * Each object type is valid only for a certain set of {@link Operation}s, which are passed as a list to
+ * the constructor, and can be checked using the {@link #isAllowed(Operation)} method.
+ */
+public enum ObjectType
+{
+ ALL(Operation.ALL),
+ VIRTUALHOST(ACCESS),
+ QUEUE(CREATE, DELETE, PURGE, CONSUME),
+ TOPIC(CREATE, DELETE, PURGE, CONSUME),
+ EXCHANGE(ACCESS, CREATE, DELETE, BIND, UNBIND, PUBLISH),
+ LINK, // Not allowed in the Java broker
+ ROUTE, // Not allowed in the Java broker
+ METHOD(Operation.ALL, ACCESS, UPDATE, EXECUTE),
+ OBJECT(ACCESS);
+
+ private EnumSet<Operation> _actions;
+
+ private ObjectType()
+ {
+ _actions = EnumSet.noneOf(Operation.class);
+ }
+
+ private ObjectType(Operation operation)
+ {
+ if (operation == Operation.ALL)
+ {
+ _actions = EnumSet.allOf(Operation.class);
+ }
+ else
+ {
+ _actions = EnumSet.of(operation);
+ }
+ }
+
+ private ObjectType(Operation first, Operation...rest)
+ {
+ _actions = EnumSet.of(first, rest);
+ }
+
+ public Set<Operation> getActions()
+ {
+ return _actions;
+ }
+
+ public boolean isAllowed(Operation operation)
+ {
+ return _actions.contains(operation);
+ }
+
+ public static ObjectType parse(String text)
+ {
+ for (ObjectType object : values())
+ {
+ if (object.name().equalsIgnoreCase(text))
+ {
+ return object;
+ }
+ }
+ throw new IllegalArgumentException("Not a valid object type: " + text);
+ }
+
+ public String toString()
+ {
+ String name = name();
+ return name.charAt(0) + name.substring(1).toLowerCase();
+ }
+}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Operation.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Operation.java
new file mode 100644
index 0000000000..06d7f8fd0c
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Operation.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access;
+
+/**
+ * An enumeration of all possible actions that can form part of an access control v2 rule.
+ */
+public enum Operation
+{
+ ALL,
+ CONSUME,
+ PUBLISH,
+ CREATE,
+ ACCESS,
+ BIND,
+ UNBIND,
+ DELETE,
+ PURGE,
+ UPDATE,
+ EXECUTE;
+
+ public static Operation parse(String text)
+ {
+ for (Operation operation : values())
+ {
+ if (operation.name().equalsIgnoreCase(text))
+ {
+ return operation;
+ }
+ }
+ throw new IllegalArgumentException("Not a valid operation: " + text);
+ }
+
+ public String toString()
+ {
+ String name = name();
+ return name.charAt(0) + name.substring(1).toLowerCase();
+ }
+} \ No newline at end of file
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Permission.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Permission.java
new file mode 100644
index 0000000000..49b3a331f9
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/Permission.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * An enumeration of all possible permissions that can be applied to an access control v2 rule.
+ */
+public enum Permission
+{
+ ALLOW,
+ ALLOW_LOG,
+ DENY,
+ DENY_LOG;
+
+ public static Permission parse(String text)
+ {
+
+ for (Permission permission : values())
+ {
+ if (permission.name().equalsIgnoreCase(StringUtils.replaceChars(text, '-', '_')))
+ {
+ return permission;
+ }
+ }
+ throw new IllegalArgumentException("Not a valid permission: " + text);
+ }
+} \ No newline at end of file
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java
new file mode 100644
index 0000000000..db18a89231
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/AllowAll.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access.plugins;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.configuration.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.Result;
+import org.apache.qpid.server.security.SecurityPluginFactory;
+
+/** Always allow. */
+public class AllowAll extends BasicPlugin
+{
+ public static class AllowAllConfiguration extends ConfigurationPlugin {
+ public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory()
+ {
+ public List<String> getParentPaths()
+ {
+ return Arrays.asList("security.allow-all", "virtualhosts.virtualhost.security.allow-all");
+ }
+
+ public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
+ {
+ ConfigurationPlugin instance = new AllowAllConfiguration();
+ instance.setConfiguration(path, config);
+ return instance;
+ }
+ };
+
+ public String[] getElementsProcessed()
+ {
+ 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
+ {
+ AllowAllConfiguration configuration = config.getConfiguration(AllowAllConfiguration.class.getName());
+
+ // If there is no configuration for this plugin then don't load it.
+ if (configuration == null)
+ {
+ return null;
+ }
+
+ AllowAll plugin = new AllowAll();
+ plugin.configure(configuration);
+ return plugin;
+ }
+
+ public String getPluginName()
+ {
+ return AllowAll.class.getName();
+ }
+
+ public Class<AllowAll> getPluginClass()
+ {
+ return AllowAll.class;
+ }
+ };
+
+ @Override
+ public Result getDefault()
+ {
+ return Result.ALLOWED;
+ }
+
+}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java
new file mode 100644
index 0000000000..f3161551dc
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java
@@ -0,0 +1,45 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access.plugins;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.security.AbstractPlugin;
+import org.apache.qpid.server.security.Result;
+import org.apache.qpid.server.security.SecurityPlugin;
+import org.apache.qpid.server.security.access.ObjectProperties;
+import org.apache.qpid.server.security.access.ObjectType;
+import org.apache.qpid.server.security.access.Operation;
+
+/**
+ * This {@link SecurityPlugin} simply abstains from all authorisation requests and ignores configuration.
+ */
+public abstract class BasicPlugin extends AbstractPlugin
+{
+ public Result access(ObjectType objectType, Object instance)
+ {
+ return getDefault();
+ }
+
+ public Result authorise(Operation operation, ObjectType objectType, ObjectProperties properties)
+ {
+ return getDefault();
+ }
+}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java
new file mode 100644
index 0000000000..6c0fb1eaa4
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/DenyAll.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access.plugins;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.configuration.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.Result;
+import org.apache.qpid.server.security.SecurityPluginFactory;
+
+/** Always Deny. */
+public class DenyAll extends BasicPlugin
+{
+ public static class DenyAllConfiguration extends ConfigurationPlugin {
+ public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory()
+ {
+ public List<String> getParentPaths()
+ {
+ return Arrays.asList("security.deny-all", "virtualhosts.virtualhost.security.deny-all");
+ }
+
+ public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
+ {
+ ConfigurationPlugin instance = new DenyAllConfiguration();
+ instance.setConfiguration(path, config);
+ return instance;
+ }
+ };
+
+ public String[] getElementsProcessed()
+ {
+ 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.getName());
+
+ // If there is no configuration for this plugin then don't load it.
+ if (configuration == null)
+ {
+ return null;
+ }
+
+ DenyAll plugin = new DenyAll();
+ plugin.configure(configuration);
+ return plugin;
+ }
+
+ public String getPluginName()
+ {
+ return DenyAll.class.getName();
+ }
+
+ public Class<DenyAll> getPluginClass()
+ {
+ return DenyAll.class;
+ }
+ };
+
+ @Override
+ public Result getDefault()
+ {
+ return Result.DENIED;
+ }
+
+}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java
new file mode 100644
index 0000000000..bd99cdd1fa
--- /dev/null
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/LegacyAccess.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.qpid.server.security.access.plugins;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin;
+import org.apache.qpid.server.configuration.VirtualHostConfiguration;
+import org.apache.qpid.server.configuration.ServerConfiguration;
+import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory;
+import org.apache.qpid.server.security.SecurityPluginFactory;
+
+/** Always Abstain. */
+public class LegacyAccess extends BasicPlugin
+{
+ public static class LegacyAccessConfiguration extends ConfigurationPlugin {
+ public static final ConfigurationPluginFactory FACTORY = new ConfigurationPluginFactory()
+ {
+ public List<String> getParentPaths()
+ {
+ return Arrays.asList("security.jmx", "virtualhosts.virtualhost.security.jmx",
+ "security.msg-auth", "virtualhosts.virtualhost.security.msg-auth",
+ "security.principal-databases", "virtualhosts.virtualhost.security.principal-databases");
+ }
+
+ public ConfigurationPlugin newInstance(String path, Configuration config) throws ConfigurationException
+ {
+ ConfigurationPlugin instance = new LegacyAccessConfiguration();
+ instance.setConfiguration(path, config);
+ return instance;
+ }
+ };
+
+ public String[] getElementsProcessed()
+ {
+ return new String[] { "" };
+ }
+ }
+
+ public static final SecurityPluginFactory<LegacyAccess> FACTORY = new SecurityPluginFactory<LegacyAccess>()
+ {
+ public LegacyAccess newInstance(ConfigurationPlugin config) throws ConfigurationException
+ {
+ LegacyAccessConfiguration configuration = config.getConfiguration(LegacyAccessConfiguration.class.getName());
+
+ // If there is no configuration for this plugin then don't load it.
+ if (configuration == null)
+ {
+ return null;
+ }
+
+ LegacyAccess plugin = new LegacyAccess();
+ plugin.configure(configuration);
+ return plugin;
+ }
+
+ public String getPluginName()
+ {
+ return LegacyAccess.class.getName();
+ }
+
+ public Class<LegacyAccess> getPluginClass()
+ {
+ return LegacyAccess.class;
+ }
+ };
+
+}