[Exim] Exim and Majordomo

Top Page
Delete this message
Reply to this message
Author: Gordon McKee
Date:  
To: exim-users
Subject: [Exim] Exim and Majordomo
Hi all

Got majordomo and exim talking to each other quite nicely now. Got two
problems though. When I send a message to the list to get sent out to every
one the replay address is the address of the client that sent the message
not the user I have specified in the config file. Secondly, the
authentication system seems to work but any host seems to be able to send
out the list if they know the correct email address. I have got the
addresses that can send to the list in a file and put that into the config
file.

The main purpose of the list is so that one person can Email to the list and
notify others of changes - like an announce list.

I have included my majordomo.cf file and my alias file along with the
director bits I have in my exim conf file and the list conf file.

majordomo.cf - renames to gdmckee.com.cf as it does virtual domains as well

#
# A sample configuration file for majordomo. You must read through this and
# edit it accordingly!
#


# $whereami -- What machine am I running on?
#
$whereami = "gdmckee.com";

# $whoami -- Who do users send requests to me as?
#
$whoami = "majordomo\@$whereami";

# $whoami_owner -- Who is the owner of the above, in case of problems?
#
$whoami_owner = "Majordomo-Owner\@$whereami";

# $homedir -- Where can I find my extra .pl files, like majordomo.pl?
# the environment variable HOME is set by the wrapper
#
$homedir = "/usr/local/majordomo";

# $listdir -- Where are the mailing lists?
#
$listdir = "$homedir/lists";

# $digest_work_dir -- the parent directory for digest's queue area
# Each list must have a subdirectory under this directory in order for
# digest to work. E.G. The bblisa list would use:
#       /usr/local/mail/digest/bblisa
# as its directory.
#
$digest_work_dir = "/usr/local/majordomo/digests";


# $log -- Where do I write my log?
#
$log = "$homedir/Log";

# $sendmail_command -- Pathname to the sendmail program
#                      usually /usr/lib/sendmail, but some newer BSD systems
#                      seem to prefer /usr/sbin/sendmail
#
# $sendmail_command = "/usr/lib/sendmail";
#$sendmail_command = "/usr/sbin/sendmail";
$sendmail_command = "/usr/local/sbin/exim";


# $mailer -- What program and args do I use to send mail to the list?
# $bounce_mailer -- What is used to send mail anywhere else?
# The variables $to, $from, $subject, and $sender can be interpolated into
# this command line.  Note, however, that the $to, $from, and $subject
# variables may be provided by the person sending mail, and much mischief
# can be had by playing with this variable.  It is perfectly safe to use
# $sender, but the others are insecure.
#
# Sendmail option -oi:  Do not take a . on a line by itself as the message
#                       terminator.
# Sendmail option -oee: Force sendmail to exit with a zero exit status if
#                       if it's not going to give useful information.
#
$mailer = "$sendmail_command -oi -oee -f\$sender";
$bounce_mailer = "$sendmail_command -oi -oee -f\$sender -t";


# You can special case the mailer used to deliver outbound mail as follows:
#
# To use TLB and use no outgoing alias:
# if ($main'program_name eq 'mj_resend' && $opt_l eq 'test-list') {
# $mailer = "/usr/local/majordomo/tlb /usr/local/lists/${opt_l}.tlb";
# }
#
# To use a different Sendmail queue for this list's mail:
# if ($main'program_name eq 'mj_resend' && $opt_l eq 'test-list') {
# $mailer = "$sendmail_command -oQ /var/spool/listq -f\$sender";
# }

# You can force Majordomo to delay any processing if the system load is too
# high by uncommenting the following lines.  THIS ONLY WORKS if your
"uptime"
# command (usually found in /usr/bin/uptime or /usr/bsd/uptime)
# returns a string like:
#   5:23pm  up  5:51,  9 users,  load averages: 0.19, 0.25, 0.33
#
$max_loadavg = 10;                 # Choose the maximum allowed load
#
$uptime = `/usr/bin/uptime` if -x '/usr/bin/uptime';     # Get system uptime
#$uptime = `/usr/bsd/uptime` if -x '/usr/bsd/uptime';     # or uptime is
over he
re.
#
#($avg_1_minute, $avg_5_minutes, $avg_15_minutes) =
#    $uptime =~ /averages:\s+(\S+),\s+(\S+),\s+(\S+)/;
#
#exit 75 if ($avg_15_minutes >= $max_loadavg);           # E_TEMPFAIL
#


# Set the default subscribe policy for new lists here.
# If not defined, defaults to "open", but in today's increasingly
# imbecile Internet, "open+confirm" or "auto+confirm" is a wiser
# choice for publicly available Majordomo servers.
#
$config'default_subscribe_policy = "open+confirm";

#
# Configure X400 parsing here. This is functional, but not well tested
# and rather a hack.
# By default all addresses that look x400-ish will be checked for a
# @ sign (meaning that it's headed to an smtp->x400 gateway, as well
# as the 'c=' and 'a[dm]=' parts, which mean something as well.
#
# If you will be receiving x400 style return addresses that do not have
# an @ sign in them indicating an smtp->x400 gateway, set $no_x400at to 1.
# Otherwise, leave $no_x400 at 0.
#
$no_x400at = 0;
#
# If you will be receiving x400 addresses without the c= or a[dm]= parts
# set the $no_true_x400 variable to 1. This will disable checking for
# "c=" and "a[dm]=" pieces.
#
$no_true_x400 = 0;


#--------------------------------------------------------------------
#    Stuff below here isn't commonly changed....
#--------------------------------------------------------------------
#
# Majordomo will look for "get" and "index" files related to $list in
# directory "$filedir/$list$filedir_suffix", so set $filedir and
# $filedir_suffix appropriately.  For instance, to look in
# /usr/local/mail/files/$list, use:
#   $filedir = "/usr/local/mail/files";
#   $filedir_suffix = "";               # empty string
# or to look in $listdir/$list.archive, use:
#   $filedir = "$listdir";
#   $filedir_suffix = ".archive";


$filedir = "$listdir";
$filedir_suffix = ".archive";

# What command should I use to process an "index" request?
#
$index_command = "/bin/ls -lRL";

# If you want to use FTPMAIL, rather than local access, for file transfer
# and access, define the following:
# $ftpmail_address = "ftpmail\@decwrl.dec.com";
# $ftpmail_location = "FTP.$whereami";

# if you want the subject of the request to be included as part of the
# subject of the reply (useful when automatically testing, or submitting
# multiple command sets), set $return_subject to 1.
#
$return_subject = 1;

# If you are using majordomo at the -request address, set the
# following variable to 1. This affects the welcome message that is
# sent to a new subscriber as well as the help text that is generated.
#
$majordomo_request = 0;

# If you have lists that have who turned off, but still allow which
# requests to work for subscribed members, and you don't want to have
# "which @" to act like a who, the variable $max_which_hits sets the
# number of hits that are allowed using which before an error is returned.
# Arguably this should be a per list settable number.
#
$max_which_hits = 0;

# Set the umask for the process. Used to set default file status for
# config file.
#
umask(007);
$config_umask = 007;

# don't change this. It checks to make sure that you have a new enough
# version of perl to run majordomo. It is in here because this file is
# used by almost all of the majordomo programs.
#
die "Perl version $] too old\n" if ($] < 4.019);

# the safe locations for archive directories
# None of the parameters that use safedirs are actually used, so
# @safedirs is a placeholder for future functionality.
# Just ignore it for version 1.90 through 1.94.
#
@safedirs = ( );

# Directory where resend temporarily puts its rewritten output message.
# For the paranoid, this could be changed to a directory that only
# majordomo has r/w permission to.
# Uses the environment variable TMPDIR, since that's pretty common
#
$TMPDIR = '/usr/local/majordomo/tmp';

# Tune how long set_lock tries to obtain a lock before giving up. Each
# attempt waits 1 to 10 seconds before trying again and waittime is
# the total minimum time spent trying. This defaults to 600 seconds (5
# minutes), which translates to no less then 60 nor more than 600 tries.
#
# $shlock'waittime = 1200;

# tune the cookie for subscribe_policy=confirm. Normally this is
# set to $homedir. *Don't* make this something like rand(400),
# the key isn't saved between sessions.
#
# $cookie_seed = "Harry Truman, Doris Day, Red China, Johnnie Ray" .
# " South Pacific, Walter Winchell, Joe DiMaggio";

# The maximum character length of the header lines for resend
#
$MAX_HEADER_LINE_LENGTH = 128;

# The maximum character length of the _entire_ header for resend
#
$MAX_TOTAL_HEADER_LENGTH = 1024;

# List of perl regular expressions that, if found in the headers of a
message,
# will cause the message to be bounced to the list approver.
# Put each regular expression on a separate line before the "END" mark, with
# no trailing ";"
# For example:
# $global_taboo_headers = <<'END';
# /^from:.*trouble\@hassle\.net/i
# /^subject:.*non-delivery notice/i
# END
# NOTE! Using ' instead of " in the 'END' is VERY IMPORTANT!!!
#

# Administrative checks. These used to be buried in the resend code
#
$admin_headers = <<'END';
/^subject:\s*subscribe\b/i
/^subject:\s*unsubscribe\b/i
/^subject:\s*uns\w*b/i
/^subject:\s*.*un-sub/i
/^subject:\s*help\b/i
/^subject:\s.*\bchange\b.*\baddress\b/i
/^subject:\s*request\b(.*\b)?addition\b/i
/^subject:\s*cancel\b/i
END

# Common things that people send to the wrong address.
# These are caught in the first 10 lines of the message body
# if 'administrivia' is turned on and the message isn't marked approved.
#
# The code that catches this should transparently redirect
# majordomo commands to majordomo. That would give the additional
# advantage of not having to add to this silly construct for
# each new majordomo command.
#
$admin_body = <<'END';
/\bcancel\b/i
/\badd me\b/i
/\bdelete me\b/i
/\bremove\s+me\b/i
/\bchange\b.*\baddress\b/
/\bsubscribe\b/i
/^sub\b/i
/\bunsubscribe\b/i
/^unsub\b/i
/\buns\w*b/i
/^\s*help\s*$/i
/^\s*info\s*$/i
/^\s*info\s+\S+\s*$/i
/^\s*lists\s*$/i
/^\s*which\s*$/i
/^\s*which\s+\S+\s*$/i
/^\s*index\s*$/i
/^\s*index\s+\S+\s*$/i
/^\s*who\s*$/i
/^\s*who\s+\S+\s*$/i
/^\s*get\s+\S+\s*$/i
/^\s*get\s+\S+\s+\S+\s*$/i
/^\s*approve\b/i
/^\s*passwd\b/i
/^\s*newinfo\b/i
/^\s*config\b/i
/^\s*newconfig\b/i
/^\s*writeconfig\b/i
/^\s*mkdigest\b/i
END

# taboo headers to catch
#
$global_taboo_headers = <<'END';
/^subject: ndn: /i
/^subject:\s*RCPT:/i
/^subject:\s*Delivery Confirmation\b/i
/^subject:\s*NON-DELIVERY of:/i
/^subject:\s*Undeliverable Message\b/i
/^subject:\s*Receipt Confirmation\b/i
/^subject:\s*Failed mail\b/i
/^subject:\s*Returned mail\b/i
/^subject:\s*unable to deliver mail\b/i
/^subject:\s.*\baway from my mail\b/i
/^subject:\s*Autoreply/i
END

# Taboo body contents to catch and forward to the approval address
#
# For example:
# $global_taboo_body = <<'END';
# /taboo topic/i
# /another taboo/i
# END
# NOTE! Using ' instead of " in the next line is VERY IMPORTANT!!!
#
$global_taboo_body = <<'END';
END

# Majordomo will not send replies to addresses which match this.
# The match is done case-insensitively.
$majordomo_dont_reply =
'(mailer-daemon|uucp|listserv|majordomo|listproc)\@';

1;
# $Header: /sources/cvsrepos/majordomo/sample.cf,v 1.34 1997/08/27 15:00:31
cwil
son Exp $

exim director:

majordomo_aliases:
driver = aliasfile
domains = lsearch;/usr/local/majordomo/lists/domain.list
file = /usr/local/majordomo/lists/${domain}-lists.aliases
search_type = lsearch*@
user = majordom
group = mail
pipe_transport = address_pipe
qualify_preserve_domain


gdmckee.com alias file:

majordom: majordomo
majordomo: "|/usr/local/majordomo/wrapper majordomo -C
/usr/local/majordomo/list
s/gdmckee.com.cf"
owner-majordomo: postmaster
Majordomo-Owner: owner-majordomo

webupdates: "|/usr/local/majordomo/wrapper resend -l webupdates -C
/usr/local/ma
jordomo/lists/gdmckee.com.cf -h gdmckee.com webupdates-out@???"
webupdates-out: :include:/usr/local/majordomo/lists/webupdates
owner-webupdates: gdmckee@???
webupdates-owner: owner-webupdates
owner-webupdates-out: owner-webupdates
webupdates-request: "|/usr/local/majordomo/wrapper request-answer -l
webupdates
-C /usr/local/majordomo/lists/gdmckee.com.cf"
request-webupdates: webupdates-request
webupdates-approval: owner-webupdates


webupdates - list config file:

# The configuration file for a majordomo mailing list.
# Comments start with the first # on a line, and continue to the end
# of the line. There is no way to escape the # character. The file
# uses either a key = value for simple (i.e. a single) values, or uses
# a here document
#     key << END
#     value 1
#     value 2
#     [ more values 1 per line]
#     END
# for installing multiple values in array types. Note that the here
# document delimiter (END in the example above) must be the same at the end
# of the list of entries as it is after the << characters.
# Within a here document, the # sign is NOT a comment character.
# A blank line is allowed only as the last line in the here document.
#
# The values can have multiple forms:
#
#       absolute_dir -- A root anchored (i.e begins with a /) directory
#       absolute_file -- A root anchored (i.e begins with a /) file
#       bool -- choose from: yes, no, y, n
#       enum -- One of a list of possible values
#       integer -- an integer (string made up of the digits 0-9,
#                  no decimal point)
#       float -- a floating point number with decimal point.
#       regexp -- A perl style regular expression with
#                 leading and trailing /'s.
#       restrict_post -- a series of space or : separated file names in
which
#                        to look up the senders address
#                   (restrict-post should go away to be replaced by an
#                    array of files)
#       string -- any text up until a \n stripped of
#                 leading and trailing whitespace
#       word -- any text with no embedded whitespace
#
# A blank value is also accepted, and will undefine the corresponding
keyword.
# The character Control-A may not be used in the file.
#
# A trailing _array on any of the above types means that that keyword
# will allow more than one value.
#
# Within a here document for a string_array, the '-' sign takes on a special
# significance.
#
#     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.
#
#
# The default if the keyword is not supplied is given in ()'s while the
# type of value is given in [], the subsystem the keyword is used in is
# listed in <>'s. (undef) as default value means that the keyword is not
# defined or used.


        # admin_passwd         [word] (webupdates.admin) <majordomo>
        # The password for handling administrative tasks on the list.
admin_passwd        =   gdmckee.admin


        # administrivia        [bool] (yes) <resend>
        # Look for administrative requests (e.g. subscribe/unsubscribe) and
        # forward them to the list maintainer instead of the list.
administrivia       =   yes


        # advertise            [regexp_array] (undef) <majordomo>
        # If the requestor email address matches one of these regexps, then
        # the list will be listed in the output of a lists command. Failure
        # to match any regexp excludes the list from the output. The
        # regexps under noadvertise override these regexps.
advertise           <<  END


END

        # announcements        [bool] (yes) <majordomo>
        # 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.
announcements       =   yes


        # approve_passwd       [word] (webupdates.pass) <resend>
        # Password to be used in the approved header to allow posting to
        # moderated list, or to bypass resend checks.
approve_passwd      =   webupdates.pass


        # archive_dir          [absolute_dir] (undef) <majordomo>
        # The directory where the mailing list archive is kept. This item
        # does not currently work. Leave it blank.
archive_dir         =


        # comments             [string_array] (undef) <config>
        # Comment string that will be retained across config file rewrites.
comments            <<  END


END

        # date_info            [bool] (yes) <majordomo>
        # Put the last updated date for the info file at the top of the
        # info file rather than having it appended with an info command.
        # This is useful if the file is being looked at by some means other
        # than majordomo (e.g. finger).
date_info           =   yes


        # date_intro           [bool] (yes) <majordomo>
        # Put the last updated date for the intro file at the top of the
        # intro file rather than having it appended with an intro command.
        # This is useful if the file is being looked at by some means other
        # than majordomo (e.g. finger).
date_intro          =   yes


        # debug                [bool] (no) <resend>
        # Don't actually forward message, just go though the motions.
debug               =   no


        # description          [string] (undef) <majordomo>
        # Used as description for mailing list when replying to the lists
        # command. There is no quoting mechanism, and there is only room
        # for 50 or so characters.
description         =


        # digest_archive       [absolute_dir] (undef) <digest>
        # The directory where the digest archive is kept. This item does
        # not currently work. Leave it blank.
digest_archive      =


        # digest_issue         [integer] (1) <digest>
        # The issue number of the next issue
digest_issue        =   1


        # digest_maxdays       [integer] (undef) <digest>
        # automatically generate a new digest when the age of the oldest
        # article in the queue exceeds this number of days.
digest_maxdays      =


        # digest_maxlines      [integer] (undef) <digest>
        # automatically generate a new digest when the size of the digest
        # exceeds this number of lines.
digest_maxlines     =


        # digest_name          [string] (webupdates) <digest>
        # The subject line for the digest. This string has the volume  and
        # issue appended to it.
digest_name         =   webupdates


        # digest_rm_footer     [word] (undef) <digest>
        # The value is the name of the list that applies the header and
        # footers to the messages that are received by digest. This allows
        # the list supplied headers and footers to be stripped before the
        # messages are included in the digest.
digest_rm_footer    =


        # digest_rm_fronter    [word] (undef) <digest>
        # Works just like digest_rm_footer, except it removes the front
        # material.
digest_rm_fronter   =


        # digest_volume        [integer] (1) <digest>
        # The current volume number
digest_volume       =   1


        # digest_work_dir      [absolute_dir] (undef) <digest>
        # The directory used as scratch space for digest. Don't  change
        # this unless you know what you are doing
digest_work_dir     =


        # get_access           [enum] (list) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
get_access          =   list


        # index_access         [enum] (open) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
index_access        =   open


        # info_access          [enum] (open) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
info_access         =   open


        # intro_access         [enum] (list) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
intro_access        =   list


        # maxlength            [integer] (40000) <resend,digest>
        # The maximum size of an unapproved message in characters. When
        # used with digest, a new digest will be automatically generated if
        # the size of the digest exceeds this number of characters.
maxlength           =   40000


        # message_footer       [string_array] (undef) <resend,digest>
        # Text to be appended at the end of all messages posted to the
        # list. The text is expanded before being used. The following
        # expansion tokens are defined: $LIST - the name of the current
        # list, $SENDER - the sender as taken from the from line, $VERSION,
        # the version of majordomo. If used in a digest, no expansion
        # tokens are provided
message_footer      <<  END


END

        # message_fronter      [string_array] (undef) <resend,digest>
        # Text to be prepended to the beginning of all messages posted to
        # the list. The text is expanded before being used. The following
        # expansion tokens are defined: $LIST - the name of the current
        # list, $SENDER - the sender as taken from the from line, $VERSION,
        # the version of majordomo. If used in a digest, only the expansion
        # token _SUBJECTS_ is available, and it expands to the list of
        # message subjects in the digest
message_fronter     <<  END


END

        # message_headers      [string_array] (undef) <resend,digest>
        # These headers will be appended to the headers of the posted
        # message. The text is expanded before being used. The following
        # expansion tokens are defined: $LIST - the name of the current
        # list, $SENDER - the sender as taken from the from line, $VERSION,
        # the version of majordomo.
message_headers     <<  END


END

        # moderate             [bool] (no) <resend>
        # If yes, all postings to the list will be bounced to the moderator
        # for approval.
moderate = yes


        # moderator            [word] (undef) <resend>
        # Address for directing posts which require approval. Such
        # approvals might include moderated mail, administrivia traps, and
        # restrict_post authorizations. If the moderator address is not
        # set, it will default to the list-approval address.
moderator           =


        # mungedomain          [bool] (no) <majordomo>
        # If set to yes, a different method is used to determine a matching
        # address.  When set to yes, addresses of the form user@???
        # are considered equivalent to addresses of the form user@???.
        # This allows a user to subscribe to a list using the domain
        # address rather than the address assigned to a particular machine
        # in the domain. This keyword affects the interpretation of
        # addresses for subscribe, unsubscribe, and all private options.
mungedomain         =   no


        # noadvertise          [regexp_array] (undef) <majordomo>
        # If the requestor name matches one of these regexps, then the list
        # will not be listed in the output of a lists command. Noadvertise
        # overrides advertise.
noadvertise         <<  END


END

        # precedence           [word] (bulk) <resend,digest>
        # Put a precedence header with value <value> into the outgoing
        # message.
precedence          =   bulk


        # purge_received       [bool] (no) <resend>
        # Remove all received lines before resending the message.
purge_received      =   no


        # reply_to             [word] () <resend,digest>
        # Put a reply-to header with value <value> into the outgoing
        # message. If the token $SENDER is used, then the address of the
        # sender is used as the value of the reply-to header. This is the
        # value of the reply-to header for digest lists.
reply_to = gordon@???


        # resend_host          [word] (undef) <resend>
        # The host name that is appended to all address strings specified
        # for resend.
resend_host         =


        # restrict_post        [restrict_post] (undef) <resend>
        # If defined, only addresses listed in these files (colon or space
        # separated) can post to the mailing list. By default, these files
        # are relative to the lists directory. These files are also checked
        # when get_access, index_access, info_access, intro_access,
        # which_access, or who_access is set to 'list'. This is less useful
        # than it seems it should be since there is no way to create these
        # files if you do not have access to the machine running resend.
        # This mechanism will be replaced in a future version of
        # majordomo/resend.
restrict_post = /usr/local/majordomo/lists/gdmckee.com-sentlist


        # sender               [word] (owner-webupdates)
<majordomo,resend,di
        # The envelope and sender address for the resent mail. This string
        # has "@" and the value of resend_host appended to it to make a
        # complete address. For majordomo, it provides the sender address
        # for the welcome mail message generated as part of the subscribe
        # command.
sender              =   owner-webupdates


        # strip                [bool] (yes) <majordomo>
        # When adding address to the list, strip off all comments etc, and
        # put just the raw address in the list file.  In addition to the
        # keyword, if the file <listname>.strip exists, it is the same as
        # specifying a yes value. That yes value is overridden by the value
        # of this keyword.
strip               =   yes


        # subject_prefix       [word] (undef) <resend>
        # This word will be prefixed to the subject line, if it is not
        # already in the subject. The text is expanded before being used.
        # The following expansion tokens are defined: $LIST - the name of
        # the current list, $SENDER - the sender as taken from the from
        # line, $VERSION, the version of majordomo.


        # taboo_body           [regexp_array] (undef) <resend>
        # If any line of the body matches one of these regexps, then the
        # message will be bounced for review.
taboo_body          <<  END


END

        # taboo_headers        [regexp_array] (undef) <resend>
        # If any of the headers matches one of these regexps, then the
        # message will be bounced for review.
taboo_headers       <<  END


END

        # unsubscribe_policy   [enum] (open) <majordomo>
/open;closed;auto;op
        # One of three values: open, closed, auto; plus an optional
        # modifier: '+confirm'.  Open allows people to unsubscribe
        # themselves from the list. Auto allows anybody to unsubscribe
        # anybody to the list without maintainer approval. The existence of
        # the file <listname>.auto is the same as specifying the value
        # auto.  Closed requires maintainer approval for all unsubscribe
        # requests to the list. In addition to the keyword, if the file
        # <listname>.closed exists, it is the same as specifying the value
        # closed. Adding '+confirm', ie, 'auto+confirm', will cause
        # majordomo to send a reply back to the subscriber if the request
        # didn't come from the subscriber. The reply includes a
        # authentication number which must be sent back in with another
        # subscribe command.  The value of this keyword overrides the value
        # supplied by any existent files.
unsubscribe_policy  =   open


        # welcome              [bool] (yes) <majordomo>
        # If set to yes, a welcome message (and optional 'intro' file) will
        # be sent to the newly subscribed user.
welcome             =   yes


        # which_access         [enum] (open) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
which_access        =   open


        # who_access           [enum] (open) <majordomo> /open;closed;list/
        # One of three values: open, list, closed. Open allows anyone
        # access to this command and closed completely disables the command
        # for everyone. List allows only list members access, or if
        # restrict_post is defined, only the addresses in those files are
        # allowed access.
who_access = list



Thank you in advance for any ideas you may have.

Gordon