mirror of https://github.com/python/cpython
[Bug #802128 continued] Modify mode depending on the process umask.
Is there really no other way to read the umask than to set it? Hope this works on Windows...
This commit is contained in:
parent
dc26758ffe
commit
9ef0ef5b72
|
@ -236,4 +236,15 @@ def open(file, flag=None, mode=0666):
|
|||
|
||||
"""
|
||||
# flag argument is currently ignored
|
||||
|
||||
# Modify mode depending on the umask
|
||||
try:
|
||||
um = _os.umask(0)
|
||||
_os.umask(um)
|
||||
except AttributeError:
|
||||
pass
|
||||
else:
|
||||
# Turn off any bits that are set in the umask
|
||||
mode = mode & (~um)
|
||||
|
||||
return _Database(file, mode)
|
||||
|
|
|
@ -40,17 +40,21 @@ class DumbDBMTestCase(unittest.TestCase):
|
|||
|
||||
def test_dumbdbm_creation_mode(self):
|
||||
# On platforms without chmod, don't do anything.
|
||||
if not hasattr(os, 'chmod'):
|
||||
if not (hasattr(os, 'chmod') and hasattr(os, 'umask')):
|
||||
return
|
||||
|
||||
f = dumbdbm.open(_fname, 'c', 0632)
|
||||
f.close()
|
||||
|
||||
try:
|
||||
old_umask = os.umask(0002)
|
||||
f = dumbdbm.open(_fname, 'c', 0637)
|
||||
f.close()
|
||||
finally:
|
||||
os.umask(old_umask)
|
||||
|
||||
import stat
|
||||
st = os.stat(_fname + '.dat')
|
||||
self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
|
||||
self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
|
||||
st = os.stat(_fname + '.dir')
|
||||
self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
|
||||
self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
|
||||
|
||||
def test_close_twice(self):
|
||||
f = dumbdbm.open(_fname)
|
||||
|
|
Loading…
Reference in New Issue