summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_posix.py
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2008-03-18 19:05:32 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2008-03-18 19:05:32 (GMT)
commitf48da8fbcdcf8c9eac2553131a07b8b375c0d726 (patch)
tree390a50f541ce72e9dd8ec244d701035540c59ec3 /Lib/test/test_posix.py
parent89065753803cc65eded79ceae04aac6d1b8526a0 (diff)
downloadcpython-f48da8fbcdcf8c9eac2553131a07b8b375c0d726.zip
cpython-f48da8fbcdcf8c9eac2553131a07b8b375c0d726.tar.gz
cpython-f48da8fbcdcf8c9eac2553131a07b8b375c0d726.tar.bz2
Fix chown on 64-bit linux. It needed to take a long (64-bit on 64bit linux) as
uid and gid input to accept values >=2**31 as valid while still accepting negative numbers to pass -1 to chown for "no change". Fixes issue1747858. This should be backported to release25-maint.
Diffstat (limited to 'Lib/test/test_posix.py')
-rw-r--r--Lib/test/test_posix.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 1fb3c48..179864a 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -9,6 +9,7 @@ except ImportError:
import time
import os
+import pwd
import unittest
import warnings
warnings.filterwarnings('ignore', '.* potential security risk .*',
@@ -141,6 +142,33 @@ class PosixTester(unittest.TestCase):
if hasattr(posix, 'stat'):
self.assert_(posix.stat(test_support.TESTFN))
+ if hasattr(posix, 'chown'):
+ def test_chown(self):
+ # raise an OSError if the file does not exist
+ os.unlink(test_support.TESTFN)
+ self.assertRaises(OSError, posix.chown, test_support.TESTFN, -1, -1)
+
+ # re-create the file
+ open(test_support.TESTFN, 'w').close()
+ if os.getuid() == 0:
+ try:
+ # Many linux distros have a nfsnobody user as MAX_UID-2
+ # that makes a good test case for signedness issues.
+ # http://bugs.python.org/issue1747858
+ # This part of the test only runs when run as root.
+ # Only scary people run their tests as root.
+ ent = pwd.getpwnam('nfsnobody')
+ posix.chown(test_support.TESTFN, ent.pw_uid, ent.pw_gid)
+ except KeyError:
+ pass
+ else:
+ # non-root cannot chown to root, raises OSError
+ self.assertRaises(OSError, posix.chown,
+ test_support.TESTFN, 0, 0)
+
+ # test a successful chown call
+ posix.chown(test_support.TESTFN, os.getuid(), os.getgid())
+
def test_chdir(self):
if hasattr(posix, 'chdir'):
posix.chdir(os.curdir)