All lists that moderate or drop spam, now moderate 'Unsure' mails.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 19 Jan 2008 22:07:41 +0000 (23:07 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 19 Jan 2008 22:07:41 +0000 (23:07 +0100)
Migration script MUST NOT be run more than once or filtering will be corrupted.

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
ChangeLog
bin/lists.rpc.py
upgrade/0.9.16/update.sh
upgrade/0.9.16/upgrade_lists.py [new file with mode: 0755]

index c644723..fe122be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,11 +8,12 @@ New:
 
     * Core:
         - New PlProfiler tool                                              -FRU
-
-    * Goodies:
         - Integration of goodies/external tools with local rss/iCal        -VZA
         - iGoogle gadgets for latest events and directory search           -VZA
 
+    * Lists:
+        - Unsure mails are moderated                                       -FRU
+
 Bug/Wish:
 
     * Emails:
index ea7e412..c4c0e49 100755 (executable)
@@ -687,10 +687,10 @@ def get_bogo_level(userdesc, perms, vhost, listname):
         if mlist.header_filter_rules == []:
             return 0
         try:
-            action = mlist.header_filter_rules[1][1]
+            action = mlist.header_filter_rules[2][1]
             return 2
         except:
-            action = mlist.header_filter_rules[0][1]
+            action = mlist.header_filter_rules[1][1]
             if action == mm_cfg.HOLD:
                 return 1
             if action == mm_cfg.DISCARD:
@@ -708,11 +708,14 @@ def set_bogo_level(userdesc, perms, vhost, listname, level):
             return 0
         hfr = []
         if int(level) is 1:
+            hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
             hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
         elif int(level) is 2:
+            hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
             hfr.append(('X-Spam-Flag: Yes, tests=bogofilter, spamicity=(0\.999999|1\.000000)', mm_cfg.DISCARD, False))
             hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
         elif int(level) is 3:
+            hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
             hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.DISCARD, False))
         if mlist.header_filter_rules != hfr:
             mlist.Lock()
index de82fc0..30823e5 100755 (executable)
@@ -2,6 +2,9 @@
 
 . ../inc/pervasive.sh
 
+echo "Upgrading bogofilter settings for ML"
+sudo -u list ./upgrade_lists.py
+
 mailman_stop
 mailman_templates
 mailman_start
diff --git a/upgrade/0.9.16/upgrade_lists.py b/upgrade/0.9.16/upgrade_lists.py
new file mode 100755 (executable)
index 0000000..e62561c
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+
+import sys
+sys.path.append('/usr/lib/mailman/bin')
+import paths
+from Mailman import MailList
+from Mailman import Utils
+from Mailman import mm_cfg
+
+def get_bogo_level(mlist):
+  """ Retreive the old style bogo level """
+  try:
+    if mlist.header_filter_rules == []:
+      return 0
+    try:
+      action = mlist.header_filter_rules[1][1]
+      return 2
+    except:
+      action = mlist.header_filter_rules[0][1]
+      if action == mm_cfg.HOLD:
+        return 1
+      elif action == mm_cfg.DISCARD:
+        return 3
+  except:
+    return 0
+
+def set_bogo_level(mlist, level):
+  """ Convert bogo level to the new level structure """
+  if level == 0:
+    return
+  hfr = []
+  if level == 1:
+    hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
+    hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
+  elif level == 2:
+    hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
+    hfr.append(('X-Spam-Flag: Yes, tests=bogofilter, spamicity=(0\.999999|1\.000000)', mm_cfg.DISCARD, False))
+    hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.HOLD, False))
+  elif level == 3:
+    hfr.append(('X-Spam-Flag: Unsure', mm_cfg.HOLD, False))
+    hfr.append(('X-Spam-Flag: Yes, tests=bogofilter', mm_cfg.DISCARD, False))
+  mlist.Lock()
+  mlist.header_filter_rules = hfr
+  mlist.Save()
+  mlist.Unlock()
+
+
+names = Utils.list_names()
+names.sort()
+for name in names:
+  mlist = MailList.MailList(name, lock=0)
+  set_bogo_level(mlist, get_bogo_level(mlist))
+