VMM/handler: Reworked config file permission check. v0.7.x
authorPascal Volk <user@localhost.localdomain.org>
Wed, 21 Nov 2012 22:37:22 +0000
branchv0.7.x
changeset 648 9cf2cf762e26
parent 647 d91dd7bc8fce
child 649 08837f3fbced
VMM/handler: Reworked config file permission check.
VirtualMailManager/handler.py
--- a/VirtualMailManager/handler.py	Wed Nov 21 13:13:31 2012 +0000
+++ b/VirtualMailManager/handler.py	Wed Nov 21 22:37:22 2012 +0000
@@ -16,6 +16,7 @@
 import re
 
 from shutil import rmtree
+from stat import S_IRGRP, S_IROTH, S_IWGRP, S_IWOTH
 from subprocess import Popen, PIPE
 
 from VirtualMailManager.account import Account
@@ -104,16 +105,18 @@
 
     def _check_cfg_file(self):
         """Checks the configuration file, returns bool"""
+        GRPRW = S_IRGRP | S_IWGRP
+        OTHRW = S_IROTH | S_IWOTH
         self._find_cfg_file()
         fstat = os.stat(self._cfg_fname)
-        fmode = int(oct(fstat.st_mode & 0o777))
-        if fmode % 100 and fstat.st_uid != fstat.st_gid or \
-           fmode % 10 and fstat.st_uid == fstat.st_gid:
+        if (fstat.st_uid == fstat.st_gid and fstat.st_mode & OTHRW) or \
+           (fstat.st_uid != fstat.st_gid and fstat.st_mode & (GRPRW | OTHRW)):
             # TP: Please keep the backticks around the command. `chmod 0600 …`
             raise PermissionError(_("wrong permissions for '%(file)s': "
                                     "%(perms)s\n`chmod 0600 %(file)s` would "
                                     "be great.") % {'file': self._cfg_fname,
-                                  'perms': fmode}, CONF_WRONGPERM)
+                                  'perms': oct(fstat.st_mode)[-4:]},
+                                  CONF_WRONGPERM)
         else:
             return True