Adjust how the legacy user: XYZ config alters the normalized user list
Previously if a legacy user: XYZ entry was found, XYZ would not automatically be promoted to the default user but would instead just be added on as a new entry to the normalized user list. It appears the behavior that is wanted is for the XYZ entry to be added on as the default user (thus overriding a distro provided default user), which better matches how the code previous worked.
This commit is contained in:
parent
58d14a48ed
commit
d8272fcf5d
@ -705,41 +705,64 @@ def _normalize_users(u_cfg, def_user_cfg=None):
|
||||
def normalize_users_groups(cfg, distro):
|
||||
if not cfg:
|
||||
cfg = {}
|
||||
|
||||
users = {}
|
||||
groups = {}
|
||||
if 'groups' in cfg:
|
||||
groups = _normalize_groups(cfg['groups'])
|
||||
|
||||
# Handle the previous style of doing this...
|
||||
# Handle the previous style of doing this where the first user
|
||||
# overrides the concept of the default user if provided in the user: XYZ
|
||||
# format.
|
||||
old_user = None
|
||||
if 'user' in cfg and cfg['user']:
|
||||
old_user = str(cfg['user'])
|
||||
if not 'users' in cfg:
|
||||
cfg['users'] = old_user
|
||||
old_user = cfg['user']
|
||||
# Translate it into the format that is more useful
|
||||
# going forward
|
||||
if isinstance(old_user, (basestring, str)):
|
||||
old_user = {
|
||||
'name': old_user,
|
||||
}
|
||||
if not isinstance(old_user, (dict)):
|
||||
LOG.warn(("Format for 'user:' key must be a string or "
|
||||
"dictionary and not %s"), util.obj_name(old_user))
|
||||
old_user = None
|
||||
if 'users' in cfg:
|
||||
default_user_config = None
|
||||
|
||||
default_user_config = None
|
||||
if not old_user:
|
||||
# If no old user format, then assume the distro
|
||||
# provides what the 'default' user maps to, but notice
|
||||
# that if this is provided, we won't automatically inject
|
||||
# a 'default' user into the users list, while if a old user
|
||||
# format is provided we will.
|
||||
try:
|
||||
default_user_config = distro.get_default_user()
|
||||
except NotImplementedError:
|
||||
LOG.warn(("Distro has not implemented default user "
|
||||
"access. No default user will be normalized."))
|
||||
base_users = cfg['users']
|
||||
if old_user:
|
||||
if isinstance(base_users, (list)):
|
||||
if len(base_users):
|
||||
# The old user replaces user[0]
|
||||
base_users[0] = {'name': old_user}
|
||||
else:
|
||||
# Just add it on at the end...
|
||||
base_users.append({'name': old_user})
|
||||
elif isinstance(base_users, (dict)):
|
||||
if old_user not in base_users:
|
||||
base_users[old_user] = True
|
||||
elif isinstance(base_users, (str, basestring)):
|
||||
# Just append it on to be re-parsed later
|
||||
base_users += ",%s" % (old_user)
|
||||
users = _normalize_users(base_users, default_user_config)
|
||||
else:
|
||||
default_user_config = dict(old_user)
|
||||
|
||||
base_users = cfg.get('users', [])
|
||||
if not isinstance(base_users, (list, dict, str, basestring)):
|
||||
LOG.warn(("Format for 'users:' key must be a comma separated string"
|
||||
" or a dictionary or a list and not %s"),
|
||||
util.obj_name(base_users))
|
||||
base_users = []
|
||||
|
||||
if old_user:
|
||||
# Ensure that when user: is provided that this user
|
||||
# always gets added (as the default user)
|
||||
if isinstance(base_users, (list)):
|
||||
# Just add it on at the end...
|
||||
base_users.append({'name': 'default'})
|
||||
elif isinstance(base_users, (dict)):
|
||||
base_users['default'] = base_users.get('default', True)
|
||||
elif isinstance(base_users, (str, basestring)):
|
||||
# Just append it on to be re-parsed later
|
||||
base_users += ",default"
|
||||
|
||||
users = _normalize_users(base_users, default_user_config)
|
||||
return (users, groups)
|
||||
|
||||
|
||||
|
@ -173,26 +173,29 @@ class TestUGNormalize(MockerTestCase):
|
||||
'users': 'default'
|
||||
}
|
||||
(users, _groups) = self._norm(ug_cfg, distro)
|
||||
self.assertIn('bob', users)
|
||||
self.assertNotIn('bob', users) # Bob is not the default now, zetta is
|
||||
self.assertIn('zetta', users)
|
||||
self.assertTrue(users['zetta']['default'])
|
||||
self.assertNotIn('default', users)
|
||||
ug_cfg = {
|
||||
'user': 'zetta',
|
||||
'users': 'default, joe'
|
||||
}
|
||||
(users, _groups) = self._norm(ug_cfg, distro)
|
||||
self.assertIn('bob', users)
|
||||
self.assertNotIn('bob', users) # Bob is not the default now, zetta is
|
||||
self.assertIn('joe', users)
|
||||
self.assertIn('zetta', users)
|
||||
self.assertTrue(users['zetta']['default'])
|
||||
self.assertNotIn('default', users)
|
||||
ug_cfg = {
|
||||
'user': 'zetta',
|
||||
'users': ['bob', 'joe']
|
||||
}
|
||||
(users, _groups) = self._norm(ug_cfg, distro)
|
||||
self.assertNotIn('bob', users)
|
||||
self.assertIn('bob', users)
|
||||
self.assertIn('joe', users)
|
||||
self.assertIn('zetta', users)
|
||||
self.assertTrue(users['zetta']['default'])
|
||||
ug_cfg = {
|
||||
'user': 'zetta',
|
||||
'users': {
|
||||
@ -204,6 +207,7 @@ class TestUGNormalize(MockerTestCase):
|
||||
self.assertIn('bob', users)
|
||||
self.assertIn('joe', users)
|
||||
self.assertIn('zetta', users)
|
||||
self.assertTrue(users['zetta']['default'])
|
||||
ug_cfg = {
|
||||
'user': 'zetta',
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user