summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier de Gaye <xdegaye@users.sourceforge.net>2016-12-09 08:35:49 (GMT)
committerXavier de Gaye <xdegaye@users.sourceforge.net>2016-12-09 08:35:49 (GMT)
commitec80ba469393397eb8ff2f140e3fc76c944494be (patch)
tree0a83a10a0a47d258edce1e97cfbfabb0e01e9f38
parent887b4307b62f2b3d6f757abe648df6808c045eae (diff)
parentf44abdab1eeb75e2a876e905e3af20b461ab0f6c (diff)
downloadcpython-ec80ba469393397eb8ff2f140e3fc76c944494be.zip
cpython-ec80ba469393397eb8ff2f140e3fc76c944494be.tar.gz
cpython-ec80ba469393397eb8ff2f140e3fc76c944494be.tar.bz2
Issue #26937: Merge 3.6.
-rwxr-xr-xLib/tarfile.py31
-rw-r--r--Misc/NEWS4
2 files changed, 23 insertions, 12 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index b78b1b1..5d4c86c 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -50,9 +50,13 @@ import copy
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 @@ class TarFile(object):
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 --git a/Misc/NEWS b/Misc/NEWS
index f992fab..bb120e5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -168,6 +168,10 @@ Core and Builtins
Library
-------
+- 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.
+
- Issue #28847: dbm.dumb now supports reading read-only files and no longer
writes the index file when it is not changed. A deprecation warning is now
emitted if the index file is missed and recreated in the 'r' and 'w' modes