[Pkg-mailman-hackers] Pkg-mailman commit - rev 118 - branches/pkg-split/core/debian

Bernd S. Brentrup bsb@haydn.debian.org
Thu, 06 May 2004 09:59:52 -0600


Author: bsb
Date: 2004-05-06 09:59:50 -0600 (Thu, 06 May 2004)
New Revision: 118

Modified:
   branches/pkg-split/core/debian/postinst
Log:
Fix all relevant directory permissions in postinst.
Probably this should better be done in a revamped check_perms.

Modified: branches/pkg-split/core/debian/postinst
===================================================================
--- branches/pkg-split/core/debian/postinst	2004-05-06 15:56:51 UTC (rev 117)
+++ branches/pkg-split/core/debian/postinst	2004-05-06 15:59:50 UTC (rev 118)
@@ -204,11 +204,47 @@
     return line
 
 
+def fix_perms():
+    """Fix directory permissions to allow write access to group list.
+    """#
+    from stat import S_IMODE, S_ISGID, S_IRWXG
+
+    from Mailman.Defaults import LIST_DATA_DIR, LOG_DIR, LOCK_DIR, \
+         DATA_DIR, SPAM_DIR, PUBLIC_ARCHIVE_FILE_DIR, PRIVATE_ARCHIVE_FILE_DIR, \
+         QUEUE_DIR, INQUEUE_DIR, OUTQUEUE_DIR, CMDQUEUE_DIR, BOUNCEQUEUE_DIR, \
+         NEWSQUEUE_DIR, ARCHQUEUE_DIR, SHUNTQUEUE_DIR, VIRGINQUEUE_DIR, \
+         BADQUEUE_DIR, RETRYQUEUE_DIR, MAILDIR_DIR
+
+    import grp
+    gid = grp.getgrnam('list')[2]
+
+    for dir_ in (LIST_DATA_DIR, LOG_DIR, LOCK_DIR, DATA_DIR, SPAM_DIR,
+                 PUBLIC_ARCHIVE_FILE_DIR, PRIVATE_ARCHIVE_FILE_DIR,
+                 QUEUE_DIR, INQUEUE_DIR, OUTQUEUE_DIR, CMDQUEUE_DIR,
+                 BOUNCEQUEUE_DIR, NEWSQUEUE_DIR, ARCHQUEUE_DIR,
+                 SHUNTQUEUE_DIR, VIRGINQUEUE_DIR, BADQUEUE_DIR,
+                 RETRYQUEUE_DIR, MAILDIR_DIR,):
+        stt = os.stat(dir_)
+        if stt.st_gid != gid:
+            os.chown(dir_, stt.st_uid, gid)
+        if (stt.st_mode & (S_ISGID|S_IRWXG)) != (S_ISGID|S_IRWXG):
+            os.chmod(dir_, S_IMODE(stt.st_mode) | S_ISGID | S_IRWXG)
+
+
 def run_debhelper_additions():
-    runit = os.popen('/bin/sh -e', 'w')
-    runit.write("""\
+    from popen2 import Popen4
+    runner = Popen4('/bin/sh -e')
+    runner.tochild.write("""\
+sg list -c "umask 002; /var/lib/mailman/bin/update;"
+
 #DEBHELPER#""")
-    if runit.close() is not None:
+    runner.tochild.close()
+    while True:
+        rc = runner.poll()
+        if rc != -1: break
+        log(runner.fromchild.readline(), nl='')
+    log(runner.fromchild.read(), nl='')
+    if rc != 0:
         raise SystemExit(1)
 
 
@@ -217,6 +253,7 @@
     ucf_to_cfdb()
     create_mm_cfg()
     update_cron()
+    fix_perms()
     run_debhelper_additions()