diff options
-rw-r--r-- | pym/portage/data.py | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/pym/portage/data.py b/pym/portage/data.py index 893663195..00fbec427 100644 --- a/pym/portage/data.py +++ b/pym/portage/data.py @@ -98,20 +98,25 @@ except KeyError: else: userpriv_groups = [portage_gid] if secpass >= 2: - # Get a list of group IDs for the portage user. Do not use - # grp.getgrall() since it is known to trigger spurious - # SIGPIPE problems with nss_ldap. - try: - from subprocess import getstatusoutput - except ImportError: - from commands import getstatusoutput - mystatus, myoutput = getstatusoutput("id -G %s" % 'portage') - if mystatus == os.EX_OK: - for x in myoutput.split(): - try: - userpriv_groups.append(int(x)) - except ValueError: - pass - del x - userpriv_groups = list(set(userpriv_groups)) - del getstatusoutput, mystatus, myoutput + class _LazyUserprivGroups(portage.proxy.objectproxy.ObjectProxy): + def _get_target(self): + global userpriv_groups + if userpriv_groups is not self: + return userpriv_groups + userpriv_groups = _userpriv_groups + # Get a list of group IDs for the portage user. Do not use + # grp.getgrall() since it is known to trigger spurious + # SIGPIPE problems with nss_ldap. + mystatus, myoutput = \ + portage.subprocess_getstatusoutput("id -G %s" % 'portage') + if mystatus == os.EX_OK: + for x in myoutput.split(): + try: + userpriv_groups.append(int(x)) + except ValueError: + pass + userpriv_groups[:] = sorted(set(userpriv_groups)) + return userpriv_groups + + _userpriv_groups = userpriv_groups + userpriv_groups = _LazyUserprivGroups() |