#5346: Preserve permissions of mbox, MMDF and Babyl mailbox files on flush()

This commit is contained in:
Petri Lehtinen 2012-06-29 15:09:12 +03:00
parent b6ee3d6b7a
commit 5b5619f717
3 changed files with 23 additions and 0 deletions

View File

@ -691,6 +691,9 @@ class _singlefileMailbox(Mailbox):
_sync_close(new_file) _sync_close(new_file)
# self._file is about to get replaced, so no need to sync. # self._file is about to get replaced, so no need to sync.
self._file.close() self._file.close()
# Make sure the new file's mode is the same as the old file's
mode = os.stat(self._path).st_mode
os.chmod(new_file.name, mode)
try: try:
os.rename(new_file.name, self._path) os.rename(new_file.name, self._path)
except OSError as e: except OSError as e:

View File

@ -966,6 +966,23 @@ class _TestSingleFile(TestMailbox):
self._box = self._factory(self._path) self._box = self._factory(self._path)
self.assertEqual(len(self._box), 1) self.assertEqual(len(self._box), 1)
def test_permissions_after_flush(self):
# See issue #5346
# Make the mailbox world writable. It's unlikely that the new
# mailbox file would have these permissions after flush(),
# because umask usually prevents it.
mode = os.stat(self._path).st_mode | 0o666
os.chmod(self._path, mode)
self._box.add(self._template % 0)
i = self._box.add(self._template % 1)
# Need to remove one message to make flush() create a new file
self._box.remove(i)
self._box.flush()
self.assertEqual(os.stat(self._path).st_mode, mode)
class _TestMboxMMDF(_TestSingleFile): class _TestMboxMMDF(_TestSingleFile):

View File

@ -81,6 +81,9 @@ Core and Builtins
Library Library
------- -------
- Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox
files on flush().
- Issue #10571: Fix the "--sign" option of distutils' upload command. - Issue #10571: Fix the "--sign" option of distutils' upload command.
Patch by Jakub Wilk. Patch by Jakub Wilk.