diff options
| author | Andrew MacBean <macbean@apache.org> | 2014-09-10 14:28:02 +0000 |
|---|---|---|
| committer | Andrew MacBean <macbean@apache.org> | 2014-09-10 14:28:02 +0000 |
| commit | 55a53d4920c2cbd490b7978f1e3f3c8c605dcded (patch) | |
| tree | 6cd29fabc1bca6c514d4875ebfc097a5fc6763d4 /qpid/java/bdbstore/src/main | |
| parent | 32421e86e3eac9e77d9ee3873c6c24d9af9cbd8e (diff) | |
| download | qpid-python-55a53d4920c2cbd490b7978f1e3f3c8c605dcded.tar.gz | |
QPID-6090: [Java Broker] Prevent removal of existing group nodes from the permitted nodes attribute on VHN
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1624012 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src/main')
| -rw-r--r-- | qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java index b9f0764f67..2eadd63268 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java @@ -761,13 +761,38 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode<BDBHAVirtu } } - private void validatePermittedNodes(List<String> permittedNodes) + private void validatePermittedNodes(List<String> proposedPermittedNodes) { - if (permittedNodes == null || permittedNodes.isEmpty()) + if (proposedPermittedNodes == null || proposedPermittedNodes.isEmpty()) { throw new IllegalArgumentException(String.format("Attribute '%s' is mandatory and must be set", PERMITTED_NODES)); } - for (String permittedNode: permittedNodes) + + String missingNodeAddress = null; + if (!proposedPermittedNodes.contains(getAddress())) + { + missingNodeAddress = getAddress(); + } + else + { + for (final RemoteReplicationNode<?> node : getRemoteReplicationNodes()) + { + final BDBHARemoteReplicationNode<?> bdbHaRemoteReplicationNode = (BDBHARemoteReplicationNode<?>) node; + final String remoteNodeAddress = bdbHaRemoteReplicationNode.getAddress(); + if (!proposedPermittedNodes.contains(remoteNodeAddress)) + { + missingNodeAddress = remoteNodeAddress; + break; + } + } + } + + if (missingNodeAddress != null) + { + throw new IllegalArgumentException(String.format("The current group node '%s' cannot be removed from '%s' as its already a group member", missingNodeAddress, PERMITTED_NODES)); + } + + for (String permittedNode: proposedPermittedNodes) { String[] tokens = permittedNode.split(":"); if (tokens.length != 2) |
