commit: 9a2b1e6096e35508e9f101fa0478101493ef0335 Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Fri Dec 5 22:54:27 2014 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Sun Dec 7 22:57:07 2014 +0000 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=9a2b1e60
sync: ensure sync_{umask,user} is respected when creating repo --- pym/portage/sync/controller.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/pym/portage/sync/controller.py b/pym/portage/sync/controller.py index ab6eb21..9001298 100644 --- a/pym/portage/sync/controller.py +++ b/pym/portage/sync/controller.py @@ -192,11 +192,6 @@ class SyncManager(object): st = os.stat(repo.location) except OSError: st = None - if st is None: - writemsg_level(">>> '%s' not found, creating it." - % _unicode_decode(repo.location)) - portage.util.ensure_dirs(repo.location, mode=0o755) - st = os.stat(repo.location) self.usersync_uid = None spawn_kwargs = {} @@ -249,7 +244,24 @@ class SyncManager(object): spawn_kwargs["groups"] = [gid] if home is not None: spawn_kwargs["env"]["HOME"] = home - elif ('usersync' in self.settings.features and + + if st is None: + perms = {'mode': 0o755} + # respect sync-user if set + if 'umask' in spawn_kwargs: + perms['mode'] &= ~spawn_kwargs['umask'] + if 'uid' in spawn_kwargs: + perms['uid'] = spawn_kwargs['uid'] + if 'gid' in spawn_kwargs: + perms['gid'] = spawn_kwargs['gid'] + + writemsg_level(">>> '%s' not found, creating it." + % _unicode_decode(repo.location)) + portage.util.ensure_dirs(repo.location, **perms) + st = os.stat(repo.location) + + if (repo.sync_user is None and + 'usersync' in self.settings.features and portage.data.secpass >= 2 and (st.st_uid != os.getuid() and st.st_mode & 0o700 or st.st_gid != os.getgid() and st.st_mode & 0o070)):