aboutsummaryrefslogtreecommitdiff
path: root/docker/base
diff options
context:
space:
mode:
authorMartin André <m.andre@redhat.com>2017-06-06 10:58:32 +0200
committerMartin André <m.andre@redhat.com>2017-06-21 18:17:44 +0200
commit748a056b0964e2abf93ad66951957c834a32b81b (patch)
treec2d14dbe7b2c96f2fe433cb443b918b3e7bcbce2 /docker/base
parent091dc0306366d17ef793f05e1abfaf9ce95cc319 (diff)
downloadkolla-748a056b0964e2abf93ad66951957c834a32b81b.tar.gz
kolla-748a056b0964e2abf93ad66951957c834a32b81b.zip
Allow setting copied files group more precisely
Previously with the config_files structure of config.json, the group name was automatically set to the one of the user name. It is now possible to set the group name in the same fashion than the 'permissions' structure with: owner: 'desired_owner:desired_group' Closes-Bug: #1696095 Change-Id: Ibae9f74e2351c81a717294467aedc51ea773c41e
Diffstat (limited to 'docker/base')
-rw-r--r--docker/base/set_configs.py48
1 files changed, 22 insertions, 26 deletions
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index 4598bedcc..59dc2f38b 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -99,19 +99,8 @@ class ConfigFile(object):
self._set_permission(dest)
def _set_permission(self, path):
- user = pwd.getpwnam(self.owner)
- uid, gid = user.pw_uid, user.pw_gid
- LOG.info('Setting file %s owner to %s:%s', path,
- self.owner, self.owner)
- os.chown(path, uid, gid)
- # NOTE(Jeffrey4l): py3 need '0oXXX' format for octal literals, and py2
- # support such format too.
- perm = self.perm
- if len(perm) == 4 and perm[1] != 'o':
- perm = ''.join([perm[:1], 'o', perm[1:]])
- perm = int(perm, base=0)
- LOG.info('Setting file %s permission to %s', path, self.perm)
- os.chmod(path, perm)
+ handle_permissions({'owner': self.owner, 'path': path,
+ 'perm': self.perm})
def copy(self):
@@ -156,15 +145,16 @@ class ConfigFile(object):
self.perm, actual_perm)
return False
# check owner
+ desired_user, desired_group = user_group(self.owner)
actual_user = pwd.getpwuid(file_stat.st_uid)
- if actual_user.pw_name != self.owner:
+ if actual_user.pw_name != desired_user:
LOG.error('Dest file does not have expected user: %s,'
- ' actual: %s ', self.owner, actual_user.pw_name)
+ ' actual: %s ', desired_user, actual_user.pw_name)
return False
actual_group = grp.getgrgid(file_stat.st_gid)
- if actual_group.gr_name != self.owner:
+ if actual_group.gr_name != desired_group:
LOG.error('Dest file does not have expected group: %s,'
- ' actual: %s ', self.owner, actual_group.gr_name)
+ ' actual: %s ', desired_group, actual_group.gr_name)
return False
return True
@@ -296,6 +286,16 @@ def copy_config(config):
f.write(config['command'])
+def user_group(owner):
+ if ':' in owner:
+ user, group = owner.split(':', 1)
+ if not group:
+ group = user
+ else:
+ user, group = owner, owner
+ return user, group
+
+
def handle_permissions(config):
for permission in config.get('permissions', list()):
path = permission.get('path')
@@ -303,15 +303,9 @@ def handle_permissions(config):
recurse = permission.get('recurse', False)
perm = permission.get('perm')
- if ':' in owner:
- user, group = owner.split(':', 1)
- if not group:
- group = user
- else:
- user, group = owner, owner
-
- uid = pwd.getpwnam(user).pw_uid
- gid = grp.getgrnam(group).gr_gid
+ desired_user, desired_group = user_group(owner)
+ uid = pwd.getpwnam(desired_user).pw_uid
+ gid = grp.getgrnam(desired_group).gr_gid
def set_perms(path, uid, gid, perm):
LOG.info('Setting permission for %s', path)
@@ -325,6 +319,8 @@ def handle_permissions(config):
LOG.exception('Set permission failed for %s', path)
if perm:
+ # NOTE(Jeffrey4l): py3 need '0oXXX' format for octal literals,
+ # and py2 support such format too.
if len(perm) == 4 and perm[1] != 'o':
perm = ''.join([perm[:1], 'o', perm[1:]])
perm = int(perm, base=0)