diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-13 15:38:41 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-13 15:38:41 -0800 |
commit | 6d2a73d7f78dac986539c0c6b841cc499c2088e6 (patch) | |
tree | 3d475d5f4ce42aae341696d49844295f590cbe0b | |
parent | 36883148297f4ff96c404ab23d75739dd21de31c (diff) | |
download | portage-6d2a73d7f78dac986539c0c6b841cc499c2088e6.tar.gz portage-6d2a73d7f78dac986539c0c6b841cc499c2088e6.tar.bz2 portage-6d2a73d7f78dac986539c0c6b841cc499c2088e6.zip |
Handle missing os.setgroups for PyPy.
See https://bugs.pypy.org/issue833 for details.
-rw-r--r-- | pym/portage/package/ebuild/config.py | 17 | ||||
-rw-r--r-- | pym/portage/package/ebuild/doebuild.py | 3 | ||||
-rw-r--r-- | pym/portage/package/ebuild/fetch.py | 3 |
3 files changed, 21 insertions, 2 deletions
diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py index 366f548f1..4304e09c7 100644 --- a/pym/portage/package/ebuild/config.py +++ b/pym/portage/package/ebuild/config.py @@ -938,6 +938,23 @@ class config(object): writemsg(_("!!! FEATURES=fakeroot is enabled, but the " "fakeroot binary is not installed.\n"), noiselevel=-1) + if os.getuid() == 0 and not hasattr(os, "setgroups"): + warning_shown = False + + if "userpriv" in self.features: + writemsg(_("!!! FEATURES=userpriv is enabled, but " + "os.setgroups is not available.\n"), noiselevel=-1) + warning_shown = True + + if "userfetch" in self.features: + writemsg(_("!!! FEATURES=userfetch is enabled, but " + "os.setgroups is not available.\n"), noiselevel=-1) + warning_shown = True + + if warning_shown and platform.python_implementation() == 'PyPy': + writemsg(_("!!! See https://bugs.pypy.org/issue833 for details.\n"), + noiselevel=-1) + def load_best_module(self,property_string): best_mod = best_from_dict(property_string,self.modules,self.module_priority) mod = None diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index c52ab3120..c45aa030a 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -1388,7 +1388,8 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero # fake ownership/permissions will have to be converted to real # permissions in the merge phase. fakeroot = fakeroot and uid != 0 and portage.process.fakeroot_capable - if droppriv and not uid and portage_gid and portage_uid: + if droppriv and uid == 0 and portage_gid and portage_uid and \ + hasattr(os, "setgroups"): keywords.update({"uid":portage_uid,"gid":portage_gid, "groups":userpriv_groups,"umask":0o02}) if not free: diff --git a/pym/portage/package/ebuild/fetch.py b/pym/portage/package/ebuild/fetch.py index c67f3c4f4..8c20b7186 100644 --- a/pym/portage/package/ebuild/fetch.py +++ b/pym/portage/package/ebuild/fetch.py @@ -66,7 +66,8 @@ def _spawn_fetch(settings, args, **kwargs): } if "userfetch" in settings.features and \ - os.getuid() == 0 and portage_gid and portage_uid: + os.getuid() == 0 and portage_gid and portage_uid and \ + hasattr(os, "setgroups"): kwargs.update(_userpriv_spawn_kwargs) spawn_func = spawn |