diff options
Diffstat (limited to 'Mailman/ListAdmin.py')
| -rw-r--r-- | Mailman/ListAdmin.py | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/Mailman/ListAdmin.py b/Mailman/ListAdmin.py index 0f2b9d5d7..caba19cdf 100644 --- a/Mailman/ListAdmin.py +++ b/Mailman/ListAdmin.py @@ -42,6 +42,11 @@ from Mailman.pythonlib.StringIO import StringIO HELDMSG = 1 SUBSCRIPTION = 2 +# Return status from __handlepost() +DEFER = 0 +REMOVE = 1 +LOST = 2 + class ListAdmin: @@ -116,7 +121,8 @@ class ListAdmin: type, data = self.__db[id] return type - def HandleRequest(self, id, value, comment, preserve, forward, addr): + def HandleRequest(self, id, value, comment=None, preserve=None, + forward=None, addr=None): self.__opendb() rtype, data = self.__db[id] if rtype == HELDMSG: @@ -179,23 +185,21 @@ class ListAdmin: shutil.copy(path, os.path.join(mm_cfg.SPAM_DIR, spamfile)) except IOError, e: if e.errno <> errno.ENOENT: raise - raise Errors.LostHeldMessage(path) + return LOST # Now handle updates to the database rejection = None msg = None - defer = None - if value == 0: + status = REMOVE + if value == mm_cfg.DEFER: # Defer - defer = 1 - elif value == 1: + status = DEFER + elif value == mm_cfg.APPROVE: # Approved try: fp = open(path) except IOError, e: if e.errno <> errno.ENOENT: raise - # we lost the message text file. clean up our housekeeping - # and raise an exception. - raise Errors.LostHeldMessage(path) + return LOST msg = Message.Message(fp) msgdata['approved'] = 1 # Queue the file for delivery by qrunner. Trying to deliver the @@ -203,13 +207,13 @@ class ListAdmin: # turnaround. syslog('vette', 'approved held message enqueued: %s' % filename) msg.Enqueue(self, newdata=msgdata) - elif value == 2: + elif value == mm_cfg.REJECT: # Rejected rejection = 'Refused' self.__refuse('Posting of your message titled "%s"' % subject, sender, comment or '[No reason given]') else: - assert value == 3 + assert value == mm_cfg.DISCARD # Discarded rejection = 'Discarded' # @@ -227,7 +231,7 @@ class ListAdmin: # file naming (not foolproof though). msg['Resent-To'] = addr msg.recips = addr - HandlerAPI.DeliverToUser(self, msg) + HandlerAPI.DeliverToUser(self, msg, {'_enqueue_immediate': 1}) # for safety def strquote(s): return string.replace(s, '%', '%%') @@ -247,15 +251,15 @@ class ListAdmin: syslog('vette', note) # Always unlink the file containing the message text. It's not # necessary anymore, regardless of the disposition of the message. - if not defer: + if status <> DEFER: try: os.unlink(path) except OSError, e: if e.errno <> errno.ENOENT: raise # We lost the message text file. Clean up our housekeeping # and raise an exception. - raise Errors.LostHeldMessage(path) - return not defer + return LOST + return status def HoldSubscription(self, addr, password, digest): # assure that the database is open for writing @@ -293,19 +297,18 @@ class ListAdmin: }) adminaddr = self.GetAdminEmail() msg = Message.UserNotification(adminaddr, adminaddr, subject, text) - HandlerAPI.DeliverToUser(self, msg) - + HandlerAPI.DeliverToUser(self, msg, {'_enqueue_immediate': 1}) def __handlesubscription(self, record, value, comment): stime, addr, password, digest = record - if value == 1: + if value == mm_cfg.REJECT: # refused self.__refuse('Subscription request', addr, comment) else: # subscribe - assert value == 0 + assert value == mm_cfg.SUBSCRIBE self.ApprovedAddMember(addr, password, digest) - return 1 + return REMOVE def __refuse(self, request, recip, comment, origmsg=None): adminaddr = self.GetAdminEmail() @@ -323,4 +326,4 @@ class ListAdmin: str(origmsg)], '\n') subject = 'Request to mailing list %s rejected' % self.real_name msg = Message.UserNotification(recip, adminaddr, subject, text) - HandlerAPI.DeliverToUser(self, msg) + HandlerAPI.DeliverToUser(self, msg, {'_enqueue_immediate': 1}) |
