diff -r eee959fee5f5 Lib/tarfile.py --- a/Lib/tarfile.py Sat May 07 21:13:50 2016 +0300 +++ b/Lib/tarfile.py Sat May 14 12:55:31 2016 +0200 @@ -50,9 +50,13 @@ import re try: - import grp, pwd + import pwd except ImportError: - grp = pwd = None + pwd = None +try: + import grp +except ImportError: + grp = None # os.symlink on Windows prior to 6.0 raises NotImplementedError symlink_exception = (AttributeError, NotImplementedError) @@ -2216,19 +2220,25 @@ """Set owner of targetpath according to tarinfo. If numeric_owner is True, use .gid/.uid instead of .gname/.uname. """ - if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: + if hasattr(os, "geteuid") and os.geteuid() == 0: # We have to be root to do so. if numeric_owner: g = tarinfo.gid u = tarinfo.uid else: - try: - g = grp.getgrnam(tarinfo.gname)[2] - except KeyError: + if grp: + try: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + g = tarinfo.gid + else: g = tarinfo.gid - try: - u = pwd.getpwnam(tarinfo.uname)[2] - except KeyError: + if pwd: + try: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + u = tarinfo.uid + else: u = tarinfo.uid try: if tarinfo.issym() and hasattr(os, "lchown"):