
Hi everybody, I am plaing with mailman some time (John probaly remebers me) and now I see, that www.list.org is back online. So what I have, I would suggest You patch to verbose funcionality of mailman. All sugestion to my solution are welcome. What it solves, first part of patch to remove irriting headers from messages. I dont like to send messages like RCPT and so. Second uses DSN to send mails. This disables (when enabled) messages like warning, message is not delivered for 4 hours and so. Then comes some removing of winmail.dat binary attachments. I am working on removing all unwanted parts (html, rtf) and translating national characters into ascii, but is not complete yet. Then comes administrativ via filter, but it not works, it worked on mailman 1.0, but I cannot bring it running on b4, You will see, it is probably only a little bug, at least the filter shields list from administrative messages. So it is all for today, I am interested how You will find this patch, please send any comments to my. cheers dan diff -ru mailman-1.0b4/modules/mm_defaults.py mailman-1.0b4.new/modules/mm_defaults.py --- mailman-1.0b4/modules/mm_defaults.py Fri Jun 26 12:41:28 1998 +++ mailman-1.0b4.new/modules/mm_defaults.py Fri Jun 26 18:43:28 1998 @@ -202,3 +202,11 @@ # The Mailman version, also set by configure VERSION = '1.0b4' + +# Remove Microsoft binary attachments +REMOVE_WINMAIL = 1 +WINMAIL_FILTER_START = 'begin 600 WINMAIL\.DAT' +WINMAIL_FILTER_STOP = 'end' + +# Headers which are not useful +FILTER_HEADERS = ['^X-Confirm-Reading-To:','^X-pmrqc:','X-PMFLAGS:','^Return-receipt-to:'] Only in mailman-1.0b4/modules: mm_defaults.py.in diff -ru mailman-1.0b4/modules/mm_deliver.py mailman-1.0b4.new/modules/mm_deliver.py --- mailman-1.0b4/modules/mm_deliver.py Wed Jun 3 15:12:53 1998 +++ mailman-1.0b4.new/modules/mm_deliver.py Fri Jun 26 18:32:35 1998 @@ -135,6 +135,12 @@ msg.headers.append('To: %s\n' % self.GetListEmail()) else: tempfile.template = tmpfile_prefix + 'mailman.' +# Now remove unwanted headers from message + for pat in mm_defaults.FILTER_HEADERS: + try: + del msg[pat] + except: + pass if self.reply_goes_to_list: del msg['reply-to'] msg.headers.append('Reply-To: %s\n' % self.GetListEmail()) diff -ru mailman-1.0b4/modules/mm_message.py mailman-1.0b4.new/modules/mm_message.py --- mailman-1.0b4/modules/mm_message.py Tue Jun 2 04:47:11 1998 +++ mailman-1.0b4.new/modules/mm_message.py Fri Jun 26 18:01:47 1998 @@ -21,7 +21,7 @@ import sys -import rfc822, string, time +import rfc822, string, time, mm_defaults, regex # Utility functions 2 of these classes use: @@ -134,6 +134,24 @@ if (string.lower(self.headers[i][:len(name)+1]) == string.lower(name) + ':'): self.headers[i] = '%s: %s' % (name, value) + + def RemoveWinmail(self): + pattern_start = regex.compile(mm_defaults.WINMAIL_FILTER_START) + pattern_stop = regex.compile(mm_defaults.WINMAIL_FILTER_STOP) + occured = 0 + mybody=[] + mybody=string.split(self.body,'\n'); + for line in mybody[:]: + if occured == 1: + if pattern_stop.match(line) > 0: + occured = 0 + mybody.remove(line) + elif pattern_start.match(line) > 0: + occured = 1 + mybody.remove(line) + self.body=string.join(mybody,'\n') + + # XXX Eventually (1.5.1?) Python rfc822.Message() will have its own # __delitem__. diff -ru mailman-1.0b4/modules/smtplib.py mailman-1.0b4.new/modules/smtplib.py --- mailman-1.0b4/modules/smtplib.py Sat May 30 05:09:21 1998 +++ mailman-1.0b4.new/modules/smtplib.py Wed Jul 1 14:27:23 1998 @@ -20,6 +20,9 @@ # A lot of functionality was borrowed directly from ftplib... # John Viega (viega@list.org) +# Hack to use DSN, probably not the best way, but works fine +# But I have no not DSN aware server to check it without DSN + # >>> from smtplib import * # >>> s = SmtpConnection('list.org') # >>> s.helo('adder.cs.virginia.edu') @@ -27,7 +30,7 @@ # >>> s.quit() from socket import * -import string, types +import string, types, regex SMTP_PORT = 25 @@ -38,6 +41,8 @@ error_temp = 'smtplib.error_temp' # 4xx errors error_perm = 'smtplib.error_perm' # 5xx errors error_proto = 'smtplib.error_proto' # response does not begin with [1-5] +error_no_DSN = 'There is no DSN support' +DSN_support = 1 class SmtpConnection: def __init__(self, host=''): @@ -52,8 +57,15 @@ self.getresp() def helo(self, host): - self._sock.send('HELO %s\r\n' % host) - self.getresp() + self._sock.send('EHLO %s\r\n' % host) + try: + vysl = self.getresp() + except error_perm: + self._sock.send('HELO %s\r\n' % host) + self.getresp() + self.DSN_support=0 + if regex.match('.*DSN.*',vysl) == -1: + self.DSN_support=0 def quit(self): self._sock.send('QUIT\r\n') @@ -66,12 +78,16 @@ lines = string.split(text, '\n') self._sock.send('MAIL FROM: %s\r\n' % frm) self.getresp() + if DSN_support: + format = 'RCPT TO: %s NOTIFY=failure\r\n' + else: + format = 'RCPT TO: %s\r\n' if type(to) == types.StringType: - self._sock.send('RCPT TO: %s\r\n' % to) + self._sock.send(format % to) self.getresp() else: for item in to: - self._sock.send('RCPT TO: %s\r\n' % item) + self._sock.send(format % item) self.getresp() self._sock.send('DATA\r\n') self.getresp() diff -ru mailman-1.0b4/scripts/post mailman-1.0b4.new/scripts/post --- mailman-1.0b4/scripts/post Sun May 31 06:48:09 1998 +++ mailman-1.0b4.new/scripts/post Fri Jun 26 18:06:57 1998 @@ -31,7 +31,7 @@ import sys import paths -import maillist, mm_message, mm_err, mm_cfg, mm_utils +import maillist, mm_message, mm_err, mm_cfg, mm_utils, string, mm_defaults try: sys.stderr = mm_utils.StampedLogger("error", label = 'post', @@ -42,6 +42,18 @@ # Only let one program run at once per list. # TODO: This can fail, and should send back an error message when it does. +commands = { + 'subscribe' : '', + 'unsubscribe' : '', + 'who' : '', + 'info' : '', + 'lists' : '', + 'help' : '', + 'set' : '', + 'options' : '', + 'password' : '', + } + current_list = maillist.MailList(sys.argv[1]) if len(sys.argv) > 2: current_list.tmp_prevent_gate = 1 @@ -60,10 +72,41 @@ else: text = sys.stdin.read() msg = mm_message.IncomingMessage(text) + if mm_defaults.REMOVE_WINMAIL: msg.RemoveWinmail() + bad_dest = 0 + subject = msg.getheader("subject") + if subject: + subject = string.strip(subject) + if commands.has_key(string.split(subject)[0]): + bad_dest = 1 + lines = string.split(msg.body, '\n') + if len(lines) >= 10: + hopcnt = range(10) + else: + hopcnt = range(len(lines)) + for i in hopcnt: + try: + string.strip(lines[i]) + except: + pass + if not lines[i]: + continue + args = string.split(lines[i]) + if len(args)>0: + cmd = string.lower(args[0]) + if commands.has_key(cmd): + bad_dest = 1 - try: + if bad_dest: + try: + current_list.ParseMailCommands() + finally: +# current_list.Unlock() + pass + else: + try: current_list.Post(msg) - except mm_err.MMNeedApproval, err_msg: + except mm_err.MMNeedApproval, err_msg: if (current_list.dont_respond_to_post_requests or err_msg == mm_err.MODERATED_LIST_MSG or err_msg == mm_err.IMPLICIT_DEST_MSG ________________________________________ DDDDDD DD DD Dan Ohnesorg, supervisor on POWER DD OOOO Dan@feld.cvut.cz DD OODDOO Dep. of Power Engineering DDDDDD OO CVUT FEL Prague, Bohemia OO OO work: +420 2 24352785;+420 2 24972109 OOOO home: +420 311 679679;+420 311 679311 ________________________________________ Pocitac se od televizniho divaka lisi tim, ze ma vlastni program.