summaryrefslogtreecommitdiff
path: root/debian/sendmailconfig
diff options
context:
space:
mode:
Diffstat (limited to 'debian/sendmailconfig')
-rw-r--r--debian/sendmailconfig566
1 files changed, 566 insertions, 0 deletions
diff --git a/debian/sendmailconfig b/debian/sendmailconfig
new file mode 100644
index 0000000..3d44a9e
--- /dev/null
+++ b/debian/sendmailconfig
@@ -0,0 +1,566 @@
+#!/bin/sh -e
+#
+# Interactively configure Sendmail for Debian
+#
+# Robert Leslie <rob@mars.org>
+
+PATH="/usr/sbin:/usr/bin:/sbin:/bin"
+
+reload="yes"
+umask 022
+
+###############################################################################
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ --no-reload)
+ reload=""
+ shift
+ ;;
+
+ *)
+ echo "Usage: $0 [--no-reload]" >&2
+ exit 1
+ ;;
+ esac
+done
+
+###############################################################################
+
+descrip() {
+ echo ""
+ echo "$1"
+ echo "$1" | sed -e 's/./-/g'
+ cat -
+ echo ""
+}
+
+yesno() {
+ local N="N" Y="Y"
+ local q="$1" def=$(eval "echo -n \$$2")
+
+ while :
+ do
+ echo -n "$q? [$def] "
+ read REPLY
+ REPLY=$(echo -n "$REPLY" | sed -e "s/^\ *//" -e "s/^\t*//")
+ test -n "$REPLY" || REPLY="$def"
+
+ case "$REPLY" in
+ [Yy]*)
+ echo yes > /dev/null
+ eval "$2=\"Y\""
+ return 0
+ ;;
+
+ [Nn]*)
+ echo no > /dev/null
+ eval "$2=\"N\""
+ return 1
+ ;;
+ esac
+ done
+}
+
+input() {
+ local q="$1" def=$(eval "echo -n \$$2")
+
+ echo -n "$q? [$def] "
+ read REPLY
+ REPLY=$(echo "$REPLY" | sed -e 's/^[ ]*//' -e 's/[ ]*$//' | cat)
+ test -n "$REPLY" || REPLY="$def"
+
+ if [ NONE = "$3" ]
+ then
+ test NONE != "$REPLY" || REPLY=""
+ fi
+
+ eval "$2=\"$REPLY\""
+}
+
+testconfig() {
+ CONFIG=$(grep "$1" /etc/mail/sendmail.mc 2>/dev/null)
+}
+
+makecf() {
+ echo "Generating /etc/mail/sendmail.cf from /etc/mail/sendmail.mc ..."
+ m4 /usr/lib/sendmail.cf/m4/cf.m4 /etc/mail/sendmail.mc \
+ >/etc/mail/sendmail.cf.new
+ mv -f /etc/mail/sendmail.cf.new /etc/mail/sendmail.cf
+
+ echo "Updating alias database ..."
+ newaliases
+
+ if [ "$reload" ] && \
+ yesno "Reload the running sendmail now with the new configuration" Y
+ then
+ echo "Reloading sendmail ..."
+ /etc/init.d/sendmail reload >/dev/null
+ fi
+}
+
+###############################################################################
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ if yesno "Configure sendmail with the existing /etc/mail/sendmail.mc" Y
+ then
+ makecf
+ exit 0
+ fi
+fi
+
+###############################################################################
+
+exec 3>/etc/mail/sendmail.mc.new
+trap "rm -f /etc/mail/sendmail.mc.new" 0
+
+###############################################################################
+
+descrip "Sendmail Configuration" <<EOT
+By answering the following questions, you can configure sendmail for your
+system. Default values are determined either by your existing configuration
+or from common usage.
+EOT
+
+echo -n "Press [ENTER] "
+read REPLY
+
+cat /usr/lib/sendmail.cf/cf/debproto.mc >&3
+
+###############################################################################
+
+descrip "Mail Name" <<EOT
+Your \`mail name' is the hostname portion of the address to be shown on
+outgoing news and mail messages (following the username and @ sign). This
+name will be used by other programs besides sendmail; it should be the single,
+full domain name (FQDN) from which mail will appear to originate.
+EOT
+
+mailname=$(cat /etc/mailname 2>/dev/null || hostname --fqdn)
+input "Mail name" mailname
+
+echo "$mailname" >/etc/mailname
+
+###############################################################################
+
+descrip "Null Client" <<EOT
+A special configuration known as the "null client" can be created for this
+host if all mail should be forwarded to a central hub via a local SMTP-based
+network. This may be a suitable configuration if you want to forward all of
+your mail to your local Internet service provider (ISP) for delivery.
+
+To enable this option, give the name of the host to which all mail should be
+forwarded. Otherwise leave the option empty or answer \`NONE' to disable it.
+EOT
+
+nullclient=""
+! testconfig "FEATURE(nullclient" ||
+ nullclient=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *\([^)]*\).*/\1/')
+
+input "Null client forward host" nullclient NONE
+
+test -z "$nullclient" || echo "FEATURE(nullclient, $nullclient)dnl" >&3
+
+###############################################################################
+
+descrip "Address Canonification" <<EOT
+Usually sendmail will canonify all addresses by consulting a name server and
+resolving hosts to their fully qualified domain name (FQDN). Under special
+circumstances you may want to disable this feature, for example if this
+machine acts only as a mail gateway.
+EOT
+
+test -z "$nullclient" || cat <<EOT
+Since this host will be configured as a null client, this option controls
+whether addresses will be qualified with \`$mailname' when
+sent to the central hub via SMTP. Disabling this feature may cause mail to
+appear to come from (and be qualified by the domain for) the hub machine
+rather than this host.
+
+EOT
+
+nocanonify="N"
+! testconfig "FEATURE(nocanonify)" || nocanonify="Y"
+
+! yesno "Disable address canonification" nocanonify ||
+ echo "FEATURE(nocanonify)dnl" >&3
+
+###############################################################################
+
+if [ -z "$nullclient" ]
+then
+
+###############################################################################
+
+descrip "SMTP Mailer" <<EOT
+If you plan to exchange mail with other computers, you should enable the
+SMTP mailer. Even if you don't plan to exchange mail with other computers,
+it is still a good idea to enable this so local programs can use it.
+EOT
+
+smtp="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "MAILER(smtp)" || smtp="N"
+fi
+
+yesno "Enable the SMTP mailer" smtp || true
+
+###############################################################################
+
+descrip "Masquerade Envelope" <<EOT
+If you want mail envelopes (as well as mail headers) to appear to come from
+\`$mailname', you can enable this option.
+EOT
+
+masqenvelope="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "FEATURE(masquerade_envelope)" || masqenvelope="N"
+fi
+
+! yesno "Masquerade envelopes" masqenvelope ||
+ echo "FEATURE(masquerade_envelope)dnl" >&3
+
+###############################################################################
+
+descrip "All Masquerade" <<EOT
+If enabled, this feature will cause recipient addresses to also appear to come
+from \`$mailname'. Normally they get the local hostname.
+Although this may be right for ordinary users, it can break local aliases. For
+example, if you send to "localalias", the originating sendmail will find that
+alias and send to all members, but send the message with
+"To: localalias@$mailname". Since that alias likely does
+not exist, replies will fail. Use this feature ONLY if you can guarantee that
+the ENTIRE namespace of \`$mailname' supersets all the
+local entries. If in doubt, it is safe to leave this option disabled.
+EOT
+
+allmasquerade="N"
+! testconfig "FEATURE(allmasquerade)" || allmasquerade="Y"
+
+! yesno "All masquerade" allmasquerade ||
+ echo "FEATURE(allmasquerade)dnl" >&3
+
+###############################################################################
+
+descrip "Always Add Domain" <<EOT
+If enabled, the local host domain is included even on locally delivered mail.
+Normally it is not added unless it is already present.
+EOT
+
+alwaysdomain="N"
+! testconfig "FEATURE(always_add_domain)" || alwaysdomain="Y"
+
+! yesno "Always add domain" alwaysdomain ||
+ echo "FEATURE(always_add_domain)dnl" >&3
+
+###############################################################################
+
+descrip "Mail Acceptance" <<EOT
+Sendmail is usually configured to accept mail for your mail name
+($mailname). However, under special circumstances you
+may not wish sendmail to do this, particularly if (and disabling this option
+generally requires that) mail for \`$mailname' is MXed
+to another host. If in doubt, it is safe to leave this option enabled.
+EOT
+
+acceptmailname="Y"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "^Cw.*$mailname" || acceptmailname="N"
+fi
+
+yesno "Accept mail for \`$mailname'" acceptmailname || true
+
+###############################################################################
+
+descrip "Alternate Names" <<EOT
+In addition to the canonical mail name \`$mailname', you can
+add any number of additional alternate names to recognize for receiving mail.
+If other hosts are MXed to you for local mail, this is where you should list
+them. This list is saved into the file /etc/mail/sendmail.cw so it can be
+changed later as needed.
+
+To answer this question, separate each alternate name with a space, or answer
+\`NONE' to eliminate all alternate names.
+EOT
+
+altnames=$(cat /etc/mail/sendmail.cw 2>/dev/null | tr -s '\n \t' ' ' |
+ sed -e 's/^ *//' -e 's/ *$//')
+input "Alternate names" altnames NONE
+
+if [ -n "$altnames" ]
+then
+ echo "$altnames" | tr -s ' \t' '\n' >/etc/mail/sendmail.cw
+else
+ cat /dev/null >/etc/mail/sendmail.cw
+fi
+
+echo "FEATURE(use_cw_file)dnl" >&3
+
+###############################################################################
+
+descrip "Trusted Users" <<EOT
+Sendmail allows a special group of users to set their envelope "From" address
+using the -f option without generating a warning message. If you have
+software such as Majordomo installed, you will want to include the usernames
+from such software here. Note that "root", "daemon", and "uucp" are included
+automatically and do not need to be specified. This list is saved into the
+file /etc/mail/sendmail.ct so it can be changed later as needed.
+
+To answer this question, separate each username with a space, or answer
+\`NONE' to eliminate all usernames.
+EOT
+
+trusted=$(cat /etc/mail/sendmail.ct 2>/dev/null | tr -s '\n \t' ' ' |
+ sed -e 's/^ *//' -e 's/ *$//')
+input "Trusted users" trusted NONE
+
+if [ -n "$trusted" ]
+then
+ echo "$trusted" | tr -s ' \t' '\n' >/etc/mail/sendmail.ct
+else
+ cat /dev/null >/etc/mail/sendmail.ct
+fi
+
+echo "FEATURE(use_ct_file)dnl" >&3
+
+###############################################################################
+
+descrip "Redirect Feature" <<EOT
+If enabled, this feature will allow you to alias old names to
+<new-address>.REDIRECT, causing sendmail to return mail to the sender with
+an error but indicating the recipient's new address.
+EOT
+
+redirect="N"
+! testconfig "FEATURE(redirect)" || redirect="Y"
+
+! yesno "Enable redirect option" redirect || echo "FEATURE(redirect)dnl" >&3
+
+###############################################################################
+
+descrip "UUCP Addresses" <<EOT
+Sendmail can be configured to be smart about UUCP addresses, or it can do
+nothing special with UUCP addresses at all. If you care about UUCP, you will
+need to do some additional configuration, perhaps outside of this script.
+EOT
+
+uucp="N"
+if [ -f /etc/mail/sendmail.mc ]
+then
+ testconfig "FEATURE(nouucp)" || uucp="Y"
+fi
+
+yesno "Enable UUCP addressing" uucp || echo "FEATURE(nouucp)dnl" >&3
+
+###############################################################################
+
+descrip "Sticky Host" <<EOT
+If enabled, mail sent to \`user@$mailname' is marked as
+"sticky" -- that is, the local addresses aren't matched against UDB and don't
+go through ruleset 5. This is used if you want a setup where \`user' is not
+necessarily the same as \`user@$mailname', e.g., to make
+a distinct domain-wide namespace. If in doubt, it is safe to leave this
+option disabled.
+EOT
+
+sticky="N"
+! testconfig "FEATURE(stickyhost)" || sticky="Y"
+
+! yesno "Enable sticky host option" sticky || echo "FEATURE(stickyhost)dnl" >&3
+
+###############################################################################
+
+descrip "DNS" <<EOT
+If you are directly connected to the Internet and have access to a domain
+name server, you should enable this option.
+EOT
+
+dns="Y"
+! testconfig "FEATURE(nodns)" || dns="N"
+
+yesno "Enable DNS" dns || echo "FEATURE(nodns)dnl" >&3
+
+###############################################################################
+
+if [ Y = "$dns" ]
+then
+
+###############################################################################
+
+descrip "Best MX is Local" <<EOT
+If enabled, this option will cause sendmail to accept mail as though locally
+addressed for any host that lists this machine as the best possible MX record.
+This generates additional DNS traffic, but should be OK for low-to-medium
+traffic hosts. N.B.: This feature is fundamentally incompatible with wildcard
+MX records. If you have a wildcard MX record that matches your domain, you
+cannot use this feature.
+EOT
+
+bestmxlocal="N"
+! testconfig "FEATURE(bestmx_is_local)" || bestmxlocal="Y"
+
+! yesno "Assume best MX is local" bestmxlocal ||
+ echo "FEATURE(bestmx_is_local)dnl" >&3
+
+###############################################################################
+
+fi # finished DNS configuration
+
+###############################################################################
+
+descrip "Mailertable" <<EOT
+If enabled, this option causes sendmail to read mail routing rules from
+the text file /etc/mail/mailertable. This is needed for unusual mailers like
+ifmail and fax programs. More information is in /usr/doc/sendmail/op.txt.gz.
+EOT
+
+mailertable="N"
+! testconfig "FEATURE(mailertable" || mailertable="Y"
+
+! yesno "Enable the mailertable feature" mailertable ||
+ echo "FEATURE(mailertable, \`text /etc/mail/mailertable')dnl" >&3
+
+###############################################################################
+
+descrip "Sendmail Restricted Shell" <<EOT
+If enabled, this option causes sendmail to use the sendmail restricted shell
+program (smrsh) instead of /bin/sh for mailing to programs. This improves your
+ability to control what gets run via email; only those programs which appear
+in a special directory can be run. If you enable this option, please carefully
+read the smrsh(8) man page for further information.
+EOT
+
+smrsh="N"
+! testconfig "FEATURE(smrsh" || smrsh="Y"
+
+! yesno "Use the Sendmail Restricted Shell (smrsh)" smrsh ||
+ echo "FEATURE(smrsh, \`/usr/sbin/smrsh')dnl" >&3
+
+###############################################################################
+
+descrip "Mailer Name" <<EOT
+You can change the name used for internally generated outgoing messages.
+Usually this is \`MAILER-DAEMON' but it would not be unreasonable to change
+it to something such as \`postmaster'.
+EOT
+
+daemon="MAILER-DAEMON"
+! testconfig "confMAILER_NAME" ||
+ daemon=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+input "Mailer name" daemon
+
+test "MAILER-DAEMON" = "$daemon" ||
+ echo "define(\`confMAILER_NAME', \`$daemon')dnl" >&3
+
+###############################################################################
+
+descrip "Me Too" <<EOT
+Sendmail normally excludes the sender address from group expansion. Enabling
+this option will cause the sender to be included.
+EOT
+
+metoo="N"
+! testconfig "confME_TOO.*True" || metoo="Y"
+
+! yesno "Enable me too option" metoo ||
+ echo "define(\`confME_TOO', True)dnl" >&3
+
+###############################################################################
+
+descrip "Message Timeouts" <<EOT
+Sendmail will issue a warning message to the sender if it can't deliver a
+message within a reasonable amount of time. It will also send a failure
+notification and give up trying to deliver the message if it can't deliver it
+after an unreasonable amount of time.
+
+You can configure the message timeouts after which warning and failure
+notifications are sent. Sendmail's defaults are 4 hours and 5 days (4h/5d),
+respectively, but many people feel warnings after only 4 hours are premature.
+EOT
+
+qw="4h"
+! testconfig "confTO_QUEUEWARN" ||
+ qw=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+qr="5d"
+! testconfig "confTO_QUEUERETURN" ||
+ qr=$(echo -n "$CONFIG" | sed -e 's/[^,]*, *`\([^'"'"']*\).*/\1/')
+
+timeouts="$qw/$qr"
+
+input "Message timeouts" timeouts
+
+qw=$(expr "$timeouts" : '\([^/]*\)/')
+qr=$(expr "$timeouts" : '[^/]*/\(.*\)')
+
+test "4h" = "$qw" || echo "define(\`confTO_QUEUEWARN', \`$qw')dnl" >&3
+test "5d" = "$qr" || echo "define(\`confTO_QUEUERETURN', \`$qr')dnl" >&3
+
+###############################################################################
+
+echo "MAILER(local)dnl" >&3
+
+test "N" = "$smtp" || echo "MAILER(smtp)dnl" >&3
+test "N" = "$acceptmailname" || echo "Cw$mailname" >&3
+
+###############################################################################
+
+if [ -e /etc/ifmail/config ] && [ -e /usr/lib/sendmail.cf/mailer/ifmail.m4 ];
+then
+ echo "MAILER(ifmail)dnl" >&3
+fi
+
+###############################################################################
+
+fi # finished non-"null client" configuration
+
+echo "MASQUERADE_AS($mailname)dnl" >&3
+
+###############################################################################
+
+echo "" >&3
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ sed -n -e '/^## Custom/,$p' /etc/mail/sendmail.mc >&3
+else
+ echo "## Custom configurations below (will be preserved)" >&3
+fi
+
+descrip "Configuration Complete" <<EOT
+Advanced configuration, such as alternate mailers, the use of mailertables,
+Bitnet domains, and UUCP domains can be accomplished by manually editing the
+/etc/mail/sendmail.mc configuration file and rerunning
+\`$0' to generate the appropriate /etc/mail/sendmail.cf
+file. (Local changes made at the end of /etc/mail/sendmail.mc will be
+preserved by \`$0'.)
+
+The m4 library files for sendmail configuration are kept in the
+/usr/lib/sendmail.cf directory. You may wish to review the documentation in
+/usr/doc/sendmail to assist in further customization.
+
+You may wish to customize your alias database; see the aliases(5) man page
+for information on the format and use of the /etc/aliases file.
+EOT
+
+###############################################################################
+
+exec 3>&-
+
+if [ -f /etc/mail/sendmail.mc ]
+then
+ echo "Saving old /etc/mail/sendmail.mc as /etc/mail/sendmail.mc.old ..."
+ mv -f /etc/mail/sendmail.mc /etc/mail/sendmail.mc.old
+fi
+
+mv -f /etc/mail/sendmail.mc.new /etc/mail/sendmail.mc
+trap 0
+
+makecf
+exit 0