From grin@tolna.net Wed Sep 1 11:04:20 1999 From: grin@tolna.net (Peter Gervai) Date: Wed, 1 Sep 1999 12:04:20 +0200 Subject: [Mailman-Developers] [root@tolna.net: Cron /usr/bin/python /var/lib/mailman/cron/mailpasswds] Message-ID: <19990901120420.C16052@mail.tolna.net> This is my monthly remainder. I looket at it several times but no luck. Sidenote: is there a searchable archive of the lists? I would like to search for the answer instead of possibly asking here again... ----- Forwarded message from Cron Daemon ----- Traceback (innermost last): File "/var/lib/mailman/cron/mailpasswds", line 158, in ? main() File "/var/lib/mailman/cron/mailpasswds", line 154, in main MailAllPasswords(a_public_list, hosts) File "/var/lib/mailman/cron/mailpasswds", line 87, in MailAllPasswords text = Utils.maketext( File "/var/lib/mailman/Mailman/Utils.py", line 610, in maketext return wrap(template % dict) KeyError: one_list ----- End forwarded message ----- From jafo@tummy.com Wed Sep 1 17:22:15 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Wed, 1 Sep 1999 10:22:15 -0600 Subject: [Mailman-Developers] [root@tolna.net: Cron /usr/bin/python /var/lib/mailman/cron/mailpasswds] In-Reply-To: <19990901120420.C16052@mail.tolna.net>; from Peter Gervai on Wed, Sep 01, 1999 at 12:04:20PM +0200 References: <19990901120420.C16052@mail.tolna.net> Message-ID: <19990901102215.V2479@tummy.com> On Wed, Sep 01, 1999 at 12:04:20PM +0200, Peter Gervai wrote: > File "/var/lib/mailman/Mailman/Utils.py", line 610, in maketext > return wrap(template % dict) >KeyError: one_list It looks like your cronpass.txt template has a "%(one_list)s" in it, which doesn't exist in the data being passed. The only values allowed for substitution in there are hostname, useraddr, exreq, and owner. Did you perhaps modify the cronpass.txt template? Here's a patch that will fix it in any case. It causes any invalid "%(key)" format strings to remain as they are instead of throwing KeyErrors. Sean ===================== *** Utils.py.old Wed Sep 1 10:10:40 1999 --- Utils.py Wed Sep 1 10:16:47 1999 *************** *** 33,38 **** --- 33,54 ---- import random import mm_cfg import Errors + import UserDict + + + class SaferDict(UserDict.UserDict): + '''Dictionary which returns a default value for unknown keys.''' + + def __init__(self, dict, default = ''): + UserDict.UserDict.__init__(self, dict) + self.default = default + + def __getitem__(self, key): + try: return(self.data[key]) + except KeyError: pass + try: return(self.default % ( key )) + except TypeError: return(self.default) + def list_names(): """Return the names of all lists in default list directory.""" *************** *** 606,613 **** template = fp.read() fp.close() if raw: ! return template % dict ! return wrap(template % dict) # --- 622,629 ---- template = fp.read() fp.close() if raw: ! return template % SaferDict(dict, '%%(%s)s') ! return wrap(template % SaferDict(dict), '%%(%s)s') # -- It is not enough to have a good mind. The main thing is to use it well. -- Rene Descartes Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From listwrangler@iximd.com Wed Sep 1 19:36:09 1999 From: listwrangler@iximd.com (Listwrangler) Date: Wed, 1 Sep 1999 13:36:09 -0500 Subject: [Mailman-Developers] How Do I Volunteer for a To Do list item? Message-ID: I've been prowling around the site and couldn't help notice that one of my pet peeves is on the to-do list -- documentation! I'm a former professional author and editor who's currently in the process of switching careers to become an information technology specialist, so I'd be interested in helping to write the user, list owner, and site owner files. Whom should I contact in order to find out the status of these files? One suggestion, Mailman should develop a set of moderator features (with documentation), so that routine list services can be handed off to their moderators, who have a moderator password that lets them do certain things but not others. This would enable the list administrator to NOT receive those pesky un/subscribe and other routine notices that the moderator handles. I've had ten years experience as a member of email lists, and have spent about five years administering Majordomo lists, and have recently been moved over to Mailman. I've come around to where I slightly prefer Mailman over Majordomo, but there are some Majordomo features that I miss. And lately, with all the broken Mailman software, my affection for Mailman is somewhat strained. Through all of this I've been wishing for a help file. So, on the principle that if you want something done, you have to do it yourself, I'm volunteering. Let me know if I can be of service. Thanks Gary Bowen Listwrangler listwrangler@iximd.com ******************** For help with subscribe/unsubscribe, troubleshooting, or more info about The American Boyz email lists, please visit: ________ (new web page being developed, please stand by), or request a copy of the Amboyz Elist Help File to be emailed to you. The following lists are implemented with Mailman and use standard Mailman features: Amboyz-Main, Amboyz-Announce, TrueSpirit, and ElderTG From ckolar@admin.aurora.edu Wed Sep 1 21:58:42 1999 From: ckolar@admin.aurora.edu (Christopher Kolar) Date: Wed, 1 Sep 1999 15:58:42 -0500 Subject: [Mailman-Developers] How Do I Volunteer To Do documentation? References: Message-ID: <99090116020901.02443@kolar.facnet.aurora.edu> There is a first stab at documentation available at www.aurora.edu/~ckolar/mailman -- I have not heard back on the initial drafts that are online and am finally going to be able to look at it again now that all of the start-of-year business is over here at the university. Please take a look at it, I think that the structure that I was proposing (three separate documents) is sound based on what you are saying. More real soon, --chris -- /////\\\\\/////\\\\\ Christopher G. Kolar Director of Instructional Technology Aurora University, Aurora, Illinois ckolar@aurora.edu -- www.aurora.edu [PGP Public Key ID: 0xC6492C72] From jarrell@vt.edu Thu Sep 2 00:30:02 1999 From: jarrell@vt.edu (Ron Jarrell) Date: Wed, 1 Sep 1999 19:30:02 -0400 (EDT) Subject: [Mailman-Developers] cvs archive Message-ID: <199909012330.TAA26083@babylon5.cc.vt.edu> I'm trying to use the CVS server to pull a copy of the current code (particularly the fixes to the archiver, since mine 1.0s occasionally still goes psychotic and puts the wrong message under a given index entry). Following the instructions I found in the archives, I made a new directory, cd'd into it, and did: (using cvs-1.10, on solaris 7) % cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot login (Logging in to anoncvs@cvs.python.org) CVS password: (I entered anoncvs) cvs [login aborted]: authorization failed: server cvs.python.org rejected access Is something wrong on *my* end, or the other end? From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 01:09:24 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Wed, 1 Sep 1999 20:09:24 -0400 (EDT) Subject: [Mailman-Developers] cvs archive References: <199909012330.TAA26083@babylon5.cc.vt.edu> Message-ID: <14285.49204.119137.93323@anthem.cnri.reston.va.us> >>>>> "RJ" == Ron Jarrell writes: RJ> Is something wrong on *my* end, or the other end? Yours, sorry! http://www.python.org/mailman/listinfo/mailman-checkins Gotta run... -Barry From jarrell@vt.edu Thu Sep 2 07:45:50 1999 From: jarrell@vt.edu (Ron Jarrell) Date: Thu, 2 Sep 1999 02:45:50 -0400 (EDT) Subject: [Mailman-Developers] 1.0.1 bug in newlist? Message-ID: <199909020645.CAA00035@babylon5.cc.vt.edu> I installed the most recent snapshot on my test machine, and all s seems to be working fine, except newlist suddenly died... % ~mailman/bin/newlist testlist jarrell@vt.edu pass Traceback (innermost last): File "/home/mailman/bin/newlist", line 146, in ? raise SystemExit(main(sys.argv)) File "/home/mailman/bin/newlist", line 85, in main newlist = MailList.MailList() File "/home/mailman/Mailman/MailList.py", line 59, in __init__ self.InitTempVars(name, lock) File "/home/mailman/Mailman/MailList.py", line 263, in InitTempVars self.__lock = LockFile.LockFile( File "/usr/local/lib/python1.5/posixpath.py", line 43, in join if b[:1] == '/': AttributeError: __getslice__ From grin@tolna.net Thu Sep 2 13:27:43 1999 From: grin@tolna.net (Peter Gervai) Date: Thu, 2 Sep 1999 14:27:43 +0200 Subject: [Mailman-Developers] https Message-ID: <19990902142743.K19459@mail.tolna.net> Hello, I'm using admin interface on https:// url, and some buttons send me to (absolute) address without https. There are http and https users, and I do not want to force either party to use the other way. Is it possible, or would it be possible to sort out such "cross-directions", and keep the user in the selected protocol? (Since pw are cleartext I advise all of our list managers to use https.) regards, grin From jafo@tummy.com Thu Sep 2 16:04:20 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Thu, 2 Sep 1999 09:04:20 -0600 Subject: [Mailman-Developers] 1.0.1 bug in newlist? In-Reply-To: <199909020645.CAA00035@babylon5.cc.vt.edu>; from Ron Jarrell on Thu, Sep 02, 1999 at 02:45:50AM -0400 References: <199909020645.CAA00035@babylon5.cc.vt.edu> Message-ID: <19990902090420.V2479@tummy.com> On Thu, Sep 02, 1999 at 02:45:50AM -0400, Ron Jarrell wrote: >I installed the most recent snapshot on my test machine, and all s >seems to be working fine, except newlist suddenly died... The problem is that MailList.MailList() isn't being passed any arguments, and so the name argument is defaulting to None. Either newlist:85 needs to pass a name, or (perhaps better yet) MailList.MailList.InitTempVars() needs to Do The Right Thing (tm) (like come up with some default name) when name == None. I don't fully understand what this name is supposed to be, so bwarsaw will need to be consulted on this. However, my guess would be to change line 85 of bin/newlist from: newlist = MailList.MailList() to: newlist = MailList.MailList(list_name) Sean -- "Engineering Tablets? Does that mean if I swallow one, I'll be an engineer?" -- Evelyn Mitchell Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 16:13:42 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 11:13:42 -0400 (EDT) Subject: [Mailman-Developers] 1.0.1 bug in newlist? References: <199909020645.CAA00035@babylon5.cc.vt.edu> <19990902090420.V2479@tummy.com> Message-ID: <14286.37926.116549.323268@anthem.cnri.reston.va.us> >>>>> "SR" == Sean Reifschneider writes: SR> The problem is that MailList.MailList() isn't being passed any SR> arguments, and so the name argument is defaulting to None. SR> Either newlist:85 needs to pass a name, or (perhaps better SR> yet) MailList.MailList.InitTempVars() needs to Do The Right SR> Thing (tm) (like come up with some default name) when name == SR> None. You're analysis is correct. Here's the patch I just checked in. -Barry -------------------- snip snip -------------------- Index: MailList.py =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/MailList.py,v retrieving revision 1.134 retrieving revision 1.135 diff -c -r1.134 -r1.135 *** MailList.py 1999/08/23 16:15:48 1.134 --- MailList.py 1999/09/02 15:04:14 1.135 *************** *** 261,267 **** """Set transient variables of this and inherited classes.""" self.__createlock_p = lock self.__lock = LockFile.LockFile( ! os.path.join(mm_cfg.LOCK_DIR, name) + '.lock', # TBD: is this a good choice of lifetime? lifetime = 60) self._internal_name = name --- 261,267 ---- """Set transient variables of this and inherited classes.""" self.__createlock_p = lock self.__lock = LockFile.LockFile( ! os.path.join(mm_cfg.LOCK_DIR, name or '') + '.lock', # TBD: is this a good choice of lifetime? lifetime = 60) self._internal_name = name From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 16:27:30 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 11:27:30 -0400 (EDT) Subject: [Mailman-Developers] 1.0.1 bug in newlist? References: <199909020645.CAA00035@babylon5.cc.vt.edu> <19990902090420.V2479@tummy.com> <14286.37926.116549.323268@anthem.cnri.reston.va.us> Message-ID: <14286.38754.273202.789534@anthem.cnri.reston.va.us> >>>>> "BAW" == Barry A Warsaw writes: BAW> You're analysis is correct. Here's the patch I just checked ---------^^^^^^ I'm out sick today ;) From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 16:32:39 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 11:32:39 -0400 (EDT) Subject: [Mailman-Developers] https References: <19990902142743.K19459@mail.tolna.net> Message-ID: <14286.39063.709410.786654@anthem.cnri.reston.va.us> >>>>> "PG" == Peter Gervai writes: PG> I'm using admin interface on https:// url, and some buttons PG> send me to (absolute) address without https. There are http PG> and https users, and I do not want to force either party to PG> use the other way. Is it possible, or would it be possible to PG> sort out such "cross-directions", and keep the user in the PG> selected protocol? Could you post a list of the controls that have this problem? From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 18:23:48 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 13:23:48 -0400 (EDT) Subject: [Mailman-Developers] Documentation Guidelines Message-ID: <14286.45732.804812.597778@anthem.cnri.reston.va.us> Hi folks, I've gotten some guidelines from RMS about Mailman documentation. I'm wondering if it would be useful for me to create a small working group mailing list for those of you who would like to collaborate on documentation? We can continue to use the mailman-developers list if you prefer. Documentation should be in Texinfo format, although it is okay to write it in some other format, if what we release is the Texinfo. Please see the GNU Texinfo manual for style guides. RMS sent me the proper assignment forms for both the main manual contributors and for those who donate smaller changes. Let me know and I will send them to you. -Barry From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 21:03:17 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 16:03:17 -0400 (EDT) Subject: [Mailman-Developers] [root@tolna.net: Cron /usr/bin/python /var/lib/mailman/cron/mailpasswds] References: <19990901120420.C16052@mail.tolna.net> <19990901102215.V2479@tummy.com> Message-ID: <14286.55301.521607.367050@anthem.cnri.reston.va.us> >>>>> "SR" == Sean Reifschneider writes: SR> It looks like your cronpass.txt template has a "%(one_list)s" SR> in it, which doesn't exist in the data being passed. The only SR> values allowed for substitution in there are hostname, SR> useraddr, exreq, and owner. Did you perhaps modify the SR> cronpass.txt template? SR> Here's a patch that will fix it in any case. It causes any SR> invalid "%(key)" format strings to remain as they are instead SR> of throwing KeyErrors. I like this, Sean. I'm going to check in a slight modification (attached). Thanks! -Barry -------------------- snip snip -------------------- Index: Utils.py =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v retrieving revision 1.75 diff -c -r1.75 Utils.py *** Utils.py 1999/09/02 19:39:08 1.75 --- Utils.py 1999/09/02 19:51:38 *************** *** 27,32 **** --- 27,34 ---- import os import string import re + from UserDict import UserDict + from types import StringType # XXX: obsolete, should use re module import regsub import random *************** *** 620,625 **** --- 622,645 ---- + class SafeDict(UserDict): + """Dictionary which returns a default value for unknown keys. + + This is used in maketext so that editing templates is a bit more robust. + """ + def __init__(self, d): + UserDict.__init__(self, d) + + def __getitem__(self, key): + try: + return self.data[key] + except KeyError: + if type(key) == StringType: + return '%('+key+')s' + else: + return '' % `key` + + def maketext(templatefile, dict, raw=0): """Make some text from a template file. *************** *** 631,639 **** fp = open(file) template = fp.read() fp.close() if raw: ! return template % dict ! return wrap(template % dict) --- 651,660 ---- fp = open(file) template = fp.read() fp.close() + text = template % SafeDict(dict) if raw: ! return text ! return wrap(text) From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Thu Sep 2 21:41:41 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Thu, 2 Sep 1999 16:41:41 -0400 (EDT) Subject: [Mailman-Developers] External Archiving Patch References: Message-ID: <14286.57605.55324.75699@anthem.cnri.reston.va.us> >>>>> "PH" == Paul Hebble writes: PH> This patch should let the administrator specify alternative PH> external archivers. All you have to do is set the PH> PUBLIC_EXTERNAL_ARCHIVER and/or PRIVATE_EXTERNAL_ARCHIVER PH> variables to the command line you wish to use. If you put PH> "$LISTNAME" or "${LISTNAME}" in the command line, it is PH> replaced with the name of the list. Mailman will run the PH> command line and pipe each post to it. PH> The main advantage to this is that all post filtering is done PH> without having to subscribe a procmailrc to the list. This PH> prevents list-admins from accidentally unsubscribing the PH> archiver. PH> If the variables given above are set to "" (the default), PH> Mailman will fall back to the built-in Pipermail archiver, so PH> this should not break any existing installations. Paul, I'd like to install this patch but have a couple of suggestions. First (and I apologize for not looking at it closer), I'd like to use any false value -- None or 0 would be preferrable -- to indicate use-the-internal-archiver. Maybe your patch already supports that. Second... PH> My apologies for using regsub, but I have not been able to PH> find enough documentation on the re module. Perhaps someone PH> better acquainted with it could migrate this patch to it? I'm sorry I don't have the time to port to re module. Do you think you'd be able to do it? I'd rather not include new dependencies on regsub, which is deprecated and may someday go away. Here's documentation on re: http://www.python.org/doc/current/lib/module-re.html If you do port to re, please resubmit the patch against the CVS snapshot and I'd be very happy to install it. Thanks, -Barry From hebble@ncsa.uiuc.edu Thu Sep 2 21:59:23 1999 From: hebble@ncsa.uiuc.edu (Paul Hebble) Date: Thu, 2 Sep 1999 15:59:23 -0500 (CDT) Subject: [Mailman-Developers] External Archiving Patch In-Reply-To: <14286.57605.55324.75699@anthem.cnri.reston.va.us> Message-ID: On Thu, 2 Sep 1999, Barry A. Warsaw wrote: > >>>>> "PH" == Paul Hebble writes: > > Paul, I'd like to install this patch but have a couple of > suggestions. First (and I apologize for not looking at it closer), > I'd like to use any false value -- None or 0 would be preferrable -- > to indicate use-the-internal-archiver. Maybe your patch already > supports that. *snip* > I'm sorry I don't have the time to port to re module. Do you think > you'd be able to do it? I'd rather not include new dependencies on > regsub, which is deprecated and may someday go away. > > Here's documentation on re: > > http://www.python.org/doc/current/lib/module-re.html > > If you do port to re, please resubmit the patch against the CVS > snapshot and I'd be very happy to install it. These issues shouldn't take me too long. I'll do the port to re now that I have documentation. Look for the new patch soon. Thanks. -- Paul From hebble@ncsa.uiuc.edu Thu Sep 2 23:00:49 1999 From: hebble@ncsa.uiuc.edu (Paul Hebble) Date: Thu, 2 Sep 1999 17:00:49 -0500 (CDT) Subject: [Mailman-Developers] Problem with UserDict? Message-ID: Hi, I caught up with Mailman CVS today, and now bin/newlist dies like this: Traceback (innermost last): File "bin/newlist", line 146, in ? raise SystemExit(main(sys.argv)) File "bin/newlist", line 126, in main sendnotice(newlist, list_name, owner_mail, list_pw) File "bin/newlist", line 131, in sendnotice text = Utils.maketext( File "/home/mailman/Mailman/Utils.py", line 654, in maketext text = template % SafeDict(dict) File "/home/mailman/Mailman/Utils.py", line 631, in __init__ UserDict.__init__(self, d) TypeError: too many arguments; expected 1, got 2 Any idea what might be wrong? -- Paul From jafo@tummy.com Fri Sep 3 01:02:56 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Thu, 2 Sep 1999 18:02:56 -0600 Subject: [Mailman-Developers] Problem with UserDict? In-Reply-To: ; from Paul Hebble on Thu, Sep 02, 1999 at 05:00:49PM -0500 References: Message-ID: <19990902180256.B27821@tummy.com> On Thu, Sep 02, 1999 at 05:00:49PM -0500, Paul Hebble wrote: > File "/home/mailman/Mailman/Utils.py", line 631, in __init__ > UserDict.__init__(self, d) >TypeError: too many arguments; expected 1, got 2 Interesting. I've back-ported Barry's changes to my patch to 1.0 and it's running without any problems. Are you running python 1.5.2? I don't recall if there have been changes in UserDict or not, but if you aren't running 1.5.2 can you send me the output of: grep -C2 __init__ /usr/lib/python1.5/UserDict.py (or wheverever your UserDict.py is)? Sean -- Every solution breeds new problems. Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From listwrangler@iximd.com Fri Sep 3 04:07:56 1999 From: listwrangler@iximd.com (Listwrangler) Date: Thu, 2 Sep 1999 22:07:56 -0500 Subject: [Mailman-Developers] Re: [Mailman-Users] How Do I Volunteer for a To Do list item? In-Reply-To: <14286.53024.86218.212341@anthem.cnri.reston.va.us> References: Message-ID: Dear Barry, >We'd love it if you'd help out with the documentation (an admitted >weakness). Currently this effort is being carried out on the >mailman-developers@python.org list. For now I suggest you check those >archives and subscribe to that list. Thanks, I'll do that. Some day... I just had to port the organization's web site and I'm all balled up with that now. The new ISP was going to alias the old addresses and web sites, so for the user nothing would changed. Suffice it to say, they changed, and I can't access the web site anymore. I'm trying to get my access restored, but have accepted the new ISP's offer to port to a new address. Most of the links in the site are relative URLs, but some weren't, and of course all the pointers and explanations for how to use our online features have changed, so I have to rewrite that... Sigh. >Great! We need volunteers to help out. What MD features are you >particularly missing? What is broken in MM for you? I sent a separate email about Membership Management console, so I'll skip that here. Regarding moderator features, I have sat down and drawn up a preliminary list of what should be simple changes. I'll have to think harder about deeper functionality. But this is what I think would be helpful but easy to access. The list administrator should have access to all functions of all lists. Only the list administrator should have access to configuration and related issues. The moderator should have access to administrivia for their lists, but no access to configuration. This is on the theory that a moderator will be a user with limited technical skills. The goal should be to equip them with easy to understand tools that are useful for list and user management while preventing them from getting into configuration and other stuff they don't understand. I walk my moderators through the screens, telling them what they're allowed to touch and what they're not allowed to touch. They're good people, they don't have the urge to play with things they've been told not to play with. However, I have some staffers that might get list responsibilities that I definitely DO NOT want to access configuration stuff! So I thought, the simplest thing is to just go through the admin pages and decide which ones it's okay for the moderators to access. Moderators access: Membership Management Bounce Options Subscriber List Tend to Pending Administrative Requests The rest should be reserved for the administrator. Hoever, the General Info page should be split into two pages, one for admin only stuff, and one for moderator stuff. The moderator should be able to do the following: Introductory paragraph for the list List specific text prepended to new subscriber welcome message Test appended to an unsubscription notice Administrivia filter should administrator get notices of administrative requests immediately? should administrator get notice of un/subs? Send mail to poster when their posting is held for approval? The other items should be reserved for the administrator, as they presumably will have a better understanding of the implications of the choices. Also, if there are multiple lists on one site, there should be uniformity in naming and descriptive practices, so things like the list name and terse description should be done in accordance with whatever the organizations standards are, and the list admin should be responsible for making that happen. However, the list administrator really doesn't care what the intro message is -- that's content, which is the responsibility of the moderator. The moderator should also have a box for changing their password. Password features: There are some security features that you might want to consider adding to the password user must change password at next log on remember password history (to prevent the same password being recycled) minimum length (maybe this is there, I always use moderately long passwords so i haven't checked) a help file about good passwords -- eg, don't use words that can be found in a dictionary, don't use words that can easily be guessed, don't use your name, the listname, minimum length, etc Another feature I think I would like is when non-posters are not allowed to post, give an option for send the posts to the admin request pending page, or to redirect them to a different email addy. Real world example: We run a conference, the True Spirit Conference. The TrueSpirit list is for conference committee members only, and is restricted so non-members cannot post. We give out the list address as the 'more info' address to avoid confusion. If you want TrueSpirit info, you send it to truespirt@iximd.com . So, the general public inquiries, 'where is the conference, how much does it cost?' get held, and the person tasked with tending the email list can then just rejects them (and the rejection message tells them where to get more info), and also subscribes their address to the announcement list, so they get the press releases as they become available. But sometimes people want to volunteer to help, or want to make a presentation, or need to know about wheelchair access, etc, and their inquiries need to get redirected to a human being to respond to. So if the approval page and had another option:"redirect to: " and then you could fill in the address, that would be great. Ideally there would be some configuration options for the redirect, like 'default address' to redirect to, so you could just check 'redirect' and it would automatically get mailed without having to type in the address every time. Then you would have to have a redirect message, that would have some canned message like, "Thank you for your interest in _name of mailing list_. Your query had been redirected to the proper person to follow up on." The administrator/moderator would have the option of customing the text in the configuration page to change what the redirect message was, or the option of changing the response on an individual basis. (The way reject works now.) Oh, which reminds me, where do I rewrite the default rejection message? And if I can't, then I recommend that it be possible. There's about three common reasons we reject, and if we could put them in the default, then I could just click instead of typing the reason each time. And, for the moderator, an option to prepend a simple header message for each email would be useful. Yes, you have this, but it's blank. You've got a footer already filled in that has the list name, URL, etc. But I don't know the format, I want to add in a header that says, "This message posted _date_ by _username_ to _listname_:" (The help file should give the syntax for common headers so that non-technical moderators can choose to use them or not.) This is particularly helpful if the list headers have been munged to remove the sender's address. Yes, there are debates about munging, so I won't share my views on the subject; but in certain circumstances it's useful to have the reply-to set to the list name while the individual poster's name is at the top of the message. These are the things that I keep mumbling to myself about as I work the lists, I'll give some deeper thought to the subject and get back to you with additional suggestions. Gary Listwrangler listwrangler@iximd.com ******************** For help with subscribe/unsubscribe, troubleshooting, or more info about The American Boyz email lists, please visit: ________ (new web page being developed, please stand by), or request a copy of the Amboyz Elist Help File to be emailed to you. If you are familiar with Mailman, the following lists are implemented with Mailman and use standard Mailman features: Amboyz-Main, Amboyz-Announce, TrueSpirit, and ElderTG From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Fri Sep 3 06:26:20 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 3 Sep 1999 01:26:20 -0400 (EDT) Subject: [Mailman-Developers] Problem with UserDict? References: Message-ID: <14287.23548.914689.980863@anthem.cnri.reston.va.us> >>>>> "PH" == Paul Hebble writes: PH> I caught up with Mailman CVS today, and now bin/newlist dies PH> like this: Urk. The optional initial dictionary argument for UserDict's constructor is a Python 1.5.2-ism. You're running an older version of Python, right? Try this patch. -Barry -------------------- snip snip -------------------- Index: Utils.py =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v retrieving revision 1.76 diff -c -r1.76 Utils.py *** Utils.py 1999/09/02 20:04:20 1.76 --- Utils.py 1999/09/03 05:24:29 *************** *** 628,634 **** This is used in maketext so that editing templates is a bit more robust. """ def __init__(self, d): ! UserDict.__init__(self, d) def __getitem__(self, key): try: --- 628,637 ---- This is used in maketext so that editing templates is a bit more robust. """ def __init__(self, d): ! # optional initial dictionary is a Python 1.5.2-ism. Do it this way ! # for portability ! UserDict.__init__(self) ! self.update(d) def __getitem__(self, key): try: From jarrell@vt.edu Fri Sep 3 06:32:14 1999 From: jarrell@vt.edu (Ron Jarrell) Date: Fri, 03 Sep 1999 01:32:14 -0400 Subject: [Mailman-Developers] Problem with UserDict? In-Reply-To: <14287.23548.914689.980863@anthem.cnri.reston.va.us> References: Message-ID: <4.2.0.58.19990903013029.00af0da0@vtserf.cc.vt.edu> The most recent round of patches seems to have solved the problems... For the record, I'm running 1.5.1 too. (Primarily because I'm lazy, and installed the sunfreeware.com kit, which isn't (or wasn't) 1.5.2)... From bwarsaw@cnri.reston.va.us (Barry A. Warsaw) Fri Sep 3 16:06:03 1999 From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw) Date: Fri, 3 Sep 1999 11:06:03 -0400 (EDT) Subject: [Mailman-Developers] Problem with UserDict? References: <4.2.0.58.19990903013029.00af0da0@vtserf.cc.vt.edu> Message-ID: <14287.58331.536648.861759@anthem.cnri.reston.va.us> >>>>> "RJ" == Ron Jarrell writes: RJ> The most recent round of patches seems to have solved the RJ> problems... For the record, I'm running 1.5.1 too. RJ> (Primarily because I'm lazy, and installed the sunfreeware.com RJ> kit, which isn't (or wasn't) 1.5.2)... Cool. From grin@tolna.net Fri Sep 3 23:07:53 1999 From: grin@tolna.net (Peter Gervai) Date: Sat, 4 Sep 1999 00:07:53 +0200 Subject: [Mailman-Developers] https In-Reply-To: <14286.39063.709410.786654@anthem.cnri.reston.va.us>; from Barry A. Warsaw on Thu, Sep 02, 1999 at 11:32:39AM -0400 References: <19990902142743.K19459@mail.tolna.net> <14286.39063.709410.786654@anthem.cnri.reston.va.us> Message-ID: <19990904000753.C8455@mail.tolna.net> On Thu, Sep 02, 1999 at 11:32:39AM -0400, Barry A. Warsaw wrote: > > >>>>> "PG" == Peter Gervai writes: > > PG> I'm using admin interface on https:// url, and some buttons > PG> send me to (absolute) address without https. There are http > PG> and https users, and I do not want to force either party to > PG> use the other way. Is it possible, or would it be possible to > PG> sort out such "cross-directions", and keep the user in the > PG> selected protocol? > > Could you post a list of the controls that have this problem? A fast lookaround revealed all of the buttons on the listinfo page (visit subs list, edit options, etc). Possibly more buttons behind those. grin From wimg@geocities.com Sun Sep 5 16:01:49 1999 From: wimg@geocities.com (Wim Godden) Date: Sun, 05 Sep 1999 17:01:49 +0200 Subject: [Mailman-Developers] Archive creation with zero messages Message-ID: <37D285DD.4FDF@geocities.com> As stated in the mailman FAQ, at least one message should have been sent before an archive is created. However, if you just run : $prefix/bin/arch listname $prefix/archives/private/listname.mbox then the archive is created even with zero messages and it displays : Currently, there are no archives. Which is a perfect solution. Why not just add that line to the newlist-executable ? Kind greetings, Wim Godden From gorgo@caesar.elte.hu Tue Sep 7 16:13:18 1999 From: gorgo@caesar.elte.hu (Gergely Madarasz) Date: Tue, 7 Sep 1999 17:13:18 +0200 (METDST) Subject: [Mailman-Developers] Bug#43258: mailman: pipermail barfs when invoked multiple times (fwd) Message-ID: Hello, I got this report in the debian bugtracking system. -- Madarasz Gergely gorgo@caesar.elte.hu gorgo@linux.rulez.org It's practically impossible to look at a penguin and feel angry. Egy pingvinre gyakorlatilag lehetetlen haragosan nezni. HuLUG: http://mlf.linux.rulez.org/ ---------- Forwarded message ---------- Date: Fri, 20 Aug 1999 21:12:59 +0200 From: Simon Richter To: submit@bugs.debian.org Subject: Bug#43258: mailman: pipermail barfs when invoked multiple times Resent-Date: Fri, 20 Aug 1999 19:18:00 GMT Resent-From: Simon Richter Resent-To: debian-bugs-dist@lists.debian.org Resent-cc: Gergely Madarasz Package: mailman Version: 1.0rc2-5 Hi, I am using mailman/pipermail for all list processing on my systems, and among these lists there is one for CVS autopostings. If someone commits changes in multiple directories, CVS creates a message for each of them, thus causing multiple messages to be queued in very short time. However, pipermail seems to have trouble when archiving these messages, the output from the command invoked by the mailer is as follows: Traceback (innermost last): File "/usr/lib/mailman/Mailman/Archiver/Archiver.py", line 210, in ArchiveMail h.close() File "/usr/lib/mailman/Mailman/Archiver/HyperArch.py", line 906, in close self.update_dirty_archives()# Update all changed archives File "/usr/lib/mailman/Mailman/Archiver/HyperArch.py", line 871, in update_dirty_archives self.update_archive(i) File "/usr/lib/mailman/Mailman/Archiver/pipermail.py", line 316, in update_archive article=self.database.getArticle(self.archive, msgid) File "/usr/lib/mailman/Mailman/Archiver/HyperDatabase.py", line 264, in getArticle s=self.articleIndex[msgid] File "/usr/lib/mailman/Mailman/Archiver/HyperDatabase.py", line 131, in __getitem__ return self.dict[item] I suspect this is some sort of locking problem. Am I right? Simon -- System Information Debian Release: 2.1 Kernel Version: Linux phobos 2.2.10 #1 Sat Jun 19 17:39:45 CEST 1999 i486 unknown Versions of the packages mailman depends on: ii libc6 2.0.7.19981211 GNU C Library: shared libraries ii python-base 1.5.1-7 An interactive object-oriented scripting lan ii python-misc 1.5.1-7 Miscellaneous support modules for Python. ii python-net 1.5.1-7 TCP/IP and various Internet support modules sendmail Not installed or no info ii exim 2.05-1 Exim Mailer ^^^ (Provides virtual package mail-transport-agent) apache Not installed or no info ii apache-ssl 1.3.3+1.29-2 Versatile, high-performance HTTP server with ^^^ (Provides virtual package httpd) From tdfunk@asd-web.com Thu Sep 9 21:09:57 1999 From: tdfunk@asd-web.com (Tom Funk) Date: Thu, 9 Sep 1999 16:09:57 -0400 Subject: [Mailman-Developers] Anti-Spam Acronymns -- I give up... Message-ID: <7DB247B399FED211A73F00600841DDC7099939@TAL_ENT> H'lo, Gang: A few weeks ago there was a short thread on this list that made some passing references to acronyms for some of the 'Net's anti-spam black list/black hole servers. At the time, I didn't know what the acronyms meant so I hopped over to AltaVista and started hunting them down. I eventually found references to all of the referenced servers. Now, I'd actually like to get back to one or more of those sites -- but can't find the messages from that thread. And, of course, I didn't bookmark any of them... :-( I can't find the messages locally, I can't find them in the archives and I can't remember any of the acronyms. The thread should have been during August, since I only joined the list as of Aug. 8, or there 'bouts. The anti-spam references were a side-thread to the primary content of the messages. I believe the exchange was between one of the core maintainers (Barry??) and (I think) someone in Germany (.de domain???). I also remember that the core maintainer answering the messages pointed out the one of the acronyms was "top secret" (a misquote) and lived on the shelf next to the can of whoop-ass. Does any of this ring a bell to anyone? I'm almost positive the thread was from this list since I get the Mailman-Users list digested and these messages were delivered individually. The bottom line is: what were the acronyms or URLs for the sites in question? thx! -=< tom >=- From gorgo@caesar.elte.hu Fri Sep 10 13:33:48 1999 From: gorgo@caesar.elte.hu (Gergely Madarasz) Date: Fri, 10 Sep 1999 14:33:48 +0200 (METDST) Subject: [Mailman-Developers] runaway python processes Message-ID: mail 11965 0.0 0.6 1692 804 ? S Sep 9 0:00 /usr/bin/python /var/lib/mailman/scripts/deliver mail 11972 10.9 0.8 1864 1052 ? R Sep 9 157:54 \_ /usr/bin/python /var/lib/mailman/scripts/contact_transport I have about 6-7 of these. strace reveals nothing, so it doesn't do any system calls, just eats the processor by itself. Version 1.0. -- Madarasz Gergely gorgo@caesar.elte.hu gorgo@linux.rulez.org It's practically impossible to look at a penguin and feel angry. Egy pingvinre gyakorlatilag lehetetlen haragosan nezni. HuLUG: http://mlf.linux.rulez.org/ From gorgo@sztaki.hu Fri Sep 10 16:46:02 1999 From: gorgo@sztaki.hu (Gergely Madarasz) Date: Fri, 10 Sep 1999 17:46:02 +0200 (MET DST) Subject: [Mailman-Developers] Re: Cron [ -x /usr/bin/python -a -f /usr/lib/mailman/cron/run_queue ] && /usr/bin/python /usr/lib/mailman/cron/run_queue In-Reply-To: <14297.7247.714864.3075@chiark.greenend.org.uk> Message-ID: On Fri, 10 Sep 1999, Ian Jackson wrote: > Cron Daemon writes ("Cron [ -x /usr/bin/python -a -f /usr/lib/mailman/cron/run_queue ] && /usr/bin/python /usr/lib/mailman/cron/run_queue"): > > Traceback (innermost last): > > File "/usr/lib/mailman/cron/run_queue", line 46, in ? > > main() > > File "/usr/lib/mailman/cron/run_queue", line 39, in main > > lockfile.lock() > > File "/usr/lib/mailman/Mailman/flock.py", line 114, in lock > > if self.locked(): > > File "/usr/lib/mailman/Mailman/flock.py", line 193, in locked > > pid, winner = self.__read() > > File "/usr/lib/mailman/Mailman/flock.py", line 96, in __read > > pid, winner = string.split(string.strip(fp.read())) > > ValueError: unpack list of wrong size > > Exception exceptions.ValueError: 'unpack list of wrong size' in ignored > > I just got this mail. You'll remember that I mailed you a little > while ago when my system ran out of disk space and I got a `no space > left on device' error (which was obviously expected) and something > that looked like the stuff above (which you told me I could ignre). > > But, as you can see, it's happened again, and there is plenty of disk > space and I can't see anything wrong. Hmmm... I don't know what this should mean... Greg From jafo@tummy.com Sun Sep 12 08:22:24 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Sun, 12 Sep 1999 01:22:24 -0600 Subject: [Mailman-Developers] MailMan typo and suggestion Message-ID: <19990912012224.B2479@tummy.com> In reviewing the code I ran into a typo (first part of patch below). I also ran into "return not not foo & bar" which caused me to scratch my head a moment. The second part of the patch is to change this to "return (foo & bar) == bar", however the alternative may be "return not not (foo & bar) # coerce return to 1/0" Sean ======== Index: MailList.py =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/MailList.py,v retrieving revision 1.135 diff -c -r1.135 MailList.py *** MailList.py 1999/09/02 15:04:14 1.135 --- MailList.py 1999/09/12 07:13:51 *************** *** 101,107 **** def __AddMember(self, addr, digest): """adds the appropriate data to the internal members dict. ! If the username has upercase letters in it, then the value in the members dict is the case preserved address, otherwise, the value is 0. """ --- 101,107 ---- def __AddMember(self, addr, digest): """adds the appropriate data to the internal members dict. ! If the username has uppercase letters in it, then the value in the members dict is the case preserved address, otherwise, the value is 0. """ *************** *** 201,207 **** return self.digest_members.has_key(user) if not self.user_options.has_key(user): return 0 ! return not not self.user_options[user] & option def SetUserOption(self, user, option, value, save_list=1): user = self.GetUserCanonicalAddress(user) --- 201,207 ---- return self.digest_members.has_key(user) if not self.user_options.has_key(user): return 0 ! return (self.user_options[user] & option) == option def SetUserOption(self, user, option, value, save_list=1): user = self.GetUserCanonicalAddress(user) -- Linux: Bring back that "greased weasel" feeling. -- Sean Reifschneider, 1998 Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From jafo@tummy.com Sun Sep 12 08:38:26 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Sun, 12 Sep 1999 01:38:26 -0600 Subject: [Mailman-Developers] Sub-address patch Message-ID: <19990912013825.C2479@tummy.com> I haven't done any testing of this code yet (I'm not comfortable enough with things to shove this into production, and don't have a test mailman setup I can run this on). The goal of this patch is to add sub-address matching to the SMART_ADDRESS_MATCH code. I've added a new option "SMART_ADDRESS_MATCH_SUBADDR" to make it easy to disable (perhaps it should even be allowed on a per-list basis?). It's goal is to match "user-mailman-devel@example.com" with "user@example.com". I frequently subscribe to a list as "jafo-listname@", but submit from "jafo@" and sometimes get tripped up in the closed-list restrictions. It handles both qmail-style sub-addresses (as above) and sendmail-style ("jafo+mailman+devel"). I believe this was one of the things that I asked to be added to the TODO list, but I don't see it on there (nor did I see any discussion of it). Sean =============== Index: Defaults.py.in =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/Defaults.py.in,v retrieving revision 1.83 diff -c -r1.83 Defaults.py.in *** Defaults.py.in 1999/09/07 18:32:44 1.83 --- Defaults.py.in 1999/09/12 07:13:49 *************** *** 120,131 **** # spoofed messages may get through. USE_ENVELOPE_SENDER = 0 ! # When true, mailman will consider user@host.domain to be the same address ! # as user@domain. If set to 0, mailman will consider user@host.domain to ! # be the same address as user@Host.DoMain, but different than user@domain. ! # Usernames will be case preserved, and host parts of addresses will all be ! # lowercased. SMART_ADDRESS_MATCH = 1 # When set, the listinfo web page overview of lists on the machine will be # confined to only those lists whose web_page_url configuration option host # is included within the URL by which the page is visited - only those "on --- 120,139 ---- # spoofed messages may get through. USE_ENVELOPE_SENDER = 0 ! # When SMART_ADDRESS_MATCH is true, mailman will consider user@host.domain ! # to be the same address as user@domain. If set to 0, mailman will ! # consider user@host.domain to be the same address as user@Host.DoMain, ! # but different than user@domain. Usernames will be case preserved, ! # and host parts of addresses will all be lowercased. SMART_ADDRESS_MATCH = 1 + # When SMART_ADDRESS_MATCH_SUBADDR is true (as well as SMART_ADDRESS_MATCH), + # user names with '+' or '-' in them are tried with this part stripped. + # For example, "user-mailman-devel@example.com" will match + # (in addition to the full address) "user-mailman@example.com" and + # "user@example.com". Similarly with the '+' symbol (- is qmail, + is + # sendmail). + SMART_ADDRESS_MATCH_SUBADDR = 1 + # When set, the listinfo web page overview of lists on the machine will be # confined to only those lists whose web_page_url configuration option host # is included within the URL by which the page is visited - only those "on Index: Utils.py =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v retrieving revision 1.77 diff -c -r1.77 Utils.py *** Utils.py 1999/09/03 05:55:51 1.77 --- Utils.py 1999/09/12 07:13:51 *************** *** 455,471 **** """returns a sorted list of addresses that could possibly match a given name. ! For Example, given scott@pobox.com, return ['scott@pobox.com'], ! given scott@blackbox.pobox.com return ['scott@blackbox.pobox.com', 'scott@pobox.com']""" name = string.lower(name) user, domain = ParseEmail(name) res = [name] if domain: domain = domain[1:] while len(domain) >= 2: ! res.append("%s@%s" % (user, string.join(domain, "."))) domain = domain[1:] return res --- 455,486 ---- """returns a sorted list of addresses that could possibly match a given name. ! For Example, given scott@pobox.com, return ['scott-mailman@pobox.com'], ! given scott@blackbox.pobox.com return ['scott-mailman@blackbox.pobox.com', ! 'scott@blackbox.pobox.com', ! 'scott-mailman@pobox.com', 'scott@pobox.com']""" name = string.lower(name) user, domain = ParseEmail(name) res = [name] + + # Try stripping off sub-addresses + userList = [user] + if mm_cfg.SMART_ADDRESS_MATCH_SUBADDR: + userTmp = userList[0] + for split in ( '-', '+' ): + while 1: + pos = string.rfind(userTmp, split) + if pos <= 0: break # <= to not create empty user-names + userTmp = userTmp[:pos] + if pos: userList.append(userTmp) + if domain: domain = domain[1:] while len(domain) >= 2: ! for user in userList: ! res.append("%s@%s" % (user, string.join(domain, "."))) domain = domain[1:] return res -- Linux: When you need to run like a greased weasel. -- Sean Reifschneider, 1998 Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From jafo@tummy.com Sun Sep 12 08:40:19 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Sun, 12 Sep 1999 01:40:19 -0600 Subject: [Mailman-Developers] Another typo Message-ID: <19990912014019.D2479@tummy.com> Index: paths.py.in =================================================================== RCS file: /projects/cvsroot/mailman/misc/paths.py.in,v retrieving revision 1.4 diff -c -r1.4 paths.py.in *** paths.py.in 1998/06/22 21:58:04 1.4 --- paths.py.in 1999/09/12 07:38:02 *************** *** 16,22 **** # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! # This file becomes paths.py which is installed in may directories. By # importing this module, sys.path gets `hacked' so that the $prefix/Mailman # directory is inserted at the start of that list. That directory really # contains the Mailman modules in package form. This file exports two --- 16,22 ---- # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! # This file becomes paths.py which is installed in many directories. By # importing this module, sys.path gets `hacked' so that the $prefix/Mailman # directory is inserted at the start of that list. That directory really # contains the Mailman modules in package form. This file exports two -- "I want to see more of you around the lab." "Fine. I'll gain weight." -- Chris Knight, _Real_Genius_ Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From jafo@tummy.com Sun Sep 12 10:22:08 1999 From: jafo@tummy.com (Sean Reifschneider) Date: Sun, 12 Sep 1999 03:22:08 -0600 Subject: [Mailman-Developers] Patch to rotate log files and mail to owner Message-ID: <19990912032208.G2479@tummy.com> Here's a patch that adds the file cron/maillogs, which defaults to running at 5am every morning. This checks the 'error' and 'smtp-failures' files and if they contain any information they are rotated and a summary is sent to the MAILMAN_OWNER address. Also added is a COMPRESS_LOGFILES_WITH option which can be set to compress the log files (and specify what command to use for doing so). Sean Index: Mailman/Defaults.py.in =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/Defaults.py.in,v retrieving revision 1.83 diff -c -r1.83 Mailman/Defaults.py.in *** Mailman/Defaults.py.in 1999/09/07 18:32:44 1.83 --- Mailman/Defaults.py.in 1999/09/12 09:12:09 *************** *** 83,88 **** --- 83,93 ---- # night to generate the txt.gz file. See cron/nightly_gzip for details. GZIP_ARCHIVE_TXT_FILES = 0 + # Set this to the name of an compression command to run (with "%s" being + # substituted for the file name to compress) to compress the logfiles. + # If this value is not set, logfiles will not be compressed. + #COMPRESS_LOGFILES_WITH = 'gzip "%s"' + HOME_PAGE = 'index.html' MAILMAN_OWNER = 'mailman-owner@%s' % DEFAULT_HOST_NAME Index: Mailman/mm_cfg.py.dist.in =================================================================== RCS file: /projects/cvsroot/mailman/Mailman/mm_cfg.py.dist.in,v retrieving revision 1.21 diff -c -r1.21 Mailman/mm_cfg.py.dist.in *** Mailman/mm_cfg.py.dist.in 1998/06/19 20:11:32 1.21 --- Mailman/mm_cfg.py.dist.in 1999/09/12 09:12:09 *************** *** 55,59 **** --- 55,61 ---- PUBLIC_ARCHIVE_URL = '/pipermail' PRIVATE_ARCHIVE_URL = '/mailman/private' + #COMPRESS_LOGFILES_WITH = 'gzip "%s"' + # Note - if you're looking for something that is imported from mm_cfg, but you # didn't find it above, it's probably in Defaults.py. Index: cron/crontab.in.in =================================================================== RCS file: /projects/cvsroot/mailman/cron/crontab.in.in,v retrieving revision 1.12 diff -c -r1.12 cron/crontab.in.in *** cron/crontab.in.in 1999/09/04 03:25:36 1.12 --- cron/crontab.in.in 1999/09/12 09:12:09 *************** *** 1,6 **** --- 1,9 ---- # At 5PM every day, mail reminders to admins as to pending requests 0 17 * * * @PYTHON@ @prefix@/cron/checkdbs # + # At 5AM every day, mail error logs to admin user + 0 5 * * * @PYTHON@ @prefix@/cron/maillogs + # # Noon, mail digests for lists that do periodic as well as threshhold delivery. 0 12 * * * @PYTHON@ @prefix@/cron/senddigests # =================================================================== *** cron/maillogs.orig Sun Sep 12 03:08:42 1999 --- cron/maillogs Sun Sep 12 03:01:52 1999 *************** *** 0 **** --- 1,83 ---- + #! /usr/bin/env python + # + # Copyright (C) 1998 by the Free Software Foundation, Inc. + # + # This program is free software; you can redistribute it and/or + # modify it under the terms of the GNU General Public License + # as published by the Free Software Foundation; either version 2 + # of the License, or (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + """Check the error logs and send any which have information in them. + + If any log entries exist, a message is sent to the mailman owner address + and the logs are rotated. + """ + + import sys, os, string, time, errno + import paths + from Mailman import mm_cfg, Utils + import fileinput, socket, time, stat + + # Work around known problems with some RedHat cron daemons + import signal + signal.signal(signal.SIGCHLD, signal.SIG_DFL) + + + newLogfiles = [] + text = [] + text.append('MailMan Log Report') + text.append('Generated: %s' % time.ctime(time.time())) + text.append('Host: %s' % socket.gethostname()) + text.append('') + + logDate = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time())) + textSend = 0 + for log in ( 'error', 'smtp-failures' ): + fileName = os.path.join(mm_cfg.LOG_DIR, log) + + # rotate file if it contains any data + stats = os.stat(fileName) + if stats[stat.ST_SIZE] < 1: continue + fileNameNew = '%s.%s' % ( fileName, logDate ) + newLogfiles.append(fileNameNew) + os.rename(fileName, fileNameNew) + open(fileName, 'w') + os.chmod(fileName, stat.S_IMODE(stats[stat.ST_MODE])) + os.chown(fileName, stats[stat.ST_UID], stats[stat.ST_GID]) + + textSend = 1 + tmp = '# FILE: %s #' % fileNameNew + text.append('#' * len(tmp)) + text.append(tmp) + text.append('#' * len(tmp)) + text.append('') + + linesLeft = 30 # e-mail first linesLeft of log files + for line in fileinput.input(fileNameNew): + if linesLeft == 0: + text.append('[... truncated ...]') + break + linesLeft = linesLeft - 1 + line = string.rstrip(line) + text.append(line) + text.append('') + + # send message if we've actually found anything + if textSend: + text = string.join(text, '\n') + '\n' + Utils.SendTextToUser('MailMan Log Report -- %s' % time.ctime(time.time()), + text, mm_cfg.MAILMAN_OWNER, mm_cfg.MAILMAN_OWNER) + + # compress any log-files we made + if hasattr(mm_cfg, 'COMPRESS_LOGFILES_WITH') and mm_cfg.COMPRESS_LOGFILES_WITH: + for file in newLogfiles: + os.system(mm_cfg.COMPRESS_LOGFILES_WITH % file) -- Linux: When you need to run like a greased weasel. -- Sean Reifschneider, 1998 Sean Reifschneider, Inimitably Superfluous URL: HP-UX/Linux/FreeBSD/BSDOS scanning software. From staff@appwatch.com Sun Sep 12 23:56:08 1999 From: staff@appwatch.com (AppWatch Staff) Date: 12 Sep 1999 22:56:08 -0000 Subject: [Mailman-Developers] New Apps site: AppWatch.com! Message-ID: <19990912225608.24543.qmail@mail.jdrowell.com> Hi Mailman! We at AppWatch.com are excited about our new site, and looking for Apps lovers all around to enjoy our hard work. We only announce Open Source Software, and do our best to make the updates as quickly as possible. You can even set up your own account to personalize how AppWatch.com looks, and soon you'll be able to filter announcements too. So drop by http://www.appwatch.com an check out the latest, coolest Apps for Linux and other Unixes. Sincerely, The AppWatch Staff ----- This email was sent to you based on your interest in Open Source applications. The AppWatch.com site services are absolutely free and we just hope you enjoy them. This is not a mailing list and you will not receive any more email on this matter. ----- From ricardo@miss-janet.com Mon Sep 13 08:09:45 1999 From: ricardo@miss-janet.com (Ricardo Kustner) Date: Mon, 13 Sep 1999 09:09:45 +0200 Subject: [Mailman-Developers] New Apps site: AppWatch.com! In-Reply-To: <19990912225608.24543.qmail@mail.jdrowell.com>; from AppWatch Staff on Sun, Sep 12, 1999 at 10:56:08PM -0000 References: <19990912225608.24543.qmail@mail.jdrowell.com> Message-ID: <19990913090945.A17891@miss-janet.com> On Sun, Sep 12, 1999 at 10:56:08PM -0000, AppWatch Staff wrote: > We at AppWatch.com are excited about our new site, and looking for Apps lovers all around to enjoy our hard work. We only announce Open Source Software, and do our best to make the updates as quickly as possible. You can even set up your own account to personalize how AppWatch.com looks, and soon you'll be able to filter announcements too. So drop by http://www.appwatch.com an check out the latest, coolest Apps for Linux and other Unixes. > This email was sent to you based on your interest in Open Source applications. The AppWatch.com site services are absolutely free and we just hope you enjoy them. This is not a mailing list and you will not receive any more email on this matter. Open Source SPAM... where is this world coming to? :( Ricardo. -- From julian7@kva.hu Wed Sep 15 13:43:19 1999 From: julian7@kva.hu (Balazs Nagy) Date: Wed, 15 Sep 1999 14:43:19 +0200 (CEST) Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail Message-ID: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---456965764-1315701514-937399399=:19137 Content-Type: TEXT/PLAIN; charset=US-ASCII Hiyas, I tested and debugged throughoutly my ol' patch and I found it useable. This patch's goal is to use the sendmail-interface rather than use the SMTP port managing to send letters. This method is much more effective when the SMTP server itself is in the local machine. (due of the latency of establishing a socket) In the attachment there's the latest patch. "Save it, patch it, try it, apply it" ("Hold Me, Thrill Me, Kiss Me, Kill Me"). -- Regards: Kevin (Balazs) ---456965764-1315701514-937399399=:19137 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mailman-mta.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="mailman-mta.patch" ZGlmZiAtcnVOIG1haWxtYW4ub3JpZy9NYWlsbWFuL01lc3NhZ2UucHkgbWFp bG1hbi9NYWlsbWFuL01lc3NhZ2UucHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFp bG1hbi9NZXNzYWdlLnB5CVdlZCBKdWwgMjEgMDM6MDU6MTAgMTk5OQ0KKysr IG1haWxtYW4vTWFpbG1hbi9NZXNzYWdlLnB5CVRodSBTZXAgIDIgMTA6NTQ6 NTQgMTk5OQ0KQEAgLTIyOSw2ICsyMjksOSBAQA0KIAlpZiBub3Qgc2VsZi5n ZXRoZWFkZXIoJ2Zyb20nKSBhbmQgc2V0X2Zyb206DQogCSAgICBzZWxmLlNl dEhlYWRlcignZnJvbScsIHNlbmRlcikNCiANCisgICAgZGVmIFNldERhdGUo c2VsZiwgZGF0ZT10aW1lLmN0aW1lKHRpbWUudGltZSgpKSk6DQorCXNlbGYu U2V0SGVhZGVyKCdkYXRlJywgZGF0ZSkNCisNCiAgICAgZGVmIEdldFNlbmRl cihzZWxmKToNCiAJcmV0dXJuIHNlbGYuc2VuZGVyDQogDQpkaWZmIC1ydU4g bWFpbG1hbi5vcmlnL01haWxtYW4vVXRpbHMucHkgbWFpbG1hbi9NYWlsbWFu L1V0aWxzLnB5DQotLS0gbWFpbG1hbi5vcmlnL01haWxtYW4vVXRpbHMucHkJ V2VkIEF1ZyAyNSAxMDo0MjozMyAxOTk5DQorKysgbWFpbG1hbi9NYWlsbWFu L1V0aWxzLnB5CVRodSBTZXAgIDIgMTA6NTI6NDkgMTk5OQ0KQEAgLTEyMywx MCArMTIzLDE1IEBADQogICAgIA0KIA0KIGRlZiBTZW5kVGV4dFRvVXNlcihz dWJqZWN0LCB0ZXh0LCByZWNpcGllbnQsIHNlbmRlciwgYWRkX2hlYWRlcnM9 W10pOg0KLSAgICBpbXBvcnQgTWVzc2FnZQ0KKyAgICBpbXBvcnQgTWVzc2Fn ZSwgdGltZQ0KICAgICBtc2cgPSBNZXNzYWdlLk91dGdvaW5nTWVzc2FnZSgp DQogICAgIG1zZy5TZXRTZW5kZXIoc2VuZGVyKQ0KICAgICBtc2cuU2V0SGVh ZGVyKCdTdWJqZWN0Jywgc3ViamVjdCwgMSkNCisgICAgaWYgbXNnLmdldGhl YWRlcignTWVzc2FnZS1JRCcpID09IE5vbmU6DQorCW1zZy5TZXRIZWFkZXJz KCdNZXNzYWdlLUlEOiA8JWYubWFpbG1hbkAlcz4nICUgKHRpbWUudGltZSgp LA0KKwkgICAgbW1fY2ZnLkRFRkFVTFRfSE9TVF9OQU1FKSkNCisgICAgaWYg bXNnLmdldGhlYWRlcignRGF0ZScpID09IE5vbmU6DQorCW1zZy5TZXREYXRl KCkNCiAgICAgbXNnLlNldEJvZHkoUXVvdGVQZXJpb2RzKHRleHQpKQ0KICAg ICBEZWxpdmVyVG9Vc2VyKG1zZywgcmVjaXBpZW50LCBhZGRfaGVhZGVycz1h ZGRfaGVhZGVycykNCiANCkBAIC0xNzksNiArMTg0LDI5IEBADQogICAgICAg ICBPdXRnb2luZ1F1ZXVlLmRlZmVyTWVzc2FnZShxdWV1ZV9pZCkNCiANCiBk ZWYgVHJ5U01UUERlbGl2ZXJ5KHJlY2lwaWVudCwgc2VuZGVyLCB0ZXh0LCBx dWV1ZV9lbnRyeSk6DQorICAgIGltcG9ydCB0eXBlcw0KKw0KKyAgICBpZiB0 eXBlKG1tX2NmZy5NQUlMRVJfQ01EKSA9PSB0eXBlcy5TdHJpbmdUeXBlIGFu ZCBsZW4obW1fY2ZnLk1BSUxFUl9DTUQpOg0KKyAJcmVjaXAgPSBbXQ0KKyAJ aWYgdHlwZShyZWNpcGllbnQpID09IHR5cGVzLlN0cmluZ1R5cGU6DQorIAkg ICAgcmVjaXAgPSBbcmVjaXBpZW50XQ0KKyAJZWxpZiB0eXBlKHJlY2lwaWVu dCkgPT0gdHlwZXMuTGlzdFR5cGU6DQorIAkgICAgcmVjaXAgPSByZWNpcGll bnQNCisgCWVsc2U6DQorIAkgICAgcmV0dXJuDQorIAkgICAgIyBXaGF0IGVs c2Ugd2UgY2FuIGRvPyBMb2c/DQorIAl0cnk6DQorIAkgICAgcHBlID0gb3Mu cG9wZW4obW1fY2ZnLk1BSUxFUl9DTUQgJSB7DQorIAkJICAgICdtbV9zZW5k ZXInOiBzZW5kZXIsDQorIAkJICAgICdtbV9yZWNpcGllbnRzJzogc3RyaW5n LmpvaW4ocmVjaXAsICcgJyksDQorIAkJfSwgJ3cnKQ0KKyAJICAgIHBwZS53 cml0ZSh0ZXh0KQ0KKyAJICAgIHBwZS5jbG9zZSgpDQorIAkgICAgcmV0dXJu DQorIAlleGNlcHQ6DQorIAkgICAgcGFzcw0KKyAJICAgICMgVHJ5IHRvIGRl bGl2ZXIgdmlhIFNNVFAgcG9ydCBpbnN0ZWFkDQorIA0KICAgICBpbXBvcnQg c29ja2V0DQogICAgIGltcG9ydCBPdXRnb2luZ1F1ZXVlDQogDQpkaWZmIC1y dU4gbWFpbG1hbi5vcmlnL01haWxtYW4vbW1fY2ZnLnB5LmRpc3QuaW4gbWFp bG1hbi9NYWlsbWFuL21tX2NmZy5weS5kaXN0LmluDQotLS0gbWFpbG1hbi5v cmlnL01haWxtYW4vbW1fY2ZnLnB5LmRpc3QuaW4JRnJpIEp1biAxOSAyMjox MTozMiAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL21tX2NmZy5weS5kaXN0 LmluCVRodSBTZXAgIDIgMTA6NTI6NDkgMTk5OQ0KQEAgLTU1LDUgKzU1LDcg QEANCiBQVUJMSUNfQVJDSElWRV9VUkwgPSAnL3BpcGVybWFpbCcNCiBQUklW QVRFX0FSQ0hJVkVfVVJMID0gJy9tYWlsbWFuL3ByaXZhdGUnDQogDQorTUFJ TEVSX0NNRAkgID0gJ0BTRU5ETUFJTEAnDQorDQogIyBOb3RlIC0gaWYgeW91 J3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGVkIGZy b20gbW1fY2ZnLCBidXQgeW91DQogIyBkaWRuJ3QgZmluZCBpdCBhYm92ZSwg aXQncyBwcm9iYWJseSBpbiBEZWZhdWx0cy5weS4NCmRpZmYgLXJ1TiBtYWls bWFuLm9yaWcvUkVBRE1FLlFNQUlMIG1haWxtYW4vUkVBRE1FLlFNQUlMDQot LS0gbWFpbG1hbi5vcmlnL1JFQURNRS5RTUFJTAlNb24gTWFyICAxIDE4OjM3 OjQwIDE5OTkNCisrKyBtYWlsbWFuL1JFQURNRS5RTUFJTAlUaHUgU2VwICAy IDEwOjUyOjQ5IDE5OTkNCkBAIC02Nyw3ICs2Nyw3IEBADQogICB0Y3AtZW52 OiAxMjcuIDE0My4yMDUuMjAwIDogc2V0ZW52IFJFTEFZQ0xJRU5UDQogDQog ICB3aGVyZSAxNDMuMjA1LjIwMC4gaXMgeW91ciBkb21haW4uICBJZiB5b3Ug dXNlIHRjcHNlcnZlciwgdGhlbiB5b3UNCi0gIG5lZWQgc29tZXRoaW5nIGxp a2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIC9ldGMvdGNwLnNtdHAgZmlsZToN CisgIG5lZWQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3Vy IC9ldGMvdGNwLnNtdHAgKG9yIHN1Y2gpIGZpbGU6DQogDQogICAxNDMuMjA1 LjIwMC46YWxsb3csUkVMQVlDTElFTlQ9IiINCiAgIDEyNy46YWxsb3csUkVM QVlDTElFTlQ9IiINCkBAIC03NSwxMCArNzUsMTMgQEANCiAtIEJOOiBCaWdn ZXIgL3Zhci9xbWFpbC9jb250cm9sL2NvbmN1cnJlbmN5cmVtb3RlIHZhbHVl cyB3b3JrIGJldHRlcg0KICAgc2VuZGluZyBvdXRib3VuZCBtZXNzYWdlcy4N CiANCistIEJpZ2dlciAvdmFyL3FtYWlsL2NvbnRyb2wvY29uY3VycmVuY3ly ZW1vdGUgdmFsdWVzIHdvcmsgYmV0dGVyIHNlbmRpbmcNCisgIG91dGJvdW5k IG1lc3NhZ2VzLg0KKw0KIC0gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzZXR0 aW5nIHVwIHFtYWlsIGFuZCByZWxheWluZyBjYW4gYmUgZm91bmQgaW4gDQog ICB0aGUgcW1haWwgZG9jdW1lbnRhdGlvbi4NCiANCi1CTjogTGFzdCBidXQg bm90IGxlYXN0LCBoZXJlJ3MgYSBsaXR0bGUgc2NyaXB0IHRvIGdlbmVyYXRl IGFsaWFzZXMgdG8NCitCTjogQXQgbGFzdCBidXQgbm90IGxlYXN0IHRoZXJl J3MgYSBsaXR0bGUgc2NyaXB0IHRvIGdlbmVyYXRlIGFsaWFzZXMgdG8NCiB5 b3VyIGxpc3RzOg0KIA0KICMhL2Jpbi9zaA0KZGlmZiAtcnVOIG1haWxtYW4u b3JpZy9jb25maWd1cmUuaW4gbWFpbG1hbi9jb25maWd1cmUuaW4NCi0tLSBt YWlsbWFuLm9yaWcvY29uZmlndXJlLmluCUZyaSBKdWwgMjMgMDk6MDk6MDUg MTk5OQ0KKysrIG1haWxtYW4vY29uZmlndXJlLmluCVRodSBTZXAgIDIgMTA6 NTI6NDkgMTk5OQ0KQEAgLTI1NCw3ICsyNTQsNyBAQA0KIGlmIHRlc3QgLXog IiR3aXRoX21haWxfZ2lkIg0KIHRoZW4NCiAgICAgQUNfQ0FDSEVfVkFMKGFj X2N2X2dyb3VwX21haWwsIFtkbmwNCi0gICAgYWNfY3ZfZ3JvdXBfbWFpbD0i b3RoZXIgbWFpbCBkYWVtb24iXSkNCisgICAgYWNfY3ZfZ3JvdXBfbWFpbD0i bm9maWxlcyBvdGhlciBtYWlsIGRhZW1vbiJdKQ0KIGVsc2UNCiAgICAgYWNf Y3ZfZ3JvdXBfbWFpbD0kd2l0aF9tYWlsX2dpZA0KIGZpDQpAQCAtMjk0LDgg KzI5NCw0OCBAQA0KIGZpDQogDQogDQotI01NX0ZJTkRfVVNFUl9JRChBTElB U19VSUQsIG1haWxtYW4sIGFsaWFzX3dyYXBwZXIpDQotI01NX0ZJTkRfR1JP VVBfSUQoQUxJQVNfR0lELCBtYWlsLCBhbGlhc193cmFwcGVyKQ0KK0FDX01T R19DSEVDS0lORyhmb3Igc2VuZG1haWwgcHJvZ3JhbXMpDQorQUNfQVJHX1dJ VEgoc2VuZG1haWwsIGRubA0KK1sgIC0td2l0aC1zZW5kbWFpbCAgICAgIGRv IGRlbGl2ZXJpZXMgd2l0aCB0aGlzIHByb2dyYW1dKQ0KK2lmIHRlc3QgLXog IiR3aXRoX3NlbmRtYWlsIg0KK3RoZW4NCisgICAgQUNfQ0FDSEVfVkFMKGFj X2N2X3NlbmRtYWlsLCBbZG5sDQorCWFjX2N2X3NlbmRtYWlsPSIvdmFyL3Ft YWlsL2Jpbi9xbWFpbC1pbmplY3QgL3Vzci9saWIvc2VuZG1haWwgL3Vzci9z YmluL3NlbmRtYWlsIC9ldGMvc2VuZG1haWwiXSkNCitlbHNlDQorICAgIGFj X2N2X3NlbmRtYWlsPSR3aXRoX3NlbmRtYWlsDQorZmkNCitBQ19TVUJTVChT RU5ETUFJTCkNCitjaGFuZ2VxdW90ZSgsKQ0KK2NhdCA+IGNvbmZ0ZXN0LnB5 IDw8RU9GDQoraW1wb3J0IG9zLCBzdHJpbmcNCitmaWwgPSAnJw0KK2ZvciBm bGUgaW4gc3RyaW5nLnNwbGl0KCIkYWNfY3Zfc2VuZG1haWwiKToNCisgICAg dHJ5Og0KKwlsID0gb3Muc3RhdChmbGUpDQorCWlmIGxbMF0gJiAweDExMToN CisJICAgIGZpbCA9IGZsZQ0KKwkgICAgYnJlYWsNCisgICAgZXhjZXB0Og0K KwlwYXNzDQorZnAgPSBvcGVuKCdjb25mdGVzdC5vdXQnLCAndycpDQorZnAu d3JpdGUoJyVzXG4nICUgZmlsKQ0KK2ZwLmNsb3NlDQorRU9GDQorY2hhbmdl cXVvdGUoWywgXSkNCiskUFlUSE9OIGNvbmZ0ZXN0LnB5DQorU0VORE1BSUw9 YGNhdCBjb25mdGVzdC5vdXRgDQorIyBQYXJhbWV0ZXJzIGFyZSB0aGUgc2Ft ZSBmb3IgcW1haWwtaW5qZWN0IGFuZCBzZW5kbWFpbC1jbG9uZXMgYnV0IHdo byBrbm93cz8NCitpZiB0ZXN0ICEgLXogJFNFTkRNQUlMOyB0aGVuDQorICAg IGlmIHRlc3QgJHtTRU5ETUFJTCUlcW1haWwtaW5qZWN0fSAhPSAkU0VORE1B SUw7IHRoZW4NCisJU0VORE1BSUw9IiRTRU5ETUFJTCAtZiAlKG1tX3NlbmRl cilzICUobW1fcmVjaXBpZW50cykiDQorICAgIGVsaWYgdGVzdCAke1NFTkRN QUlMJSVzZW5kbWFpbH0gIT0gJFNFTkRNQUlMOyB0aGVuDQorCVNFTkRNQUlM PSIkU0VORE1BSUwgLWYgJShtbV9zZW5kZXIpcyAlKG1tX3JlY2lwaWVudHMp Ig0KKyAgICBlbHNlDQorCVNFTkRNQUlMPQ0KKyAgICBmaQ0KK2ZpDQorQUNf TVNHX1JFU1VMVCgkU0VORE1BSUwpDQorcm0gLWYgY29uZnRlc3Qub3V0IGNv bmZ0ZXN0LnB5DQogDQogIyBDaGVjayBmb3IgQ0dJIGV4dGVuc2lvbnMsIHJl cXVpcmVkIGJ5IHNvbWUgV2ViIHNlcnZlcnMNCiBBQ19TVUJTVChDR0lFWFQp DQo= ---456965764-1315701514-937399399=:19137-- From gorgo@caesar.elte.hu Wed Sep 15 14:00:58 1999 From: gorgo@caesar.elte.hu (Gergely Madarasz) Date: Wed, 15 Sep 1999 15:00:58 +0200 (METDST) Subject: [Mailman-Developers] lock timeout ? Message-ID: Hello, This is running on a stock 2.2.12 kernel... what could be the problem ? -- Madarasz Gergely gorgo@caesar.elte.hu gorgo@linux.rulez.org It's practically impossible to look at a penguin and feel angry. Egy pingvinre gyakorlatilag lehetetlen haragosan nezni. HuLUG: http://mlf.linux.rulez.org/ ---------- Forwarded message ---------- Date: Wed, 15 Sep 1999 14:55:23 +0200 From: aikido-request@chardonnay.math.bme.hu To: root@chardonnay.math.bme.hu Subject: Mailman results for Aikido Resent-Date: Wed, 15 Sep 1999 14:53:51 +0200 Resent-From: korn@chardonnay.math.bme.hu Resent-To: gorgo@caesar.elte.hu This is an automated response. There were problems with the email commands you sent to Mailman via the administrative address . To obtain instructions on valid Mailman email commands, send email to with the word "help" in the subject line or in the body of the message. If you want to reach the human being that manages this mailing list, please send your message to . The following is a detailed description of the problems. ***** subscribe >>>>> An unexpected Mailman error has occurred. >>>>> >>>>> Please forward your request to the human list administrator in charge >>>>> of this list at . The traceback >>>>> is attached below and will be forwarded to the list administrator >>>>> automatically. Traceback (innermost last): File "/usr/lib/mailman/Mailman/MailCommandHandler.py", line 204, in ParseMailCommands self.__dispatch[cmd](args, line, msg) File "/usr/lib/mailman/Mailman/MailCommandHandler.py", line 542, in ProcessSubscribeCmd self.AddMember(subscribe_address, password, digest, remote) File "/usr/lib/mailman/Mailman/MailList.py", line 885, in AddMember cookie = Pending().new(name, password, digest) File "/usr/lib/mailman/Mailman/Pending.py", line 67, in new db = self.__load() File "/usr/lib/mailman/Mailman/Pending.py", line 94, in __load self.__assert_lock(self.db_lock_timeout) File "/usr/lib/mailman/Mailman/Pending.py", line 120, in __assert_lock self.__lock.lock(timeout) File "/usr/lib/mailman/Mailman/flock.py", line 127, in lock raise TimeOutError TimeOutError From Nigel.Metheringham@vdata.co.uk Wed Sep 15 14:05:42 1999 From: Nigel.Metheringham@vdata.co.uk (Nigel Metheringham) Date: Wed, 15 Sep 1999 14:05:42 +0100 Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail In-Reply-To: Message from Balazs Nagy of "Wed, 15 Sep 1999 14:43:19 +0200." Message-ID: julian7@kva.hu said: > This patch's goal is to use the sendmail-interface rather than use the > SMTP port managing to send letters. This method is much more > effective when the SMTP server itself is in the local machine. (due of > the latency of establishing a socket) I find this *very* strange - I would expect the process startup hit to be a real performance limiter in this situation. However some of the differences in the way that qmail runs as opposed to a sendmail or similar MTA daemon may well mean that this method works for qmail. Certainly the latency to connect to a loopback network socket should be minimal (as long as no one starts trying to do strange things like remote DNS reverse lookups of 127.0.0.1). Other downsides are the inability to deal with errors relating to a single recipient other than by a bounce message (ie no per recipient turnround message). Actually maybe thats the latency you are referring to - in an SMTP transaction you *should* wait after each RCPT TO for a return code, so each recipient would have a turnround time and a couple of process context switches. If the MTA supports streaming (ESMTP required) then you could blat the recipients across without waiting for turnround - you can't just fire them in a pile because its possible you could get a double blocking leading to deadly embrace - and then check the return codes separately. [I haven't checked through the python code to see exactly whats happening here] Nigel. -- [ Nigel Metheringham Nigel.Metheringham@VData.co.uk ] [ Phone: +44 1423 850000 Fax +44 1423 858866 ] From julian7@kva.hu Wed Sep 15 14:23:53 1999 From: julian7@kva.hu (Balazs Nagy) Date: Wed, 15 Sep 1999 15:23:53 +0200 (CEST) Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail In-Reply-To: Message-ID: On Wed, 15 Sep 1999, Nigel Metheringham wrote: > I find this *very* strange - I would expect the process startup hit to > be a real performance limiter in this situation. However some of the > differences in the way that qmail runs as opposed to a sendmail or > similar MTA daemon may well mean that this method works for qmail. Well, qmail just put the mail to the queue. If you use SMTP directly, you have to deal with connection failures, error codes etc (== you have to use an own queue other than the MTA). *This* is the deal. > Certainly the latency to connect to a loopback network socket should be > minimal (as long as no one starts trying to do strange things like > remote DNS reverse lookups of 127.0.0.1). Sure - this can be true for sendmail giant, but the slimmer commands doesn't allocate loads of memory, doesn't parse big files. If you use SMTP port, firstly you open that connection, an inetd/tcpserver calls a qmail-smtpd, which calls a qmail-inject, besides of the local delivery, which only calls qmail-inject. > Other downsides are the inability to deal with errors relating to a > single recipient other than by a bounce message (ie no per recipient > turnround message). Yeah. But your method doesn't work for a lot of addresses too. IMHO that solution doesn't work effectively. -- Regards: Kevin (Balazs) From DAFcnc@iwr.ru.ac.za Thu Sep 16 08:54:26 1999 From: DAFcnc@iwr.ru.ac.za (DAFcnc) Date: Thu, 16 Sep 1999 09:54:26 +0200 Subject: [Mailman-Developers] something to add to v2,please Message-ID: <37E0A232.FE5D0112@iwr.ru.ac.za> Hiya I'm not a list member so reply direct please I've been using mailman to run my list for about 2 months now and it is just great However, there is one thing I'd like to see added to future versions. As the list adminstrator I'd like to be able to extract a full list of members with settings as a 'text file'. The membership management screen only lists 30 at a time in a table. I'd like an option to dump all members, plus the settings, as a lump of text in a

box.
I can then copy and paste it to a file for backup purposes, and for
mass admin purposes.
The settings can simply by a bunch of 1 or 0 in the order of the table
headings to indicate the status of those options.

I'm use to having such a text listing after using Mercury MTS on a
Novell server for 3 years for this list of mine.

thanks

steam and wind

--
       David Forsyth                 DaForce A-T Iwr.Ru.Ac.Za
Keeper of the listserver for South African Railways fans       _|_ His
Part time gricer, kiter, photographer, father etc etc           |  Way
http://www.ru.ac.za/departments/iwr/staff/daf/welcome.html      |  Up


From ricardo@miss-janet.com  Thu Sep 16 09:22:08 1999
From: ricardo@miss-janet.com (Ricardo Kustner)
Date: Thu, 16 Sep 1999 10:22:08 +0200
Subject: [Mailman-Developers] something to add to v2,please
In-Reply-To: <37E0A232.FE5D0112@iwr.ru.ac.za>; from DAFcnc on Thu, Sep 16, 1999 at 09:54:26AM +0200
References: <37E0A232.FE5D0112@iwr.ru.ac.za>
Message-ID: <19990916102208.A15627@miss-janet.com>

On Thu, Sep 16, 1999 at 09:54:26AM +0200, DAFcnc wrote:
> I've been using mailman to run my list for about 2 months now and it
> is just great
> However, there is one thing I'd like to see added to future versions. 
> As the list adminstrator I'd like to be able to extract a full list of
> members with settings as a 'text file'.   The membership management
> screen only lists 30 at a time in a table.  I'd like an option to dump
> all members, plus the settings, as a lump of text in a 

> box.
> I can then copy and paste it to a file for backup purposes, and for
> mass admin purposes.
> The settings can simply by a bunch of 1 or 0 in the order of the table
> headings to indicate the status of those options.

~mailman/bin/list_members listname > members.list

type list_members w/o parameters to see what options you have (for example,
you can make a seperate list of the digeset members)
it's easy to make a cronjob to backup this list.

Ricardo.
--



From guido@CNRI.Reston.VA.US  Thu Sep 16 19:53:52 1999
From: guido@CNRI.Reston.VA.US (Guido van Rossum)
Date: Thu, 16 Sep 1999 14:53:52 -0400
Subject: [Mailman-Developers] Reminder: Python Conference papers due soon!
Message-ID: <199909161853.OAA01738@eric.cnri.reston.va.us>

The deadline for paper submissions for the next Python conference is
nearing!  Make sure that if you are considering submitting a paper,
the program chair sees your paper by SEPTEMBER 30.  Papers can be on
any Python, JPython or Zope related subject.  Papers will be reviewed
and the best papers will be selected for presentation.  You will hear
about selection by October 22.

For more information, see the official call for papers:
http://www.python.org/workshops/2000-01/cfp.html

** We are planning a significant Zope presence at this conference! **

The conference will be held from January 24-27 in Alexandria, VA (just
across the Potomac from DC).  Make Python the first conference in the
new millennium you visit!  For more info, see the conference home
page: http://www.python.org/workshops/2000-01/

Send all email questions about papers to: ipc8papers@cs.uchicago.edu

--Guido van Rossum (home page: http://www.python.org/~guido/)

(And sorry for the broad spamming.)



From gonter@maestria.wu-wien.ac.at  Sat Sep 18 09:27:40 1999
From: gonter@maestria.wu-wien.ac.at (Gerhard Gonter)
Date: Sat, 18 Sep 1999 10:27:40 +0200 (MES)
Subject: [Mailman-Developers] multilingual mailman
Message-ID: <199909180827.KAA29138@maestria.wu-wien.ac.at>

Are there any plans to for non-english user interfaces which can be
selected individually by the user or at least for a whole list?

I would like to help start this effort or help otherwise.

+gg
 
--
Gerhard.Gonter@wu-wien.ac.at  Fax: +43/1/31336/702  g.gonter@ieee.org
Zentrum fuer Informatikdienste, Wirtschaftsuniversitaet Wien, Austria


From jafo@tummy.com  Sun Sep 19 07:54:51 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 19 Sep 1999 00:54:51 -0600
Subject: [Mailman-Developers] multilingual mailman
In-Reply-To: <199909180827.KAA29138@maestria.wu-wien.ac.at>; from Gerhard Gonter on Sat, Sep 18, 1999 at 10:27:40AM +0200
References: <199909180827.KAA29138@maestria.wu-wien.ac.at>
Message-ID: <19990919005451.B2887@tummy.com>

On Sat, Sep 18, 1999 at 10:27:40AM +0200, Gerhard Gonter wrote:
>Are there any plans to for non-english user interfaces which can be
>selected individually by the user or at least for a whole list?

I thought I heard there was somone working on adding support for
internationalization, but I haven't heard anything about what approach
is being used or it's status.

What about an approach that would use an interface like this:

	setlang('German')
	print translang['ERROR: You have selected an invalid option ("%s")']
	print translang['       Please try again...']

I imagine a shelve called "German" which has as the key the hash of the
string, and as the value the translated string.  I seem to recall that
some dbm implementations are fixed in size of the values they can
represent, but I don't know what that limit may be.

Any comments?

Sean
-- 
 There are things that are so serious that you can only joke about them.
                 -- Heisenberg
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From dan@feld.cvut.cz  Sun Sep 19 18:34:06 1999
From: dan@feld.cvut.cz (Dan Ohnesorg)
Date: Sun, 19 Sep 1999 19:34:06 +0200 (CEST)
Subject: [Mailman-Developers] multilingual mailman
In-Reply-To: <19990919005451.B2887@tummy.com>
Message-ID: 

On Sun, 19 Sep 1999, Sean Reifschneider wrote:

> On Sat, Sep 18, 1999 at 10:27:40AM +0200, Gerhard Gonter wrote:
> >Are there any plans to for non-english user interfaces which can be
> >selected individually by the user or at least for a whole list?
> 
> I thought I heard there was somone working on adding support for
> internationalization, but I haven't heard anything about what approach
> is being used or it's status.
We are working on it, curently we are waiting on Barrys opinion to our
patches.



> 
> What about an approach that would use an interface like this:
> 
> 	setlang('German')
> 	print translang['ERROR: You have selected an invalid option ("%s")']
> 	print translang['       Please try again...']
> 
We are using GETTEXT package, so the translation is done like this:

import intl
setlocale()
_=intl.gettext

bindtexttodomain('mailman')

print _("Hello world")

It is a litle bit diferent in praxis, but not too.

cheers
dan



-- 
                    ________________________________________
DDDDDD             
DD   DD                Dan Ohnesorg, supervisor on POWER     
DD  OOOO               Dan@feld.cvut.cz
DD OODDOO              Dep. of Power Engineering
DDDDDD OO              CTU FEL Prague, Bohemia
   OO  OO              work: +420 2 24352785;+420 2 24972109
    OOOO               home: +420 311 679679;+420 311 679311
                    ________________________________________

Nejztracenejsi den naseho zivota
je ten, kdy jsme se nezasmali.



From listwrangler@iximd.com  Sun Sep 19 18:30:05 1999
From: listwrangler@iximd.com (Listwrangler)
Date: Sun, 19 Sep 1999 12:30:05 -0500
Subject: [Mailman-Developers] something to add to v2,please -- BACKUPS!
In-Reply-To: <37E0A232.FE5D0112@iwr.ru.ac.za>
Message-ID: 

>However, there is one thing I'd like to see added to future versions.
>As the list adminstrator I'd like to be able to extract a full list of
>members with settings as a 'text file'.   The membership management
>screen only lists 30 at a time in a table.  I'd like an option to dump
>all members, plus the settings, as a lump of text in a 

>box.
>I can then copy and paste it to a file for backup purposes, and for
>mass admin purposes.
>The settings can simply by a bunch of 1 or 0 in the order of the table
>headings to indicate the status of those options.


Good idea! I've sometimes wanted a text file I could print off, but the
point about being able to make backups is essential.

BACKUPS!

I hate being dependent upon our ISP for backups; with my organization's
regular web pages when our ISP experienced a quadruple failure and
installed new hardware I just uploaded my pages and was back in business in
15 mins while their other users had to wait days for them to complete
recovery efforts.

I realize that Mailman is a different case, but it sure would be nice to be
able to recover a list without having to manually set all the password,
configuration options, list specific text, etc, by hand. Just ftp the pages
up, test and go. (It's not probably not that simple, is it?)

Case in point for disaster recovery: our ISP was wiped out by Hurricane
Floyd (flood and fire) and is rebuilding. The list admin pages are there,
but they don't recognize my password. (I have my passwords documented in a
secure place, so I know my password is right.) God only knows what they set
the password or other configuration info to. If I could just ftp the pages
up myself and have them restore the password, configuration, text, etc, I'd
be back in business ASAP. Needlesstosay, the ISP is slightly busy with more
important problems like replacings servers and bailing out the basement.
God knows when our lists will be functional again.

Doing some experimenting, I tried downloading my admin web pages from the
one list I can access right now. If I download as source, I get everything,
html tags, windows contents, etc. It's hard to read, but I have it. Now
when I need to restore a list I can refer to my source file and make sure I
set everything the way it used to be. Once I get access to my other lists I
will backup them all to this degree at least.

It seems like it ought to be possible (but I'm not a programmer) to simply
ftp this file up to the Mailmain admin site and have it set everything. It
also seems like it would be possible to use this file as a template so that
when I am creating new lists with the same configuration I can copy it,
edit it as needed, then upload it. It would be nice to be able to edit a
configuration file offline. Of course, this would require the list
administrator to know enough html to not mess it up.

Right now Mailman lives in a different folder than our organization's
accounts, so we can't access it. But is there some reason why a Mailman
list has to live in a folder by itself? Couldn't we just plop the admin
pages onto our ftp site at least? The pages would then have to communicate
with the actual program, but that's just a matter of setting the pointers
properly, enit? For that matter, is there some reason why the whole program
couldn't be plopped into the user's ftp site to fiddle with as they please?
Assuming their ftp/web server is a Unix machine.

I guess this relates to the fact that Mailman appears to have been built on
the premise that list administrators would always have access to the
machine running the list. Which a lot of us don't. I asked for a shell
account from my ISP, but they refused. (grumble)

It also relates to the fact that ISPs are used to charging money for
listservices, and if they let users upload copies of free software like
Mailman onto the user's own web site they couldn't charge them money for
hosting the listserv. (grumble) In this scenario the user better know what
he was doing as he'd be solely responsible for maintaining the software,
but okay. I'd be game to learn.

Listwrangler



Listwrangler
listwrangler@iximd.com

********************
For help with subscribe/unsubscribe, troubleshooting, or more info about
The American Boyz email lists, please visit:
home.iximd.com/~amboyz/online.html, or request a copy of the Amboyz Elist
Help File to be emailed to you.

If you are familiar with Mailman, the following lists are implemented with
Mailman and use standard Mailman features: Amboyz-Main, Amboyz-Announce,
TrueSpirit, and ElderTG




From sendy@dds.nl  Mon Sep 20 01:45:10 1999
From: sendy@dds.nl (Sendy)
Date: Mon, 20 Sep 1999 02:45:10 +0200
Subject: [Mailman-Developers] bounce_detection failure
Message-ID: <19990920024510.B19826@stereo.rotzorg.org>

Hi

i've setup mailman op a Debian linux box, but somehow bouncedetection fails, and I cannot find how/what and where... (I'm no python hacker)

I have included the message here, taken from my /var/spool/mail/sgr

--
From Mailer-Daemon@rotzorg.org  Mon Sep 20 01:23:56 1999
From: Mailer-Daemon@rotzorg.org (Mail Delivery System)
Date: Mon, 20 Sep 1999 02:23:56 +0200
Subject: Mail delivery failed: returning message to sender
Message-ID: 

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to all of its recipients. The
following address(es) failed:

  delangen@its.tudelft.nl:
    SMTP error from remote mailer after RCPT TO:
    :
    host mailhost1.et.tudelft.nl [130.161.33.163]:
    553 5.1.1 unknown or illegal user:
    delangen@its.tudelft.nl

----- This is a copy of the message, including all the headers. ------

Return-path: 
Received: from localhost (k298r.balpol.tudelft.nl) [127.0.0.1] 
        by stereo.rotzorg.org with esmtp (Exim 2.05 #1 (Debian))
        id 11SrFJ-00058j-00; Mon, 20 Sep 1999 02:23:53 +0200
Received: from sgr by stereo.rotzorg.org with local (Exim 2.05 #1 (Debian))
        id 11SrEp-00058U-00; Mon, 20 Sep 1999 02:23:23 +0200
Date: Mon, 20 Sep 1999 02:23:22 +0200
From: Sendy 
To: lanparty-helden@rotzorg.org
Message-ID: <19990920022322.A19735@stereo.rotzorg.org>
Reply-To: sendy@dds.nl
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Mailer: Mutt 0.95.3i
Subject: [Lanparty-helden] test
Sender: lanparty-helden-admin@rotzorg.org
Errors-To: lanparty-helden-admin@rotzorg.org
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id: Mailinglist voor de KB Lanparty organisatoren 
X-BeenThere: lanparty-helden@rotzorg.org



_______________________________________________
Lanparty-helden mailing list  -  Lanparty-helden@rotzorg.org
http://rotzorg.org/mailman/listinfo/lanparty-helden

Can somebody help me?
TIA
Sendy


From sendy@dds.nl  Mon Sep 20 08:57:16 1999
From: sendy@dds.nl (Sendy)
Date: Mon, 20 Sep 1999 09:57:16 +0200
Subject: [Mailman-Developers] bounce_detection failure
In-Reply-To: <19990920024510.B19826@stereo.rotzorg.org>; from Sendy on Mon, Sep 20, 1999 at 02:45:10AM +0200
References: <19990920024510.B19826@stereo.rotzorg.org>
Message-ID: <19990920095716.A21135@stereo.rotzorg.org>

Hi y'all

BTW I am using mailman v1.0rc2 en exim 2.1 as MTA.

Hope this helps,
Sendy


From gorgo@caesar.elte.hu  Mon Sep 20 11:48:14 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Mon, 20 Sep 1999 12:48:14 +0200 (METDST)
Subject: [Mailman-Developers] bounce_detection failure
In-Reply-To: <19990920095716.A21135@stereo.rotzorg.org>
Message-ID: 

On Mon, 20 Sep 1999, Sendy wrote:

> Hi y'all
> 
> BTW I am using mailman v1.0rc2 en exim 2.1 as MTA.

mailmans bounce detector does not work with exims error messages :(

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/



From webmaster@python.org  Tue Sep 21 01:41:36 1999
From: webmaster@python.org (Barry A. Warsaw)
Date: Mon, 20 Sep 1999 20:41:36 -0400 (EDT)
Subject: [Mailman-Developers] multilingual mailman
References: <19990919005451.B2887@tummy.com>
 
Message-ID: <14310.54336.525239.293671@anthem.cnri.reston.va.us>

>>>>> "DO" == Dan Ohnesorg  writes:

    DO> We are working on it, curently we are waiting on Barrys
    DO> opinion to our patches.

I am, unfortunately, not going to have any time to get to it before I
go on vacation.  Please accept my apologies (I need to get a JPython
release out).  Hopefully Harald or one of the other cabalistas will be 
able to help out before I get back and caught up.

-Barry


From stumpf@rancon.de  Thu Sep 23 09:37:10 1999
From: stumpf@rancon.de (Wolfram Stumpf)
Date: Thu, 23 Sep 1999 10:37:10 +0200
Subject: [Mailman-Developers] Error while executing newlist (new one!)
Message-ID: <37E9E6B6.D734DB2B@rancon.de>

Hi everybody!

After succesfully installing mailman 1.0, I tried to create a test-list
with newlist. But instead of creating the list, newlist exits with the
following error message:

 Traceback (innermost last):
  File "./newlist", line 146, in ?
    raise SystemExit(main(sys.argv))
  File "./newlist", line 93, in main
    newlist.Create(list_name, owner_mail, pw)
  File "/home/mailman/Mailman/MailList.py", line 724, in Create
    self.Lock()
  File "/home/mailman/Mailman/MailList.py", line 1379, in Lock
    self._lock_file.lock('w|', 1)
  File "/usr/lib/python1.5/posixfile.py", line 190, in lock
    flock = fcntl.fcntl(self._file_.fileno(), cmd, flock)
IOError: (37, 'No locks available')
               ^^^^^^^^^^^^^^^^^^
After browsing through the mailing-list archive, I thought the existing
patch would work, but it doesn´t. I even tried inserting 'linux2' into
posixfile.py, but with no result. I´m working with SuSE 6.1 with Python
1.5.1 and mailman 1.0. 

Thanks for help!

        Wolfram Stumpf
        stumpf@rancon.de


From ddickey@wamnet.com  Thu Sep 23 14:51:17 1999
From: ddickey@wamnet.com (Dan A. Dickey)
Date: Thu, 23 Sep 1999 08:51:17 -0500
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
Message-ID: <37EA3055.99906537@wamnet.com>

This is a multi-part message in MIME format.
--------------BB98EC4C8AD39553420E1E66
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

We are beginning to make use of Mailman here (good work!),
and we are using it to provide company wide mailing lists.
So, we have umbrella lists that distribute to other areas
of the company in other parts of the world.  So, a list like
	"listname@ourdomain.com" would be an umbrella for:
"listname-us@ourdomain.com", "listname-uk@ourdomain.com", and
so on.  We've just started doing this, and myself and the
administrator working on this quickly became annoyed that
the subject lines ended up looking like:
	Subject: [listname-us] [listname] Test message

So, I modified MailList.py a bit so that it not only
checks for subject_prefix in the subject, but also all of
the acceptable_aliases for the list.  So, now when a message
is posted to listname, it gets resent to listname-*; while the
subject remains as "Subject: [listname] Test message".
The patch for this follows.

If anyone cares to now fix the little problem of the
footer being added by both lists, I'd like to see the
patch for that.  Its a minor annoyance, but one I can
live with for the time being.
	-Dan

-- 
Dan A. Dickey
ddickey@wamnet.com
--------------BB98EC4C8AD39553420E1E66
Content-Type: text/plain; charset=us-ascii;
 name="patch.MailList"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="patch.MailList"

*** MailList.py.orig	Tue Jul 20 21:19:21 1999
--- MailList.py	Thu Sep 23 08:28:48 1999
***************
*** 1130,1135 ****
--- 1130,1157 ----
                          return 1
  	return 0
  
+     def HasPrefix(self, msg):
+ 	"""True if subject_prefix or any acceptable_alias is included in
+         the Subject: ."""
+ 	subj = msg.getheader('subject')
+         # First check for our own subject_prefix:
+ 	if re.search(re.escape(self.subject_prefix), subj, re.I):
+ 		return 1
+         # ... and only then try the regexp acceptable aliases.
+         for alias in string.split(self.acceptable_aliases, '\n'):
+             stripped = string.strip(alias)
+             try:
+                 # The list alias in `stripped` is a user supplied regexp,
+                 # which could be malformed.
+                 if stripped and re.search(stripped, subj, re.I):
+                     return 1
+             except re.error:
+                 # `stripped' is a malformed regexp -- try matching
+                 # safely, with all non-alphanumerics backslashed:
+                 if stripped and re.search(re.escape(stripped), subj, re.I):
+                     return 1
+ 	return 0
+ 
      def parse_matching_header_opt(self):
  	"""Return a list of triples [(field name, regex, line), ...]."""
  	# - Blank lines and lines with '#' as first char are skipped.
***************
*** 1306,1313 ****
  	prefix = self.subject_prefix
  	if not subj:
  	    msg.SetHeader('Subject', '%s(no subject)' % prefix)
! 	elif prefix and not re.search(re.escape(self.subject_prefix),
!                                       subj, re.I):
  	    msg.SetHeader('Subject', '%s%s' % (prefix, subj))
          if self.anonymous_list:
              del msg['reply-to']
--- 1328,1334 ----
  	prefix = self.subject_prefix
  	if not subj:
  	    msg.SetHeader('Subject', '%s(no subject)' % prefix)
! 	elif prefix and not self.HasPrefix(msg):
  	    msg.SetHeader('Subject', '%s%s' % (prefix, subj))
          if self.anonymous_list:
              del msg['reply-to']

--------------BB98EC4C8AD39553420E1E66--



From jafo@tummy.com  Thu Sep 23 20:21:22 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 23 Sep 1999 13:21:22 -0600
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
In-Reply-To: <37EA3055.99906537@wamnet.com>; from Dan A. Dickey on Thu, Sep 23, 1999 at 08:51:17AM -0500
References: <37EA3055.99906537@wamnet.com>
Message-ID: <19990923132122.E1119@tummy.com>

On Thu, Sep 23, 1999 at 08:51:17AM -0500, Dan A. Dickey wrote:
>If anyone cares to now fix the little problem of the
>footer being added by both lists, I'd like to see the
>patch for that.  Its a minor annoyance, but one I can
>live with for the time being.

I haven't worked with umbrella lists, but it would seem that the obvious
solution would be to remove the footer and the subject tag from either
the listname server or the listname-(us|uk|whatever) lists.  Is there
something wrong with this?

Sean
-- 
 The structure of a system reflects the structure of the organization that
 built it.  -- Richard E. Fairley
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From ddickey@wamnet.com  Thu Sep 23 20:51:06 1999
From: ddickey@wamnet.com (Dan A. Dickey)
Date: Thu, 23 Sep 1999 14:51:06 -0500
Subject: [Mailman-Developers] umbrella lists and subject prefix
 (subject_prefix)
References: <37EA3055.99906537@wamnet.com> <19990923132122.E1119@tummy.com>
Message-ID: <37EA84AA.9211BAF7@wamnet.com>

Sean Reifschneider wrote:
> 
> On Thu, Sep 23, 1999 at 08:51:17AM -0500, Dan A. Dickey wrote:
> >If anyone cares to now fix the little problem of the
> >footer being added by both lists, I'd like to see the
> >patch for that.  Its a minor annoyance, but one I can
> >live with for the time being.
> 
> I haven't worked with umbrella lists, but it would seem that the obvious
> solution would be to remove the footer and the subject tag from either
> the listname server or the listname-(us|uk|whatever) lists.  Is there
> something wrong with this?

The problem then is that mail sent to one or the other
of the lists does NOT get the footer added.
I.E., when a message gets sent to "listname", I want the
prefix [listname] added, and the footer for listname.
This message would be directed to listname-* at that point,
and I don't want listname-us adding a prefix or a footer.
Also, I want a message directed at "listname-us" to get
the [listname-us] prefix added, and listname-us's footer.
I'm not sure where the term "umbrella" list came from,
but it seems to me I'm looking more for a "waterfall"
effect here - the first list the message is directed at
gets to do its thing and others just pass it on to the
list members with no modification.

	-Dan

-- 
Dan A. Dickey
ddickey@wamnet.com


From jafo@tummy.com  Thu Sep 23 21:20:37 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 23 Sep 1999 14:20:37 -0600
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
In-Reply-To: <37EA84AA.9211BAF7@wamnet.com>; from Dan A. Dickey on Thu, Sep 23, 1999 at 02:51:06PM -0500
References: <37EA3055.99906537@wamnet.com> <19990923132122.E1119@tummy.com> <37EA84AA.9211BAF7@wamnet.com>
Message-ID: <19990923142037.H1119@tummy.com>

On Thu, Sep 23, 1999 at 02:51:06PM -0500, Dan A. Dickey wrote:
>effect here - the first list the message is directed at
>gets to do its thing and others just pass it on to the
>list members with no modification.

Hmmm.  One could set a flag to disable adding the footer if it doesn't
add the subject tag, but then you wouldn't get it on replies either.
What about having another option in the list which you could specify
if we receive a message from would then bypass the message re-writing?

Sean
-- 
 A ship in port is safe, but that is not what ships are for.
                 -- Rear Admiral Grace Murray Hopper
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From eparker@mindsec.com  Thu Sep 23 22:50:19 1999
From: eparker@mindsec.com (Erik Parker)
Date: Thu, 23 Sep 1999 15:50:19 -0600 (MDT)
Subject: [Mailman-Developers] Reply-to feature
Message-ID: 

Hi,

This is semi-urgent, as we move from Majordom to Mailman tommorow
for a major corporations mailing list (Pentax Cameras)...

We have a host setup to CNAME to our listserv machine:

discuss.pentax.com points to portal.navidec.com

I have discuss.pentax.com :

Host name this list prefers. discuss.pentax.com
Base URL for Mailman web interface  http://discuss.pentax.com/mailman/



However, ALL mail coming from the list, has a return address of:
pentax-discuss@portal.navidec.com,
instead of pentax-discuss@discuss.pentax.com



I have:

Are replies to a post directed to the original poster or to the list?
set to -LIST-.

They don't want to default to reply to just that person, it has
to stay the same as it used to be, and thats replying to the list.
THey do about 2000 posts a day, and this goes live in 15 hours...

ANY help is appreciated. There must be an option for this.


Erik Parker
eparker@mindsec.com




From gorgo@caesar.elte.hu  Thu Sep 23 23:05:51 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Fri, 24 Sep 1999 00:05:51 +0200 (METDST)
Subject: [Mailman-Developers] Reply-to feature
In-Reply-To: 
Message-ID: 

On Thu, 23 Sep 1999, Erik Parker wrote:

> Hi,
> 
> This is semi-urgent, as we move from Majordom to Mailman tommorow
> for a major corporations mailing list (Pentax Cameras)...
> 
> We have a host setup to CNAME to our listserv machine:
> 
> discuss.pentax.com points to portal.navidec.com

Here is the root of the problems. CNAME and smtp doesn't mix well. Use A
records instead of CNAME-s.

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/



From claw@varesearch.com  Fri Sep 24 01:40:36 1999
From: claw@varesearch.com (J C Lawrence)
Date: Thu, 23 Sep 1999 17:40:36 -0700
Subject: [Mailman-Developers] Reply-to feature
In-Reply-To: Message from Erik Parker 
 of "Thu, 23 Sep 1999 15:50:19 MDT." 
Message-ID: 

On Thu, 23 Sep 1999 15:50:19 -0600 (MDT) 
Erik Parker  wrote:

> However, ALL mail coming from the list, has a return address of:
> pentax-discuss@portal.navidec.com, instead of
> pentax-discuss@discuss.pentax.com

At the bottom of the general optios page set the "Host name this
list prefers" to "discuss.pentax.com".

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From sendy@dds.nl  Fri Sep 24 01:49:29 1999
From: sendy@dds.nl (Sendy)
Date: Fri, 24 Sep 1999 02:49:29 +0200
Subject: [Mailman-Developers] Exim bouncedetection hack
Message-ID: <19990924024929.A4284@stereo.rotzorg.org>

--ibTvN161/egqYuK8
Content-Type: text/plain; charset=us-ascii

Hi,

i've fiddeled around in Bouncer.py and added code to detect bounces created by exim.

It's a bit of a dirty hack, as it is my first attempt at python ;-)

I don't know how to make diffs, so I'll attach the whole Bouncer.py file. My additions are surrounded by # en my name 'Sander'. So search for 'Sander' and you will find the changes (3 blobs, 2 in ScanMessage and 1 in ExtractBouncingAddr)

Greetings
Sander

--ibTvN161/egqYuK8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="Bouncer.py"

# Copyright (C) 1998 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software 
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


"Handle delivery bounce messages, doing filtering when list is set for it."


# It's possible to get the mail-list senders address (list-admin) in the
# bounce list.   You probably don't want to have list mail sent to that
# address anyway.

import sys
import time
import regsub, string, regex, re
import Utils
import mm_cfg
import Errors

class Bouncer:
    def InitVars(self):
	# Not configurable...

        # self.bounce_info registers observed bounce incidents.  It's a
        # dict mapping members addrs to a list:
        #  [
        #    time.time() of last bounce,
        #    post_id of first offending bounce in current sequence,
        #    post_id of last offending bounce in current sequence
        #  ]
	self.bounce_info = {}

	# Configurable...
	self.bounce_processing = mm_cfg.DEFAULT_BOUNCE_PROCESSING
	self.minimum_removal_date = mm_cfg.DEFAULT_MINIMUM_REMOVAL_DATE
	self.minimum_post_count_before_bounce_action = \
		mm_cfg.DEFAULT_MINIMUM_POST_COUNT_BEFORE_BOUNCE_ACTION
	self.automatic_bounce_action = mm_cfg.DEFAULT_AUTOMATIC_BOUNCE_ACTION
	self.max_posts_between_bounces = \
		mm_cfg.DEFAULT_MAX_POSTS_BETWEEN_BOUNCES

    def GetConfigInfo(self):
	return [
            "Policies regarding systematic processing of bounce messages,"
            " to help automate recognition and handling of defunct"
            " addresses.",
	    ('bounce_processing', mm_cfg.Toggle, ('No', 'Yes'), 0,
	     'Try to figure out error messages automatically? '),
	    ('minimum_removal_date', mm_cfg.Number, 3, 0,
	     'Minimum number of days an address has been non-fatally '
             'bad before we take action'),
	    ('minimum_post_count_before_bounce_action', mm_cfg.Number, 3, 0,
	     'Minimum number of posts to the list since members first '
             'bounce before we consider removing them from the list'),
	    ('max_posts_between_bounces', mm_cfg.Number, 3, 0,
	     "Maximum number of messages your list gets in an hour.  "
             "(Yes, bounce detection finds this info useful)"),
	    ('automatic_bounce_action', mm_cfg.Radio,
	     ("Do nothing",
              "Disable and notify me",
              "Disable and DON'T notify me",
	      "Remove and notify me"),
	     0, "Action when critical or excessive bounces are detected.")
	    ]
    def ClearBounceInfo(self, email):
	email = string.lower(email)
	if self.bounce_info.has_key(email):
	    del self.bounce_info[email]

    def RegisterBounce(self, email, msg):
        """Detect and handle repeat-offender bounce addresses.
        
        We use very sketchy bounce history profiles in self.bounce_info
        (see comment above it's initialization), together with list-
        specific thresholds self.minimum_post_count_before_bounce_action
        and self.max_posts_between_bounces."""

        # Set 'dirty' if anything needs to be save in the finally clause.
        dirty = 0
        report = "%s: %s - " % (self.real_name, email)

        try:

            now = time.time()
            secs_per_day = 24 * 60 * 60

            # Take the opportunity to cull expired entries.
            pid = self.post_id
            maxposts = self.max_posts_between_bounces
            stalesecs = self.minimum_removal_date * secs_per_day * 5
            for k, v in self.bounce_info.items():
                if now - v[0] > stalesecs:
                    # It's been long enough to drop their bounce record:
                    del self.bounce_info[k]
                    dirty = 1

            this_dude = Utils.FindMatchingAddresses(email,
                                                    self.bounce_info)
            if not this_dude:
                # No (or expired) priors - new record.
                self.bounce_info[string.lower(email)] = [now, self.post_id,
                                                         self.post_id]
                self.LogMsg("bounce", report + "first")
                dirty = 1
                return

            # There are some priors.
            addr = string.lower(this_dude[0])
            hist = self.bounce_info[addr]
            difference = now - hist[0]
            if len(Utils.FindMatchingAddresses(addr, self.members)):
                if self.post_id - hist[2] > self.max_posts_between_bounces:
                    # There's been enough posts since last bounce that we're
                    # restarting.  (Might should keep track of who goes stale
                    # how often.)
                    self.LogMsg("bounce", report + "first fresh")
                    self.bounce_info[addr] = [now, self.post_id, self.post_id]
                    dirty = 1
                    return
                self.bounce_info[addr][2] = self.post_id
                dirty = 1
                if ((self.post_id - hist[1] >
                     self.minimum_post_count_before_bounce_action)
                    and
                    (difference > self.minimum_removal_date * secs_per_day)):
                    self.LogMsg("bounce", report + "exceeded limits")
                    self.HandleBouncingAddress(addr, msg)
                    return
                else:
                    post_count = (self.minimum_post_count_before_bounce_action
                                  - (self.post_id - hist[1]))
                    if post_count < 0:
                        post_count = 0
                    remain = (self.minimum_removal_date
                              * secs_per_day - difference)
                    self.LogMsg("bounce",
                                report + ("%d more allowed over %d secs"
                                          % (post_count, remain)))
                    return

            elif len(Utils.FindMatchingAddresses(addr, self.digest_members)):
                if self.volume > hist[1]:
                    self.LogMsg("bounce",
                                "%s: first fresh (D)", self._internal_name)
                    self.bounce_info[addr] = [now, self.volume, self.volume]
                    return
                if difference > self.minimum_removal_date * secs_per_day:
                    self.LogMsg("bounce", report + "exceeded limits (D)")
                    self.HandleBouncingAddress(addr, msg)
                    return 
                self.LogMsg("bounce", report + "digester lucked out")
            else:
                self.LogMsg("bounce",
                            "%s: address %s not a member.",
                            self._internal_name,
                            addr)
        finally:
            if dirty:
                self.Save()

    def HandleBouncingAddress(self, addr, msg):
        """Disable or remove addr according to bounce_action setting."""
        if self.automatic_bounce_action == 0:
            return
        elif self.automatic_bounce_action == 1:
	    # Only send if call works ok.
            (succeeded, send) = self.DisableBouncingAddress(addr)
            did = "disabled"
        elif self.automatic_bounce_action == 2:
            (succeeded, send) = self.DisableBouncingAddress(addr)
            did = "disabled"
	    # Never send.
            send = 0
        elif self.automatic_bounce_action == 3:
            (succeeded, send) = self.RemoveBouncingAddress(addr)
	    # Always send.
            send = 1
            did = "removed"
        if send:
            if succeeded != 1:
                negative="not "
            else:
                negative=""
            recipient = self.GetAdminEmail()
            if addr in self.owner + [recipient]:
                # Whoops!  This is a bounce of a bounce notice - do not
                # perpetuate the bounce loop!  Log it prominently and be
                # satisfied with that.
                self.LogMsg("error",
                            "%s: Bounce recipient loop"
                            " encountered!\n\t%s\n\tBad admin recipient: %s",
                            self._internal_name,
                            "(Ie, bounce notification addr, itself, bounces.)",
                            addr)
                return
            import mimetools
            boundary = mimetools.choose_boundary()
            # report about success
            but = ''
            if succeeded <> 1:
                but = 'BUT:        %s' % succeeded
            # disabled?
            if did == 'disabled' and succeeded == 1:
                reenable = Utils.maketext(
                    'reenable.txt',
                    {'admin_url': self.GetAbsoluteScriptURL('admin'),
                     })
            else:
                reenable = ''
            # the mail message text
            text = Utils.maketext(
                'bounce.txt',
                {'boundary' : boundary,
                 'listname' : self.real_name,
                 'addr'     : addr,
                 'negative' : negative,
                 'did'      : did,
                 'but'      : but,
                 'reenable' : reenable,
                 'owneraddr': mm_cfg.MAILMAN_OWNER,
                 })
            # add this here so it doesn't get wrapped/filled
            text = text + '\n\n--' + boundary + \
                   '\nContent-type: text/plain; charset=us-ascii\n'

            # we do this here so this text won't be wrapped.  note that
            # 'bounce.txt' has a trailing newline
            text = text + \
                   string.join(msg.headers, '') + '\n' + \
                   Utils.QuotePeriods(msg.body) + '\n' + \
                   '--' + boundary + '--'

            if negative:
                negative = string.upper(negative)

            self.SendTextToUser(
                subject = "%s member %s bouncing - %s%s"
                % (self.real_name, addr, negative, did),
                recipient = recipient,
                sender = mm_cfg.MAILMAN_OWNER,
                add_headers = [
                    "Errors-To: %s" % mm_cfg.MAILMAN_OWNER,
                    "MIME-version: 1.0",
                    "Content-type: multipart/mixed;"
                    ' boundary="%s"' % boundary],
                text = text)

    def DisableBouncingAddress(self, addr):
	"""Disable delivery for bouncing user address.

	Returning success and notification status."""
        if not self.IsMember(addr):
            reason = "User not found."
	    self.LogMsg("bounce", "%s: NOT disabled %s: %s",
                        self.real_name, addr, reason)
            return reason, 1
	try:
	    if self.GetUserOption(addr, mm_cfg.DisableDelivery):
		# No need to send out notification if they're already disabled.
		self.LogMsg("bounce",
			    "%s: already disabled %s", self.real_name, addr)
		return 1, 0
	    else:
		self.SetUserOption(addr, mm_cfg.DisableDelivery, 1)
		self.LogMsg("bounce",
			    "%s: disabled %s", self.real_name, addr)
		self.Save()
		return 1, 1
	except Errors.MMNoSuchUserError:
	    self.LogMsg("bounce", "%s: NOT disabled %s: %s",
                        self.real_name, addr, Errors.MMNoSuchUserError)
	    self.ClearBounceInfo(addr)
            self.Save()
            return Errors.MMNoSuchUserError, 1
	    
    def RemoveBouncingAddress(self, addr):
	"""Unsubscribe user with bouncing address.

	Returning success and notification status."""
        if not self.IsMember(addr):
            reason = "User not found."
	    self.LogMsg("bounce", "%s: NOT removed %s: %s",
                        self.real_name, addr, reason)
            return reason, 1
	try:
	    self.DeleteMember(addr, "bouncing addr")
	    self.LogMsg("bounce", "%s: removed %s", self.real_name, addr) 
            self.Save()
            return 1, 1
	except Errors.MMNoSuchUserError:
	    self.LogMsg("bounce", "%s: NOT removed %s: %s",
                        self.real_name, addr, Errors.MMNoSuchUserError)
	    self.ClearBounceInfo(addr)
            self.Save()
            return Errors.MMNoSuchUserError, 1

    # Return 0 if we couldn't make any sense of it, 1 if we handled it.
    def ScanMessage(self, msg):
##	realname, who_from = msg.getaddr('from')
##	who_info = string.lower(who_from)
        candidates = []
	who_info = string.lower(msg.GetSender())
        at_index = string.find(who_info, '@')
	if at_index != -1:
	    who_from = who_info[:at_index]
	    remote_host = who_info[at_index+1:]
	else:
	    who_from = who_info
	    remote_host = self.host_name

	if not who_from in ['mailer-daemon', 'postmaster', 'orphanage',
			    'postoffice', 'ucx_smtp', 'a2']:
	    return 0
	mime_info = msg.getheader('content-type')
	boundry = None
	if mime_info:
	    mime_info_parts = regsub.splitx(
                mime_info, '[Bb][Oo][Uu][Nn][Dd][Aa][Rr][Yy]="[^"]+"')
	    if len(mime_info_parts) > 1:
		boundry = regsub.splitx(mime_info_parts[1],
                                        '"[^"]+"')[1][1:-1]

        if boundry:
	    relevant_text = string.split(msg.body, '--%s' % boundry)[1]
	else:
	    # This looks strange, but at least 2 are going to be no-ops.
	    relevant_text = regsub.split(msg.body,
                                         '^.*Message header follows.*$')[0]
	    relevant_text = regsub.split(relevant_text,
                                         '^The text you sent follows:.*$')[0]
	    relevant_text = regsub.split(
                relevant_text, '^Additional Message Information:.*$')[0]
	    relevant_text = regsub.split(relevant_text,
                                         '^-+Your original message-+.*$')[0]
	
        BOUNCE = 1
	REMOVE = 2

	# Bounce patterns where it's simple to figure out the email addr.
	email_regexp = ']+@[^ \t@<>]+\.[^ \t<>.]+\)>?'
	simple_bounce_pats = (
	    (regex.compile('.*451 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*554 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*552 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*501 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*553 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*550 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('%s .bounced.*' % email_regexp), BOUNCE),
	    (regex.compile('.*%s\.\.\. Deferred.*' % email_regexp), BOUNCE),
	    (regex.compile('.*User %s not known.*' % email_regexp), REMOVE),
	    (regex.compile('.*%s: User unknown.*' % email_regexp), REMOVE),
            (regex.compile('.*%s\.\.\. User unknown' % email_regexp), REMOVE))
	# patterns we can't directly extract the email (special case these)
	messy_pattern_1 = regex.compile('^Recipient .*$')
	messy_pattern_2 = regex.compile('^Addressee: .*$')
	messy_pattern_3 = regex.compile('^User .* not listed.*$')
	messy_pattern_4 = regex.compile('^550 [^ ]+\.\.\. User unknown.*$')
	messy_pattern_5 = regex.compile('^User [^ ]+ is not defined.*$')
	messy_pattern_6 = regex.compile('^[ \t]*[^ ]+: User unknown.*$')
	messy_pattern_7 = regex.compile('^[^ ]+ - User currently disabled.*$')

        # Patterns for cases where email addr is separate from error cue.
	separate_cue_1 = re.compile(
            '^554 [^ ]+\.\.\. unknown mailer error.*$', re.I)
        separate_addr_1 = regex.compile('expanded from: %s' % email_regexp)
        
        ##################################################################
        # Patterns for matching exim bounces. Sander                     #
        # If a line maches exim_1 than it checks if the next             #
        # line matches exim_2. If so, it checks if the third line        #
        # matches exim_3                                                 #
        exim_1 = re.compile('^following address\(es\) failed:$')         #
        exim_2 = re.compile('^$')                                        #
        exim_3 = re.compile('^  [^ \t@|<>]+@[^ \t@<>]+\.[^ \t<>.]+.*:$') #
        exim_bounce = 0                                                  #

        message_grokked = 0
        use_prospects = 0
        prospects = []                  # If bad but no candidates found.

	for line in string.split(relevant_text, '\n'):
            for pattern, action in simple_bounce_pats:
		if pattern.match(line) <> -1:
		    email = self.ExtractBouncingAddr(line)
		    candidates.append((string.split(email,',')[0], action))
		    message_grokked = 1

	    # Now for the special case messages that are harder to parse...
	    if (messy_pattern_1.match(line) <> -1
                or messy_pattern_2.match(line) <> -1):
		username = string.split(line)[1]
		candidates.append(('%s@%s' % (username, remote_host),
				   BOUNCE))
		message_grokked = 1
		continue
	    if (messy_pattern_3.match(line) <> -1
                or messy_pattern_4.match(line) <> -1
                or messy_pattern_5.match(line) <> -1):
		username = string.split(line)[1]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue
	    if messy_pattern_6.match(line) <> -1:
		username = string.split(string.strip(line))[0][:-1]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue
	    if messy_pattern_7.match(line) <> -1:
		username = string.split(string.strip(line))[0]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue

            if separate_cue_1.match(line):
                # Here's an error message that doesn't contain the addr.
                # Set a flag to use prospects found on separate lines.
                use_prospects = 1
            if separate_addr_1.search(line) != -1:
                # Found an addr that *might* be part of an error message.
                # Register it on prospects, where it will only be used if a 
                # separate check identifies this message as an error message.
                prospects.append((separate_addr_1.group(1), BOUNCE))

            ############################################################
            # check fom exim Sander                                     #
            #print "line:", line, "--"                                  # 
            exim_match_1 = exim_1.match(line)                           #
            exim_match_2 = exim_2.match(line)                           #
            exim_match_3 = exim_3.match(line)                           #
            #print exim_match_1                                         #
            #print exim_match_2                                         #
            #print exim_match_3                                         #
            if exim_bounce == 0 and exim_match_1 != None:               #
	        exim_bounce = 1                                         #
                continue                                                #
            elif exim_bounce == 1 and exim_match_2 != None:             #
                exim_bounce = 2                                         #
                continue                                                #
            elif exim_bounce == 2 and exim_match_3 != None:             #
                #print "MATCH!"                                         #
                email = self.ExtractBouncingAddr(line)                  #
                # Remove the extra ':'                                  #
                # I want chop()                                         #
                # I did it in ExtractBouncingAddr                       #
                #print 'Bounced Email:', email                          #
                candidates.append((string.split(email,',')[0], BOUNCE)) #
                message_grokked = 1                                     #
                continue                                                #

        if use_prospects and prospects:
            candidates = candidates + prospects

        did = []
        for who, action in candidates:
	    # First clean up some cruft around the addrs.
	    el = string.find(who, "...")
	    if el != -1:
		who = who[:el]
	    if len(who) > 1 and who[0] == '<':
		# Use stuff after open angle and before (optional) close:
		who = regsub.splitx(who[1:], ">")[0]
            if who not in did:
		if action == REMOVE:
		    self.HandleBouncingAddress(who, msg)
		else:
		    self.RegisterBounce(who, msg)
                did.append(who)
	return message_grokked

    def ExtractBouncingAddr(self, line):
        email = regsub.splitx(line, '[^ \t@<>]+@[^ \t@<>]+\.[^ \t<>.:]+')[1] #Sander
	#email = regsub.splitx(line, '[^ \t@<>]+@[^ \t@<>]+\.[^ \t<>.:]+)[1]
	if email[0] == '<':
	    return regsub.splitx(email[1:], ">")[0]
	else:
	    return email

--ibTvN161/egqYuK8--


From Nigel.Metheringham@vdata.co.uk  Fri Sep 24 09:40:43 1999
From: Nigel.Metheringham@vdata.co.uk (Nigel Metheringham)
Date: Fri, 24 Sep 1999 09:40:43 +0100
Subject: [Mailman-Developers] Exim bouncedetection hack
In-Reply-To: Message from Sendy 
 of "Fri, 24 Sep 1999 02:49:29 +0200." <19990924024929.A4284@stereo.rotzorg.org>
Message-ID: 

sgr@rotzorg.org said:
> i've fiddeled around in Bouncer.py and added code to detect bounces
> created by exim.

> It's a bit of a dirty hack, as it is my first attempt at python ;-) 

I hate to criticise since I haven't got around to cutting code to do 
this and its great that you are working on this....

However I think that parsing the text of the exim bounces is the wrong 
way to go - exim provides a header on bounce messages to make this sort 
of function very easy.  You will find that all bounce messages from an 
exim system will have an additional header:-

  X-failed-recipients: fred@flintstone.com

Is there are multiple failed recipients, then they will look like this:-

  X-failed-recipients: fred@flintstone.com,
	barney@rubble.com

You need to be slightly careful here though since a few mailers that 
feel it is their duty to rewrite things will munge multiple addresses 
onto a single line, so a general header address reading function should 
be used.

I guess the other thing that should be done to finish up the job is to 
detect exim delayed message warnings and ignore them.  These have 
subjects such as:-

  Warning: message 11SzEO-0004wH-00 delayed 24 hours

The best way to detect these is by a regexp on the subject.

If you are getting a lot of these messages then it may be worth sending 
a polite note to the admin of the system generating them suggesting 
that they set the following config item:-

  delay_warning_condition = "\
    ${if match{$h_precedence:}{(?i)bulk|list|junk}{no}{yes}}"

This prevents exim sending out message delay warnings for messages with 
appropriate precedence header settings.  This change is going to be 
made the default for future versions of exim, but currently unless the 
admin really knows what they are doing, most exim installations have 
their configs for this non-optimal.  Documentation on this option can 
be found at

  http://www.exim.org/exim-html-3.00/doc/html/spec_11.html#SEC186

I'll try and code this stuff up using my appalling python skills soon.
I'll also attempt to add a mailman related section to the exim pages 
soon - if it doesn't appear, bug me!

	Nigel.
-- 
[ Nigel Metheringham                  Nigel.Metheringham@VData.co.uk ]
[ Phone: +44 1423 850000                         Fax +44 1423 858866 ]




From eparker@mindsec.com  Fri Sep 24 19:34:51 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 12:34:51 -0600 (MDT)
Subject: [Mailman-Developers] Hard code the reply-to?
Message-ID: 

Hi all, it appears there is no answer to why its doing this, and now I'm
running really low on time. It appears it must be mailman that is writing
the reply to as portal.navidec.com, which file can I edit to hard code
mailing to set the reply to as list@discuss.pentax.com ?


Erik Parker
eparker@mindsec.com




From eparker@mindsec.com  Fri Sep 24 20:11:34 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 13:11:34 -0600 (MDT)
Subject: [Mailman-Developers] msg.headers.append('Reply-To: %s\n' % self.GetListEmail())
In-Reply-To: 
Message-ID: 

found this in Deliverer.py

msg.headers.append('Reply-To: %s\n' % self.GetListEmail())


Could I re-write that line, and ALL messages leaving mailman
would use that reply-to?

I don't know how to write python.. how could i make that
read something that would make all reply-to's

goto pentax-discuss@discuss.pentax.com


Thanks for your help. If this ever works right before 5pm, you will be
life savers. heh.

Erik Parker
eparker@mindsec.com




From eparker@mindsec.com  Fri Sep 24 20:38:16 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 13:38:16 -0600 (MDT)
Subject: [Mailman-Developers] msg.headers.append('Reply-To: %s\n' %
 self.GetListEmail())
In-Reply-To: 
Message-ID: 


Which I tried as:

msg.headers.append('Reply-To: %s\n' % "pentax-discuss\@discuss.pentax.com")


But then I end up getting emails with a reply-to of:

"pentax-discuss@discuss.pentax.com"@portal.navidec.com

...hm.

On Fri, 24 Sep 1999, Erik Parker wrote:

> found this in Deliverer.py
> 
> msg.headers.append('Reply-To: %s\n' % self.GetListEmail())
> 
> 
> Could I re-write that line, and ALL messages leaving mailman
> would use that reply-to?
> 
> I don't know how to write python.. how could i make that
> read something that would make all reply-to's
> 
> goto pentax-discuss@discuss.pentax.com
> 
> 
> Thanks for your help. If this ever works right before 5pm, you will be
> life savers. heh.
> 
> Erik Parker
> eparker@mindsec.com
> 
> 
> 
> _______________________________________________
> Mailman-Developers maillist  -  Mailman-Developers@python.org
> http://www.python.org/mailman/listinfo/mailman-developers
> 


Erik Parker
eparker@mindsec.com



From eparker@mindsec.com  Fri Sep 24 21:01:10 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:01:10 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
Message-ID: 

Where to the scripts ask to get their hostname from each time?

mm_cfg.py  ?

I have DEFAULT_HOST_NAME = 'discuss.pentax.com'

and in Defaults.py

DEFAULT_HOST_NAME = 'discuss.pentax.com'





Erik Parker
eparker@mindsec.com



From hebble@ncsa.uiuc.edu  Fri Sep 24 21:10:10 1999
From: hebble@ncsa.uiuc.edu (Paul Hebble)
Date: Fri, 24 Sep 1999 15:10:10 -0500 (CDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: 
Message-ID: 

On Fri, 24 Sep 1999, Erik Parker wrote:

> 
> Where to the scripts ask to get their hostname from each time?
> 
> mm_cfg.py  ?
> 
> I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> and in Defaults.py
> 
> DEFAULT_HOST_NAME = 'discuss.pentax.com'

I think those values are used when new lists are created.  Go to the
configuration page for each existing list to change the values they use.

(BTW, I don't think you're supposed to change Defaults.py.  If you want to
keep up with CVS, might break it.)

--
	Paul



From jafo@tummy.com  Fri Sep 24 21:10:37 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:10:37 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:01:10PM -0600
References: 
Message-ID: <19990924141037.H1119@tummy.com>

[Note that I've sent this to the mailman-users list, which is really
more appropriate than the developers list.  However, I don't actually
read the -users group because of a lack of time.]

On Fri, Sep 24, 1999 at 02:01:10PM -0600, Erik Parker wrote:
>Where to the scripts ask to get their hostname from each time?
>
>mm_cfg.py  ?
>
>I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
>
>and in Defaults.py
>
>DEFAULT_HOST_NAME = 'discuss.pentax.com'

mm_cfg.py is for the *LOCAL* settings, and things in there are overridden by
values in mm_cfg.py.  However, when sending a message the preferred host
name is taken from the value set in the main config panel "Host name this
list prefers".

Have you been looking at your MTA with the same ferver that you've been
looking at Mailman?  My bet is that it's some sort of interaction with
the MTA, but you haven't mentioned what you're using.

Sean
-- 
 I put my hand upon her lever, said "let it rock and let it roll."
 I had the one-arm-bandit fever, it was an arrow through my heart, that's all.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From eparker@mindsec.com  Fri Sep 24 21:22:41 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:22:41 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: 
Message-ID: 

On Fri, 24 Sep 1999, Paul Hebble wrote:

> On Fri, 24 Sep 1999, Erik Parker wrote:
> 
> > 
> > Where to the scripts ask to get their hostname from each time?
> > 
> > mm_cfg.py  ?
> > 
> > I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> > 
> > and in Defaults.py
> > 
> > DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> I think those values are used when new lists are created.  Go to the
> configuration page for each existing list to change the values they use.
>

Yah did that via the web, problem is, that part isn't working. Nobody
seems to know why.. I know remembered why I used to go with supported
products :) heh.
 
> (BTW, I don't think you're supposed to change Defaults.py.  If you want to
> keep up with CVS, might break it.)
> 
> --
> 	Paul
> 


Erik Parker
eparker@mindsec.com



From eparker@mindsec.com  Fri Sep 24 21:27:13 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:27:13 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: <19990924141037.H1119@tummy.com>
Message-ID: 

On Fri, 24 Sep 1999, Sean Reifschneider wrote:

> [Note that I've sent this to the mailman-users list, which is really
> more appropriate than the developers list.  However, I don't actually
> read the -users group because of a lack of time.]
> 
> On Fri, Sep 24, 1999 at 02:01:10PM -0600, Erik Parker wrote:
> >Where to the scripts ask to get their hostname from each time?
> >
> >mm_cfg.py  ?
> >
> >I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> >
> >and in Defaults.py
> >
> >DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> mm_cfg.py is for the *LOCAL* settings, and things in there are overridden by
> values in mm_cfg.py.  However, when sending a message the preferred host
> name is taken from the value set in the main config panel "Host name this
> list prefers".
> 
> Have you been looking at your MTA with the same ferver that you've been
> looking at Mailman?  My bet is that it's some sort of interaction with
> the MTA, but you haven't mentioned what you're using.
>

I am using sendmail 8.9.3, I have gone as far to:

Change the sendmail.cf to force it to use the host discuss.pentax.com,
changing the reverse DNS for the machine to it matched the A record
for discuss.pentax.com
changed the hostname on the machine


and (not to sound like a broken record, but people keep emailing me
with their wisdom, and never noticed I've already stated this)
I HAVE IT SET VIA THE WEB PAGE FOR "Host name this list prefers."
set to the RIGHT host.

 
> Sean
> -- 
>  I put my hand upon her lever, said "let it rock and let it roll."
>  I had the one-arm-bandit fever, it was an arrow through my heart, that's all.
> Sean Reifschneider, Inimitably Superfluous 
> URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.
> 


Erik Parker
eparker@mindsec.com



From jafo@tummy.com  Fri Sep 24 21:31:02 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:31:02 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:22:41PM -0600
References:  
Message-ID: <19990924143102.J1119@tummy.com>

On Fri, Sep 24, 1999 at 02:22:41PM -0600, Erik Parker wrote:
>seems to know why.. I know remembered why I used to go with supported
>products :) heh.

Oh, you didn't get my offer of commercial support on your mailman setup?
My company is quite willing to provide that.  Just because Mailman is
open-source and freely-available doesn't mean that it's not supported.
In fact, I would argue that it increases one's support options (I can't
go digging in Windows code to find a problem like this, that's for sure).

Sean
-- 
 "Ayn Rand books and guns...  You guys take World Domination seriously."
 "It's our job."  -- Conversation with Luke Jones about Rob Riggs place.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Fri Sep 24 21:35:03 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:35:03 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:27:13PM -0600
References: <19990924141037.H1119@tummy.com> 
Message-ID: <19990924143503.K1119@tummy.com>

On Fri, Sep 24, 1999 at 02:27:13PM -0600, Erik Parker wrote:
>Change the sendmail.cf to force it to use the host discuss.pentax.com,
>changing the reverse DNS for the machine to it matched the A record
>for discuss.pentax.com
>changed the hostname on the machine

Uh...  If you changed sendmail to rewrite the headers on the outgoing
message, that *SHOULD* correct any issues that may be happening in mailman.
You're saying that when you changed sendmail to force the header it still
isn't getting the right host?  Presuming you made the sendmail.cf change
correctly, are you sure what you're seeing isn't happening on the
receiving side?  I mean, if sendmail is doing the correct rewriting
then there's not much of an alternative for where the problem is
occuring (*IF* sendmail is doing the rewriting you expect it to).

Sean
-- 
 Good judgement comes from experience, and experience comes from bad judgement. 
                 -- Fred Brooks
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Sat Sep 25 09:14:35 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sat, 25 Sep 1999 02:14:35 -0600
Subject: [Mailman-Developers] Another item for TODO: Accept list
Message-ID: <19990925021435.S1119@tummy.com>

I didn't see anything in the main list admin page for doing this,
so I thought I'd write in to request it be put on the todo list.
There doesn't seem to be an ability to specify a specific "accept"
list.  I'm thinking of a list which if non-empty, only posts from
addresses on the list would be accepted.  The idea is to prevent
discussion on announce-only mailing lists.

This is certainly something I'd be interested in implementing.
But, I've got to wonder what happened to the other patches I
submitted last week...  :-)

Or did I just overlook it?

Sean
-- 
 It usually takes more than three weeks to prepare a good impromptu speech.
                 -- Mark Twain
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From klm@digicool.com  Sun Sep 26 16:59:39 1999
From: klm@digicool.com (klm)
Date: Sun, 26 Sep 1999 11:59:39 -0400 (EDT)
Subject: [Mailman-Developers] Another item for TODO: Accept list
In-Reply-To: <199909260500.BAA23600@python.org>
Message-ID: 

> Date: Sat, 25 Sep 1999 02:14:35 -0600
> From: Sean Reifschneider 
> To: mailman-developers@python.org
> Subject: [Mailman-Developers] Another item for TODO: Accept list
> 
> I didn't see anything in the main list admin page for doing this,
> so I thought I'd write in to request it be put on the todo list.
> There doesn't seem to be an ability to specify a specific "accept"
> list.  I'm thinking of a list which if non-empty, only posts from
> addresses on the list would be accepted.  The idea is to prevent
> discussion on announce-only mailing lists.

If i understand what you're seeking, there's an option on the privacy page
for doing this.  From the details page:

 posters (privacy): Addresses of members accepted for posting to this list
 without implicit approval requirement. (See "Restrict ... to list
 members" for whether or not this is in addition to allowing posting by
 list members.

 Adding entries here will have one of two effects, according to whether
 another option restricts posting to members. 

 If member_posting_only is 'yes', then entries added here will have
 posting privilege in addition to list members.  

 If member_posting_only is 'no', then only the posters listed here will be
 able to post without admin approval.

I think the combination with members_posting_only == 'no' amounts to your
accept list.

> This is certainly something I'd be interested in implementing.
> But, I've got to wonder what happened to the other patches I
> submitted last week...  :-)

Ah, this is a problem.  It looks like all the core mailman developers are
currently tied up enough, so noone can cater to incorporating - or even
following, at the moment - mailman developments.  Sean, if you would do me
the favor of pointing me to the patches - or resend them, just to me -
i'll try to take a moment to look them over.

(We're considering ways to increase the pool of people with privileges to
touch the main development tree _without_ increasing the thrash factor -
shepherding, itself, takes time which may be too scarce even for that at
the moment, but we need to look at it.)

> Or did I just overlook it?

Probably the other way around - we did.  (This is late vacation season - i
was away week before last, eg, and i *know* from sparse discussions w/
other mailman developers time is real tight.)

Ken Manheimer
klm@digicool.com



From jafo@tummy.com  Mon Sep 27 15:59:48 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Mon, 27 Sep 1999 08:59:48 -0600
Subject: [Mailman-Developers] Another item for TODO: Accept list
In-Reply-To: ; from klm on Sun, Sep 26, 1999 at 11:59:39AM -0400
References: <199909260500.BAA23600@python.org> 
Message-ID: <19990927085947.H2515@tummy.com>

On Sun, Sep 26, 1999 at 11:59:39AM -0400, klm wrote:
> If member_posting_only is 'no', then only the posters listed here will be
> able to post without admin approval.

Huh?  The way I understand "member_posting_only" is that if it's on
then only members can post, and if it's off then *ANYONE* can post
(hence "member_posting_*ONLY*").  This seems to be what's happening
because I currently have member_posting_only set to "no" and
messages are getting through.

Sean
-- 
 The Roman Rule: The one who says it cannot be done should never
 interrupt the one who is doing it.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From claw@varesearch.com  Tue Sep 28 04:03:09 1999
From: claw@varesearch.com (J C Lawrence)
Date: Mon, 27 Sep 1999 20:03:09 -0700
Subject: [Mailman-Developers] List config portability
Message-ID: 

How portable are list configs between list names?

Specifically:

  Can I rename a list by changing the name of the ~mailman/lists/XXX 
directory as long as I also change the MTA aliases and the name of
the list in the admin interface?

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From lindsey@ncsa.uiuc.edu  Tue Sep 28 04:14:00 1999
From: lindsey@ncsa.uiuc.edu (Christopher Lindsey)
Date: Mon, 27 Sep 1999 22:14:00 -0500 (CDT)
Subject: [Mailman-Developers] List config portability
In-Reply-To:  from "J C Lawrence" at Sep 27, 99 08:03:09 pm
Message-ID: <199909280314.WAA27657@ferret.ncsa.uiuc.edu>

> Specifically:
> 
>   Can I rename a list by changing the name of the ~mailman/lists/XXX 
> directory as long as I also change the MTA aliases and the name of
> the list in the admin interface?

Yes, I've done these three steps without any problems.  

Chris


From claw@varesearch.com  Tue Sep 28 21:15:45 1999
From: claw@varesearch.com (J C Lawrence)
Date: Tue, 28 Sep 1999 13:15:45 -0700
Subject: [Mailman-Developers] Feature request
Message-ID: 

I'd be awfully pleased if I could customise the default reject
message on a per-list basis.  I almost never use the "send
administrative messages to..." message, using instead such things
as:

  1) Pleas trim your quotes
  2) Please fix your attributions and/or attribute your quoted text
  3) Please place new text below the quote it refers to and trim the
     quote
  4) Please post from an address that does not append advertising to
     your message
  5) Please wrap your lines at 80 columns or less
  6) Please see the FAQ
  7) Less noise, more signal please

etc.

Best of course would be the ability to pick from a list of canned
customised reject messages.

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From eparker@mindsec.com  Tue Sep 28 23:24:44 1999
From: eparker@mindsec.com (Erik Parker)
Date: Tue, 28 Sep 1999 16:24:44 -0600 (MDT)
Subject: [Mailman-Developers] Status of pipermail update..
In-Reply-To: 
Message-ID: 

*Pipermail + Archiving mechanism
- Search engine for archives
- Provide downloadable tar.gz's of the html archives
- sort by date should go most-recent to oldest
- allow list owner to edit archive messages
- support for alternative archiving systems, e.g. MHonArc, Hypermail
- archive link should do *something* reasonable before the first
  message has been posted to the list.



Does anyone know how hard it would be, or perhaps if it is already
in a CVS version... the status of "sort by date shouldgo most-recent to
oldest", and will there be a convert program of some kind for the current
archive that already listed backwards?

We have had a lot of users complaining, when they have to load a 2 meg
file.. (some of them aren't as lucky as those of us sitting on t1 and
larger.. hehe)



Erik Parker
eparker@mindsec.com



From ckolar@admin.aurora.edu  Wed Sep 29 17:21:30 1999
From: ckolar@admin.aurora.edu (Christopher Kolar)
Date: Wed, 29 Sep 1999 11:21:30 -0500
Subject: [Mailman-Developers] Documentation: Admin Guide Draft
Message-ID: <9909291116100F.01912@kolar.facnet.aurora.edu>

I have placed the first rough draft of both a list manager's guide and a
list manager's quick reference on the web.  I would appreciate it if
members of the development team took a look at it and commented.

I have been preparing documentation for my institution as we roll MM out
and we will eventually GPL them once we find out what we need to do.  The
following documents are currently available for review:

1.  MailMan User Guide (for list subscribers)
2.  MailMan Administrator's Guide (for list managers, non-technical list
owners)
3.  List Administrator's Quick Reference (covers 90% of what our help desk
has heard from non-technical (faculty) list owners).

AT this time all of the documents are ugly, I just need
feedback/corrections related to the content.  Documents are available at
http://www.aurora.edu/~ckolar/mailman

Cheers,

--chris

--
/////\\\\\/////\\\\\
 Christopher G. Kolar
   Director of Instructional Technology
   Aurora University, Aurora, Illinois
 ckolar@admin.aurora.edu  --  www.aurora.edu
        [PGP Public Key ID: 0xC6492C72]


From kclark@ntlug.org  Wed Sep 29 17:56:13 1999
From: kclark@ntlug.org (Kendall Clark)
Date: Wed, 29 Sep 1999 11:56:13 -0500 (CDT)
Subject: [Mailman-Developers] Mailman Customization Guide?
Message-ID: <14322.17581.525423.386157@cmpu.net>

Hi all,

First, Mailman is great. Thanks for the work.

Next, I want to customize Mailman by adding a "poll" and a
"document/url archive" option to mailing lists. "Poll", similar to
what eGroups does with this (though they do some dumb stuff here)
allows a list member or admin to define an issue and some
"multiple-choice-style" options, and then list members register their
vote, all of which are tracked. Interface would be something like:
"http://foo.org/mailman/listinfo//poll//vote" and
"http://foo.org/mailman/listinfo//poll//results"

By "document/url archive" I'd like to be able to define a "library"
for a list, a form for submission (even better: a little xml language
that could be cherry-picked from the text of list messages themselves;
but that's "version 2" feature :> ) of URLs and plain text documents;
the url "http://foo.org/mailman/listinfo//archive would
return a page of the archived links and links to the plain text
documents. Yes, this is a bit duplicative of Pipermail, but it's also
very handy to have stuff organized in a non-archival way (not thread
or time or subject based). I imagine the best way to do this is to
store URLs and glob.glob() pickled and then
read them off the disk and build the page.

I know how to write Python, but I'm not really sure where to dive into
Mailman first; what is the preferred way of doing extension work like
this is?

In other words, I could probably hack at it long enough to get
something working for me, but maybe, with a bit of guidance for what
these features should look like to be consistent with Mailman's
design, I can manage to do good enough work to submit some patches.

Thanks.


--
I'll get a bunch of monkeys, dress 'em up, and make 'em
reenact the Civil War!  Heh, heh, heh!

		-- Homer Simpson
		   Homer The Great 


From claw@varesearch.com  Wed Sep 29 18:52:48 1999
From: claw@varesearch.com (J C Lawrence)
Date: Wed, 29 Sep 1999 10:52:48 -0700
Subject: [Mailman-Developers] Mailman Customization Guide?
In-Reply-To: Message from Kendall Clark 
 of "Wed, 29 Sep 1999 11:56:13 CDT." <14322.17581.525423.386157@cmpu.net>
Message-ID: 

On Wed, 29 Sep 1999 11:56:13 -0500 (CDT) 
Kendall Clark  wrote:

> By "document/url archive" I'd like to be able to define a
> "library" for a list, a form for submission (even better: a little
> xml language that could be cherry-picked from the text of list
> messages themselves; but that's "version 2" feature :> ) of URLs
> and plain text documents; the url
> "http://foo.org/mailman/listinfo//archive would return
> a page of the archived links and links to the plain text
> documents. Yes, this is a bit duplicative of Pipermail, but it's
> also very handy to have stuff organized in a non-archival way (not
> thread or time or subject based). I imagine the best way to do
> this is to store URLs and glob.glob()
> pickled and then read them off the disk and build the page.

Have a look at phpHoo.  It doesn't do exactly what you want, but is
workably close.

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From grin@tolna.net  Wed Sep  1 11:04:20 1999
From: grin@tolna.net (Peter Gervai)
Date: Wed, 1 Sep 1999 12:04:20 +0200
Subject: [Mailman-Developers] [root@tolna.net: Cron  /usr/bin/python /var/lib/mailman/cron/mailpasswds]
Message-ID: <19990901120420.C16052@mail.tolna.net>

This is my monthly remainder. I looket at it several times but
no luck. 

Sidenote: is there a searchable archive of the lists? I would like
to search for the answer instead of possibly asking here again...

----- Forwarded message from Cron Daemon  -----

Traceback (innermost last):
  File "/var/lib/mailman/cron/mailpasswds", line 158, in ?
    main()
  File "/var/lib/mailman/cron/mailpasswds", line 154, in main
    MailAllPasswords(a_public_list, hosts)
  File "/var/lib/mailman/cron/mailpasswds", line 87, in MailAllPasswords
    text = Utils.maketext(
  File "/var/lib/mailman/Mailman/Utils.py", line 610, in maketext
    return wrap(template % dict)
KeyError: one_list

----- End forwarded message -----


From jafo@tummy.com  Wed Sep  1 17:22:15 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Wed, 1 Sep 1999 10:22:15 -0600
Subject: [Mailman-Developers] [root@tolna.net: Cron  /usr/bin/python /var/lib/mailman/cron/mailpasswds]
In-Reply-To: <19990901120420.C16052@mail.tolna.net>; from Peter Gervai on Wed, Sep 01, 1999 at 12:04:20PM +0200
References: <19990901120420.C16052@mail.tolna.net>
Message-ID: <19990901102215.V2479@tummy.com>

On Wed, Sep 01, 1999 at 12:04:20PM +0200, Peter Gervai wrote:
>  File "/var/lib/mailman/Mailman/Utils.py", line 610, in maketext
>    return wrap(template % dict)
>KeyError: one_list

It looks like your cronpass.txt template has a "%(one_list)s" in it, which
doesn't exist in the data being passed.  The only values allowed for
substitution in there are hostname, useraddr, exreq, and owner.
Did you perhaps modify the cronpass.txt template?

Here's a patch that will fix it in any case.  It causes any invalid
"%(key)" format strings to remain as they are instead of throwing
KeyErrors.

Sean
=====================
*** Utils.py.old	Wed Sep  1 10:10:40 1999
--- Utils.py	Wed Sep  1 10:16:47 1999
***************
*** 33,38 ****
--- 33,54 ----
  import random
  import mm_cfg
  import Errors
+ import UserDict
+ 
+ 
+ class SaferDict(UserDict.UserDict):
+ 	'''Dictionary which returns a default value for unknown keys.'''
+ 
+ 	def __init__(self, dict, default = ''):
+ 		UserDict.UserDict.__init__(self, dict)
+ 		self.default = default
+ 
+ 	def __getitem__(self, key):
+ 		try: return(self.data[key])
+ 		except KeyError: pass
+ 		try: return(self.default % ( key ))
+ 		except TypeError: return(self.default)
+ 
  
  def list_names():
      """Return the names of all lists in default list directory."""
***************
*** 606,613 ****
      template = fp.read()
      fp.close()
      if raw:
!         return template % dict
!     return wrap(template % dict)
  
  
  #
--- 622,629 ----
      template = fp.read()
      fp.close()
      if raw:
!         return template % SaferDict(dict, '%%(%s)s')
!     return wrap(template % SaferDict(dict), '%%(%s)s')
  
  
  #

-- 
 It is not enough to have a good mind. The main thing is to use it well.
                 -- Rene Descartes
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From listwrangler@iximd.com  Wed Sep  1 19:36:09 1999
From: listwrangler@iximd.com (Listwrangler)
Date: Wed, 1 Sep 1999 13:36:09 -0500
Subject: [Mailman-Developers] How Do I Volunteer for a To Do list item?
Message-ID: 

I've been prowling around the site and couldn't help notice that one of my
pet peeves is on the to-do list -- documentation! I'm a former professional
author and editor who's currently in the process of switching careers to
become an information technology specialist, so I'd be interested in
helping to write the user, list owner, and site owner files.

Whom should I contact in order to find out the status of these files?

One suggestion, Mailman should develop a set of moderator features (with
documentation), so that routine list services can be handed off to their
moderators, who have a moderator password that lets them do certain things
but not others. This would enable the list administrator to NOT receive
those pesky un/subscribe and other routine notices that the moderator
handles.

I've had ten years experience as a member of email lists, and have spent
about five years administering Majordomo lists, and have recently been
moved over to Mailman. I've come around to where I slightly prefer Mailman
over Majordomo, but there are some Majordomo features that I miss. And
lately, with all the broken Mailman software, my affection for Mailman is
somewhat strained. Through all of this I've been wishing for a help file.
So, on the principle that if you want something done, you have to do it
yourself, I'm volunteering.

Let me know if I can be of service.

Thanks

Gary Bowen


Listwrangler
listwrangler@iximd.com

********************
For help with subscribe/unsubscribe, troubleshooting, or more info about
The American Boyz email lists, please visit: ________ (new web page being
developed, please stand by), or request a copy of the Amboyz Elist Help
File to be emailed to you.

The following lists are implemented with Mailman and use standard Mailman
features: Amboyz-Main, Amboyz-Announce, TrueSpirit, and ElderTG




From ckolar@admin.aurora.edu  Wed Sep  1 21:58:42 1999
From: ckolar@admin.aurora.edu (Christopher Kolar)
Date: Wed, 1 Sep 1999 15:58:42 -0500
Subject: [Mailman-Developers] How Do I Volunteer To Do documentation?
References: 
Message-ID: <99090116020901.02443@kolar.facnet.aurora.edu>

There is a first stab at documentation available at
www.aurora.edu/~ckolar/mailman -- I have not heard back on the
initial drafts that are online and am finally going to be able to
look at it again now that all of the start-of-year business is over
here at the university.

Please take a look at it, I think that the structure that I was
proposing (three separate documents) is sound based on what you are
saying.  More real soon,

--chris

--
/////\\\\\/////\\\\\
 Christopher G. Kolar
   Director of Instructional Technology
   Aurora University, Aurora, Illinois
 ckolar@aurora.edu  --  www.aurora.edu
        [PGP Public Key ID: 0xC6492C72]



From jarrell@vt.edu  Thu Sep  2 00:30:02 1999
From: jarrell@vt.edu (Ron Jarrell)
Date: Wed, 1 Sep 1999 19:30:02 -0400 (EDT)
Subject: [Mailman-Developers] cvs archive
Message-ID: <199909012330.TAA26083@babylon5.cc.vt.edu>

I'm trying to use the CVS server to pull a copy of the current code
(particularly the fixes to the archiver, since mine 1.0s occasionally
still goes psychotic and puts the wrong message under a given index
entry).  Following the instructions I found in the archives, I made
a new directory, cd'd into it, and did:

(using cvs-1.10, on solaris 7)

% cvs -d :pserver:anoncvs@cvs.python.org:/projects/cvsroot login
(Logging in to anoncvs@cvs.python.org)
CVS password: (I entered anoncvs)
cvs [login aborted]: authorization failed: server cvs.python.org rejected access

Is something wrong on *my* end, or the other end?


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 01:09:24 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Wed, 1 Sep 1999 20:09:24 -0400 (EDT)
Subject: [Mailman-Developers] cvs archive
References: <199909012330.TAA26083@babylon5.cc.vt.edu>
Message-ID: <14285.49204.119137.93323@anthem.cnri.reston.va.us>

>>>>> "RJ" == Ron Jarrell  writes:

    RJ> Is something wrong on *my* end, or the other end?

Yours, sorry!

http://www.python.org/mailman/listinfo/mailman-checkins

Gotta run...
-Barry


From jarrell@vt.edu  Thu Sep  2 07:45:50 1999
From: jarrell@vt.edu (Ron Jarrell)
Date: Thu, 2 Sep 1999 02:45:50 -0400 (EDT)
Subject: [Mailman-Developers] 1.0.1 bug in newlist?
Message-ID: <199909020645.CAA00035@babylon5.cc.vt.edu>

I installed the most recent snapshot on my test machine, and all s
seems to be working fine, except newlist suddenly died...


% ~mailman/bin/newlist testlist jarrell@vt.edu pass
Traceback (innermost last):
  File "/home/mailman/bin/newlist", line 146, in ?
    raise SystemExit(main(sys.argv))
  File "/home/mailman/bin/newlist", line 85, in main
    newlist = MailList.MailList()
  File "/home/mailman/Mailman/MailList.py", line 59, in __init__
    self.InitTempVars(name, lock)
  File "/home/mailman/Mailman/MailList.py", line 263, in InitTempVars
    self.__lock = LockFile.LockFile(
  File "/usr/local/lib/python1.5/posixpath.py", line 43, in join
    if b[:1] == '/':
AttributeError: __getslice__




From grin@tolna.net  Thu Sep  2 13:27:43 1999
From: grin@tolna.net (Peter Gervai)
Date: Thu, 2 Sep 1999 14:27:43 +0200
Subject: [Mailman-Developers] https
Message-ID: <19990902142743.K19459@mail.tolna.net>

Hello,

I'm using admin interface on https:// url, and some buttons send me to
(absolute) address without https. There are http and https users, and I do
not want to force either party to use the other way. Is it possible, or
would it be possible to sort out such "cross-directions", and keep the
user in the selected protocol?

(Since pw are cleartext I advise all of our list managers to use https.)

regards,
grin


From jafo@tummy.com  Thu Sep  2 16:04:20 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 2 Sep 1999 09:04:20 -0600
Subject: [Mailman-Developers] 1.0.1 bug in newlist?
In-Reply-To: <199909020645.CAA00035@babylon5.cc.vt.edu>; from Ron Jarrell on Thu, Sep 02, 1999 at 02:45:50AM -0400
References: <199909020645.CAA00035@babylon5.cc.vt.edu>
Message-ID: <19990902090420.V2479@tummy.com>

On Thu, Sep 02, 1999 at 02:45:50AM -0400, Ron Jarrell wrote:
>I installed the most recent snapshot on my test machine, and all s
>seems to be working fine, except newlist suddenly died...

The problem is that MailList.MailList() isn't being passed any arguments,
and so the name argument is defaulting to None.  Either newlist:85 needs to
pass a name, or (perhaps better yet) MailList.MailList.InitTempVars()
needs to Do The Right Thing (tm) (like come up with some default name)
when name == None.

I don't fully understand what this name is supposed to be, so bwarsaw will
need to be consulted on this.  However, my guess would be to change line
85 of bin/newlist from:

	newlist = MailList.MailList()

to:

	newlist = MailList.MailList(list_name)

Sean
-- 
 "Engineering Tablets?  Does that mean if I swallow one, I'll be an engineer?"
                 -- Evelyn Mitchell
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 16:13:42 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 11:13:42 -0400 (EDT)
Subject: [Mailman-Developers] 1.0.1 bug in newlist?
References: <199909020645.CAA00035@babylon5.cc.vt.edu>
 <19990902090420.V2479@tummy.com>
Message-ID: <14286.37926.116549.323268@anthem.cnri.reston.va.us>

>>>>> "SR" == Sean Reifschneider  writes:

    SR> The problem is that MailList.MailList() isn't being passed any
    SR> arguments, and so the name argument is defaulting to None.
    SR> Either newlist:85 needs to pass a name, or (perhaps better
    SR> yet) MailList.MailList.InitTempVars() needs to Do The Right
    SR> Thing (tm) (like come up with some default name) when name ==
    SR> None.

You're analysis is correct.  Here's the patch I just checked in.

-Barry

-------------------- snip snip --------------------
Index: MailList.py
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/MailList.py,v
retrieving revision 1.134
retrieving revision 1.135
diff -c -r1.134 -r1.135
*** MailList.py	1999/08/23 16:15:48	1.134
--- MailList.py	1999/09/02 15:04:14	1.135
***************
*** 261,267 ****
          """Set transient variables of this and inherited classes."""
  	self.__createlock_p = lock
  	self.__lock = LockFile.LockFile(
!             os.path.join(mm_cfg.LOCK_DIR, name) + '.lock',
              # TBD: is this a good choice of lifetime?
              lifetime = 60)
  	self._internal_name = name
--- 261,267 ----
          """Set transient variables of this and inherited classes."""
  	self.__createlock_p = lock
  	self.__lock = LockFile.LockFile(
!             os.path.join(mm_cfg.LOCK_DIR, name or '') + '.lock',
              # TBD: is this a good choice of lifetime?
              lifetime = 60)
  	self._internal_name = name


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 16:27:30 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 11:27:30 -0400 (EDT)
Subject: [Mailman-Developers] 1.0.1 bug in newlist?
References: <199909020645.CAA00035@babylon5.cc.vt.edu>
 <19990902090420.V2479@tummy.com>
 <14286.37926.116549.323268@anthem.cnri.reston.va.us>
Message-ID: <14286.38754.273202.789534@anthem.cnri.reston.va.us>

>>>>> "BAW" == Barry A Warsaw  writes:

    BAW> You're analysis is correct.  Here's the patch I just checked
---------^^^^^^
I'm out sick today ;)


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 16:32:39 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 11:32:39 -0400 (EDT)
Subject: [Mailman-Developers] https
References: <19990902142743.K19459@mail.tolna.net>
Message-ID: <14286.39063.709410.786654@anthem.cnri.reston.va.us>

>>>>> "PG" == Peter Gervai  writes:

    PG> I'm using admin interface on https:// url, and some buttons
    PG> send me to (absolute) address without https. There are http
    PG> and https users, and I do not want to force either party to
    PG> use the other way. Is it possible, or would it be possible to
    PG> sort out such "cross-directions", and keep the user in the
    PG> selected protocol?

Could you post a list of the controls that have this problem?


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 18:23:48 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 13:23:48 -0400 (EDT)
Subject: [Mailman-Developers] Documentation Guidelines
Message-ID: <14286.45732.804812.597778@anthem.cnri.reston.va.us>

Hi folks,

I've gotten some guidelines from RMS about Mailman documentation.  I'm 
wondering if it would be useful for me to create a small working group 
mailing list for those of you who would like to collaborate on
documentation?  We can continue to use the mailman-developers list if
you prefer.

Documentation should be in Texinfo format, although it is okay to
write it in some other format, if what we release is the Texinfo.
Please see the GNU Texinfo manual for style guides.  RMS sent me the
proper assignment forms for both the main manual contributors and for
those who donate smaller changes.  Let me know and I will send them to 
you.

-Barry


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 21:03:17 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 16:03:17 -0400 (EDT)
Subject: [Mailman-Developers] [root@tolna.net: Cron  /usr/bin/python /var/lib/mailman/cron/mailpasswds]
References: <19990901120420.C16052@mail.tolna.net>
 <19990901102215.V2479@tummy.com>
Message-ID: <14286.55301.521607.367050@anthem.cnri.reston.va.us>

>>>>> "SR" == Sean Reifschneider  writes:

    SR> It looks like your cronpass.txt template has a "%(one_list)s"
    SR> in it, which doesn't exist in the data being passed.  The only
    SR> values allowed for substitution in there are hostname,
    SR> useraddr, exreq, and owner.  Did you perhaps modify the
    SR> cronpass.txt template?

    SR> Here's a patch that will fix it in any case.  It causes any
    SR> invalid "%(key)" format strings to remain as they are instead
    SR> of throwing KeyErrors.

I like this, Sean.  I'm going to check in a slight modification
(attached).

Thanks!
-Barry

-------------------- snip snip --------------------
Index: Utils.py
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v
retrieving revision 1.75
diff -c -r1.75 Utils.py
*** Utils.py	1999/09/02 19:39:08	1.75
--- Utils.py	1999/09/02 19:51:38
***************
*** 27,32 ****
--- 27,34 ----
  import os
  import string
  import re
+ from UserDict import UserDict
+ from types import StringType
  # XXX: obsolete, should use re module
  import regsub
  import random
***************
*** 620,625 ****
--- 622,645 ----
  
  
  
+ class SafeDict(UserDict):
+     """Dictionary which returns a default value for unknown keys.
+ 
+     This is used in maketext so that editing templates is a bit more robust.
+     """
+     def __init__(self, d):
+         UserDict.__init__(self, d)
+ 
+     def __getitem__(self, key):
+         try:
+             return self.data[key]
+         except KeyError:
+             if type(key) == StringType:
+                 return '%('+key+')s'
+             else:
+                 return '' % `key`
+ 
+ 
  def maketext(templatefile, dict, raw=0):
      """Make some text from a template file.
  
***************
*** 631,639 ****
      fp = open(file)
      template = fp.read()
      fp.close()
      if raw:
!         return template % dict
!     return wrap(template % dict)
  
  
  
--- 651,660 ----
      fp = open(file)
      template = fp.read()
      fp.close()
+     text = template % SafeDict(dict)
      if raw:
!         return text
!     return wrap(text)
  
  
  


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Thu Sep  2 21:41:41 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Thu, 2 Sep 1999 16:41:41 -0400 (EDT)
Subject: [Mailman-Developers] External Archiving Patch
References: 
Message-ID: <14286.57605.55324.75699@anthem.cnri.reston.va.us>

>>>>> "PH" == Paul Hebble  writes:

    PH> This patch should let the administrator specify alternative
    PH> external archivers.  All you have to do is set the
    PH> PUBLIC_EXTERNAL_ARCHIVER and/or PRIVATE_EXTERNAL_ARCHIVER
    PH> variables to the command line you wish to use.  If you put
    PH> "$LISTNAME" or "${LISTNAME}" in the command line, it is
    PH> replaced with the name of the list.  Mailman will run the
    PH> command line and pipe each post to it.

    PH> The main advantage to this is that all post filtering is done
    PH> without having to subscribe a procmailrc to the list.  This
    PH> prevents list-admins from accidentally unsubscribing the
    PH> archiver.

    PH> If the variables given above are set to "" (the default),
    PH> Mailman will fall back to the built-in Pipermail archiver, so
    PH> this should not break any existing installations.

Paul, I'd like to install this patch but have a couple of
suggestions.  First (and I apologize for not looking at it closer),
I'd like to use any false value -- None or 0 would be preferrable --
to indicate use-the-internal-archiver.  Maybe your patch already
supports that.

Second...

    PH> My apologies for using regsub, but I have not been able to
    PH> find enough documentation on the re module.  Perhaps someone
    PH> better acquainted with it could migrate this patch to it?

I'm sorry I don't have the time to port to re module.  Do you think
you'd be able to do it?  I'd rather not include new dependencies on
regsub, which is deprecated and may someday go away.

Here's documentation on re:

http://www.python.org/doc/current/lib/module-re.html

If you do port to re, please resubmit the patch against the CVS
snapshot and I'd be very happy to install it.

Thanks,
-Barry


From hebble@ncsa.uiuc.edu  Thu Sep  2 21:59:23 1999
From: hebble@ncsa.uiuc.edu (Paul Hebble)
Date: Thu, 2 Sep 1999 15:59:23 -0500 (CDT)
Subject: [Mailman-Developers] External Archiving Patch
In-Reply-To: <14286.57605.55324.75699@anthem.cnri.reston.va.us>
Message-ID: 

On Thu, 2 Sep 1999, Barry A. Warsaw wrote:

> >>>>> "PH" == Paul Hebble  writes:
> 
> Paul, I'd like to install this patch but have a couple of
> suggestions.  First (and I apologize for not looking at it closer),
> I'd like to use any false value -- None or 0 would be preferrable --
> to indicate use-the-internal-archiver.  Maybe your patch already
> supports that.
*snip*
> I'm sorry I don't have the time to port to re module.  Do you think
> you'd be able to do it?  I'd rather not include new dependencies on
> regsub, which is deprecated and may someday go away.
> 
> Here's documentation on re:
> 
> http://www.python.org/doc/current/lib/module-re.html
> 
> If you do port to re, please resubmit the patch against the CVS
> snapshot and I'd be very happy to install it.

These issues shouldn't take me too long.  I'll do the port to re now that
I have documentation.  Look for the new patch soon.

Thanks.
--
	Paul



From hebble@ncsa.uiuc.edu  Thu Sep  2 23:00:49 1999
From: hebble@ncsa.uiuc.edu (Paul Hebble)
Date: Thu, 2 Sep 1999 17:00:49 -0500 (CDT)
Subject: [Mailman-Developers] Problem with UserDict?
Message-ID: 

Hi,

I caught up with Mailman CVS today, and now bin/newlist dies like this:

Traceback (innermost last):
  File "bin/newlist", line 146, in ?
    raise SystemExit(main(sys.argv))
  File "bin/newlist", line 126, in main
    sendnotice(newlist, list_name, owner_mail, list_pw)
  File "bin/newlist", line 131, in sendnotice
    text = Utils.maketext(
  File "/home/mailman/Mailman/Utils.py", line 654, in maketext
    text = template % SafeDict(dict)
  File "/home/mailman/Mailman/Utils.py", line 631, in __init__
    UserDict.__init__(self, d)
TypeError: too many arguments; expected 1, got 2

Any idea what might be wrong?

--
	Paul



From jafo@tummy.com  Fri Sep  3 01:02:56 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 2 Sep 1999 18:02:56 -0600
Subject: [Mailman-Developers] Problem with UserDict?
In-Reply-To: ; from Paul Hebble on Thu, Sep 02, 1999 at 05:00:49PM -0500
References: 
Message-ID: <19990902180256.B27821@tummy.com>

On Thu, Sep 02, 1999 at 05:00:49PM -0500, Paul Hebble wrote:
>  File "/home/mailman/Mailman/Utils.py", line 631, in __init__
>    UserDict.__init__(self, d)
>TypeError: too many arguments; expected 1, got 2

Interesting.  I've back-ported Barry's changes to my patch to 1.0
and it's running without any problems.  Are you running python 1.5.2?
I don't recall if there have been changes in UserDict or not, but if
you aren't running 1.5.2 can you send me the output of:

   grep -C2 __init__ /usr/lib/python1.5/UserDict.py

(or wheverever your UserDict.py is)?

Sean
-- 
 Every solution breeds new problems.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From listwrangler@iximd.com  Fri Sep  3 04:07:56 1999
From: listwrangler@iximd.com (Listwrangler)
Date: Thu, 2 Sep 1999 22:07:56 -0500
Subject: [Mailman-Developers] Re: [Mailman-Users] How Do I Volunteer for a To Do list item?
In-Reply-To: <14286.53024.86218.212341@anthem.cnri.reston.va.us>
References: 
Message-ID: 

Dear Barry,

>We'd love it if you'd help out with the documentation (an admitted
>weakness).  Currently this effort is being carried out on the
>mailman-developers@python.org list.  For now I suggest you check those
>archives and subscribe to that list.

Thanks, I'll do that. Some day... I just had to port the organization's web
site and I'm all balled up with that now. The new ISP was going to alias
the old addresses and web sites, so for the user nothing would changed.
Suffice it to say, they changed, and I can't access the web site anymore.
I'm trying to get my access restored, but have accepted the new ISP's offer
to port to a new address. Most of the links in the site are relative URLs,
but some weren't, and of course all the pointers and explanations for how
to use our online features have changed, so I have to rewrite that...

Sigh.

>Great!  We need volunteers to help out.  What MD features are you
>particularly missing?  What is broken in MM for you?

I sent a separate email about Membership Management console, so I'll skip
that here.

Regarding moderator features, I have sat down and drawn up a preliminary
list of what should be simple changes. I'll have to think harder about
deeper functionality.

But this is what I think would be helpful but easy to access.

The list administrator should have access to all functions of all lists.
Only the list administrator should have access to configuration and related
issues.

The moderator should have access to administrivia for their lists, but no
access to configuration. This is on the theory that a moderator will be a
user with limited technical skills. The goal should be to equip them with
easy to understand tools that are useful for list and user management while
preventing them from getting into configuration and other stuff they don't
understand. I walk my moderators through the screens, telling them what
they're allowed to touch and what they're not allowed to touch. They're
good people, they don't have the urge to play with things they've been told
not to play with. However, I have some staffers that might get list
responsibilities that I definitely DO NOT want to access configuration
stuff!

So I thought, the simplest thing is to just go through the admin pages and
decide which ones it's okay for the moderators to access.

Moderators access:

Membership Management
Bounce Options
Subscriber List
Tend to Pending Administrative Requests

The rest should be reserved for the administrator.

Hoever, the General Info page should be split into two pages, one for admin
only stuff, and one for moderator stuff. The moderator should be able to do
the following:

Introductory paragraph for the list
List specific text prepended to new subscriber welcome message
Test appended to an unsubscription notice
Administrivia filter
should administrator get notices of administrative requests immediately?
should administrator get notice of un/subs?
Send mail to poster when their posting is held for approval?

The other items should be reserved for the administrator, as they
presumably will have a better understanding of the implications of the
choices. Also, if there are multiple lists on one site, there should be
uniformity in naming and descriptive practices, so things like the list
name and terse description should be done in accordance with whatever the
organizations standards are, and the list admin should be responsible for
making that happen. However, the list administrator really doesn't care
what the intro message is -- that's content, which is the responsibility of
the moderator.

The moderator should also have a box for changing their password.

Password features:

There are some security features that you might want to consider adding to
the password

user must change password at next log on
remember password history (to prevent the same password being recycled)
minimum length (maybe this is there, I always use moderately long passwords
so i haven't checked)
a help file about good passwords -- eg, don't use words that can be found
in a dictionary, don't use words that can easily be guessed, don't use your
name, the listname, minimum length, etc

Another feature I think I would like is when non-posters are not allowed to
post, give an option for send the posts to the admin request pending page,
or to redirect them to a different email addy.

Real world example: We run a conference, the True Spirit Conference. The
TrueSpirit list is for conference committee members only, and is restricted
so non-members cannot post. We give out the list address as the 'more info'
address to avoid confusion. If you want TrueSpirit info, you send it to
truespirt@iximd.com . So, the general public inquiries, 'where is the
conference, how much does it cost?' get held, and the person tasked with
tending the email list can then just rejects them (and the rejection
message tells them where to get more info), and also subscribes their
address to the announcement list, so they get the press releases as they
become available. But sometimes people want to volunteer to help, or want
to make a presentation, or need to know about wheelchair access, etc, and
their inquiries need to get redirected to a human being to respond to.

So if the approval page and had another option:"redirect to: "

and then you could fill in the address, that would be great. Ideally there
would be some configuration options for the redirect, like 'default
address' to redirect to, so you could just check 'redirect' and it would
automatically get mailed without having to type in the address every time.
Then you would have to have a redirect message, that would have some canned
message like, "Thank you for your interest in _name of mailing list_. Your
query had been redirected to the proper person to follow up on." The
administrator/moderator would have the option of customing the text in the
configuration page to change what the redirect message was, or the option
of changing the response on an individual basis. (The way reject works now.)

Oh, which reminds me, where do I rewrite the default rejection message? And
if I can't, then I recommend that it be possible. There's about three
common reasons we reject, and if we could put them in the default, then I
could just click instead of typing the reason each time.

And, for the moderator, an option to prepend a simple header message for
each email would be useful. Yes, you have this, but it's blank. You've got
a footer already filled in that has the list name, URL, etc. But I don't
know the format, I want to add in a header that says, "This message posted
_date_ by _username_ to _listname_:" (The help file should give the syntax
for common headers so that non-technical moderators can choose to use them
or not.)

This is particularly helpful if the list headers have been munged to remove
the sender's address. Yes, there are debates about munging, so I won't
share my views on the subject; but in certain circumstances it's useful to
have the reply-to set to the list name while the individual poster's name
is at the top of the message.

These are the things that I keep mumbling to myself about as I work the
lists, I'll give some deeper thought to the subject and get back to you
with additional suggestions.

Gary








Listwrangler
listwrangler@iximd.com

********************
For help with subscribe/unsubscribe, troubleshooting, or more info about
The American Boyz email lists, please visit: ________ (new web page being
developed, please stand by), or request a copy of the Amboyz Elist Help
File to be emailed to you.

If you are familiar with Mailman, the following lists are implemented with
Mailman and use standard Mailman features: Amboyz-Main, Amboyz-Announce,
TrueSpirit, and ElderTG




From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Fri Sep  3 06:26:20 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Fri, 3 Sep 1999 01:26:20 -0400 (EDT)
Subject: [Mailman-Developers] Problem with UserDict?
References: 
Message-ID: <14287.23548.914689.980863@anthem.cnri.reston.va.us>

>>>>> "PH" == Paul Hebble  writes:

    PH> I caught up with Mailman CVS today, and now bin/newlist dies
    PH> like this:

Urk.  The optional initial dictionary argument for UserDict's
constructor is a Python 1.5.2-ism.  You're running an older version of 
Python, right?  Try this patch.

-Barry

-------------------- snip snip --------------------
Index: Utils.py
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v
retrieving revision 1.76
diff -c -r1.76 Utils.py
*** Utils.py	1999/09/02 20:04:20	1.76
--- Utils.py	1999/09/03 05:24:29
***************
*** 628,634 ****
      This is used in maketext so that editing templates is a bit more robust.
      """
      def __init__(self, d):
!         UserDict.__init__(self, d)
  
      def __getitem__(self, key):
          try:
--- 628,637 ----
      This is used in maketext so that editing templates is a bit more robust.
      """
      def __init__(self, d):
!         # optional initial dictionary is a Python 1.5.2-ism.  Do it this way
!         # for portability
!         UserDict.__init__(self)
!         self.update(d)
  
      def __getitem__(self, key):
          try:


From jarrell@vt.edu  Fri Sep  3 06:32:14 1999
From: jarrell@vt.edu (Ron Jarrell)
Date: Fri, 03 Sep 1999 01:32:14 -0400
Subject: [Mailman-Developers] Problem with UserDict?
In-Reply-To: <14287.23548.914689.980863@anthem.cnri.reston.va.us>
References: 
Message-ID: <4.2.0.58.19990903013029.00af0da0@vtserf.cc.vt.edu>

The most recent round of patches seems to have solved the problems... 
For the record, I'm running 1.5.1 too.  (Primarily because I'm lazy, and
installed the sunfreeware.com kit, which isn't (or wasn't) 1.5.2)...


From bwarsaw@cnri.reston.va.us (Barry A. Warsaw)  Fri Sep  3 16:06:03 1999
From: bwarsaw@cnri.reston.va.us (Barry A. Warsaw) (Barry A. Warsaw)
Date: Fri, 3 Sep 1999 11:06:03 -0400 (EDT)
Subject: [Mailman-Developers] Problem with UserDict?
References: 
 <4.2.0.58.19990903013029.00af0da0@vtserf.cc.vt.edu>
Message-ID: <14287.58331.536648.861759@anthem.cnri.reston.va.us>

>>>>> "RJ" == Ron Jarrell  writes:

    RJ> The most recent round of patches seems to have solved the
    RJ> problems...  For the record, I'm running 1.5.1 too.
    RJ> (Primarily because I'm lazy, and installed the sunfreeware.com
    RJ> kit, which isn't (or wasn't) 1.5.2)...

Cool.


From grin@tolna.net  Fri Sep  3 23:07:53 1999
From: grin@tolna.net (Peter Gervai)
Date: Sat, 4 Sep 1999 00:07:53 +0200
Subject: [Mailman-Developers] https
In-Reply-To: <14286.39063.709410.786654@anthem.cnri.reston.va.us>; from Barry A. Warsaw on Thu, Sep 02, 1999 at 11:32:39AM -0400
References: <19990902142743.K19459@mail.tolna.net> <14286.39063.709410.786654@anthem.cnri.reston.va.us>
Message-ID: <19990904000753.C8455@mail.tolna.net>

On Thu, Sep 02, 1999 at 11:32:39AM -0400, Barry A. Warsaw wrote:
> 
> >>>>> "PG" == Peter Gervai  writes:
> 
>     PG> I'm using admin interface on https:// url, and some buttons
>     PG> send me to (absolute) address without https. There are http
>     PG> and https users, and I do not want to force either party to
>     PG> use the other way. Is it possible, or would it be possible to
>     PG> sort out such "cross-directions", and keep the user in the
>     PG> selected protocol?
> 
> Could you post a list of the controls that have this problem?

A fast lookaround revealed all of the buttons on the listinfo
page (visit subs list, edit options, etc). Possibly more buttons
behind those.

grin


From wimg@geocities.com  Sun Sep  5 16:01:49 1999
From: wimg@geocities.com (Wim Godden)
Date: Sun, 05 Sep 1999 17:01:49 +0200
Subject: [Mailman-Developers] Archive creation with zero messages
Message-ID: <37D285DD.4FDF@geocities.com>

As stated in the mailman FAQ, at least one message should have been sent
before an archive is created. However, if you just run :
$prefix/bin/arch listname $prefix/archives/private/listname.mbox
then the archive is created even with zero messages and it displays :
Currently, there are no archives.

Which is a perfect solution. Why not just add that line to the
newlist-executable ?


Kind greetings,

Wim Godden



From gorgo@caesar.elte.hu  Tue Sep  7 16:13:18 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Tue, 7 Sep 1999 17:13:18 +0200 (METDST)
Subject: [Mailman-Developers] Bug#43258: mailman: pipermail barfs when invoked multiple times (fwd)
Message-ID: 

Hello,

I got this report in the debian bugtracking system. 

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/

---------- Forwarded message ----------
Date: Fri, 20 Aug 1999 21:12:59 +0200
From: Simon Richter 
To: submit@bugs.debian.org
Subject: Bug#43258: mailman: pipermail barfs when invoked multiple times
Resent-Date: Fri, 20 Aug 1999 19:18:00 GMT
Resent-From: Simon Richter 
Resent-To: debian-bugs-dist@lists.debian.org
Resent-cc: Gergely Madarasz 

Package: mailman
Version: 1.0rc2-5

Hi,

I am using mailman/pipermail for all list processing on my systems, and
among these lists there is one for CVS autopostings. If someone commits
changes in multiple directories, CVS creates a message for each of them,
thus causing multiple messages to be queued in very short time.

However, pipermail seems to have trouble when archiving these messages, the
output from the command invoked by the mailer is as follows:

Traceback (innermost last):
  File "/usr/lib/mailman/Mailman/Archiver/Archiver.py", line 210, in
ArchiveMail
    h.close()
  File "/usr/lib/mailman/Mailman/Archiver/HyperArch.py", line 906, in close
    self.update_dirty_archives()# Update all changed archives
  File "/usr/lib/mailman/Mailman/Archiver/HyperArch.py", line 871, in
update_dirty_archives
    self.update_archive(i)
  File "/usr/lib/mailman/Mailman/Archiver/pipermail.py", line 316, in
update_archive
    article=self.database.getArticle(self.archive, msgid)
  File "/usr/lib/mailman/Mailman/Archiver/HyperDatabase.py", line 264, in
getArticle
    s=self.articleIndex[msgid]
  File "/usr/lib/mailman/Mailman/Archiver/HyperDatabase.py", line 131, in
__getitem__
    return self.dict[item]

I suspect this is some sort of locking problem. Am I right?

   Simon

-- System Information
Debian Release: 2.1
Kernel Version: Linux phobos 2.2.10 #1 Sat Jun 19 17:39:45 CEST 1999 i486 unknown

Versions of the packages mailman depends on:
ii  libc6           2.0.7.19981211 GNU C Library: shared libraries
ii  python-base     1.5.1-7        An interactive object-oriented scripting lan
ii  python-misc     1.5.1-7        Miscellaneous support modules for Python.
ii  python-net      1.5.1-7        TCP/IP and various Internet support modules 
sendmail	Not installed or no info
ii  exim            2.05-1         Exim Mailer
	^^^ (Provides virtual package mail-transport-agent)
apache	Not installed or no info
ii  apache-ssl      1.3.3+1.29-2   Versatile, high-performance HTTP server with
	^^^ (Provides virtual package httpd)



From tdfunk@asd-web.com  Thu Sep  9 21:09:57 1999
From: tdfunk@asd-web.com (Tom Funk)
Date: Thu, 9 Sep 1999 16:09:57 -0400
Subject: [Mailman-Developers] Anti-Spam Acronymns -- I give up...
Message-ID: <7DB247B399FED211A73F00600841DDC7099939@TAL_ENT>

H'lo, Gang:

A few weeks ago there was a short thread on this list that made some passing
references to acronyms for some of the 'Net's anti-spam black list/black
hole servers.  At the time, I didn't know what the acronyms meant so I
hopped over to AltaVista and started hunting them down.  I eventually found
references to all of the referenced servers.  Now, I'd actually like to get
back to one or more of those sites -- but can't find the messages from that
thread.  And, of course, I didn't bookmark any of them... :-(

I can't find the messages locally, I can't find them in the archives and I
can't remember any of the acronyms.  The thread should have been during
August, since I only joined the list as of Aug. 8, or there 'bouts.

The anti-spam references were a side-thread to the primary content of the
messages.  I believe the exchange was between one of the core maintainers
(Barry??) and (I think) someone in Germany (.de domain???).   I also
remember that the core maintainer answering the messages pointed out the one
of the acronyms was "top secret" (a misquote) and lived on the shelf next to
the can of whoop-ass. 

Does any of this ring a bell to anyone?  I'm almost positive the thread was
from this list since I get the Mailman-Users list digested and these
messages were delivered individually.

The bottom line is: what were the acronyms or URLs for the sites in
question?

thx!

-=< tom >=-



From gorgo@caesar.elte.hu  Fri Sep 10 13:33:48 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Fri, 10 Sep 1999 14:33:48 +0200 (METDST)
Subject: [Mailman-Developers] runaway python processes
Message-ID: 

mail     11965  0.0  0.6  1692   804  ?  S   Sep  9   0:00 /usr/bin/python
/var/lib/mailman/scripts/deliver
mail     11972 10.9  0.8  1864  1052  ?  R   Sep  9 157:54  \_
/usr/bin/python /var/lib/mailman/scripts/contact_transport


I have about 6-7 of these. strace reveals nothing, so it doesn't do any
system calls, just eats the processor by itself. Version 1.0.

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/



From gorgo@sztaki.hu  Fri Sep 10 16:46:02 1999
From: gorgo@sztaki.hu (Gergely Madarasz)
Date: Fri, 10 Sep 1999 17:46:02 +0200 (MET DST)
Subject: [Mailman-Developers] Re: Cron  [ -x /usr/bin/python -a -f
 /usr/lib/mailman/cron/run_queue ] && /usr/bin/python
 /usr/lib/mailman/cron/run_queue
In-Reply-To: <14297.7247.714864.3075@chiark.greenend.org.uk>
Message-ID: 

On Fri, 10 Sep 1999, Ian Jackson wrote:

> Cron Daemon writes ("Cron  [ -x /usr/bin/python -a -f /usr/lib/mailman/cron/run_queue ] && /usr/bin/python /usr/lib/mailman/cron/run_queue"):
> > Traceback (innermost last):
> >   File "/usr/lib/mailman/cron/run_queue", line 46, in ?
> >     main()
> >   File "/usr/lib/mailman/cron/run_queue", line 39, in main
> >     lockfile.lock()
> >   File "/usr/lib/mailman/Mailman/flock.py", line 114, in lock
> >     if self.locked():
> >   File "/usr/lib/mailman/Mailman/flock.py", line 193, in locked
> >     pid, winner = self.__read()
> >   File "/usr/lib/mailman/Mailman/flock.py", line 96, in __read
> >     pid, winner = string.split(string.strip(fp.read()))
> > ValueError: unpack list of wrong size
> > Exception exceptions.ValueError: 'unpack list of wrong size' in  ignored
> 
> I just got this mail.  You'll remember that I mailed you a little
> while ago when my system ran out of disk space and I got a `no space
> left on device' error (which was obviously expected) and something
> that looked like the stuff above (which you told me I could ignre).
> 
> But, as you can see, it's happened again, and there is plenty of disk
> space and I can't see anything wrong.

Hmmm... I don't know what this should mean...

Greg



From jafo@tummy.com  Sun Sep 12 08:22:24 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 12 Sep 1999 01:22:24 -0600
Subject: [Mailman-Developers] MailMan typo and suggestion
Message-ID: <19990912012224.B2479@tummy.com>

In reviewing the code I ran into a typo (first part of patch below).
I also ran into "return not not foo & bar" which caused me to
scratch my head a moment.  The second part of the patch is to
change this to "return (foo & bar) == bar", however the alternative
may be "return not not (foo & bar)   # coerce return to 1/0"

Sean
========

Index: MailList.py
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/MailList.py,v
retrieving revision 1.135
diff -c -r1.135 MailList.py
*** MailList.py	1999/09/02 15:04:14	1.135
--- MailList.py	1999/09/12 07:13:51
***************
*** 101,107 ****
      def __AddMember(self, addr, digest):
          """adds the appropriate data to the internal members dict.
  
!         If the username has upercase letters in it, then the value
          in the members dict is the case preserved address, otherwise,
          the value is 0.
          """
--- 101,107 ----
      def __AddMember(self, addr, digest):
          """adds the appropriate data to the internal members dict.
  
!         If the username has uppercase letters in it, then the value
          in the members dict is the case preserved address, otherwise,
          the value is 0.
          """
***************
*** 201,207 ****
  	    return self.digest_members.has_key(user)
  	if not self.user_options.has_key(user):
  	    return 0
! 	return not not self.user_options[user] & option
  
      def SetUserOption(self, user, option, value, save_list=1):
          user = self.GetUserCanonicalAddress(user)
--- 201,207 ----
  	    return self.digest_members.has_key(user)
  	if not self.user_options.has_key(user):
  	    return 0
! 	return (self.user_options[user] & option) == option
  
      def SetUserOption(self, user, option, value, save_list=1):
          user = self.GetUserCanonicalAddress(user)
-- 
 Linux:  Bring back that "greased weasel" feeling.
                 -- Sean Reifschneider, 1998
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Sun Sep 12 08:38:26 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 12 Sep 1999 01:38:26 -0600
Subject: [Mailman-Developers] Sub-address patch
Message-ID: <19990912013825.C2479@tummy.com>

I haven't done any testing of this code yet (I'm not comfortable enough
with things to shove this into production, and don't have a test mailman
setup I can run this on).  The goal of this patch is to add sub-address
matching to the SMART_ADDRESS_MATCH code.

I've added a new option "SMART_ADDRESS_MATCH_SUBADDR" to make it easy to
disable (perhaps it should even be allowed on a per-list basis?).  It's
goal is to match "user-mailman-devel@example.com" with "user@example.com".
I frequently subscribe to a list as "jafo-listname@", but submit from
"jafo@" and sometimes get tripped up in the closed-list restrictions.

It handles both qmail-style sub-addresses (as above) and sendmail-style
("jafo+mailman+devel").

I believe this was one of the things that I asked to be added to the
TODO list, but I don't see it on there (nor did I see any discussion of
it).

Sean
===============

Index: Defaults.py.in
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/Defaults.py.in,v
retrieving revision 1.83
diff -c -r1.83 Defaults.py.in
*** Defaults.py.in	1999/09/07 18:32:44	1.83
--- Defaults.py.in	1999/09/12 07:13:49
***************
*** 120,131 ****
  # spoofed messages may get through.
  USE_ENVELOPE_SENDER = 0
  
! # When true, mailman will consider user@host.domain to be the same address
! # as user@domain.  If set to 0, mailman will consider user@host.domain to 
! # be the same address as user@Host.DoMain, but different than user@domain.
! # Usernames will be case preserved, and host parts of addresses will all be
! # lowercased.
  SMART_ADDRESS_MATCH = 1
  # When set, the listinfo web page overview of lists on the machine will be
  # confined to only those lists whose web_page_url configuration option host
  # is included within the URL by which the page is visited - only those "on
--- 120,139 ----
  # spoofed messages may get through.
  USE_ENVELOPE_SENDER = 0
  
! # When SMART_ADDRESS_MATCH is true, mailman will consider user@host.domain
! # to be the same address as user@domain.  If set to 0, mailman will
! # consider user@host.domain to be the same address as user@Host.DoMain,
! # but different than user@domain.  Usernames will be case preserved,
! # and host parts of addresses will all be lowercased.
  SMART_ADDRESS_MATCH = 1
+ # When SMART_ADDRESS_MATCH_SUBADDR is true (as well as SMART_ADDRESS_MATCH), 
+ # user names with '+' or '-' in them are tried with this part stripped.
+ # For example, "user-mailman-devel@example.com" will match
+ # (in addition to the full address) "user-mailman@example.com" and
+ # "user@example.com".  Similarly with the '+' symbol (- is qmail, + is
+ # sendmail).
+ SMART_ADDRESS_MATCH_SUBADDR = 1
+ 
  # When set, the listinfo web page overview of lists on the machine will be
  # confined to only those lists whose web_page_url configuration option host
  # is included within the URL by which the page is visited - only those "on
Index: Utils.py
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/Utils.py,v
retrieving revision 1.77
diff -c -r1.77 Utils.py
*** Utils.py	1999/09/03 05:55:51	1.77
--- Utils.py	1999/09/12 07:13:51
***************
*** 455,471 ****
      """returns a sorted list of addresses that could possibly match
      a given name.
  
!     For Example, given scott@pobox.com, return ['scott@pobox.com'],
!     given scott@blackbox.pobox.com return ['scott@blackbox.pobox.com',
                                             'scott@pobox.com']"""
  
      name = string.lower(name)
      user, domain = ParseEmail(name)
      res = [name]
      if domain:
          domain = domain[1:]
          while len(domain) >= 2:
!             res.append("%s@%s" % (user, string.join(domain, ".")))
              domain = domain[1:]
      return res
  
--- 455,486 ----
      """returns a sorted list of addresses that could possibly match
      a given name.
  
!     For Example, given scott@pobox.com, return ['scott-mailman@pobox.com'],
!     given scott@blackbox.pobox.com return ['scott-mailman@blackbox.pobox.com',
!                                            'scott@blackbox.pobox.com',
!                                            'scott-mailman@pobox.com',
                                             'scott@pobox.com']"""
  
      name = string.lower(name)
      user, domain = ParseEmail(name)
      res = [name]
+ 
+     #  Try stripping off sub-addresses
+     userList = [user]
+     if mm_cfg.SMART_ADDRESS_MATCH_SUBADDR:
+         userTmp = userList[0]
+         for split in ( '-', '+' ):
+             while 1:
+                 pos = string.rfind(userTmp, split)
+                 if pos <= 0: break   #  <= to not create empty user-names
+                 userTmp = userTmp[:pos]
+                 if pos: userList.append(userTmp)
+ 
      if domain:
          domain = domain[1:]
          while len(domain) >= 2:
!             for user in userList:
!                 res.append("%s@%s" % (user, string.join(domain, ".")))
              domain = domain[1:]
      return res

-- 
 Linux:  When you need to run like a greased weasel.
                 -- Sean Reifschneider, 1998
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Sun Sep 12 08:40:19 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 12 Sep 1999 01:40:19 -0600
Subject: [Mailman-Developers] Another typo
Message-ID: <19990912014019.D2479@tummy.com>

Index: paths.py.in
===================================================================
RCS file: /projects/cvsroot/mailman/misc/paths.py.in,v
retrieving revision 1.4
diff -c -r1.4 paths.py.in
*** paths.py.in 1998/06/22 21:58:04     1.4
--- paths.py.in 1999/09/12 07:38:02
***************
*** 16,22 ****
  # along with this program; if not, write to the Free Software 
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  
! # This file becomes paths.py which is installed in may directories.  By
  # importing this module, sys.path gets `hacked' so that the $prefix/Mailman
  # directory is inserted at the start of that list.  That directory really
  # contains the Mailman modules in package form.  This file exports two
--- 16,22 ----
  # along with this program; if not, write to the Free Software 
  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  
! # This file becomes paths.py which is installed in many directories.  By
  # importing this module, sys.path gets `hacked' so that the $prefix/Mailman
  # directory is inserted at the start of that list.  That directory really
  # contains the Mailman modules in package form.  This file exports two

-- 
 "I want to see more of you around the lab."  "Fine.  I'll gain weight."
                 -- Chris Knight, _Real_Genius_
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Sun Sep 12 10:22:08 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 12 Sep 1999 03:22:08 -0600
Subject: [Mailman-Developers] Patch to rotate log files and mail to owner
Message-ID: <19990912032208.G2479@tummy.com>

Here's a patch that adds the file cron/maillogs, which defaults to running
at 5am every morning.  This checks the 'error' and 'smtp-failures' files
and if they contain any information they are rotated and a summary is
sent to the MAILMAN_OWNER address.

Also added is a COMPRESS_LOGFILES_WITH option which can be set to
compress the log files (and specify what command to use for doing
so).

Sean

Index: Mailman/Defaults.py.in
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/Defaults.py.in,v
retrieving revision 1.83
diff -c -r1.83 Mailman/Defaults.py.in
*** Mailman/Defaults.py.in	1999/09/07 18:32:44	1.83
--- Mailman/Defaults.py.in	1999/09/12 09:12:09
***************
*** 83,88 ****
--- 83,93 ----
  # night to generate the txt.gz file.  See cron/nightly_gzip for details.
  GZIP_ARCHIVE_TXT_FILES = 0
  
+ # Set this to the name of an compression command to run (with "%s" being
+ # substituted for the file name to compress) to compress the logfiles.
+ # If this value is not set, logfiles will not be compressed.
+ #COMPRESS_LOGFILES_WITH = 'gzip "%s"'
+ 
  
  HOME_PAGE         = 'index.html'
  MAILMAN_OWNER     = 'mailman-owner@%s' % DEFAULT_HOST_NAME
Index: Mailman/mm_cfg.py.dist.in
===================================================================
RCS file: /projects/cvsroot/mailman/Mailman/mm_cfg.py.dist.in,v
retrieving revision 1.21
diff -c -r1.21 Mailman/mm_cfg.py.dist.in
*** Mailman/mm_cfg.py.dist.in	1998/06/19 20:11:32	1.21
--- Mailman/mm_cfg.py.dist.in	1999/09/12 09:12:09
***************
*** 55,59 ****
--- 55,61 ----
  PUBLIC_ARCHIVE_URL = '/pipermail'
  PRIVATE_ARCHIVE_URL = '/mailman/private'
  
+ #COMPRESS_LOGFILES_WITH = 'gzip "%s"'
+ 
  # Note - if you're looking for something that is imported from mm_cfg, but you
  # didn't find it above, it's probably in Defaults.py.
Index: cron/crontab.in.in
===================================================================
RCS file: /projects/cvsroot/mailman/cron/crontab.in.in,v
retrieving revision 1.12
diff -c -r1.12 cron/crontab.in.in
*** cron/crontab.in.in	1999/09/04 03:25:36	1.12
--- cron/crontab.in.in	1999/09/12 09:12:09
***************
*** 1,6 ****
--- 1,9 ----
  # At 5PM every day, mail reminders to admins as to pending requests
  0 17 * * * @PYTHON@ @prefix@/cron/checkdbs
  #
+ # At 5AM every day, mail error logs to admin user
+ 0 5 * * * @PYTHON@ @prefix@/cron/maillogs
+ #
  # Noon, mail digests for lists that do periodic as well as threshhold delivery.
  0 12 * * * @PYTHON@ @prefix@/cron/senddigests
  #
===================================================================
*** cron/maillogs.orig	Sun Sep 12 03:08:42 1999
--- cron/maillogs	Sun Sep 12 03:01:52 1999
***************
*** 0 ****
--- 1,83 ----
+ #! /usr/bin/env python
+ #
+ # Copyright (C) 1998 by the Free Software Foundation, Inc.
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License
+ # as published by the Free Software Foundation; either version 2
+ # of the License, or (at your option) any later version.
+ # 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software 
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ 
+ """Check the error logs and send any which have information in them.
+ 
+ If any log entries exist, a message is sent to the mailman owner address
+ and the logs are rotated.
+ """
+ 
+ import sys, os, string, time, errno
+ import paths
+ from Mailman import mm_cfg, Utils
+ import fileinput, socket, time, stat
+ 
+ # Work around known problems with some RedHat cron daemons
+ import signal
+ signal.signal(signal.SIGCHLD, signal.SIG_DFL)
+ 
+ 
+ newLogfiles = []
+ text = []
+ text.append('MailMan Log Report')
+ text.append('Generated: %s' % time.ctime(time.time()))
+ text.append('Host: %s' % socket.gethostname())
+ text.append('')
+ 
+ logDate = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time()))
+ textSend = 0
+ for log in ( 'error', 'smtp-failures' ):
+ 	fileName = os.path.join(mm_cfg.LOG_DIR, log)
+ 
+ 	#  rotate file if it contains any data
+ 	stats = os.stat(fileName)
+ 	if stats[stat.ST_SIZE] < 1: continue
+ 	fileNameNew = '%s.%s' % ( fileName, logDate )
+ 	newLogfiles.append(fileNameNew)
+ 	os.rename(fileName, fileNameNew)
+ 	open(fileName, 'w')
+ 	os.chmod(fileName, stat.S_IMODE(stats[stat.ST_MODE]))
+ 	os.chown(fileName, stats[stat.ST_UID], stats[stat.ST_GID])
+ 
+ 	textSend = 1
+ 	tmp = '#  FILE: %s  #' % fileNameNew
+ 	text.append('#' * len(tmp))
+ 	text.append(tmp)
+ 	text.append('#' * len(tmp))
+ 	text.append('')
+ 
+ 	linesLeft = 30		#  e-mail first linesLeft of log files
+ 	for line in fileinput.input(fileNameNew):
+ 		if linesLeft == 0:
+ 			text.append('[... truncated ...]')
+ 			break
+ 		linesLeft = linesLeft - 1
+ 		line = string.rstrip(line)
+ 		text.append(line)
+ 	text.append('')
+ 
+ #  send message if we've actually found anything
+ if textSend:
+ 	text = string.join(text, '\n') + '\n'
+ 	Utils.SendTextToUser('MailMan Log Report -- %s' % time.ctime(time.time()),
+ 			text, mm_cfg.MAILMAN_OWNER, mm_cfg.MAILMAN_OWNER)
+ 
+ #  compress any log-files we made
+ if hasattr(mm_cfg, 'COMPRESS_LOGFILES_WITH') and mm_cfg.COMPRESS_LOGFILES_WITH:
+ 	for file in newLogfiles:
+ 		os.system(mm_cfg.COMPRESS_LOGFILES_WITH % file)
-- 
 Linux:  When you need to run like a greased weasel.
                 -- Sean Reifschneider, 1998
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From staff@appwatch.com  Sun Sep 12 23:56:08 1999
From: staff@appwatch.com (AppWatch Staff)
Date: 12 Sep 1999 22:56:08 -0000
Subject: [Mailman-Developers] New Apps site: AppWatch.com!
Message-ID: <19990912225608.24543.qmail@mail.jdrowell.com>

Hi Mailman!

We at AppWatch.com are excited about our new site, and looking for Apps lovers all around to enjoy our hard work. We only announce Open Source Software, and do our best to make the updates as quickly as possible. You can even set up your own account to personalize how AppWatch.com looks, and soon you'll be able to filter announcements too. So drop by http://www.appwatch.com an check out the latest, coolest Apps for Linux and other Unixes.

Sincerely,
The AppWatch Staff 

-----
This email was sent to you based on your interest in Open Source applications. The AppWatch.com site services are absolutely free and we just hope you enjoy them. This is not a mailing list and you will not receive any more email on this matter.
-----


From ricardo@miss-janet.com  Mon Sep 13 08:09:45 1999
From: ricardo@miss-janet.com (Ricardo Kustner)
Date: Mon, 13 Sep 1999 09:09:45 +0200
Subject: [Mailman-Developers] New Apps site: AppWatch.com!
In-Reply-To: <19990912225608.24543.qmail@mail.jdrowell.com>; from AppWatch Staff on Sun, Sep 12, 1999 at 10:56:08PM -0000
References: <19990912225608.24543.qmail@mail.jdrowell.com>
Message-ID: <19990913090945.A17891@miss-janet.com>

On Sun, Sep 12, 1999 at 10:56:08PM -0000, AppWatch Staff wrote:
> We at AppWatch.com are excited about our new site, and looking for Apps lovers all around to enjoy our hard work. We only announce Open Source Software, and do our best to make the updates as quickly as possible. You can even set up your own account to personalize how AppWatch.com looks, and soon you'll be able to filter announcements too. So drop by http://www.appwatch.com an check out the latest, coolest Apps for Linux and other Unixes.
> This email was sent to you based on your interest in Open Source applications. The AppWatch.com site services are absolutely free and we just hope you enjoy them. This is not a mailing list and you will not receive any more email on this matter.

Open Source SPAM... where is this world coming to? :(

Ricardo.
--



From julian7@kva.hu  Wed Sep 15 13:43:19 1999
From: julian7@kva.hu (Balazs Nagy)
Date: Wed, 15 Sep 1999 14:43:19 +0200 (CEST)
Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail
Message-ID: 

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---456965764-1315701514-937399399=:19137
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hiyas,

I tested and debugged throughoutly my ol' patch and I found it useable. 
This patch's goal is to use the sendmail-interface rather than use the SMTP
port managing to send letters.  This method is much more effective when the
SMTP server itself is in the local machine. (due of the latency of
establishing a socket)

In the attachment there's the latest patch.  "Save it, patch it, try it,
apply it" ("Hold Me, Thrill Me, Kiss Me, Kill Me").
-- 
Regards: Kevin (Balazs)

---456965764-1315701514-937399399=:19137
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mailman-mta.patch"
Content-Transfer-Encoding: BASE64
Content-ID: 
Content-Description: 
Content-Disposition: attachment; filename="mailman-mta.patch"

ZGlmZiAtcnVOIG1haWxtYW4ub3JpZy9NYWlsbWFuL01lc3NhZ2UucHkgbWFp
bG1hbi9NYWlsbWFuL01lc3NhZ2UucHkNCi0tLSBtYWlsbWFuLm9yaWcvTWFp
bG1hbi9NZXNzYWdlLnB5CVdlZCBKdWwgMjEgMDM6MDU6MTAgMTk5OQ0KKysr
IG1haWxtYW4vTWFpbG1hbi9NZXNzYWdlLnB5CVRodSBTZXAgIDIgMTA6NTQ6
NTQgMTk5OQ0KQEAgLTIyOSw2ICsyMjksOSBAQA0KIAlpZiBub3Qgc2VsZi5n
ZXRoZWFkZXIoJ2Zyb20nKSBhbmQgc2V0X2Zyb206DQogCSAgICBzZWxmLlNl
dEhlYWRlcignZnJvbScsIHNlbmRlcikNCiANCisgICAgZGVmIFNldERhdGUo
c2VsZiwgZGF0ZT10aW1lLmN0aW1lKHRpbWUudGltZSgpKSk6DQorCXNlbGYu
U2V0SGVhZGVyKCdkYXRlJywgZGF0ZSkNCisNCiAgICAgZGVmIEdldFNlbmRl
cihzZWxmKToNCiAJcmV0dXJuIHNlbGYuc2VuZGVyDQogDQpkaWZmIC1ydU4g
bWFpbG1hbi5vcmlnL01haWxtYW4vVXRpbHMucHkgbWFpbG1hbi9NYWlsbWFu
L1V0aWxzLnB5DQotLS0gbWFpbG1hbi5vcmlnL01haWxtYW4vVXRpbHMucHkJ
V2VkIEF1ZyAyNSAxMDo0MjozMyAxOTk5DQorKysgbWFpbG1hbi9NYWlsbWFu
L1V0aWxzLnB5CVRodSBTZXAgIDIgMTA6NTI6NDkgMTk5OQ0KQEAgLTEyMywx
MCArMTIzLDE1IEBADQogICAgIA0KIA0KIGRlZiBTZW5kVGV4dFRvVXNlcihz
dWJqZWN0LCB0ZXh0LCByZWNpcGllbnQsIHNlbmRlciwgYWRkX2hlYWRlcnM9
W10pOg0KLSAgICBpbXBvcnQgTWVzc2FnZQ0KKyAgICBpbXBvcnQgTWVzc2Fn
ZSwgdGltZQ0KICAgICBtc2cgPSBNZXNzYWdlLk91dGdvaW5nTWVzc2FnZSgp
DQogICAgIG1zZy5TZXRTZW5kZXIoc2VuZGVyKQ0KICAgICBtc2cuU2V0SGVh
ZGVyKCdTdWJqZWN0Jywgc3ViamVjdCwgMSkNCisgICAgaWYgbXNnLmdldGhl
YWRlcignTWVzc2FnZS1JRCcpID09IE5vbmU6DQorCW1zZy5TZXRIZWFkZXJz
KCdNZXNzYWdlLUlEOiA8JWYubWFpbG1hbkAlcz4nICUgKHRpbWUudGltZSgp
LA0KKwkgICAgbW1fY2ZnLkRFRkFVTFRfSE9TVF9OQU1FKSkNCisgICAgaWYg
bXNnLmdldGhlYWRlcignRGF0ZScpID09IE5vbmU6DQorCW1zZy5TZXREYXRl
KCkNCiAgICAgbXNnLlNldEJvZHkoUXVvdGVQZXJpb2RzKHRleHQpKQ0KICAg
ICBEZWxpdmVyVG9Vc2VyKG1zZywgcmVjaXBpZW50LCBhZGRfaGVhZGVycz1h
ZGRfaGVhZGVycykNCiANCkBAIC0xNzksNiArMTg0LDI5IEBADQogICAgICAg
ICBPdXRnb2luZ1F1ZXVlLmRlZmVyTWVzc2FnZShxdWV1ZV9pZCkNCiANCiBk
ZWYgVHJ5U01UUERlbGl2ZXJ5KHJlY2lwaWVudCwgc2VuZGVyLCB0ZXh0LCBx
dWV1ZV9lbnRyeSk6DQorICAgIGltcG9ydCB0eXBlcw0KKw0KKyAgICBpZiB0
eXBlKG1tX2NmZy5NQUlMRVJfQ01EKSA9PSB0eXBlcy5TdHJpbmdUeXBlIGFu
ZCBsZW4obW1fY2ZnLk1BSUxFUl9DTUQpOg0KKyAJcmVjaXAgPSBbXQ0KKyAJ
aWYgdHlwZShyZWNpcGllbnQpID09IHR5cGVzLlN0cmluZ1R5cGU6DQorIAkg
ICAgcmVjaXAgPSBbcmVjaXBpZW50XQ0KKyAJZWxpZiB0eXBlKHJlY2lwaWVu
dCkgPT0gdHlwZXMuTGlzdFR5cGU6DQorIAkgICAgcmVjaXAgPSByZWNpcGll
bnQNCisgCWVsc2U6DQorIAkgICAgcmV0dXJuDQorIAkgICAgIyBXaGF0IGVs
c2Ugd2UgY2FuIGRvPyBMb2c/DQorIAl0cnk6DQorIAkgICAgcHBlID0gb3Mu
cG9wZW4obW1fY2ZnLk1BSUxFUl9DTUQgJSB7DQorIAkJICAgICdtbV9zZW5k
ZXInOiBzZW5kZXIsDQorIAkJICAgICdtbV9yZWNpcGllbnRzJzogc3RyaW5n
LmpvaW4ocmVjaXAsICcgJyksDQorIAkJfSwgJ3cnKQ0KKyAJICAgIHBwZS53
cml0ZSh0ZXh0KQ0KKyAJICAgIHBwZS5jbG9zZSgpDQorIAkgICAgcmV0dXJu
DQorIAlleGNlcHQ6DQorIAkgICAgcGFzcw0KKyAJICAgICMgVHJ5IHRvIGRl
bGl2ZXIgdmlhIFNNVFAgcG9ydCBpbnN0ZWFkDQorIA0KICAgICBpbXBvcnQg
c29ja2V0DQogICAgIGltcG9ydCBPdXRnb2luZ1F1ZXVlDQogDQpkaWZmIC1y
dU4gbWFpbG1hbi5vcmlnL01haWxtYW4vbW1fY2ZnLnB5LmRpc3QuaW4gbWFp
bG1hbi9NYWlsbWFuL21tX2NmZy5weS5kaXN0LmluDQotLS0gbWFpbG1hbi5v
cmlnL01haWxtYW4vbW1fY2ZnLnB5LmRpc3QuaW4JRnJpIEp1biAxOSAyMjox
MTozMiAxOTk4DQorKysgbWFpbG1hbi9NYWlsbWFuL21tX2NmZy5weS5kaXN0
LmluCVRodSBTZXAgIDIgMTA6NTI6NDkgMTk5OQ0KQEAgLTU1LDUgKzU1LDcg
QEANCiBQVUJMSUNfQVJDSElWRV9VUkwgPSAnL3BpcGVybWFpbCcNCiBQUklW
QVRFX0FSQ0hJVkVfVVJMID0gJy9tYWlsbWFuL3ByaXZhdGUnDQogDQorTUFJ
TEVSX0NNRAkgID0gJ0BTRU5ETUFJTEAnDQorDQogIyBOb3RlIC0gaWYgeW91
J3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGVkIGZy
b20gbW1fY2ZnLCBidXQgeW91DQogIyBkaWRuJ3QgZmluZCBpdCBhYm92ZSwg
aXQncyBwcm9iYWJseSBpbiBEZWZhdWx0cy5weS4NCmRpZmYgLXJ1TiBtYWls
bWFuLm9yaWcvUkVBRE1FLlFNQUlMIG1haWxtYW4vUkVBRE1FLlFNQUlMDQot
LS0gbWFpbG1hbi5vcmlnL1JFQURNRS5RTUFJTAlNb24gTWFyICAxIDE4OjM3
OjQwIDE5OTkNCisrKyBtYWlsbWFuL1JFQURNRS5RTUFJTAlUaHUgU2VwICAy
IDEwOjUyOjQ5IDE5OTkNCkBAIC02Nyw3ICs2Nyw3IEBADQogICB0Y3AtZW52
OiAxMjcuIDE0My4yMDUuMjAwIDogc2V0ZW52IFJFTEFZQ0xJRU5UDQogDQog
ICB3aGVyZSAxNDMuMjA1LjIwMC4gaXMgeW91ciBkb21haW4uICBJZiB5b3Ug
dXNlIHRjcHNlcnZlciwgdGhlbiB5b3UNCi0gIG5lZWQgc29tZXRoaW5nIGxp
a2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIC9ldGMvdGNwLnNtdHAgZmlsZToN
CisgIG5lZWQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3Vy
IC9ldGMvdGNwLnNtdHAgKG9yIHN1Y2gpIGZpbGU6DQogDQogICAxNDMuMjA1
LjIwMC46YWxsb3csUkVMQVlDTElFTlQ9IiINCiAgIDEyNy46YWxsb3csUkVM
QVlDTElFTlQ9IiINCkBAIC03NSwxMCArNzUsMTMgQEANCiAtIEJOOiBCaWdn
ZXIgL3Zhci9xbWFpbC9jb250cm9sL2NvbmN1cnJlbmN5cmVtb3RlIHZhbHVl
cyB3b3JrIGJldHRlcg0KICAgc2VuZGluZyBvdXRib3VuZCBtZXNzYWdlcy4N
CiANCistIEJpZ2dlciAvdmFyL3FtYWlsL2NvbnRyb2wvY29uY3VycmVuY3ly
ZW1vdGUgdmFsdWVzIHdvcmsgYmV0dGVyIHNlbmRpbmcNCisgIG91dGJvdW5k
IG1lc3NhZ2VzLg0KKw0KIC0gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzZXR0
aW5nIHVwIHFtYWlsIGFuZCByZWxheWluZyBjYW4gYmUgZm91bmQgaW4gDQog
ICB0aGUgcW1haWwgZG9jdW1lbnRhdGlvbi4NCiANCi1CTjogTGFzdCBidXQg
bm90IGxlYXN0LCBoZXJlJ3MgYSBsaXR0bGUgc2NyaXB0IHRvIGdlbmVyYXRl
IGFsaWFzZXMgdG8NCitCTjogQXQgbGFzdCBidXQgbm90IGxlYXN0IHRoZXJl
J3MgYSBsaXR0bGUgc2NyaXB0IHRvIGdlbmVyYXRlIGFsaWFzZXMgdG8NCiB5
b3VyIGxpc3RzOg0KIA0KICMhL2Jpbi9zaA0KZGlmZiAtcnVOIG1haWxtYW4u
b3JpZy9jb25maWd1cmUuaW4gbWFpbG1hbi9jb25maWd1cmUuaW4NCi0tLSBt
YWlsbWFuLm9yaWcvY29uZmlndXJlLmluCUZyaSBKdWwgMjMgMDk6MDk6MDUg
MTk5OQ0KKysrIG1haWxtYW4vY29uZmlndXJlLmluCVRodSBTZXAgIDIgMTA6
NTI6NDkgMTk5OQ0KQEAgLTI1NCw3ICsyNTQsNyBAQA0KIGlmIHRlc3QgLXog
IiR3aXRoX21haWxfZ2lkIg0KIHRoZW4NCiAgICAgQUNfQ0FDSEVfVkFMKGFj
X2N2X2dyb3VwX21haWwsIFtkbmwNCi0gICAgYWNfY3ZfZ3JvdXBfbWFpbD0i
b3RoZXIgbWFpbCBkYWVtb24iXSkNCisgICAgYWNfY3ZfZ3JvdXBfbWFpbD0i
bm9maWxlcyBvdGhlciBtYWlsIGRhZW1vbiJdKQ0KIGVsc2UNCiAgICAgYWNf
Y3ZfZ3JvdXBfbWFpbD0kd2l0aF9tYWlsX2dpZA0KIGZpDQpAQCAtMjk0LDgg
KzI5NCw0OCBAQA0KIGZpDQogDQogDQotI01NX0ZJTkRfVVNFUl9JRChBTElB
U19VSUQsIG1haWxtYW4sIGFsaWFzX3dyYXBwZXIpDQotI01NX0ZJTkRfR1JP
VVBfSUQoQUxJQVNfR0lELCBtYWlsLCBhbGlhc193cmFwcGVyKQ0KK0FDX01T
R19DSEVDS0lORyhmb3Igc2VuZG1haWwgcHJvZ3JhbXMpDQorQUNfQVJHX1dJ
VEgoc2VuZG1haWwsIGRubA0KK1sgIC0td2l0aC1zZW5kbWFpbCAgICAgIGRv
IGRlbGl2ZXJpZXMgd2l0aCB0aGlzIHByb2dyYW1dKQ0KK2lmIHRlc3QgLXog
IiR3aXRoX3NlbmRtYWlsIg0KK3RoZW4NCisgICAgQUNfQ0FDSEVfVkFMKGFj
X2N2X3NlbmRtYWlsLCBbZG5sDQorCWFjX2N2X3NlbmRtYWlsPSIvdmFyL3Ft
YWlsL2Jpbi9xbWFpbC1pbmplY3QgL3Vzci9saWIvc2VuZG1haWwgL3Vzci9z
YmluL3NlbmRtYWlsIC9ldGMvc2VuZG1haWwiXSkNCitlbHNlDQorICAgIGFj
X2N2X3NlbmRtYWlsPSR3aXRoX3NlbmRtYWlsDQorZmkNCitBQ19TVUJTVChT
RU5ETUFJTCkNCitjaGFuZ2VxdW90ZSgsKQ0KK2NhdCA+IGNvbmZ0ZXN0LnB5
IDw8RU9GDQoraW1wb3J0IG9zLCBzdHJpbmcNCitmaWwgPSAnJw0KK2ZvciBm
bGUgaW4gc3RyaW5nLnNwbGl0KCIkYWNfY3Zfc2VuZG1haWwiKToNCisgICAg
dHJ5Og0KKwlsID0gb3Muc3RhdChmbGUpDQorCWlmIGxbMF0gJiAweDExMToN
CisJICAgIGZpbCA9IGZsZQ0KKwkgICAgYnJlYWsNCisgICAgZXhjZXB0Og0K
KwlwYXNzDQorZnAgPSBvcGVuKCdjb25mdGVzdC5vdXQnLCAndycpDQorZnAu
d3JpdGUoJyVzXG4nICUgZmlsKQ0KK2ZwLmNsb3NlDQorRU9GDQorY2hhbmdl
cXVvdGUoWywgXSkNCiskUFlUSE9OIGNvbmZ0ZXN0LnB5DQorU0VORE1BSUw9
YGNhdCBjb25mdGVzdC5vdXRgDQorIyBQYXJhbWV0ZXJzIGFyZSB0aGUgc2Ft
ZSBmb3IgcW1haWwtaW5qZWN0IGFuZCBzZW5kbWFpbC1jbG9uZXMgYnV0IHdo
byBrbm93cz8NCitpZiB0ZXN0ICEgLXogJFNFTkRNQUlMOyB0aGVuDQorICAg
IGlmIHRlc3QgJHtTRU5ETUFJTCUlcW1haWwtaW5qZWN0fSAhPSAkU0VORE1B
SUw7IHRoZW4NCisJU0VORE1BSUw9IiRTRU5ETUFJTCAtZiAlKG1tX3NlbmRl
cilzICUobW1fcmVjaXBpZW50cykiDQorICAgIGVsaWYgdGVzdCAke1NFTkRN
QUlMJSVzZW5kbWFpbH0gIT0gJFNFTkRNQUlMOyB0aGVuDQorCVNFTkRNQUlM
PSIkU0VORE1BSUwgLWYgJShtbV9zZW5kZXIpcyAlKG1tX3JlY2lwaWVudHMp
Ig0KKyAgICBlbHNlDQorCVNFTkRNQUlMPQ0KKyAgICBmaQ0KK2ZpDQorQUNf
TVNHX1JFU1VMVCgkU0VORE1BSUwpDQorcm0gLWYgY29uZnRlc3Qub3V0IGNv
bmZ0ZXN0LnB5DQogDQogIyBDaGVjayBmb3IgQ0dJIGV4dGVuc2lvbnMsIHJl
cXVpcmVkIGJ5IHNvbWUgV2ViIHNlcnZlcnMNCiBBQ19TVUJTVChDR0lFWFQp
DQo=
---456965764-1315701514-937399399=:19137--


From gorgo@caesar.elte.hu  Wed Sep 15 14:00:58 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Wed, 15 Sep 1999 15:00:58 +0200 (METDST)
Subject: [Mailman-Developers] lock timeout ?
Message-ID: 

Hello,

This is running on a stock 2.2.12 kernel... what could be the problem ?

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/

---------- Forwarded message ----------
Date: Wed, 15 Sep 1999 14:55:23 +0200
From: aikido-request@chardonnay.math.bme.hu
To: root@chardonnay.math.bme.hu
Subject: Mailman results for Aikido
Resent-Date: Wed, 15 Sep 1999 14:53:51 +0200
Resent-From: korn@chardonnay.math.bme.hu
Resent-To: gorgo@caesar.elte.hu

This is an automated response.

There were problems with the email commands you sent to Mailman via
the administrative address .

To obtain instructions on valid Mailman email commands, send email to
 with the word "help" in the
subject line or in the body of the message.

If you want to reach the human being that manages this mailing list,
please send your message to .

The following is a detailed description of the problems.


***** subscribe
>>>>> An unexpected Mailman error has occurred.
>>>>> 
>>>>> Please forward your request to the human list administrator in charge
>>>>> of this list at .  The traceback
>>>>> is attached below and will be forwarded to the list administrator
>>>>> automatically.

Traceback (innermost last):
  File "/usr/lib/mailman/Mailman/MailCommandHandler.py", line 204, in ParseMailCommands
    self.__dispatch[cmd](args, line, msg)
  File "/usr/lib/mailman/Mailman/MailCommandHandler.py", line 542, in ProcessSubscribeCmd
    self.AddMember(subscribe_address, password, digest, remote)
  File "/usr/lib/mailman/Mailman/MailList.py", line 885, in AddMember
    cookie = Pending().new(name, password, digest)
  File "/usr/lib/mailman/Mailman/Pending.py", line 67, in new
    db = self.__load()
  File "/usr/lib/mailman/Mailman/Pending.py", line 94, in __load
    self.__assert_lock(self.db_lock_timeout)
  File "/usr/lib/mailman/Mailman/Pending.py", line 120, in __assert_lock
    self.__lock.lock(timeout)
  File "/usr/lib/mailman/Mailman/flock.py", line 127, in lock
    raise TimeOutError
TimeOutError



From Nigel.Metheringham@vdata.co.uk  Wed Sep 15 14:05:42 1999
From: Nigel.Metheringham@vdata.co.uk (Nigel Metheringham)
Date: Wed, 15 Sep 1999 14:05:42 +0100
Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail
In-Reply-To: Message from Balazs Nagy 
 of "Wed, 15 Sep 1999 14:43:19 +0200." 
Message-ID: 

julian7@kva.hu said:
> This patch's goal is to use the sendmail-interface rather than use the
> SMTP port managing to send letters.  This method is much more
> effective when the SMTP server itself is in the local machine. (due of
> the latency of establishing a socket) 

I find this *very* strange - I would expect the process startup hit to 
be a real performance limiter in this situation.  However some of the 
differences in the way that qmail runs as opposed to a sendmail or 
similar MTA daemon may well mean that this method works for qmail.

Certainly the latency to connect to a loopback network socket should be 
minimal (as long as no one starts trying to do strange things like 
remote DNS reverse lookups of 127.0.0.1).

Other downsides are the inability to deal with errors relating to a 
single recipient other than by a bounce message (ie no per recipient 
turnround message).

Actually maybe thats the latency you are referring to - in an SMTP 
transaction you *should* wait after each RCPT TO for a return code, so 
each recipient would have a turnround time and a couple of process 
context switches.  If the MTA supports streaming (ESMTP required) then 
you could blat the recipients across without waiting for turnround - 
you can't just fire them in a pile because its possible you could get a 
double blocking leading to deadly embrace - and then check the return 
codes separately.  [I haven't checked through the python code to see 
exactly whats happening here]

	Nigel.
-- 
[ Nigel Metheringham                  Nigel.Metheringham@VData.co.uk ]
[ Phone: +44 1423 850000                         Fax +44 1423 858866 ]




From julian7@kva.hu  Wed Sep 15 14:23:53 1999
From: julian7@kva.hu (Balazs Nagy)
Date: Wed, 15 Sep 1999 15:23:53 +0200 (CEST)
Subject: [Mailman-Developers] [PATCH] MTA patch for sendmail/qmail
In-Reply-To: 
Message-ID: 

On Wed, 15 Sep 1999, Nigel Metheringham wrote:

> I find this *very* strange - I would expect the process startup hit to 
> be a real performance limiter in this situation.  However some of the 
> differences in the way that qmail runs as opposed to a sendmail or 
> similar MTA daemon may well mean that this method works for qmail.

Well, qmail just put the mail to the queue.  If you use SMTP directly, you
have to deal with connection failures, error codes etc (== you have to use
an own queue other than the MTA).  *This* is the deal.

> Certainly the latency to connect to a loopback network socket should be 
> minimal (as long as no one starts trying to do strange things like 
> remote DNS reverse lookups of 127.0.0.1).

Sure - this can be true for sendmail giant, but the slimmer commands doesn't
allocate loads of memory, doesn't parse big files.  If you use SMTP port,
firstly you open that connection, an inetd/tcpserver calls a qmail-smtpd,
which calls a qmail-inject, besides of the local delivery, which only calls
qmail-inject.

> Other downsides are the inability to deal with errors relating to a 
> single recipient other than by a bounce message (ie no per recipient 
> turnround message).

Yeah.  But your method doesn't work for a lot of addresses too.  IMHO that
solution doesn't work effectively.
-- 
Regards: Kevin (Balazs)



From DAFcnc@iwr.ru.ac.za  Thu Sep 16 08:54:26 1999
From: DAFcnc@iwr.ru.ac.za (DAFcnc)
Date: Thu, 16 Sep 1999 09:54:26 +0200
Subject: [Mailman-Developers] something to add to v2,please
Message-ID: <37E0A232.FE5D0112@iwr.ru.ac.za>

Hiya

I'm not a list member so reply direct please

I've been using mailman to run my list for about 2 months now and it
is just great
However, there is one thing I'd like to see added to future versions. 
As the list adminstrator I'd like to be able to extract a full list of
members with settings as a 'text file'.   The membership management
screen only lists 30 at a time in a table.  I'd like an option to dump
all members, plus the settings, as a lump of text in a 

box.
I can then copy and paste it to a file for backup purposes, and for
mass admin purposes.
The settings can simply by a bunch of 1 or 0 in the order of the table
headings to indicate the status of those options.

I'm use to having such a text listing after using Mercury MTS on a
Novell server for 3 years for this list of mine.

thanks

steam and wind

--
       David Forsyth                 DaForce A-T Iwr.Ru.Ac.Za
Keeper of the listserver for South African Railways fans       _|_ His
Part time gricer, kiter, photographer, father etc etc           |  Way
http://www.ru.ac.za/departments/iwr/staff/daf/welcome.html      |  Up


From ricardo@miss-janet.com  Thu Sep 16 09:22:08 1999
From: ricardo@miss-janet.com (Ricardo Kustner)
Date: Thu, 16 Sep 1999 10:22:08 +0200
Subject: [Mailman-Developers] something to add to v2,please
In-Reply-To: <37E0A232.FE5D0112@iwr.ru.ac.za>; from DAFcnc on Thu, Sep 16, 1999 at 09:54:26AM +0200
References: <37E0A232.FE5D0112@iwr.ru.ac.za>
Message-ID: <19990916102208.A15627@miss-janet.com>

On Thu, Sep 16, 1999 at 09:54:26AM +0200, DAFcnc wrote:
> I've been using mailman to run my list for about 2 months now and it
> is just great
> However, there is one thing I'd like to see added to future versions. 
> As the list adminstrator I'd like to be able to extract a full list of
> members with settings as a 'text file'.   The membership management
> screen only lists 30 at a time in a table.  I'd like an option to dump
> all members, plus the settings, as a lump of text in a 

> box.
> I can then copy and paste it to a file for backup purposes, and for
> mass admin purposes.
> The settings can simply by a bunch of 1 or 0 in the order of the table
> headings to indicate the status of those options.

~mailman/bin/list_members listname > members.list

type list_members w/o parameters to see what options you have (for example,
you can make a seperate list of the digeset members)
it's easy to make a cronjob to backup this list.

Ricardo.
--



From guido@CNRI.Reston.VA.US  Thu Sep 16 19:53:52 1999
From: guido@CNRI.Reston.VA.US (Guido van Rossum)
Date: Thu, 16 Sep 1999 14:53:52 -0400
Subject: [Mailman-Developers] Reminder: Python Conference papers due soon!
Message-ID: <199909161853.OAA01738@eric.cnri.reston.va.us>

The deadline for paper submissions for the next Python conference is
nearing!  Make sure that if you are considering submitting a paper,
the program chair sees your paper by SEPTEMBER 30.  Papers can be on
any Python, JPython or Zope related subject.  Papers will be reviewed
and the best papers will be selected for presentation.  You will hear
about selection by October 22.

For more information, see the official call for papers:
http://www.python.org/workshops/2000-01/cfp.html

** We are planning a significant Zope presence at this conference! **

The conference will be held from January 24-27 in Alexandria, VA (just
across the Potomac from DC).  Make Python the first conference in the
new millennium you visit!  For more info, see the conference home
page: http://www.python.org/workshops/2000-01/

Send all email questions about papers to: ipc8papers@cs.uchicago.edu

--Guido van Rossum (home page: http://www.python.org/~guido/)

(And sorry for the broad spamming.)



From gonter@maestria.wu-wien.ac.at  Sat Sep 18 09:27:40 1999
From: gonter@maestria.wu-wien.ac.at (Gerhard Gonter)
Date: Sat, 18 Sep 1999 10:27:40 +0200 (MES)
Subject: [Mailman-Developers] multilingual mailman
Message-ID: <199909180827.KAA29138@maestria.wu-wien.ac.at>

Are there any plans to for non-english user interfaces which can be
selected individually by the user or at least for a whole list?

I would like to help start this effort or help otherwise.

+gg
 
--
Gerhard.Gonter@wu-wien.ac.at  Fax: +43/1/31336/702  g.gonter@ieee.org
Zentrum fuer Informatikdienste, Wirtschaftsuniversitaet Wien, Austria


From jafo@tummy.com  Sun Sep 19 07:54:51 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sun, 19 Sep 1999 00:54:51 -0600
Subject: [Mailman-Developers] multilingual mailman
In-Reply-To: <199909180827.KAA29138@maestria.wu-wien.ac.at>; from Gerhard Gonter on Sat, Sep 18, 1999 at 10:27:40AM +0200
References: <199909180827.KAA29138@maestria.wu-wien.ac.at>
Message-ID: <19990919005451.B2887@tummy.com>

On Sat, Sep 18, 1999 at 10:27:40AM +0200, Gerhard Gonter wrote:
>Are there any plans to for non-english user interfaces which can be
>selected individually by the user or at least for a whole list?

I thought I heard there was somone working on adding support for
internationalization, but I haven't heard anything about what approach
is being used or it's status.

What about an approach that would use an interface like this:

	setlang('German')
	print translang['ERROR: You have selected an invalid option ("%s")']
	print translang['       Please try again...']

I imagine a shelve called "German" which has as the key the hash of the
string, and as the value the translated string.  I seem to recall that
some dbm implementations are fixed in size of the values they can
represent, but I don't know what that limit may be.

Any comments?

Sean
-- 
 There are things that are so serious that you can only joke about them.
                 -- Heisenberg
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From dan@feld.cvut.cz  Sun Sep 19 18:34:06 1999
From: dan@feld.cvut.cz (Dan Ohnesorg)
Date: Sun, 19 Sep 1999 19:34:06 +0200 (CEST)
Subject: [Mailman-Developers] multilingual mailman
In-Reply-To: <19990919005451.B2887@tummy.com>
Message-ID: 

On Sun, 19 Sep 1999, Sean Reifschneider wrote:

> On Sat, Sep 18, 1999 at 10:27:40AM +0200, Gerhard Gonter wrote:
> >Are there any plans to for non-english user interfaces which can be
> >selected individually by the user or at least for a whole list?
> 
> I thought I heard there was somone working on adding support for
> internationalization, but I haven't heard anything about what approach
> is being used or it's status.
We are working on it, curently we are waiting on Barrys opinion to our
patches.



> 
> What about an approach that would use an interface like this:
> 
> 	setlang('German')
> 	print translang['ERROR: You have selected an invalid option ("%s")']
> 	print translang['       Please try again...']
> 
We are using GETTEXT package, so the translation is done like this:

import intl
setlocale()
_=intl.gettext

bindtexttodomain('mailman')

print _("Hello world")

It is a litle bit diferent in praxis, but not too.

cheers
dan



-- 
                    ________________________________________
DDDDDD             
DD   DD                Dan Ohnesorg, supervisor on POWER     
DD  OOOO               Dan@feld.cvut.cz
DD OODDOO              Dep. of Power Engineering
DDDDDD OO              CTU FEL Prague, Bohemia
   OO  OO              work: +420 2 24352785;+420 2 24972109
    OOOO               home: +420 311 679679;+420 311 679311
                    ________________________________________

Nejztracenejsi den naseho zivota
je ten, kdy jsme se nezasmali.



From listwrangler@iximd.com  Sun Sep 19 18:30:05 1999
From: listwrangler@iximd.com (Listwrangler)
Date: Sun, 19 Sep 1999 12:30:05 -0500
Subject: [Mailman-Developers] something to add to v2,please -- BACKUPS!
In-Reply-To: <37E0A232.FE5D0112@iwr.ru.ac.za>
Message-ID: 

>However, there is one thing I'd like to see added to future versions.
>As the list adminstrator I'd like to be able to extract a full list of
>members with settings as a 'text file'.   The membership management
>screen only lists 30 at a time in a table.  I'd like an option to dump
>all members, plus the settings, as a lump of text in a 

>box.
>I can then copy and paste it to a file for backup purposes, and for
>mass admin purposes.
>The settings can simply by a bunch of 1 or 0 in the order of the table
>headings to indicate the status of those options.


Good idea! I've sometimes wanted a text file I could print off, but the
point about being able to make backups is essential.

BACKUPS!

I hate being dependent upon our ISP for backups; with my organization's
regular web pages when our ISP experienced a quadruple failure and
installed new hardware I just uploaded my pages and was back in business in
15 mins while their other users had to wait days for them to complete
recovery efforts.

I realize that Mailman is a different case, but it sure would be nice to be
able to recover a list without having to manually set all the password,
configuration options, list specific text, etc, by hand. Just ftp the pages
up, test and go. (It's not probably not that simple, is it?)

Case in point for disaster recovery: our ISP was wiped out by Hurricane
Floyd (flood and fire) and is rebuilding. The list admin pages are there,
but they don't recognize my password. (I have my passwords documented in a
secure place, so I know my password is right.) God only knows what they set
the password or other configuration info to. If I could just ftp the pages
up myself and have them restore the password, configuration, text, etc, I'd
be back in business ASAP. Needlesstosay, the ISP is slightly busy with more
important problems like replacings servers and bailing out the basement.
God knows when our lists will be functional again.

Doing some experimenting, I tried downloading my admin web pages from the
one list I can access right now. If I download as source, I get everything,
html tags, windows contents, etc. It's hard to read, but I have it. Now
when I need to restore a list I can refer to my source file and make sure I
set everything the way it used to be. Once I get access to my other lists I
will backup them all to this degree at least.

It seems like it ought to be possible (but I'm not a programmer) to simply
ftp this file up to the Mailmain admin site and have it set everything. It
also seems like it would be possible to use this file as a template so that
when I am creating new lists with the same configuration I can copy it,
edit it as needed, then upload it. It would be nice to be able to edit a
configuration file offline. Of course, this would require the list
administrator to know enough html to not mess it up.

Right now Mailman lives in a different folder than our organization's
accounts, so we can't access it. But is there some reason why a Mailman
list has to live in a folder by itself? Couldn't we just plop the admin
pages onto our ftp site at least? The pages would then have to communicate
with the actual program, but that's just a matter of setting the pointers
properly, enit? For that matter, is there some reason why the whole program
couldn't be plopped into the user's ftp site to fiddle with as they please?
Assuming their ftp/web server is a Unix machine.

I guess this relates to the fact that Mailman appears to have been built on
the premise that list administrators would always have access to the
machine running the list. Which a lot of us don't. I asked for a shell
account from my ISP, but they refused. (grumble)

It also relates to the fact that ISPs are used to charging money for
listservices, and if they let users upload copies of free software like
Mailman onto the user's own web site they couldn't charge them money for
hosting the listserv. (grumble) In this scenario the user better know what
he was doing as he'd be solely responsible for maintaining the software,
but okay. I'd be game to learn.

Listwrangler



Listwrangler
listwrangler@iximd.com

********************
For help with subscribe/unsubscribe, troubleshooting, or more info about
The American Boyz email lists, please visit:
home.iximd.com/~amboyz/online.html, or request a copy of the Amboyz Elist
Help File to be emailed to you.

If you are familiar with Mailman, the following lists are implemented with
Mailman and use standard Mailman features: Amboyz-Main, Amboyz-Announce,
TrueSpirit, and ElderTG




From sendy@dds.nl  Mon Sep 20 01:45:10 1999
From: sendy@dds.nl (Sendy)
Date: Mon, 20 Sep 1999 02:45:10 +0200
Subject: [Mailman-Developers] bounce_detection failure
Message-ID: <19990920024510.B19826@stereo.rotzorg.org>

Hi

i've setup mailman op a Debian linux box, but somehow bouncedetection fails, and I cannot find how/what and where... (I'm no python hacker)

I have included the message here, taken from my /var/spool/mail/sgr

--
From Mailer-Daemon@rotzorg.org  Mon Sep 20 01:23:56 1999
From: Mailer-Daemon@rotzorg.org (Mail Delivery System)
Date: Mon, 20 Sep 1999 02:23:56 +0200
Subject: Mail delivery failed: returning message to sender
Message-ID: 

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to all of its recipients. The
following address(es) failed:

  delangen@its.tudelft.nl:
    SMTP error from remote mailer after RCPT TO:
    :
    host mailhost1.et.tudelft.nl [130.161.33.163]:
    553 5.1.1 unknown or illegal user:
    delangen@its.tudelft.nl

----- This is a copy of the message, including all the headers. ------

Return-path: 
Received: from localhost (k298r.balpol.tudelft.nl) [127.0.0.1] 
        by stereo.rotzorg.org with esmtp (Exim 2.05 #1 (Debian))
        id 11SrFJ-00058j-00; Mon, 20 Sep 1999 02:23:53 +0200
Received: from sgr by stereo.rotzorg.org with local (Exim 2.05 #1 (Debian))
        id 11SrEp-00058U-00; Mon, 20 Sep 1999 02:23:23 +0200
Date: Mon, 20 Sep 1999 02:23:22 +0200
From: Sendy 
To: lanparty-helden@rotzorg.org
Message-ID: <19990920022322.A19735@stereo.rotzorg.org>
Reply-To: sendy@dds.nl
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Mailer: Mutt 0.95.3i
Subject: [Lanparty-helden] test
Sender: lanparty-helden-admin@rotzorg.org
Errors-To: lanparty-helden-admin@rotzorg.org
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id: Mailinglist voor de KB Lanparty organisatoren 
X-BeenThere: lanparty-helden@rotzorg.org



_______________________________________________
Lanparty-helden mailing list  -  Lanparty-helden@rotzorg.org
http://rotzorg.org/mailman/listinfo/lanparty-helden

Can somebody help me?
TIA
Sendy


From sendy@dds.nl  Mon Sep 20 08:57:16 1999
From: sendy@dds.nl (Sendy)
Date: Mon, 20 Sep 1999 09:57:16 +0200
Subject: [Mailman-Developers] bounce_detection failure
In-Reply-To: <19990920024510.B19826@stereo.rotzorg.org>; from Sendy on Mon, Sep 20, 1999 at 02:45:10AM +0200
References: <19990920024510.B19826@stereo.rotzorg.org>
Message-ID: <19990920095716.A21135@stereo.rotzorg.org>

Hi y'all

BTW I am using mailman v1.0rc2 en exim 2.1 as MTA.

Hope this helps,
Sendy


From gorgo@caesar.elte.hu  Mon Sep 20 11:48:14 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Mon, 20 Sep 1999 12:48:14 +0200 (METDST)
Subject: [Mailman-Developers] bounce_detection failure
In-Reply-To: <19990920095716.A21135@stereo.rotzorg.org>
Message-ID: 

On Mon, 20 Sep 1999, Sendy wrote:

> Hi y'all
> 
> BTW I am using mailman v1.0rc2 en exim 2.1 as MTA.

mailmans bounce detector does not work with exims error messages :(

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/



From webmaster@python.org  Tue Sep 21 01:41:36 1999
From: webmaster@python.org (Barry A. Warsaw)
Date: Mon, 20 Sep 1999 20:41:36 -0400 (EDT)
Subject: [Mailman-Developers] multilingual mailman
References: <19990919005451.B2887@tummy.com>
 
Message-ID: <14310.54336.525239.293671@anthem.cnri.reston.va.us>

>>>>> "DO" == Dan Ohnesorg  writes:

    DO> We are working on it, curently we are waiting on Barrys
    DO> opinion to our patches.

I am, unfortunately, not going to have any time to get to it before I
go on vacation.  Please accept my apologies (I need to get a JPython
release out).  Hopefully Harald or one of the other cabalistas will be 
able to help out before I get back and caught up.

-Barry


From stumpf@rancon.de  Thu Sep 23 09:37:10 1999
From: stumpf@rancon.de (Wolfram Stumpf)
Date: Thu, 23 Sep 1999 10:37:10 +0200
Subject: [Mailman-Developers] Error while executing newlist (new one!)
Message-ID: <37E9E6B6.D734DB2B@rancon.de>

Hi everybody!

After succesfully installing mailman 1.0, I tried to create a test-list
with newlist. But instead of creating the list, newlist exits with the
following error message:

 Traceback (innermost last):
  File "./newlist", line 146, in ?
    raise SystemExit(main(sys.argv))
  File "./newlist", line 93, in main
    newlist.Create(list_name, owner_mail, pw)
  File "/home/mailman/Mailman/MailList.py", line 724, in Create
    self.Lock()
  File "/home/mailman/Mailman/MailList.py", line 1379, in Lock
    self._lock_file.lock('w|', 1)
  File "/usr/lib/python1.5/posixfile.py", line 190, in lock
    flock = fcntl.fcntl(self._file_.fileno(), cmd, flock)
IOError: (37, 'No locks available')
               ^^^^^^^^^^^^^^^^^^
After browsing through the mailing-list archive, I thought the existing
patch would work, but it doesn´t. I even tried inserting 'linux2' into
posixfile.py, but with no result. I´m working with SuSE 6.1 with Python
1.5.1 and mailman 1.0. 

Thanks for help!

        Wolfram Stumpf
        stumpf@rancon.de


From ddickey@wamnet.com  Thu Sep 23 14:51:17 1999
From: ddickey@wamnet.com (Dan A. Dickey)
Date: Thu, 23 Sep 1999 08:51:17 -0500
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
Message-ID: <37EA3055.99906537@wamnet.com>

This is a multi-part message in MIME format.
--------------BB98EC4C8AD39553420E1E66
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

We are beginning to make use of Mailman here (good work!),
and we are using it to provide company wide mailing lists.
So, we have umbrella lists that distribute to other areas
of the company in other parts of the world.  So, a list like
	"listname@ourdomain.com" would be an umbrella for:
"listname-us@ourdomain.com", "listname-uk@ourdomain.com", and
so on.  We've just started doing this, and myself and the
administrator working on this quickly became annoyed that
the subject lines ended up looking like:
	Subject: [listname-us] [listname] Test message

So, I modified MailList.py a bit so that it not only
checks for subject_prefix in the subject, but also all of
the acceptable_aliases for the list.  So, now when a message
is posted to listname, it gets resent to listname-*; while the
subject remains as "Subject: [listname] Test message".
The patch for this follows.

If anyone cares to now fix the little problem of the
footer being added by both lists, I'd like to see the
patch for that.  Its a minor annoyance, but one I can
live with for the time being.
	-Dan

-- 
Dan A. Dickey
ddickey@wamnet.com
--------------BB98EC4C8AD39553420E1E66
Content-Type: text/plain; charset=us-ascii;
 name="patch.MailList"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="patch.MailList"

*** MailList.py.orig	Tue Jul 20 21:19:21 1999
--- MailList.py	Thu Sep 23 08:28:48 1999
***************
*** 1130,1135 ****
--- 1130,1157 ----
                          return 1
  	return 0
  
+     def HasPrefix(self, msg):
+ 	"""True if subject_prefix or any acceptable_alias is included in
+         the Subject: ."""
+ 	subj = msg.getheader('subject')
+         # First check for our own subject_prefix:
+ 	if re.search(re.escape(self.subject_prefix), subj, re.I):
+ 		return 1
+         # ... and only then try the regexp acceptable aliases.
+         for alias in string.split(self.acceptable_aliases, '\n'):
+             stripped = string.strip(alias)
+             try:
+                 # The list alias in `stripped` is a user supplied regexp,
+                 # which could be malformed.
+                 if stripped and re.search(stripped, subj, re.I):
+                     return 1
+             except re.error:
+                 # `stripped' is a malformed regexp -- try matching
+                 # safely, with all non-alphanumerics backslashed:
+                 if stripped and re.search(re.escape(stripped), subj, re.I):
+                     return 1
+ 	return 0
+ 
      def parse_matching_header_opt(self):
  	"""Return a list of triples [(field name, regex, line), ...]."""
  	# - Blank lines and lines with '#' as first char are skipped.
***************
*** 1306,1313 ****
  	prefix = self.subject_prefix
  	if not subj:
  	    msg.SetHeader('Subject', '%s(no subject)' % prefix)
! 	elif prefix and not re.search(re.escape(self.subject_prefix),
!                                       subj, re.I):
  	    msg.SetHeader('Subject', '%s%s' % (prefix, subj))
          if self.anonymous_list:
              del msg['reply-to']
--- 1328,1334 ----
  	prefix = self.subject_prefix
  	if not subj:
  	    msg.SetHeader('Subject', '%s(no subject)' % prefix)
! 	elif prefix and not self.HasPrefix(msg):
  	    msg.SetHeader('Subject', '%s%s' % (prefix, subj))
          if self.anonymous_list:
              del msg['reply-to']

--------------BB98EC4C8AD39553420E1E66--



From jafo@tummy.com  Thu Sep 23 20:21:22 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 23 Sep 1999 13:21:22 -0600
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
In-Reply-To: <37EA3055.99906537@wamnet.com>; from Dan A. Dickey on Thu, Sep 23, 1999 at 08:51:17AM -0500
References: <37EA3055.99906537@wamnet.com>
Message-ID: <19990923132122.E1119@tummy.com>

On Thu, Sep 23, 1999 at 08:51:17AM -0500, Dan A. Dickey wrote:
>If anyone cares to now fix the little problem of the
>footer being added by both lists, I'd like to see the
>patch for that.  Its a minor annoyance, but one I can
>live with for the time being.

I haven't worked with umbrella lists, but it would seem that the obvious
solution would be to remove the footer and the subject tag from either
the listname server or the listname-(us|uk|whatever) lists.  Is there
something wrong with this?

Sean
-- 
 The structure of a system reflects the structure of the organization that
 built it.  -- Richard E. Fairley
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From ddickey@wamnet.com  Thu Sep 23 20:51:06 1999
From: ddickey@wamnet.com (Dan A. Dickey)
Date: Thu, 23 Sep 1999 14:51:06 -0500
Subject: [Mailman-Developers] umbrella lists and subject prefix
 (subject_prefix)
References: <37EA3055.99906537@wamnet.com> <19990923132122.E1119@tummy.com>
Message-ID: <37EA84AA.9211BAF7@wamnet.com>

Sean Reifschneider wrote:
> 
> On Thu, Sep 23, 1999 at 08:51:17AM -0500, Dan A. Dickey wrote:
> >If anyone cares to now fix the little problem of the
> >footer being added by both lists, I'd like to see the
> >patch for that.  Its a minor annoyance, but one I can
> >live with for the time being.
> 
> I haven't worked with umbrella lists, but it would seem that the obvious
> solution would be to remove the footer and the subject tag from either
> the listname server or the listname-(us|uk|whatever) lists.  Is there
> something wrong with this?

The problem then is that mail sent to one or the other
of the lists does NOT get the footer added.
I.E., when a message gets sent to "listname", I want the
prefix [listname] added, and the footer for listname.
This message would be directed to listname-* at that point,
and I don't want listname-us adding a prefix or a footer.
Also, I want a message directed at "listname-us" to get
the [listname-us] prefix added, and listname-us's footer.
I'm not sure where the term "umbrella" list came from,
but it seems to me I'm looking more for a "waterfall"
effect here - the first list the message is directed at
gets to do its thing and others just pass it on to the
list members with no modification.

	-Dan

-- 
Dan A. Dickey
ddickey@wamnet.com


From jafo@tummy.com  Thu Sep 23 21:20:37 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Thu, 23 Sep 1999 14:20:37 -0600
Subject: [Mailman-Developers] umbrella lists and subject prefix (subject_prefix)
In-Reply-To: <37EA84AA.9211BAF7@wamnet.com>; from Dan A. Dickey on Thu, Sep 23, 1999 at 02:51:06PM -0500
References: <37EA3055.99906537@wamnet.com> <19990923132122.E1119@tummy.com> <37EA84AA.9211BAF7@wamnet.com>
Message-ID: <19990923142037.H1119@tummy.com>

On Thu, Sep 23, 1999 at 02:51:06PM -0500, Dan A. Dickey wrote:
>effect here - the first list the message is directed at
>gets to do its thing and others just pass it on to the
>list members with no modification.

Hmmm.  One could set a flag to disable adding the footer if it doesn't
add the subject tag, but then you wouldn't get it on replies either.
What about having another option in the list which you could specify
if we receive a message from would then bypass the message re-writing?

Sean
-- 
 A ship in port is safe, but that is not what ships are for.
                 -- Rear Admiral Grace Murray Hopper
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From eparker@mindsec.com  Thu Sep 23 22:50:19 1999
From: eparker@mindsec.com (Erik Parker)
Date: Thu, 23 Sep 1999 15:50:19 -0600 (MDT)
Subject: [Mailman-Developers] Reply-to feature
Message-ID: 

Hi,

This is semi-urgent, as we move from Majordom to Mailman tommorow
for a major corporations mailing list (Pentax Cameras)...

We have a host setup to CNAME to our listserv machine:

discuss.pentax.com points to portal.navidec.com

I have discuss.pentax.com :

Host name this list prefers. discuss.pentax.com
Base URL for Mailman web interface  http://discuss.pentax.com/mailman/



However, ALL mail coming from the list, has a return address of:
pentax-discuss@portal.navidec.com,
instead of pentax-discuss@discuss.pentax.com



I have:

Are replies to a post directed to the original poster or to the list?
set to -LIST-.

They don't want to default to reply to just that person, it has
to stay the same as it used to be, and thats replying to the list.
THey do about 2000 posts a day, and this goes live in 15 hours...

ANY help is appreciated. There must be an option for this.


Erik Parker
eparker@mindsec.com




From gorgo@caesar.elte.hu  Thu Sep 23 23:05:51 1999
From: gorgo@caesar.elte.hu (Gergely Madarasz)
Date: Fri, 24 Sep 1999 00:05:51 +0200 (METDST)
Subject: [Mailman-Developers] Reply-to feature
In-Reply-To: 
Message-ID: 

On Thu, 23 Sep 1999, Erik Parker wrote:

> Hi,
> 
> This is semi-urgent, as we move from Majordom to Mailman tommorow
> for a major corporations mailing list (Pentax Cameras)...
> 
> We have a host setup to CNAME to our listserv machine:
> 
> discuss.pentax.com points to portal.navidec.com

Here is the root of the problems. CNAME and smtp doesn't mix well. Use A
records instead of CNAME-s.

-- 
Madarasz Gergely           gorgo@caesar.elte.hu         gorgo@linux.rulez.org
      It's practically impossible to look at a penguin and feel angry.
          Egy pingvinre gyakorlatilag lehetetlen haragosan nezni.
                    HuLUG: http://mlf.linux.rulez.org/



From claw@varesearch.com  Fri Sep 24 01:40:36 1999
From: claw@varesearch.com (J C Lawrence)
Date: Thu, 23 Sep 1999 17:40:36 -0700
Subject: [Mailman-Developers] Reply-to feature
In-Reply-To: Message from Erik Parker 
 of "Thu, 23 Sep 1999 15:50:19 MDT." 
Message-ID: 

On Thu, 23 Sep 1999 15:50:19 -0600 (MDT) 
Erik Parker  wrote:

> However, ALL mail coming from the list, has a return address of:
> pentax-discuss@portal.navidec.com, instead of
> pentax-discuss@discuss.pentax.com

At the bottom of the general optios page set the "Host name this
list prefers" to "discuss.pentax.com".

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From sendy@dds.nl  Fri Sep 24 01:49:29 1999
From: sendy@dds.nl (Sendy)
Date: Fri, 24 Sep 1999 02:49:29 +0200
Subject: [Mailman-Developers] Exim bouncedetection hack
Message-ID: <19990924024929.A4284@stereo.rotzorg.org>

--ibTvN161/egqYuK8
Content-Type: text/plain; charset=us-ascii

Hi,

i've fiddeled around in Bouncer.py and added code to detect bounces created by exim.

It's a bit of a dirty hack, as it is my first attempt at python ;-)

I don't know how to make diffs, so I'll attach the whole Bouncer.py file. My additions are surrounded by # en my name 'Sander'. So search for 'Sander' and you will find the changes (3 blobs, 2 in ScanMessage and 1 in ExtractBouncingAddr)

Greetings
Sander

--ibTvN161/egqYuK8
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="Bouncer.py"

# Copyright (C) 1998 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software 
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


"Handle delivery bounce messages, doing filtering when list is set for it."


# It's possible to get the mail-list senders address (list-admin) in the
# bounce list.   You probably don't want to have list mail sent to that
# address anyway.

import sys
import time
import regsub, string, regex, re
import Utils
import mm_cfg
import Errors

class Bouncer:
    def InitVars(self):
	# Not configurable...

        # self.bounce_info registers observed bounce incidents.  It's a
        # dict mapping members addrs to a list:
        #  [
        #    time.time() of last bounce,
        #    post_id of first offending bounce in current sequence,
        #    post_id of last offending bounce in current sequence
        #  ]
	self.bounce_info = {}

	# Configurable...
	self.bounce_processing = mm_cfg.DEFAULT_BOUNCE_PROCESSING
	self.minimum_removal_date = mm_cfg.DEFAULT_MINIMUM_REMOVAL_DATE
	self.minimum_post_count_before_bounce_action = \
		mm_cfg.DEFAULT_MINIMUM_POST_COUNT_BEFORE_BOUNCE_ACTION
	self.automatic_bounce_action = mm_cfg.DEFAULT_AUTOMATIC_BOUNCE_ACTION
	self.max_posts_between_bounces = \
		mm_cfg.DEFAULT_MAX_POSTS_BETWEEN_BOUNCES

    def GetConfigInfo(self):
	return [
            "Policies regarding systematic processing of bounce messages,"
            " to help automate recognition and handling of defunct"
            " addresses.",
	    ('bounce_processing', mm_cfg.Toggle, ('No', 'Yes'), 0,
	     'Try to figure out error messages automatically? '),
	    ('minimum_removal_date', mm_cfg.Number, 3, 0,
	     'Minimum number of days an address has been non-fatally '
             'bad before we take action'),
	    ('minimum_post_count_before_bounce_action', mm_cfg.Number, 3, 0,
	     'Minimum number of posts to the list since members first '
             'bounce before we consider removing them from the list'),
	    ('max_posts_between_bounces', mm_cfg.Number, 3, 0,
	     "Maximum number of messages your list gets in an hour.  "
             "(Yes, bounce detection finds this info useful)"),
	    ('automatic_bounce_action', mm_cfg.Radio,
	     ("Do nothing",
              "Disable and notify me",
              "Disable and DON'T notify me",
	      "Remove and notify me"),
	     0, "Action when critical or excessive bounces are detected.")
	    ]
    def ClearBounceInfo(self, email):
	email = string.lower(email)
	if self.bounce_info.has_key(email):
	    del self.bounce_info[email]

    def RegisterBounce(self, email, msg):
        """Detect and handle repeat-offender bounce addresses.
        
        We use very sketchy bounce history profiles in self.bounce_info
        (see comment above it's initialization), together with list-
        specific thresholds self.minimum_post_count_before_bounce_action
        and self.max_posts_between_bounces."""

        # Set 'dirty' if anything needs to be save in the finally clause.
        dirty = 0
        report = "%s: %s - " % (self.real_name, email)

        try:

            now = time.time()
            secs_per_day = 24 * 60 * 60

            # Take the opportunity to cull expired entries.
            pid = self.post_id
            maxposts = self.max_posts_between_bounces
            stalesecs = self.minimum_removal_date * secs_per_day * 5
            for k, v in self.bounce_info.items():
                if now - v[0] > stalesecs:
                    # It's been long enough to drop their bounce record:
                    del self.bounce_info[k]
                    dirty = 1

            this_dude = Utils.FindMatchingAddresses(email,
                                                    self.bounce_info)
            if not this_dude:
                # No (or expired) priors - new record.
                self.bounce_info[string.lower(email)] = [now, self.post_id,
                                                         self.post_id]
                self.LogMsg("bounce", report + "first")
                dirty = 1
                return

            # There are some priors.
            addr = string.lower(this_dude[0])
            hist = self.bounce_info[addr]
            difference = now - hist[0]
            if len(Utils.FindMatchingAddresses(addr, self.members)):
                if self.post_id - hist[2] > self.max_posts_between_bounces:
                    # There's been enough posts since last bounce that we're
                    # restarting.  (Might should keep track of who goes stale
                    # how often.)
                    self.LogMsg("bounce", report + "first fresh")
                    self.bounce_info[addr] = [now, self.post_id, self.post_id]
                    dirty = 1
                    return
                self.bounce_info[addr][2] = self.post_id
                dirty = 1
                if ((self.post_id - hist[1] >
                     self.minimum_post_count_before_bounce_action)
                    and
                    (difference > self.minimum_removal_date * secs_per_day)):
                    self.LogMsg("bounce", report + "exceeded limits")
                    self.HandleBouncingAddress(addr, msg)
                    return
                else:
                    post_count = (self.minimum_post_count_before_bounce_action
                                  - (self.post_id - hist[1]))
                    if post_count < 0:
                        post_count = 0
                    remain = (self.minimum_removal_date
                              * secs_per_day - difference)
                    self.LogMsg("bounce",
                                report + ("%d more allowed over %d secs"
                                          % (post_count, remain)))
                    return

            elif len(Utils.FindMatchingAddresses(addr, self.digest_members)):
                if self.volume > hist[1]:
                    self.LogMsg("bounce",
                                "%s: first fresh (D)", self._internal_name)
                    self.bounce_info[addr] = [now, self.volume, self.volume]
                    return
                if difference > self.minimum_removal_date * secs_per_day:
                    self.LogMsg("bounce", report + "exceeded limits (D)")
                    self.HandleBouncingAddress(addr, msg)
                    return 
                self.LogMsg("bounce", report + "digester lucked out")
            else:
                self.LogMsg("bounce",
                            "%s: address %s not a member.",
                            self._internal_name,
                            addr)
        finally:
            if dirty:
                self.Save()

    def HandleBouncingAddress(self, addr, msg):
        """Disable or remove addr according to bounce_action setting."""
        if self.automatic_bounce_action == 0:
            return
        elif self.automatic_bounce_action == 1:
	    # Only send if call works ok.
            (succeeded, send) = self.DisableBouncingAddress(addr)
            did = "disabled"
        elif self.automatic_bounce_action == 2:
            (succeeded, send) = self.DisableBouncingAddress(addr)
            did = "disabled"
	    # Never send.
            send = 0
        elif self.automatic_bounce_action == 3:
            (succeeded, send) = self.RemoveBouncingAddress(addr)
	    # Always send.
            send = 1
            did = "removed"
        if send:
            if succeeded != 1:
                negative="not "
            else:
                negative=""
            recipient = self.GetAdminEmail()
            if addr in self.owner + [recipient]:
                # Whoops!  This is a bounce of a bounce notice - do not
                # perpetuate the bounce loop!  Log it prominently and be
                # satisfied with that.
                self.LogMsg("error",
                            "%s: Bounce recipient loop"
                            " encountered!\n\t%s\n\tBad admin recipient: %s",
                            self._internal_name,
                            "(Ie, bounce notification addr, itself, bounces.)",
                            addr)
                return
            import mimetools
            boundary = mimetools.choose_boundary()
            # report about success
            but = ''
            if succeeded <> 1:
                but = 'BUT:        %s' % succeeded
            # disabled?
            if did == 'disabled' and succeeded == 1:
                reenable = Utils.maketext(
                    'reenable.txt',
                    {'admin_url': self.GetAbsoluteScriptURL('admin'),
                     })
            else:
                reenable = ''
            # the mail message text
            text = Utils.maketext(
                'bounce.txt',
                {'boundary' : boundary,
                 'listname' : self.real_name,
                 'addr'     : addr,
                 'negative' : negative,
                 'did'      : did,
                 'but'      : but,
                 'reenable' : reenable,
                 'owneraddr': mm_cfg.MAILMAN_OWNER,
                 })
            # add this here so it doesn't get wrapped/filled
            text = text + '\n\n--' + boundary + \
                   '\nContent-type: text/plain; charset=us-ascii\n'

            # we do this here so this text won't be wrapped.  note that
            # 'bounce.txt' has a trailing newline
            text = text + \
                   string.join(msg.headers, '') + '\n' + \
                   Utils.QuotePeriods(msg.body) + '\n' + \
                   '--' + boundary + '--'

            if negative:
                negative = string.upper(negative)

            self.SendTextToUser(
                subject = "%s member %s bouncing - %s%s"
                % (self.real_name, addr, negative, did),
                recipient = recipient,
                sender = mm_cfg.MAILMAN_OWNER,
                add_headers = [
                    "Errors-To: %s" % mm_cfg.MAILMAN_OWNER,
                    "MIME-version: 1.0",
                    "Content-type: multipart/mixed;"
                    ' boundary="%s"' % boundary],
                text = text)

    def DisableBouncingAddress(self, addr):
	"""Disable delivery for bouncing user address.

	Returning success and notification status."""
        if not self.IsMember(addr):
            reason = "User not found."
	    self.LogMsg("bounce", "%s: NOT disabled %s: %s",
                        self.real_name, addr, reason)
            return reason, 1
	try:
	    if self.GetUserOption(addr, mm_cfg.DisableDelivery):
		# No need to send out notification if they're already disabled.
		self.LogMsg("bounce",
			    "%s: already disabled %s", self.real_name, addr)
		return 1, 0
	    else:
		self.SetUserOption(addr, mm_cfg.DisableDelivery, 1)
		self.LogMsg("bounce",
			    "%s: disabled %s", self.real_name, addr)
		self.Save()
		return 1, 1
	except Errors.MMNoSuchUserError:
	    self.LogMsg("bounce", "%s: NOT disabled %s: %s",
                        self.real_name, addr, Errors.MMNoSuchUserError)
	    self.ClearBounceInfo(addr)
            self.Save()
            return Errors.MMNoSuchUserError, 1
	    
    def RemoveBouncingAddress(self, addr):
	"""Unsubscribe user with bouncing address.

	Returning success and notification status."""
        if not self.IsMember(addr):
            reason = "User not found."
	    self.LogMsg("bounce", "%s: NOT removed %s: %s",
                        self.real_name, addr, reason)
            return reason, 1
	try:
	    self.DeleteMember(addr, "bouncing addr")
	    self.LogMsg("bounce", "%s: removed %s", self.real_name, addr) 
            self.Save()
            return 1, 1
	except Errors.MMNoSuchUserError:
	    self.LogMsg("bounce", "%s: NOT removed %s: %s",
                        self.real_name, addr, Errors.MMNoSuchUserError)
	    self.ClearBounceInfo(addr)
            self.Save()
            return Errors.MMNoSuchUserError, 1

    # Return 0 if we couldn't make any sense of it, 1 if we handled it.
    def ScanMessage(self, msg):
##	realname, who_from = msg.getaddr('from')
##	who_info = string.lower(who_from)
        candidates = []
	who_info = string.lower(msg.GetSender())
        at_index = string.find(who_info, '@')
	if at_index != -1:
	    who_from = who_info[:at_index]
	    remote_host = who_info[at_index+1:]
	else:
	    who_from = who_info
	    remote_host = self.host_name

	if not who_from in ['mailer-daemon', 'postmaster', 'orphanage',
			    'postoffice', 'ucx_smtp', 'a2']:
	    return 0
	mime_info = msg.getheader('content-type')
	boundry = None
	if mime_info:
	    mime_info_parts = regsub.splitx(
                mime_info, '[Bb][Oo][Uu][Nn][Dd][Aa][Rr][Yy]="[^"]+"')
	    if len(mime_info_parts) > 1:
		boundry = regsub.splitx(mime_info_parts[1],
                                        '"[^"]+"')[1][1:-1]

        if boundry:
	    relevant_text = string.split(msg.body, '--%s' % boundry)[1]
	else:
	    # This looks strange, but at least 2 are going to be no-ops.
	    relevant_text = regsub.split(msg.body,
                                         '^.*Message header follows.*$')[0]
	    relevant_text = regsub.split(relevant_text,
                                         '^The text you sent follows:.*$')[0]
	    relevant_text = regsub.split(
                relevant_text, '^Additional Message Information:.*$')[0]
	    relevant_text = regsub.split(relevant_text,
                                         '^-+Your original message-+.*$')[0]
	
        BOUNCE = 1
	REMOVE = 2

	# Bounce patterns where it's simple to figure out the email addr.
	email_regexp = ']+@[^ \t@<>]+\.[^ \t<>.]+\)>?'
	simple_bounce_pats = (
	    (regex.compile('.*451 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*554 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*552 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*501 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*553 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('.*550 %s.*' % email_regexp), BOUNCE),
	    (regex.compile('%s .bounced.*' % email_regexp), BOUNCE),
	    (regex.compile('.*%s\.\.\. Deferred.*' % email_regexp), BOUNCE),
	    (regex.compile('.*User %s not known.*' % email_regexp), REMOVE),
	    (regex.compile('.*%s: User unknown.*' % email_regexp), REMOVE),
            (regex.compile('.*%s\.\.\. User unknown' % email_regexp), REMOVE))
	# patterns we can't directly extract the email (special case these)
	messy_pattern_1 = regex.compile('^Recipient .*$')
	messy_pattern_2 = regex.compile('^Addressee: .*$')
	messy_pattern_3 = regex.compile('^User .* not listed.*$')
	messy_pattern_4 = regex.compile('^550 [^ ]+\.\.\. User unknown.*$')
	messy_pattern_5 = regex.compile('^User [^ ]+ is not defined.*$')
	messy_pattern_6 = regex.compile('^[ \t]*[^ ]+: User unknown.*$')
	messy_pattern_7 = regex.compile('^[^ ]+ - User currently disabled.*$')

        # Patterns for cases where email addr is separate from error cue.
	separate_cue_1 = re.compile(
            '^554 [^ ]+\.\.\. unknown mailer error.*$', re.I)
        separate_addr_1 = regex.compile('expanded from: %s' % email_regexp)
        
        ##################################################################
        # Patterns for matching exim bounces. Sander                     #
        # If a line maches exim_1 than it checks if the next             #
        # line matches exim_2. If so, it checks if the third line        #
        # matches exim_3                                                 #
        exim_1 = re.compile('^following address\(es\) failed:$')         #
        exim_2 = re.compile('^$')                                        #
        exim_3 = re.compile('^  [^ \t@|<>]+@[^ \t@<>]+\.[^ \t<>.]+.*:$') #
        exim_bounce = 0                                                  #

        message_grokked = 0
        use_prospects = 0
        prospects = []                  # If bad but no candidates found.

	for line in string.split(relevant_text, '\n'):
            for pattern, action in simple_bounce_pats:
		if pattern.match(line) <> -1:
		    email = self.ExtractBouncingAddr(line)
		    candidates.append((string.split(email,',')[0], action))
		    message_grokked = 1

	    # Now for the special case messages that are harder to parse...
	    if (messy_pattern_1.match(line) <> -1
                or messy_pattern_2.match(line) <> -1):
		username = string.split(line)[1]
		candidates.append(('%s@%s' % (username, remote_host),
				   BOUNCE))
		message_grokked = 1
		continue
	    if (messy_pattern_3.match(line) <> -1
                or messy_pattern_4.match(line) <> -1
                or messy_pattern_5.match(line) <> -1):
		username = string.split(line)[1]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue
	    if messy_pattern_6.match(line) <> -1:
		username = string.split(string.strip(line))[0][:-1]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue
	    if messy_pattern_7.match(line) <> -1:
		username = string.split(string.strip(line))[0]
		candidates.append(('%s@%s' % (username, remote_host),
				   REMOVE))
		message_grokked = 1
		continue

            if separate_cue_1.match(line):
                # Here's an error message that doesn't contain the addr.
                # Set a flag to use prospects found on separate lines.
                use_prospects = 1
            if separate_addr_1.search(line) != -1:
                # Found an addr that *might* be part of an error message.
                # Register it on prospects, where it will only be used if a 
                # separate check identifies this message as an error message.
                prospects.append((separate_addr_1.group(1), BOUNCE))

            ############################################################
            # check fom exim Sander                                     #
            #print "line:", line, "--"                                  # 
            exim_match_1 = exim_1.match(line)                           #
            exim_match_2 = exim_2.match(line)                           #
            exim_match_3 = exim_3.match(line)                           #
            #print exim_match_1                                         #
            #print exim_match_2                                         #
            #print exim_match_3                                         #
            if exim_bounce == 0 and exim_match_1 != None:               #
	        exim_bounce = 1                                         #
                continue                                                #
            elif exim_bounce == 1 and exim_match_2 != None:             #
                exim_bounce = 2                                         #
                continue                                                #
            elif exim_bounce == 2 and exim_match_3 != None:             #
                #print "MATCH!"                                         #
                email = self.ExtractBouncingAddr(line)                  #
                # Remove the extra ':'                                  #
                # I want chop()                                         #
                # I did it in ExtractBouncingAddr                       #
                #print 'Bounced Email:', email                          #
                candidates.append((string.split(email,',')[0], BOUNCE)) #
                message_grokked = 1                                     #
                continue                                                #

        if use_prospects and prospects:
            candidates = candidates + prospects

        did = []
        for who, action in candidates:
	    # First clean up some cruft around the addrs.
	    el = string.find(who, "...")
	    if el != -1:
		who = who[:el]
	    if len(who) > 1 and who[0] == '<':
		# Use stuff after open angle and before (optional) close:
		who = regsub.splitx(who[1:], ">")[0]
            if who not in did:
		if action == REMOVE:
		    self.HandleBouncingAddress(who, msg)
		else:
		    self.RegisterBounce(who, msg)
                did.append(who)
	return message_grokked

    def ExtractBouncingAddr(self, line):
        email = regsub.splitx(line, '[^ \t@<>]+@[^ \t@<>]+\.[^ \t<>.:]+')[1] #Sander
	#email = regsub.splitx(line, '[^ \t@<>]+@[^ \t@<>]+\.[^ \t<>.:]+)[1]
	if email[0] == '<':
	    return regsub.splitx(email[1:], ">")[0]
	else:
	    return email

--ibTvN161/egqYuK8--


From Nigel.Metheringham@vdata.co.uk  Fri Sep 24 09:40:43 1999
From: Nigel.Metheringham@vdata.co.uk (Nigel Metheringham)
Date: Fri, 24 Sep 1999 09:40:43 +0100
Subject: [Mailman-Developers] Exim bouncedetection hack
In-Reply-To: Message from Sendy 
 of "Fri, 24 Sep 1999 02:49:29 +0200." <19990924024929.A4284@stereo.rotzorg.org>
Message-ID: 

sgr@rotzorg.org said:
> i've fiddeled around in Bouncer.py and added code to detect bounces
> created by exim.

> It's a bit of a dirty hack, as it is my first attempt at python ;-) 

I hate to criticise since I haven't got around to cutting code to do 
this and its great that you are working on this....

However I think that parsing the text of the exim bounces is the wrong 
way to go - exim provides a header on bounce messages to make this sort 
of function very easy.  You will find that all bounce messages from an 
exim system will have an additional header:-

  X-failed-recipients: fred@flintstone.com

Is there are multiple failed recipients, then they will look like this:-

  X-failed-recipients: fred@flintstone.com,
	barney@rubble.com

You need to be slightly careful here though since a few mailers that 
feel it is their duty to rewrite things will munge multiple addresses 
onto a single line, so a general header address reading function should 
be used.

I guess the other thing that should be done to finish up the job is to 
detect exim delayed message warnings and ignore them.  These have 
subjects such as:-

  Warning: message 11SzEO-0004wH-00 delayed 24 hours

The best way to detect these is by a regexp on the subject.

If you are getting a lot of these messages then it may be worth sending 
a polite note to the admin of the system generating them suggesting 
that they set the following config item:-

  delay_warning_condition = "\
    ${if match{$h_precedence:}{(?i)bulk|list|junk}{no}{yes}}"

This prevents exim sending out message delay warnings for messages with 
appropriate precedence header settings.  This change is going to be 
made the default for future versions of exim, but currently unless the 
admin really knows what they are doing, most exim installations have 
their configs for this non-optimal.  Documentation on this option can 
be found at

  http://www.exim.org/exim-html-3.00/doc/html/spec_11.html#SEC186

I'll try and code this stuff up using my appalling python skills soon.
I'll also attempt to add a mailman related section to the exim pages 
soon - if it doesn't appear, bug me!

	Nigel.
-- 
[ Nigel Metheringham                  Nigel.Metheringham@VData.co.uk ]
[ Phone: +44 1423 850000                         Fax +44 1423 858866 ]




From eparker@mindsec.com  Fri Sep 24 19:34:51 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 12:34:51 -0600 (MDT)
Subject: [Mailman-Developers] Hard code the reply-to?
Message-ID: 

Hi all, it appears there is no answer to why its doing this, and now I'm
running really low on time. It appears it must be mailman that is writing
the reply to as portal.navidec.com, which file can I edit to hard code
mailing to set the reply to as list@discuss.pentax.com ?


Erik Parker
eparker@mindsec.com




From eparker@mindsec.com  Fri Sep 24 20:11:34 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 13:11:34 -0600 (MDT)
Subject: [Mailman-Developers] msg.headers.append('Reply-To: %s\n' % self.GetListEmail())
In-Reply-To: 
Message-ID: 

found this in Deliverer.py

msg.headers.append('Reply-To: %s\n' % self.GetListEmail())


Could I re-write that line, and ALL messages leaving mailman
would use that reply-to?

I don't know how to write python.. how could i make that
read something that would make all reply-to's

goto pentax-discuss@discuss.pentax.com


Thanks for your help. If this ever works right before 5pm, you will be
life savers. heh.

Erik Parker
eparker@mindsec.com




From eparker@mindsec.com  Fri Sep 24 20:38:16 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 13:38:16 -0600 (MDT)
Subject: [Mailman-Developers] msg.headers.append('Reply-To: %s\n' %
 self.GetListEmail())
In-Reply-To: 
Message-ID: 


Which I tried as:

msg.headers.append('Reply-To: %s\n' % "pentax-discuss\@discuss.pentax.com")


But then I end up getting emails with a reply-to of:

"pentax-discuss@discuss.pentax.com"@portal.navidec.com

...hm.

On Fri, 24 Sep 1999, Erik Parker wrote:

> found this in Deliverer.py
> 
> msg.headers.append('Reply-To: %s\n' % self.GetListEmail())
> 
> 
> Could I re-write that line, and ALL messages leaving mailman
> would use that reply-to?
> 
> I don't know how to write python.. how could i make that
> read something that would make all reply-to's
> 
> goto pentax-discuss@discuss.pentax.com
> 
> 
> Thanks for your help. If this ever works right before 5pm, you will be
> life savers. heh.
> 
> Erik Parker
> eparker@mindsec.com
> 
> 
> 
> _______________________________________________
> Mailman-Developers maillist  -  Mailman-Developers@python.org
> http://www.python.org/mailman/listinfo/mailman-developers
> 


Erik Parker
eparker@mindsec.com



From eparker@mindsec.com  Fri Sep 24 21:01:10 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:01:10 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
Message-ID: 

Where to the scripts ask to get their hostname from each time?

mm_cfg.py  ?

I have DEFAULT_HOST_NAME = 'discuss.pentax.com'

and in Defaults.py

DEFAULT_HOST_NAME = 'discuss.pentax.com'





Erik Parker
eparker@mindsec.com



From hebble@ncsa.uiuc.edu  Fri Sep 24 21:10:10 1999
From: hebble@ncsa.uiuc.edu (Paul Hebble)
Date: Fri, 24 Sep 1999 15:10:10 -0500 (CDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: 
Message-ID: 

On Fri, 24 Sep 1999, Erik Parker wrote:

> 
> Where to the scripts ask to get their hostname from each time?
> 
> mm_cfg.py  ?
> 
> I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> and in Defaults.py
> 
> DEFAULT_HOST_NAME = 'discuss.pentax.com'

I think those values are used when new lists are created.  Go to the
configuration page for each existing list to change the values they use.

(BTW, I don't think you're supposed to change Defaults.py.  If you want to
keep up with CVS, might break it.)

--
	Paul



From jafo@tummy.com  Fri Sep 24 21:10:37 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:10:37 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:01:10PM -0600
References: 
Message-ID: <19990924141037.H1119@tummy.com>

[Note that I've sent this to the mailman-users list, which is really
more appropriate than the developers list.  However, I don't actually
read the -users group because of a lack of time.]

On Fri, Sep 24, 1999 at 02:01:10PM -0600, Erik Parker wrote:
>Where to the scripts ask to get their hostname from each time?
>
>mm_cfg.py  ?
>
>I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
>
>and in Defaults.py
>
>DEFAULT_HOST_NAME = 'discuss.pentax.com'

mm_cfg.py is for the *LOCAL* settings, and things in there are overridden by
values in mm_cfg.py.  However, when sending a message the preferred host
name is taken from the value set in the main config panel "Host name this
list prefers".

Have you been looking at your MTA with the same ferver that you've been
looking at Mailman?  My bet is that it's some sort of interaction with
the MTA, but you haven't mentioned what you're using.

Sean
-- 
 I put my hand upon her lever, said "let it rock and let it roll."
 I had the one-arm-bandit fever, it was an arrow through my heart, that's all.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From eparker@mindsec.com  Fri Sep 24 21:22:41 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:22:41 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: 
Message-ID: 

On Fri, 24 Sep 1999, Paul Hebble wrote:

> On Fri, 24 Sep 1999, Erik Parker wrote:
> 
> > 
> > Where to the scripts ask to get their hostname from each time?
> > 
> > mm_cfg.py  ?
> > 
> > I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> > 
> > and in Defaults.py
> > 
> > DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> I think those values are used when new lists are created.  Go to the
> configuration page for each existing list to change the values they use.
>

Yah did that via the web, problem is, that part isn't working. Nobody
seems to know why.. I know remembered why I used to go with supported
products :) heh.
 
> (BTW, I don't think you're supposed to change Defaults.py.  If you want to
> keep up with CVS, might break it.)
> 
> --
> 	Paul
> 


Erik Parker
eparker@mindsec.com



From eparker@mindsec.com  Fri Sep 24 21:27:13 1999
From: eparker@mindsec.com (Erik Parker)
Date: Fri, 24 Sep 1999 14:27:13 -0600 (MDT)
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: <19990924141037.H1119@tummy.com>
Message-ID: 

On Fri, 24 Sep 1999, Sean Reifschneider wrote:

> [Note that I've sent this to the mailman-users list, which is really
> more appropriate than the developers list.  However, I don't actually
> read the -users group because of a lack of time.]
> 
> On Fri, Sep 24, 1999 at 02:01:10PM -0600, Erik Parker wrote:
> >Where to the scripts ask to get their hostname from each time?
> >
> >mm_cfg.py  ?
> >
> >I have DEFAULT_HOST_NAME = 'discuss.pentax.com'
> >
> >and in Defaults.py
> >
> >DEFAULT_HOST_NAME = 'discuss.pentax.com'
> 
> mm_cfg.py is for the *LOCAL* settings, and things in there are overridden by
> values in mm_cfg.py.  However, when sending a message the preferred host
> name is taken from the value set in the main config panel "Host name this
> list prefers".
> 
> Have you been looking at your MTA with the same ferver that you've been
> looking at Mailman?  My bet is that it's some sort of interaction with
> the MTA, but you haven't mentioned what you're using.
>

I am using sendmail 8.9.3, I have gone as far to:

Change the sendmail.cf to force it to use the host discuss.pentax.com,
changing the reverse DNS for the machine to it matched the A record
for discuss.pentax.com
changed the hostname on the machine


and (not to sound like a broken record, but people keep emailing me
with their wisdom, and never noticed I've already stated this)
I HAVE IT SET VIA THE WEB PAGE FOR "Host name this list prefers."
set to the RIGHT host.

 
> Sean
> -- 
>  I put my hand upon her lever, said "let it rock and let it roll."
>  I had the one-arm-bandit fever, it was an arrow through my heart, that's all.
> Sean Reifschneider, Inimitably Superfluous 
> URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.
> 


Erik Parker
eparker@mindsec.com



From jafo@tummy.com  Fri Sep 24 21:31:02 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:31:02 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:22:41PM -0600
References:  
Message-ID: <19990924143102.J1119@tummy.com>

On Fri, Sep 24, 1999 at 02:22:41PM -0600, Erik Parker wrote:
>seems to know why.. I know remembered why I used to go with supported
>products :) heh.

Oh, you didn't get my offer of commercial support on your mailman setup?
My company is quite willing to provide that.  Just because Mailman is
open-source and freely-available doesn't mean that it's not supported.
In fact, I would argue that it increases one's support options (I can't
go digging in Windows code to find a problem like this, that's for sure).

Sean
-- 
 "Ayn Rand books and guns...  You guys take World Domination seriously."
 "It's our job."  -- Conversation with Luke Jones about Rob Riggs place.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Fri Sep 24 21:35:03 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Fri, 24 Sep 1999 14:35:03 -0600
Subject: [Mailman-Developers] Hostnames..
In-Reply-To: ; from Erik Parker on Fri, Sep 24, 1999 at 02:27:13PM -0600
References: <19990924141037.H1119@tummy.com> 
Message-ID: <19990924143503.K1119@tummy.com>

On Fri, Sep 24, 1999 at 02:27:13PM -0600, Erik Parker wrote:
>Change the sendmail.cf to force it to use the host discuss.pentax.com,
>changing the reverse DNS for the machine to it matched the A record
>for discuss.pentax.com
>changed the hostname on the machine

Uh...  If you changed sendmail to rewrite the headers on the outgoing
message, that *SHOULD* correct any issues that may be happening in mailman.
You're saying that when you changed sendmail to force the header it still
isn't getting the right host?  Presuming you made the sendmail.cf change
correctly, are you sure what you're seeing isn't happening on the
receiving side?  I mean, if sendmail is doing the correct rewriting
then there's not much of an alternative for where the problem is
occuring (*IF* sendmail is doing the rewriting you expect it to).

Sean
-- 
 Good judgement comes from experience, and experience comes from bad judgement. 
                 -- Fred Brooks
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From jafo@tummy.com  Sat Sep 25 09:14:35 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Sat, 25 Sep 1999 02:14:35 -0600
Subject: [Mailman-Developers] Another item for TODO: Accept list
Message-ID: <19990925021435.S1119@tummy.com>

I didn't see anything in the main list admin page for doing this,
so I thought I'd write in to request it be put on the todo list.
There doesn't seem to be an ability to specify a specific "accept"
list.  I'm thinking of a list which if non-empty, only posts from
addresses on the list would be accepted.  The idea is to prevent
discussion on announce-only mailing lists.

This is certainly something I'd be interested in implementing.
But, I've got to wonder what happened to the other patches I
submitted last week...  :-)

Or did I just overlook it?

Sean
-- 
 It usually takes more than three weeks to prepare a good impromptu speech.
                 -- Mark Twain
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From klm@digicool.com  Sun Sep 26 16:59:39 1999
From: klm@digicool.com (klm)
Date: Sun, 26 Sep 1999 11:59:39 -0400 (EDT)
Subject: [Mailman-Developers] Another item for TODO: Accept list
In-Reply-To: <199909260500.BAA23600@python.org>
Message-ID: 

> Date: Sat, 25 Sep 1999 02:14:35 -0600
> From: Sean Reifschneider 
> To: mailman-developers@python.org
> Subject: [Mailman-Developers] Another item for TODO: Accept list
> 
> I didn't see anything in the main list admin page for doing this,
> so I thought I'd write in to request it be put on the todo list.
> There doesn't seem to be an ability to specify a specific "accept"
> list.  I'm thinking of a list which if non-empty, only posts from
> addresses on the list would be accepted.  The idea is to prevent
> discussion on announce-only mailing lists.

If i understand what you're seeking, there's an option on the privacy page
for doing this.  From the details page:

 posters (privacy): Addresses of members accepted for posting to this list
 without implicit approval requirement. (See "Restrict ... to list
 members" for whether or not this is in addition to allowing posting by
 list members.

 Adding entries here will have one of two effects, according to whether
 another option restricts posting to members. 

 If member_posting_only is 'yes', then entries added here will have
 posting privilege in addition to list members.  

 If member_posting_only is 'no', then only the posters listed here will be
 able to post without admin approval.

I think the combination with members_posting_only == 'no' amounts to your
accept list.

> This is certainly something I'd be interested in implementing.
> But, I've got to wonder what happened to the other patches I
> submitted last week...  :-)

Ah, this is a problem.  It looks like all the core mailman developers are
currently tied up enough, so noone can cater to incorporating - or even
following, at the moment - mailman developments.  Sean, if you would do me
the favor of pointing me to the patches - or resend them, just to me -
i'll try to take a moment to look them over.

(We're considering ways to increase the pool of people with privileges to
touch the main development tree _without_ increasing the thrash factor -
shepherding, itself, takes time which may be too scarce even for that at
the moment, but we need to look at it.)

> Or did I just overlook it?

Probably the other way around - we did.  (This is late vacation season - i
was away week before last, eg, and i *know* from sparse discussions w/
other mailman developers time is real tight.)

Ken Manheimer
klm@digicool.com



From jafo@tummy.com  Mon Sep 27 15:59:48 1999
From: jafo@tummy.com (Sean Reifschneider)
Date: Mon, 27 Sep 1999 08:59:48 -0600
Subject: [Mailman-Developers] Another item for TODO: Accept list
In-Reply-To: ; from klm on Sun, Sep 26, 1999 at 11:59:39AM -0400
References: <199909260500.BAA23600@python.org> 
Message-ID: <19990927085947.H2515@tummy.com>

On Sun, Sep 26, 1999 at 11:59:39AM -0400, klm wrote:
> If member_posting_only is 'no', then only the posters listed here will be
> able to post without admin approval.

Huh?  The way I understand "member_posting_only" is that if it's on
then only members can post, and if it's off then *ANYONE* can post
(hence "member_posting_*ONLY*").  This seems to be what's happening
because I currently have member_posting_only set to "no" and
messages are getting through.

Sean
-- 
 The Roman Rule: The one who says it cannot be done should never
 interrupt the one who is doing it.
Sean Reifschneider, Inimitably Superfluous 
URL:  HP-UX/Linux/FreeBSD/BSDOS scanning software.


From claw@varesearch.com  Tue Sep 28 04:03:09 1999
From: claw@varesearch.com (J C Lawrence)
Date: Mon, 27 Sep 1999 20:03:09 -0700
Subject: [Mailman-Developers] List config portability
Message-ID: 

How portable are list configs between list names?

Specifically:

  Can I rename a list by changing the name of the ~mailman/lists/XXX 
directory as long as I also change the MTA aliases and the name of
the list in the admin interface?

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From lindsey@ncsa.uiuc.edu  Tue Sep 28 04:14:00 1999
From: lindsey@ncsa.uiuc.edu (Christopher Lindsey)
Date: Mon, 27 Sep 1999 22:14:00 -0500 (CDT)
Subject: [Mailman-Developers] List config portability
In-Reply-To:  from "J C Lawrence" at Sep 27, 99 08:03:09 pm
Message-ID: <199909280314.WAA27657@ferret.ncsa.uiuc.edu>

> Specifically:
> 
>   Can I rename a list by changing the name of the ~mailman/lists/XXX 
> directory as long as I also change the MTA aliases and the name of
> the list in the admin interface?

Yes, I've done these three steps without any problems.  

Chris


From claw@varesearch.com  Tue Sep 28 21:15:45 1999
From: claw@varesearch.com (J C Lawrence)
Date: Tue, 28 Sep 1999 13:15:45 -0700
Subject: [Mailman-Developers] Feature request
Message-ID: 

I'd be awfully pleased if I could customise the default reject
message on a per-list basis.  I almost never use the "send
administrative messages to..." message, using instead such things
as:

  1) Pleas trim your quotes
  2) Please fix your attributions and/or attribute your quoted text
  3) Please place new text below the quote it refers to and trim the
     quote
  4) Please post from an address that does not append advertising to
     your message
  5) Please wrap your lines at 80 columns or less
  6) Please see the FAQ
  7) Less noise, more signal please

etc.

Best of course would be the ability to pick from a list of canned
customised reject messages.

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...


From eparker@mindsec.com  Tue Sep 28 23:24:44 1999
From: eparker@mindsec.com (Erik Parker)
Date: Tue, 28 Sep 1999 16:24:44 -0600 (MDT)
Subject: [Mailman-Developers] Status of pipermail update..
In-Reply-To: 
Message-ID: 

*Pipermail + Archiving mechanism
- Search engine for archives
- Provide downloadable tar.gz's of the html archives
- sort by date should go most-recent to oldest
- allow list owner to edit archive messages
- support for alternative archiving systems, e.g. MHonArc, Hypermail
- archive link should do *something* reasonable before the first
  message has been posted to the list.



Does anyone know how hard it would be, or perhaps if it is already
in a CVS version... the status of "sort by date shouldgo most-recent to
oldest", and will there be a convert program of some kind for the current
archive that already listed backwards?

We have had a lot of users complaining, when they have to load a 2 meg
file.. (some of them aren't as lucky as those of us sitting on t1 and
larger.. hehe)



Erik Parker
eparker@mindsec.com



From ckolar@admin.aurora.edu  Wed Sep 29 17:21:30 1999
From: ckolar@admin.aurora.edu (Christopher Kolar)
Date: Wed, 29 Sep 1999 11:21:30 -0500
Subject: [Mailman-Developers] Documentation: Admin Guide Draft
Message-ID: <9909291116100F.01912@kolar.facnet.aurora.edu>

I have placed the first rough draft of both a list manager's guide and a
list manager's quick reference on the web.  I would appreciate it if
members of the development team took a look at it and commented.

I have been preparing documentation for my institution as we roll MM out
and we will eventually GPL them once we find out what we need to do.  The
following documents are currently available for review:

1.  MailMan User Guide (for list subscribers)
2.  MailMan Administrator's Guide (for list managers, non-technical list
owners)
3.  List Administrator's Quick Reference (covers 90% of what our help desk
has heard from non-technical (faculty) list owners).

AT this time all of the documents are ugly, I just need
feedback/corrections related to the content.  Documents are available at
http://www.aurora.edu/~ckolar/mailman

Cheers,

--chris

--
/////\\\\\/////\\\\\
 Christopher G. Kolar
   Director of Instructional Technology
   Aurora University, Aurora, Illinois
 ckolar@admin.aurora.edu  --  www.aurora.edu
        [PGP Public Key ID: 0xC6492C72]


From kclark@ntlug.org  Wed Sep 29 17:56:13 1999
From: kclark@ntlug.org (Kendall Clark)
Date: Wed, 29 Sep 1999 11:56:13 -0500 (CDT)
Subject: [Mailman-Developers] Mailman Customization Guide?
Message-ID: <14322.17581.525423.386157@cmpu.net>

Hi all,

First, Mailman is great. Thanks for the work.

Next, I want to customize Mailman by adding a "poll" and a
"document/url archive" option to mailing lists. "Poll", similar to
what eGroups does with this (though they do some dumb stuff here)
allows a list member or admin to define an issue and some
"multiple-choice-style" options, and then list members register their
vote, all of which are tracked. Interface would be something like:
"http://foo.org/mailman/listinfo//poll//vote" and
"http://foo.org/mailman/listinfo//poll//results"

By "document/url archive" I'd like to be able to define a "library"
for a list, a form for submission (even better: a little xml language
that could be cherry-picked from the text of list messages themselves;
but that's "version 2" feature :> ) of URLs and plain text documents;
the url "http://foo.org/mailman/listinfo//archive would
return a page of the archived links and links to the plain text
documents. Yes, this is a bit duplicative of Pipermail, but it's also
very handy to have stuff organized in a non-archival way (not thread
or time or subject based). I imagine the best way to do this is to
store URLs and glob.glob() pickled and then
read them off the disk and build the page.

I know how to write Python, but I'm not really sure where to dive into
Mailman first; what is the preferred way of doing extension work like
this is?

In other words, I could probably hack at it long enough to get
something working for me, but maybe, with a bit of guidance for what
these features should look like to be consistent with Mailman's
design, I can manage to do good enough work to submit some patches.

Thanks.


--
I'll get a bunch of monkeys, dress 'em up, and make 'em
reenact the Civil War!  Heh, heh, heh!

		-- Homer Simpson
		   Homer The Great 


From claw@varesearch.com  Wed Sep 29 18:52:48 1999
From: claw@varesearch.com (J C Lawrence)
Date: Wed, 29 Sep 1999 10:52:48 -0700
Subject: [Mailman-Developers] Mailman Customization Guide?
In-Reply-To: Message from Kendall Clark 
 of "Wed, 29 Sep 1999 11:56:13 CDT." <14322.17581.525423.386157@cmpu.net>
Message-ID: 

On Wed, 29 Sep 1999 11:56:13 -0500 (CDT) 
Kendall Clark  wrote:

> By "document/url archive" I'd like to be able to define a
> "library" for a list, a form for submission (even better: a little
> xml language that could be cherry-picked from the text of list
> messages themselves; but that's "version 2" feature :> ) of URLs
> and plain text documents; the url
> "http://foo.org/mailman/listinfo//archive would return
> a page of the archived links and links to the plain text
> documents. Yes, this is a bit duplicative of Pipermail, but it's
> also very handy to have stuff organized in a non-archival way (not
> thread or time or subject based). I imagine the best way to do
> this is to store URLs and glob.glob()
> pickled and then read them off the disk and build the page.

Have a look at phpHoo.  It doesn't do exactly what you want, but is
workably close.

-- 
J C Lawrence      Life: http://www.kanga.nu/   Home: claw@kanga.nu
---------(*)                Work (Linux/IA64): claw@varesearch.com
 ... Beware of cromagnons wearing chewing gum and palm pilots ...