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)):