diff -u ./Changelog ../../1.94.4/majordomo-1.94.4//Changelog
--- ./Changelog Mon Apr 28 20:21:34 1997
+++ ../../1.94.4/majordomo-1.94.4//Changelog Wed Aug 27 17:56:13 1997
@@ -1,3 +1,172 @@
+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:
[email protected] (Rodent of Unusual Size)
+ Message-id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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
[email protected] and the From: line in the
+ > > mail is
[email protected]. [ 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 <
[email protected]>
+ Message-Id: <
[email protected]>
+
+ 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
[email protected] and the From: line in the
+ > > mail is
[email protected]. [ 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.
@@ -2245,5 +2414,5 @@
then only members of the list can access the list with "who" and "which"
commands.
-$Header: /sources/cvsrepos/majordomo/Changelog,v 1.22 1997/04/28 18:21:34 cwilson Exp $
+$Header: /sources/cvsrepos/majordomo/Changelog,v 1.23 1997/08/27 15:56:13 cwilson Exp $
Common subdirectories: ./Doc and ../../1.94.4/majordomo-1.94.4//Doc
diff -u ./INSTALL ../../1.94.4/majordomo-1.94.4//INSTALL
--- ./INSTALL Mon Apr 28 20:20:01 1997
+++ ../../1.94.4/majordomo-1.94.4//INSTALL Wed Aug 27 19:14:50 1997
@@ -2,40 +2,46 @@
|\/| |__| | | | |__/ | \ | | |\/| | |
| | | | _| |__| | \ |__/ |__| | | |__|
- Release 1.94.3
+ Release 1.94.4
INSTALL
--------------------------------------------------------------------------
-> Current users of Majordomo whom are upgrading will want to <--
--> read the Changelog for details on what has changed between <--
--> versions of Majordomo. <--
+-> read the NEWS and Changelog for details on what has changed <--
+-> between versions of Majordomo. <--
--> In particular, NOTE THE CHANGES TO THE CONFIGURATION FILE. <--
--> Several new variables have been added to sample.cf, so check <--
--> it out and merge your existing majordomo.cf with the supplied <--
--> sample.cf <--
-
--------------------------------------------------------------------------
-Folks upgrading from 1.94.1 to 1.94.3 have three options:
+UPGRADING:
+----------
+
+If you're upgrading from a release before 1.94.3, you'll need to either do
+a clean install or patch your 1.94.X to 1.94.3 using the patches found at
+
ftp://ftp.greatcircle.com/pub/majordomo. Then...
+
+Folks upgrading from 1.94.3 to 1.94.4 have three options:
1) A clean install. See below.
-2) Patch your _distribution_ of 1.94.1 to 1.94.3:
+2) Patch your _distribution_ of 1.94.3 to 1.94.4:
- % cd distribution/majordomo-1.94.1
- % patch < ...../patches/majordomo-1.94.3/1.94.1-to-1.94.3-patch
+ % cd distribution/majordomo-1.94.3
+ % patch < ...../patches/majordomo-1.94.4/1.94.3-to-1.94.4-patch
If there are no *.rej files, do a 'make install'. Otherwise, examine
each .rej file and merge the changes in by hand.
-3) Patch your _installation_ of 1.94.1 to 1.94.3:
+3) Patch your _installation_ of 1.94.3 to 1.94.4:
- % cd /usr/majordomo
- % patch < ....../majordomo-1.94.3/patches/1.94.1-to-1.94.3-installed-patch
+ % cd /usr/majordomo (ie, where you've installed majordomo)
+ % patch < ....../majordomo-1.94.4/patches/1.94.3-to-1.94.4-installed-patch
+ Also be sure to compile and install wrapper, since there is a security
+ patch in this version
+
If there are no *.rej files, you're done! Otherwise, examine
each .rej file and merge the changes in by hand.
+
--------------------------------------------------------------------------
diff -u ./Makefile ../../1.94.4/majordomo-1.94.4//Makefile
--- ./Makefile Mon Apr 28 20:20:06 1997
+++ ../../1.94.4/majordomo-1.94.4//Makefile Wed Aug 27 17:56:21 1997
@@ -1,9 +1,10 @@
-#$Modified: Mon Apr 28 20:17:27 1997 by cwilson $
+
+#$Modified: Wed Aug 27 17:52:25 1997 by cwilson $
#
# $Source: /sources/cvsrepos/majordomo/Makefile,v $
-# $Revision: 1.62 $
-# $Date: 1997/04/28 18:20:06 $
-# $Header: /sources/cvsrepos/majordomo/Makefile,v 1.62 1997/04/28 18:20:06 cwilson Exp $
+# $Revision: 1.63 $
+# $Date: 1997/08/27 15:56:21 $
+# $Header: /sources/cvsrepos/majordomo/Makefile,v 1.63 1997/08/27 15:56:21 cwilson Exp $
#
# This is the Makefile for Majordomo.
@@ -69,7 +70,7 @@
#--------YOU SHOULDN'T HAVE TO CHANGE ANYTHING BELOW THIS LINE.-------------
-VERSION = 1.94.3
+VERSION = 1.94.4
# For those stupid machines that try to use csh. Doh!
SHELL = /bin/sh
diff -u ./NEWLIST ../../1.94.4/majordomo-1.94.4//NEWLIST
--- ./NEWLIST Mon Apr 28 20:20:13 1997
+++ ../../1.94.4/majordomo-1.94.4//NEWLIST Wed Aug 27 17:56:24 1997
@@ -2,7 +2,7 @@
|\/| |__| | | | |__/ | \ | | |\/| | |
| | | | _| |__| | \ |__/ |__| | | |__|
- Release 1.94.3
+ Release 1.94.4
NEWLIST
--------------------------------------------------------------------------
diff -u ./NEWS ../../1.94.4/majordomo-1.94.4//NEWS
--- ./NEWS Mon Apr 28 20:20:16 1997
+++ ../../1.94.4/majordomo-1.94.4//NEWS Wed Aug 27 17:56:28 1997
@@ -1,3 +1,16 @@
+Changes from 1.94.3 to 1.94.4
+
+o Security fix for advertise/noadvertise eval hole.
+o Security fix for wrapper env overrun
+o Fixed race condition in unsubscribing, config lock not being freed,
+ EOF tests fail due to bad assumptions
+o mungedomain wasn't working properly
+o fixes to commented-out sample.cf code.
+o archive2.pl now has -D -M -Y arguments for 4 digit years.
+o added "welcome" and "announcments" keywords.
+o Digest fixes for -C
+
+
Changes from 1.94.2 to 1.94.3:
o removed wrapper since it snuck into the tarball
diff -u ./README ../../1.94.4/majordomo-1.94.4//README
--- ./README Mon Apr 28 20:20:22 1997
+++ ../../1.94.4/majordomo-1.94.4//README Wed Aug 27 17:56:30 1997
@@ -8,7 +8,7 @@
Medieval Latin "major domus" - "chief of the house".
(Barnhart Concise Dictionary of Etymology)
- Release 1.94.3
+ Release 1.94.4
README
--------------------------------------------------------------------------
@@ -16,19 +16,11 @@
-> read the NEWS file for details on what has changed between <-
-> this and the previous version of Majordomo. <-
--> In particular, NOTE THE CHANGES TO THE CONFIGURATION FILE. <-
--> A new variable has been added to sample.cf, while another has <-
--> changed its name and several defaults have been modified, so <-
--> check it out and merge your existing majordomo.cf with the <-
--> supplied sample.cf. Running the 'config-test' script after <-
--> upgrading will point out the variables you need to add. <-
-
-
- Release 1.94.3 of Majordomo is primarily a bugfix release,
- incorporating changes which fix problems or correct pressing
- deficiencies in version 1.94.1. No substantial new
- functionality has been added, but certain necessary
- modifications have been made.
+ Release 1.94.4 of Majordomo is primarily a security and bugfix
+ release, incorporating changes which fix problems or correct
+ pressing deficiencies in version 1.94.3. The only substantial new
+ functionality added is the addition of "welcome" and "announcments"
+ keywords.
* * * * * * * * * * * * * *
diff -u ./archive2.pl ../../1.94.4/majordomo-1.94.4//archive2.pl
--- ./archive2.pl Thu Dec 12 16:01:39 1996
+++ ../../1.94.4/majordomo-1.94.4//archive2.pl Wed Aug 27 17:07:44 1997
@@ -4,8 +4,8 @@
# permission only.
#
# $Source: /sources/cvsrepos/majordomo/archive2.pl,v $
-# $Revision: 1.9 $
-# $Date: 1996/12/12 15:01:39 $
+# $Revision: 1.10 $
+# $Date: 1997/08/27 15:07:44 $
# $Author: cwilson $
# $State: Exp $
#
@@ -16,11 +16,14 @@
# -u Input is a UNIX archive (separated by "From " lines) to split
# -a Input is a message to append to archive
# -d Archive file is <archive>.YYMMDD
+# -D Archive file is <archive>.YYYYMMDD
# -m Archive file is <archive>.YYMM
+# -M Archive file is <archive>.YYYYMM
# -y Archive file is <archive>.YY
+# -Y Archive file is <archive>.YYYY
# Exactly one of "-u" or "-a" must be specified.
-# At most one of "-d", "-m", or "-y" may be specified; if none is
-# specified, archive name is simply <archive>
+# At most one of "-d", "-D", "-m", "-M", "-y", or "-Y" may be specified;
+# if none is specified, archive name is simply <archive>
#
# An example of using "archive" to split an existing UNIX-style archive
# named "my-list.archive" into by-day archive files named "my-list.YYMMDD":
@@ -76,9 +79,9 @@
$MoY{$_} = $m++;
}
-$usage = "Usage: $0 -f <file> {-u|-a} [-d|-m|-y] [file ...]";
+$usage = "Usage: $0 -f <file> {-u|-a} [-d|-D|-m|-M|-y|-Y] [file ...]";
-&Getopts("f:uadmy") || die("$usage\nStopped");
+&Getopts("f:uadDmMyY") || die("$usage\nStopped");
if (!defined($opt_f)) {
print STDERR "'-f <list>' required\n$usage\n";
@@ -103,10 +106,13 @@
$mutex = 0;
if (defined($opt_d)) { $mutex++; }
+if (defined($opt_D)) { $mutex++; }
if (defined($opt_m)) { $mutex++; }
+if (defined($opt_M)) { $mutex++; }
if (defined($opt_y)) { $mutex++; }
+if (defined($opt_Y)) { $mutex++; }
if ($mutex > 1) {
- print STDERR "Only one of '-d', '-m', or '-y' allowed\n$usage\n";
+ print STDERR "Only one of '-d', '-D', '-m', '-M', -y', or '-Y' allowed\n$usage\n";
exit 3;
}
@@ -159,11 +165,20 @@
if (defined($opt_y)) {
$suffix = sprintf(".%02d", $year % 100);
}
+ if (defined($opt_Y)) {
+ $suffix = sprintf(".%04d", $year + 1900);
+ }
if (defined($opt_m)) {
$suffix = sprintf(".%02d%02d", $year % 100, $mon);
}
+ if (defined($opt_M)) {
+ $suffix = sprintf(".%04d%02d", $year + 1900, $mon);
+ }
if (defined($opt_d)) {
$suffix = sprintf(".%02d%02d%02d", $year % 100, $mon, $mday);
+ }
+ if (defined($opt_D)) {
+ $suffix = sprintf(".%04d%02d%02d", $year + 1900, $mon, $mday);
}
&lopen($FH, ">>", "$opt_f$suffix") ||
diff -u ./config-test ../../1.94.4/majordomo-1.94.4//config-test
--- ./config-test Mon Mar 10 18:22:05 1997
+++ ../../1.94.4/majordomo-1.94.4//config-test Wed Aug 27 17:17:13 1997
@@ -1,5 +1,5 @@
#!/bin/perl
-# $Id: config-test,v 1.17 1997/03/10 17:22:05 cwilson Exp $
+# $Id: config-test,v 1.18 1997/08/27 15:17:13 cwilson Exp $
# configuration test for majordomo
# provided with majordomo, modifications by darren stalder <
[email protected]>
# more mods by Vince Skahan <
[email protected]>
@@ -210,10 +210,10 @@
}
}
-if ( -r $log && -w $log) {
+if ( -f $log && -r $log && -w $log) {
&good("logfile $log exists and is writeable.");
} else {
- &bad("logfile $log exists, but is not writeable.");
+ &bad("logfile $log exists, but is not writeable or isn't a file.");
}
&header ("Mailers");
diff -u ./config_parse.pl ../../1.94.4/majordomo-1.94.4//config_parse.pl
--- ./config_parse.pl Sun Apr 20 18:06:58 1997
+++ ../../1.94.4/majordomo-1.94.4//config_parse.pl Wed Aug 27 16:41:32 1997
@@ -5,7 +5,7 @@
# writes into the global variable %main'config_opts
#
-# $Header: /sources/cvsrepos/majordomo/config_parse.pl,v 1.63 1997/04/20 16:06:58 cwilson Exp $
+# $Header: /sources/cvsrepos/majordomo/config_parse.pl,v 1.64 1997/08/27 14:41:32 cwilson Exp $
# $Modified: Tue Dec 17 19:29:14 1996 by cwilson $
# this array holds the interesting info for use by all tools
@@ -76,6 +76,8 @@
# otherwise the value is the default value for the keyword.
# if the value starts with #!, the rest of the value is eval'ed
%known_keys = (
+ 'welcome', 'yes', # send welcome msg to new subscribers
+ 'announcements', 'yes', # send sub/unsub audits to list owner
'get_access', "open\001closed\001list\001list", # open, anyone can access
'index_access', "open\001closed\001list\001open", # closed, nobody can
'who_access', "open\001closed\001list\001open", # list, only list can access.
@@ -145,6 +147,16 @@
# An associative array of comments for all of the keys
# The text is wrapped and filled on output.
%comments = (
+'welcome',
+"If set to yes, a welcome message (and optional 'intro' file) will be
+sent to the newly subscribed user.",
+
+'announcements',
+"If set to yes, comings and goings to the list will be sent to the list
+owner. These SUBSCRIBE/UNSUBSCRIBE event announcements are informational
+only (no action is required), although it is highly recommended that they
+be monitored to watch for list abuse.",
+
'get_access',
"One of three values: open, list, closed. Open allows anyone
access to this command and closed completely disables the
@@ -404,6 +416,8 @@
# match commands to their subsystem, by default only 4 subsystems
# exist, majordomo, resend, digest and config.
%subsystem = (
+ 'welcome', 'majordomo',
+ 'announcements', 'majordomo',
'get_access', 'majordomo',
'index_access', 'majordomo',
'info_access', 'majordomo',
@@ -458,6 +472,8 @@
# the parse function will be called to parse the value string for
# the keyword
%parse_function = (
+ 'welcome', 'grab_bool',
+ 'announcements', 'grab_bool',
'get_access', 'grab_enum',
'index_access', 'grab_enum',
'info_access', 'grab_enum',
Common subdirectories: ./contrib and ../../1.94.4/majordomo-1.94.4//contrib
diff -u ./digest ../../1.94.4/majordomo-1.94.4//digest
--- ./digest Mon Mar 10 18:11:25 1997
+++ ../../1.94.4/majordomo-1.94.4//digest Wed Aug 27 16:42:52 1997
@@ -5,12 +5,12 @@
# Heavily modified by Brent Chapman <
[email protected]>
# $Source: /sources/cvsrepos/majordomo/digest,v $
-# $Revision: 1.22 $
-# $Date: 1997/03/10 17:11:25 $
+# $Revision: 1.23 $
+# $Date: 1997/08/27 14:42:52 $
# $Author: cwilson $
# $State: Exp $
#
-# $Header: /sources/cvsrepos/majordomo/digest,v 1.22 1997/03/10 17:11:25 cwilson Exp $
+# $Header: /sources/cvsrepos/majordomo/digest,v 1.23 1997/08/27 14:42:52 cwilson Exp $
#
#
@@ -21,10 +21,9 @@
&init;
&readconfig;
-$TEMP = "$TMPDIR/digest.$$" || "/usr/tmp/digest.$$";
+$TEMP = (defined $TMPDIR && -d $TMPDIR) ?
+ "$TMPDIR/digest.$$" : "/usr/tmp/digest.$$";
-$sendmail_command = "/usr/lib/sendmail" if ! defined $sendmail_command ;
-
if (defined($opt_r)) {
&receive_message;
if (&should_be_sent(1)) {
@@ -164,17 +163,19 @@
#
sub send_digest {
local($lastfile) = shift;
- @files=<$V{'INCOMING'}/*>;
- if ($#files < $[) {
- &abort("No messages.\nStopped ");
+ if (opendir(DIR, $V{'INCOMING'})) {
+ @files = grep(/^\d+$/, readdir(DIR));
+ closedir(DIR);
+ }
+ else {
+ &abort("Error opening $V{'INCOMING'}: $!\nStopped ");
}
+ &abort("No messages.\nStopped ") unless @files;
open(TEMP,">$TEMP") || &abort("$TEMP: $!\n");
print STDERR "producing $V{'NAME'} V$VOLUME #$NUMBER\n";
- foreach $message (@files) {
- print STDERR "non digest input file $message", next
- if $message !~ m#/\d+$#;
+ foreach (@files) {
+ $message = "$V{'INCOMING'}/$_";
open(message) || &abort("$message: $!\n");
- #side note: "open message or die"?
print STDERR "\tprocessing $message\n";
push(@processed,$message);
@@ -327,6 +328,8 @@
# are not defined, so we provide reasonable defaults.
$sendmail_command = "/usr/lib/sendmail"
unless defined $sendmail_command;
+$mailer = "$sendmail_command -oi -oee -f\$sender"
+ unless defined $mailer;
$bounce_mailer = "$sendmail_command -f\$sender -t"
unless defined $bounce_mailer;
&set_abort_addr($whoami_owner);
@@ -378,6 +381,20 @@
} # list is defined
} else { # not using -C
require "config_parse.pl";
+
+# Define all of the mailer properties:
+# The majordomo.cf file isn't used in this option, so fake everything.
+$sendmail_command = "/usr/lib/sendmail"
+ unless defined $sendmail_command;
+$mailer = "$sendmail_command -oi -oee -f\$sender"
+ unless defined $mailer;
+$bounce_mailer = "$sendmail_command -fmajordomo-owner -t"
+ unless defined $bounce_mailer;
+&set_abort_addr("majordomo-owner");
+&set_mail_from("majordomo-owner");
+&set_mail_sender("majordomo-owner");
+&set_mailer($bounce_mailer);
+
open(config) || &abort("$config: $!\n");
while (<config>) {
next if /^\s*$|^\s*#/;
Common subdirectories: ./include and ../../1.94.4/majordomo-1.94.4//include
diff -u ./majordomo ../../1.94.4/majordomo-1.94.4//majordomo
--- ./majordomo Sun Apr 20 18:11:49 1997
+++ ../../1.94.4/majordomo-1.94.4//majordomo Wed Aug 27 16:55:29 1997
@@ -8,8 +8,8 @@
# usage rights.
#
# $Source: /sources/cvsrepos/majordomo/majordomo,v $
-# $Revision: 1.87 $
-# $Date: 1997/04/20 16:11:49 $
+# $Revision: 1.88 $
+# $Date: 1997/08/27 14:55:29 $
# $Author: cwilson $
# $State: Exp $
#
@@ -457,9 +457,8 @@
# we deleted exactly 1 name, so now we shuffle the files
link("$listdir/$clean_list", "$listdir/$clean_list.old") ||
&abort("link(\"$listdir/$clean_list\", \"$listdir/$clean_list.old\"): $!");
- unlink("$listdir/$clean_list");
- link("$listdir/$clean_list.new", "$listdir/$clean_list") ||
- &abort("link(\"$listdir/$clean_list.new\", \"$listdir/$clean_list\"): $!");
+ rename("$listdir/$clean_list.new", "$listdir/$clean_list") ||
+ &abort("rename(\"$listdir/$clean_list.new\", \"$listdir/$clean_list\"): $!");
unlink("$listdir/$clean_list.old");
if (defined $deflist) {
print REPLY "Succeeded (from list $deflist).\n";
@@ -471,11 +470,13 @@
print REPLY "Succeeded.\n";
}
&log("unsubscribe $clean_list $subscriber");
+ if ( &cf_ck_bool($list,"announcements")) {
&sendmail(BYE, "$clean_list-approval\@$whereami",
"UNSUBSCRIBE $clean_list $subscriber");
print BYE "$subscriber has unsubscribed from $clean_list.\n";
print BYE "No action is required on your part.\n";
close(BYE);
+ }
}
elsif ($match_count == 0) {
print REPLY "**** No matches found for '$subscriber'\n";
@@ -813,10 +814,6 @@
&lclose(INFO);
print REPLY "New info for list $clean_list accepted.\n";
&log("newinfo $clean_list PASSWORD");
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
} else {
&abort("Can't write $listdir/$clean_list.info: $!");
}
@@ -829,10 +826,6 @@
last;
}
}
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
}
} else {
&squawk("newinfo: unknown list '$list'.");
@@ -842,10 +835,6 @@
last;
}
}
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
}
}
@@ -924,10 +913,6 @@
chmod(0664, "$listdir/$clean_list.intro");
print REPLY "New intro for list $clean_list accepted.\n";
&log("newintro $clean_list PASSWORD");
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
} else {
&abort("Can't write $listdir/$clean_list.intro: $!");
}
@@ -940,10 +925,6 @@
last;
}
}
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
}
} else {
&squawk("newintro: unknown list '$list'.");
@@ -953,10 +934,6 @@
last;
}
}
- # if we read to actual end-of-file, we are done
- if (eof) {
- &done();
- }
}
}
sub do_config {
@@ -1046,10 +1023,11 @@
umask($oldumask);
if ( &get_config($listdir, "$clean_list.new", "locked")) {
+ unlink "$listdir/$clean_list.new.config";
+ &free_lock("$listdir/$clean_list.config.LOCK");
print REPLY "The new config file for $clean_list was NOT accepted because:\n";
print REPLY @config'errors;
&log("FAILED (syntax) newconfig $clean_list PASSWORD");
- unlink "$listdir/$clean_list.new.config";
return (1);
}
@@ -1190,7 +1168,6 @@
sub do_lists {
# Tell the requester what lists we serve
local($list);
- local($command_advert, $command_noadvert);
local($reply_addr) = &ParseAddrs($reply_to);
select((select(REPLY), $| = 1)[0]);
@@ -1212,16 +1189,14 @@
if ( ($'config_opts{$list, 'advertise'} ne '')
|| ($'config_opts{$list, 'noadvertise'} ne '') ) {
- local(@array) = ();
- local($i, $command, $result) = ();
- $reply_addr =~ s/\@/\\\@/g;
- $result = 0;
+ local(@array, $i);
+ local($result) = 0;
+ local($_) = $reply_addr;
if ($'config_opts{$list, 'advertise'} ne '') {
@array = split(/\001/,$'config_opts{$list, 'advertise'});
foreach $i (@array) {
- $command = "(q~$reply_addr~ =~ $i)";
- $result = 1, last if (eval $command);
+ $result = 1, last if (eval $i); # Expects $_ = $reply_addr
}
} else { $result = 1; }
@@ -1230,9 +1205,7 @@
@array = split(/\001/,$'config_opts{$list, 'noadvertise'});
foreach $i (@array) {
- $command = "(q~$reply_addr~ =~ $i)";
- print STDERR "do_lists: noadvertise execing $command\n" if $DEBUG;
- $result = 0, last if (eval $command);
+ $result = 0, last if (eval $i); # Expects $_ = $reply_addr
}
}
@@ -1852,6 +1825,9 @@
local($list) = shift;
local($subscriber) = join(" ", @_);
+ # welcome/intro message controlled by 'welcome=yes/no'
+ if ( &cf_ck_bool($list,"welcome")) {
+
# Set up the sendmail process to welcome the new subscriber
&set_mail_sender($config_opts{$list,"sender"} . "\@" . $whereami);
&sendmail(MSG, $subscriber, "Welcome to $list");
@@ -1925,11 +1901,15 @@
# close (and thereby send) the welcome message to the subscriber
close(MSG);
- # tell the list owner of the new subscriber
+ }
+
+ # tell the list owner of the new subscriber (optional: announcements=yes/no)
+ if ( &cf_ck_bool($list,"announcements")) {
&sendmail(NOTICE, "$list-approval\@$whereami", "SUBSCRIBE $list $subscriber");
print NOTICE "$subscriber has been added to $list.\n";
print NOTICE "No action is required on your part.\n";
close(NOTICE);
+ }
}
# complain about a user screwup, and note that the user needs help appended
diff -u ./majordomo.aliases ../../1.94.4/majordomo-1.94.4//majordomo.aliases
--- ./majordomo.aliases Mon Apr 28 20:20:27 1997
+++ ../../1.94.4/majordomo-1.94.4//majordomo.aliases Wed Aug 27 17:56:34 1997
@@ -14,12 +14,12 @@
# restart sendmail.
#
-majordomo: "|/usr/test/majordomo-1.94.3/wrapper majordomo"
+majordomo: "|/usr/test/majordomo-1.94.4/wrapper majordomo"
majordomo-owner: you
owner-majordomo: you
-test: "|/usr/test/majordomo-1.94.3/wrapper resend -l test test-list"
-test-list: :include:/usr/test/majordomo-1.94.3/lists/test
+test: "|/usr/test/majordomo-1.94.4/wrapper resend -l test test-list"
+test-list: :include:/usr/test/majordomo-1.94.4/lists/test
owner-test: you
test-owner: you
test-request: you
diff -u ./majordomo.pl ../../1.94.4/majordomo-1.94.4//majordomo.pl
--- ./majordomo.pl Wed Apr 2 16:04:14 1997
+++ ../../1.94.4/majordomo-1.94.4//majordomo.pl Wed Aug 27 16:58:53 1997
@@ -1,12 +1,12 @@
# General subroutines for Majordomo
# $Source: /sources/cvsrepos/majordomo/majordomo.pl,v $
-# $Revision: 1.55 $
-# $Date: 1997/04/02 14:04:14 $
+# $Revision: 1.56 $
+# $Date: 1997/08/27 14:58:53 $
# $Author: cwilson $
# $State: Exp $
#
-# $Header: /sources/cvsrepos/majordomo/majordomo.pl,v 1.55 1997/04/02 14:04:14 cwilson Exp $
+# $Header: /sources/cvsrepos/majordomo/majordomo.pl,v 1.56 1997/08/27 14:58:53 cwilson Exp $
#
# The exit codes for abort. Look in /usr/include/sysexits.h.
@@ -707,7 +707,7 @@
}
sub main'is_list_member {
- local($subscriber, $listdir, $clean_list) = @_;
+ local($subscriber, $listdir, $clean_list, $file) = @_;
local($matches) = 0;
local(*LIST);
local($_);
@@ -714,10 +714,11 @@
print STDERR "is_list_member: enter\n" if $DEBUG;
- $clean_list = "$listdir/$clean_list" if $listdir;
- print STDERR "is_list_member: checking $clean_list for $subscriber\n"
+ $file = "$listdir/$file" if defined $file && $file !~ m|^/|;
+ $file = "$listdir/$clean_list" unless defined $file;
+ print STDERR "is_list_member: checking $file for $subscriber\n"
if $DEBUG;
- if (open(LIST, $clean_list)) {
+ if (open(LIST, $file)) {
while (<LIST>) {
if (&main'addr_match($subscriber, $_,
(&main'cf_ck_bool($clean_list,"mungedomain") ? 2 : undef))) {
@@ -728,7 +729,7 @@
close(LIST);
}
else {
- &main'bitch("Can't read $clean_list: $!"); #'"";
+ &main'bitch("Can't read $file: $!"); #'"";
}
print STDERR "is_list_member: exit $matches\n" if $DEBUG;
@@ -796,8 +797,7 @@
$total = 0;
foreach $list (@lists) {
- $list = "$listdir/$list" unless ($list =~ m|^/|);
- $total += &main'is_list_member($subscriber, "", $list);
+ $total += &main'is_list_member($subscriber, $listdir, $clean_list, $list);
}
print STDERR "access_check: exit\n" if $DEBUG;
return $total;
diff -u ./majordomo_version.pl ../../1.94.4/majordomo-1.94.4//majordomo_version.pl
--- ./majordomo_version.pl Mon Apr 28 20:20:31 1997
+++ ../../1.94.4/majordomo-1.94.4//majordomo_version.pl Wed Aug 27 17:56:36 1997
@@ -1,5 +1,5 @@
-# $Header: /sources/cvsrepos/majordomo/majordomo_version.pl,v 1.25 1997/04/28 18:20:31 cwilson Exp $
+# $Header: /sources/cvsrepos/majordomo/majordomo_version.pl,v 1.26 1997/08/27 15:56:36 cwilson Exp $
-$majordomo_version = "1.94.3";
+$majordomo_version = "1.94.4";
1;
Common subdirectories: ./md-sub and ../../1.94.4/majordomo-1.94.4//md-sub
Only in .: patches
diff -u ./resend ../../1.94.4/majordomo-1.94.4//resend
--- ./resend Wed Apr 2 16:04:48 1997
+++ ../../1.94.4/majordomo-1.94.4//resend Wed Aug 27 16:59:24 1997
@@ -5,8 +5,8 @@
# permission only.
#
# $Source: /sources/cvsrepos/majordomo/resend,v $
-# $Revision: 1.85 $
-# $Date: 1997/04/02 14:04:48 $
+# $Revision: 1.86 $
+# $Date: 1997/08/27 14:59:24 $
# $Author: cwilson $
# $State: Exp $
#
@@ -552,17 +552,13 @@
local(@files) = split (/[:\s]+/, $opt_I);
foreach $file (@files) {
- # add $listdir if not explicitly set.
- #
- $file = "$listdir/$file" unless ($file =~ m|^/|);
-
# Return a null message if the sender (from the From: or
# Reply-To: headers) is found
#
- return "" if &is_list_member($from, "", $file) ||
+ return "" if &is_list_member($from, $listdir, $opt_l, $file) ||
(defined $reply_to &&
$reply_to ne $from &&
- &is_list_member($reply_to, "", $file));
+ &is_list_member($reply_to, $listdir, $opt_l, $file));
}
# We only get here if nothing matches.
diff -u ./sample.cf ../../1.94.4/majordomo-1.94.4//sample.cf
--- ./sample.cf Sun Apr 27 16:56:45 1997
+++ ../../1.94.4/majordomo-1.94.4//sample.cf Wed Aug 27 17:00:31 1997
@@ -98,7 +98,7 @@
# imbecile Internet, "open+confirm" or "auto+confirm" is a wiser
# choice for publicly available Majordomo servers.
#
-# $config'default_subscribe_policy = "open+confirm";
+$config'default_subscribe_policy = "open+confirm";
#
# Configure X400 parsing here. This is functional, but not well tested
@@ -220,7 +220,7 @@
# no trailing ";"
# For example:
# $global_taboo_headers = <<'END';
-# /^from:.*
[email protected]/i
+# /^from:.*trouble\@hassle\.net/i
# /^subject:.*non-delivery notice/i
# END
# NOTE! Using ' instead of " in the 'END' is VERY IMPORTANT!!!
@@ -313,4 +313,4 @@
$majordomo_dont_reply = '(mailer-daemon|uucp|listserv|majordomo|listproc)\@';
1;
-# $Header: /sources/cvsrepos/majordomo/sample.cf,v 1.33 1997/04/27 14:56:45 cwilson Exp $
+# $Header: /sources/cvsrepos/majordomo/sample.cf,v 1.34 1997/08/27 15:00:31 cwilson Exp $
diff -u ./wrapper.c ../../1.94.4/majordomo-1.94.4//wrapper.c
--- ./wrapper.c Mon Nov 18 16:34:21 1996
+++ ../../1.94.4/majordomo-1.94.4//wrapper.c Wed Aug 27 17:01:12 1997
@@ -1,7 +1,7 @@
/*
* $Source: /sources/cvsrepos/majordomo/wrapper.c,v $
- * $Revision: 1.7 $
- * $Date: 1996/11/18 15:34:21 $
+ * $Revision: 1.8 $
+ * $Date: 1997/08/27 15:01:12 $
* $Author: cwilson $
* $State: Exp $
*
@@ -10,7 +10,7 @@
*/
#ifndef lint
-static char rcs_header[] = "$Header: /sources/cvsrepos/majordomo/wrapper.c,v 1.7 1996/11/18 15:34:21 cwilson Exp $";
+static char rcs_header[] = "$Header: /sources/cvsrepos/majordomo/wrapper.c,v 1.8 1997/08/27 15:01:12 cwilson Exp $";
#endif
#include <stdio.h>
@@ -55,6 +55,8 @@
0
};
+int new_env_size = 7; /* to prevent overflow problems */
+
main(argc, argv, env)
int argc;
char * argv[];
@@ -93,7 +95,7 @@
e = 3; /* the first unused slot in new_env[] */
#endif
- for (i = 0 ; env[i] != NULL ; i++) {
+ for (i = 0 ; env[i] != NULL && e <= new_env_size; i++) {
if ((strncmp(env[i], "USER=", 5) == 0) ||
(strncmp(env[i], "TZ=", 3) == 0) ||
(strncmp(env[i], "LOGNAME=", 8) == 0)) {