From d7df1e7891bdced308b32a1cf8307be4ec2257ad Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 24 Feb 2022 15:06:41 -0500 Subject: [PATCH] Prevent users from dupe group memberships --- confluent_server/confluent/config/configmanager.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/confluent_server/confluent/config/configmanager.py b/confluent_server/confluent/config/configmanager.py index 0ec7f615..3d2f1010 100644 --- a/confluent_server/confluent/config/configmanager.py +++ b/confluent_server/confluent/config/configmanager.py @@ -1824,9 +1824,13 @@ class ConfigManager(object): if attribmap[group][attr].get('prepend', False): newnodes = noderange.NodeRange(attribmap[group][attr][ 'prepend'], config=self).nodes + pendingnodes = set([]) for newnode in newnodes: if newnode in currnodes: raise ValueError('{0} is already in group {1}'.format(newnode, group)) + if newnode in pendingnodes: + raise ValueError('{0} is listed multiple times') + pendingnodes.add(newnode) attribmap[group][attr] = list( newnodes) + currnodes elif attribmap[group][attr].get('remove', False): @@ -2248,9 +2252,13 @@ class ConfigManager(object): if attribmap[node]['groups'].get('prepend', False): newgroups = attribmap[node]['groups'][ 'prepend'].split(',') + pendinggroups = set([]) for newgroup in newgroups: if newgroup in currgroups: raise ValueError('Node {0} is already in group {1}'.format(node, newgroup)) + if newgroup in pendinggroups: + raise ValueError('Group {0} has been specified multiple times'.format(newgroup)) + pendinggroups.add(newgroup) attribmap[node]['groups'] = newgroups + currgroups elif attribmap[node]['groups'].get('remove', False): delgroups = attribmap[node]['groups'][