Kaydet (Commit) 9ef0ef5b authored tarafından Andrew M. Kuchling's avatar Andrew M. Kuchling

[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...
üst dc26758f
...@@ -236,4 +236,15 @@ def open(file, flag=None, mode=0666): ...@@ -236,4 +236,15 @@ def open(file, flag=None, mode=0666):
""" """
# flag argument is currently ignored # 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) return _Database(file, mode)
...@@ -40,17 +40,21 @@ class DumbDBMTestCase(unittest.TestCase): ...@@ -40,17 +40,21 @@ class DumbDBMTestCase(unittest.TestCase):
def test_dumbdbm_creation_mode(self): def test_dumbdbm_creation_mode(self):
# On platforms without chmod, don't do anything. # On platforms without chmod, don't do anything.
if not hasattr(os, 'chmod'): if not (hasattr(os, 'chmod') and hasattr(os, 'umask')):
return return
f = dumbdbm.open(_fname, 'c', 0632) try:
f.close() old_umask = os.umask(0002)
f = dumbdbm.open(_fname, 'c', 0637)
f.close()
finally:
os.umask(old_umask)
import stat import stat
st = os.stat(_fname + '.dat') 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') 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): def test_close_twice(self):
f = dumbdbm.open(_fname) f = dumbdbm.open(_fname)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment