summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Gustäbel <lars@gustaebel.de>2011-09-05 16:58:14 +0200
committerLars Gustäbel <lars@gustaebel.de>2011-09-05 16:58:14 +0200
commit2e7ddd374b48649b34db6f86313379080de24280 (patch)
treed2776b6b18344bc443e94624510854f1f3e9d394
parentd9e0b068af175a2fc1c2fe979ab97b5d4f8239b7 (diff)
downloadcpython-git-2e7ddd374b48649b34db6f86313379080de24280.tar.gz
Issue #12841: Fix tarfile extraction of non-existent uids/gids.
tarfile unnecessarily checked the existence of numerical user and group ids on extraction. If one of them did not exist the respective id of the current user (i.e. root) was used for the file and ownership information was lost. (Patch by Sebastien Luttringer)
-rw-r--r--Lib/tarfile.py10
-rw-r--r--Misc/NEWS5
2 files changed, 7 insertions, 8 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 3d52a81b9e..1ece716197 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -2368,17 +2368,11 @@ class TarFile(object):
try:
g = grp.getgrnam(tarinfo.gname)[2]
except KeyError:
- try:
- g = grp.getgrgid(tarinfo.gid)[2]
- except KeyError:
- g = os.getgid()
+ g = tarinfo.gid
try:
u = pwd.getpwnam(tarinfo.uname)[2]
except KeyError:
- try:
- u = pwd.getpwuid(tarinfo.uid)[2]
- except KeyError:
- u = os.getuid()
+ u = tarinfo.uid
try:
if tarinfo.issym() and hasattr(os, "lchown"):
os.lchown(targetpath, u, g)
diff --git a/Misc/NEWS b/Misc/NEWS
index ff1a0add42..bd8c49788b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -73,6 +73,11 @@ Core and Builtins
Library
-------
+- Issue #12841: tarfile unnecessarily checked the existence of numerical user
+ and group ids on extraction. If one of them did not exist the respective id
+ of the current user (i.e. root) was used for the file and ownership
+ information was lost.
+
- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
now respect a --skip-build option given to bdist.