Commit 9ef0ef5b authored by 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...
parent dc26758f
......@@ -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)
......
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