changeset: 105544:e4e7bc640865 branch: 3.6 parent: 105530:25df9671663b user: Xavier de Gaye date: Fri Dec 09 09:33:09 2016 +0100 files: Lib/tarfile.py Misc/NEWS description: Issue #26937: The chown() method of the tarfile.TarFile class does not fail now when the grp module cannot be imported, as for example on Android platforms. diff -r 25df9671663b -r e4e7bc640865 Lib/tarfile.py --- a/Lib/tarfile.py Wed Dec 07 13:02:27 2016 -0800 +++ b/Lib/tarfile.py Fri Dec 09 09:33:09 2016 +0100 @@ -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) @@ -2219,22 +2223,25 @@ def chown(self, tarinfo, targetpath, numeric_owner): """Set owner of targetpath according to tarinfo. If numeric_owner - is True, use .gid/.uid instead of .gname/.uname. + is True, use .gid/.uid instead of .gname/.uname. If numeric_owner + is False, fall back to .gid/.uid when the search based on name + fails. """ - 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: + g = tarinfo.gid + u = tarinfo.uid + if not numeric_owner: try: - g = grp.getgrnam(tarinfo.gname)[2] + if grp: + g = grp.getgrnam(tarinfo.gname)[2] except KeyError: - g = tarinfo.gid + pass try: - u = pwd.getpwnam(tarinfo.uname)[2] + if pwd: + u = pwd.getpwnam(tarinfo.uname)[2] except KeyError: - u = tarinfo.uid + pass try: if tarinfo.issym() and hasattr(os, "lchown"): os.lchown(targetpath, u, g) diff -r 25df9671663b -r e4e7bc640865 Misc/NEWS --- a/Misc/NEWS Wed Dec 07 13:02:27 2016 -0800 +++ b/Misc/NEWS Fri Dec 09 09:33:09 2016 +0100 @@ -22,6 +22,10 @@ - Issue #28847: dbm.dumb now supports reading read-only files and no longer writes the index file when it is not changed. +- Issue #26937: The chown() method of the tarfile.TarFile class does not fail + now when the grp module cannot be imported, as for example on Android + platforms. + Windows -------