#!/bin/bash
# Copyright (c) 1997-2012 SuSE GmbH Nuernberg, Germany.
# Author: Florian La Roche
#         Werner Fink
# Please send feedback to http://www.suse.de/feedback/

# Generate a sendmail-m4 to stdout if called with -m4
# (The usual stdout is redirected to stderr)
test "$1" = "-m4" && exec 5>&1 1>&2

typeset -i e=0

VERSION=8.14.7-0.9
   DATE=2013/10/01
typeset -i SENDMAIL_MTA_PORT=25
typeset -i SENDMAIL_UUCP_MAX_MSG=0

test -s /etc/rc.config && . /etc/rc.config

# Know about FQHOSTNAME
test -s /etc/HOSTNAME && read -t 1 FQHOSTNAME < /etc/HOSTNAME

# Know about FROM_HEADER, NODNS, DIALUP, and NULLCLIENT
test -s /etc/sysconfig/mail     && . /etc/sysconfig/mail

# sendmail special configuration
test -s /etc/sysconfig/sendmail && . /etc/sysconfig/sendmail

# See if USE_AMAVIS is set
if rpm -q amavisd-new &> /dev/null ; then
    test -s /etc/sysconfig/amavis && . /etc/sysconfig/amavis
fi

setmask()
{
    local mask=$(find $1 -printf '%0.4m' 2>/dev/null)
    test -n "$mask" && umask $mask
}

   LIBDIR=/var/lib/sendmail
   MD5DIR=$LIBDIR/md5
OLDMD5DIR=/var/adm/SuSEconfig/md5
mkdir -p $MD5DIR

check_md5_and_move()
{
    local FILE=$1
    local UPDATE=$2
    local RELPATH=$FILE
    local MD5FILE=$MD5DIR/${RELPATH#/}
    local NEWMD5SUM
    local USERMD5SUM
    local OLDMD5SUM
    local TMP
    #
    # make sure that the directory exists
    #
    mkdir -p ${MD5FILE%/*}

    #
    # Copy old checks to new location
    #
    if test -s $OLDMD5DIR/${FILE#/} ; then
	mv -f $OLDMD5DIR/${FILE#/} $MD5FILE
    fi
    
    NEWMD5SUM="$(grep -v "^#" $UPDATE | md5sum)"
    if test ! -s $FILE ; then
	TMP=$(mktemp ${FILE}.XXXXXX) || exit 1
	chmod 0644 $TMP
	mv -f $TMP $FILE
	rm -f $MD5FILE
    fi
    if test "${FORCE_REPLACE,,}" = true ; then
	cp -p $UPDATE $FILE
    fi
    USERMD5SUM="$(grep -v "^#" $FILE | md5sum)"
    test -e $MD5FILE || echo "$USERMD5SUM" > $MD5FILE
    read -t 1 OLDMD5SUM < $MD5FILE
    if test "$USERMD5SUM" != "$OLDMD5SUM" -a \
	    "$USERMD5SUM" != "$NEWMD5SUM" ; then
	echo
	echo "ATTENTION: You have modified $RELPATH.  Leaving it untouched..."
	echo "You can find my version in $UPDATE..."
	echo
    else
	if test "$USERMD5SUM" != "$NEWMD5SUM" -o "${FORCE_REPLACE,,}" = true ; then
	    echo "Installing new $RELPATH"
	    cp -p $UPDATE $FILE
	else
	    test "${VERBOSE,,}" = false || echo "No changes for $RELPATH"
	fi
	rm -f $UPDATE
    fi
    rm -f $MD5FILE
    echo "$NEWMD5SUM" > $MD5FILE
}

EXPAND=""
case "$FQHOSTNAME" in
*.local) 			;;
*.home) 			;;
*.*[a-zA-Z]) EXPAND=$FQHOSTNAME ;;
esac
test -z "$FROM_HEADER" -a -n "$EXPAND"	&& FROM_HEADER=$EXPAND

gen_sendmail_m4()
{
	cat <<-EOF
	######################################################################
	# /etc/sendmail.cf
	#
	# Generated by /usr/lib/sendmail.d/update on $(date +'%Y/%m/%d %H:%M:%S')
	# controlled by /etc/sysconfig/mail and /etc/sysconfig/sendmail
	#
	######################################################################
	divert(-1)
	include(\`/usr/share/sendmail/m4/cf.m4')
	divert(0)dnl
	VERSIONID(\`@(#)Setup for SUSE Linux	$VERSION (SUSE Linux) $DATE')dnl
	OSTYPE(\`suse-linux')dnl
	EOF
	DAEMON_OPTIONS=""
	if test -n "$SENDMAIL_MTA_PORT" -a "$SENDMAIL_MTA_PORT" != 25 -a "${SENDMAIL_MTA_PORT,,}" != smtp ; then
		DAEMON_OPTIONS="Port=${SENDMAIL_MTA_PORT}"
	fi
	if test -n "$SENDMAIL_MTA_MODIFIER" ; then
		DAEMON_OPTIONS="${DAEMON_OPTIONS:+${DAEMON_OPTIONS}, }Modifier=${SENDMAIL_MTA_MODIFIER}"
	fi
	if test "$SMTPD_LISTEN_REMOTE" != yes ; then
		if test "$SENDMAIL_USE_IPV6" = yes ; then
			AddressV4="127.0.0.1"
			AddressV6="::1"
		else
			Address="127.0.0.1"
		fi
		DAEMON_OPTIONS="${DAEMON_OPTIONS:+${DAEMON_OPTIONS}, }Address="
	else
		if test "$SENDMAIL_USE_IPV6" = yes ; then
			AddressV4="0.0.0.0"
			AddressV6="::"
		else
			Address="0.0.0.0"
		fi
		DAEMON_OPTIONS="${DAEMON_OPTIONS:+${DAEMON_OPTIONS}, }Address="
	fi
	if test -n "$DAEMON_OPTIONS" ; then
		if test "$SENDMAIL_USE_IPV6" = yes ; then
			if test "$SMTPD_LISTEN_REMOTE" != yes ; then
				echo "DAEMON_OPTIONS(\`Port=smtp, Name=MTA-v4, Family=inet, ${DAEMON_OPTIONS}${AddressV4+"$AddressV4"}')dnl"
			fi
			echo "DAEMON_OPTIONS(\`Port=smtp, Name=MTA-v6, Family=inet6, ${DAEMON_OPTIONS}${AddressV6+"$AddressV6"}')dnl"
		else
			echo "DAEMON_OPTIONS(\`Port=smtp, Name=MTA, ${DAEMON_OPTIONS}${Address+"$Address"}')dnl"
		fi
	elif test "$SENDMAIL_USE_IPV6" = yes ; then
		echo "define(\`_NETINET6_')dnl"
	fi
	if test "${USE_ACCESS_DB,,}" = yes ; then
		echo "FEATURE(\`access_db',	\`hash -T<TMPF> -o /etc/mail/access.db')dnl"
		echo "FEATURE(\`greet_pause',	\`2000')dnl"
	fi
	if test -d /etc/aliases.d/ ; then
		afiles=""
		for a in /etc/aliases.d/* ; do
			test -s "$a" || continue
			case "$a" in
			*.db|*.dir|*.btree|*.pag) continue ;;
			esac
			afiles="${afiles},${a}"
		done
		if test -n "${afiles}" ; then
			echo "ifdef(\`ALIAS_FILE', define(\`ALIAS_FILE', ALIAS_FILE\`${afiles}'))dnl"
		fi
		unset a afiles
	fi
	if test -n "$SENDMAIL_SMARTHOST" -a "${SENDMAIL_SMARTHOST,,}" != no ; then
		case "$SENDMAIL_SMARTHOST" in
		*.*.)		;;
		*.*[a-zA-Z])	SENDMAIL_SMARTHOST="${SENDMAIL_SMARTHOST}."
		esac
		echo "define(\`SMART_HOST',	\`$SENDMAIL_SMARTHOST')dnl"
		echo "undefine(\`confHOST_STATUS_DIRECTORY')dnl"
		if test "${DIALUP,,}" = yes ; then
			echo "define(\`confFALLBACK_MX',	\`[${SENDMAIL_SMARTHOST#*:}]')dnl"
		fi
	fi
	if test -n "$SENDMAIL_RELAY" -a "${SENDMAIL_RELAY,,}" != no ; then
		case "$SENDMAIL_RELAY" in
		*.*.)		;;
		*.*[a-zA-Z])	SENDMAIL_RELAY="${SENDMAIL_RELAY}."
		esac
		echo "define(\`LOCAL_RELAY',	\`$SENDMAIL_RELAY')dnl"
		echo "define(\`MAIL_HUB',	\`$SENDMAIL_RELAY')dnl"
	elif test -n "$SENDMAIL_LUSER" -a "${SENDMAIL_LUSER,,}" != no ; then
		echo "define(\`LUSER_RELAY',	\`local:$SENDMAIL_LUSER')dnl"
	fi
	if test "${SENDMAIL_EXPENSIVE,,}" = yes ; then
		echo "FEATURE(\`expensive')dnl"
	fi
	if test "${SENDMAIL_NOCANONIFY,,}" = yes ; then
		echo "FEATURE(\`nocanonify')dnl"
		echo "define(\`confDIRECT_SUBMISSION_MODIFIERS', \`C')dnl"
	fi
	if test "${NODNS,,}" = yes ; then
		echo "HACK(\`nodns')dnl"
	fi
	if test "${DIALUP,,}" = yes -a -n "$FQHOSTNAME" ; then
		echo "FEATURE(\`dialup',	\`$FQHOSTNAME')dnl"
	fi
	if test -n "$SENDMAIL_DNSRBL" -a "${SENDMAIL_DNSRBL,,}" != no ; then
		for dom in $SENDMAIL_DNSRBL; do
			echo "FEATURE(dnsbl,	\`$dom')dnl"
		done
		unset dom
	fi
	if test -n "$FROM_HEADER" -a "${FROM_HEADER,,}" != no ; then
		echo "MASQUERADE_AS(\`$FROM_HEADER')dnl"
		echo "FEATURE(\`masquerade_envelope')dnl"
		if test "${SENDMAIL_ALLMASQUERADE,,}" = yes ; then
			echo "FEATURE(\`allmasquerade')dnl"
		fi
		if test -n "$MASQUERADE_DOMAINS" ; then
			if test "${MASQUERADE_ENTIRE_DOMAIN,,}" = yes; then
				echo "FEATURE(\`masquerade_entire_domain')dnl"
			fi
			echo "MASQUERADE_DOMAIN(\`$MASQUERADE_DOMAINS')dnl"
			echo "MASQUERADE_DOMAIN_FILE(\`-o /etc/mail/local-host-names %[^\#]')dnl"
			echo "FEATURE(\`limited_masquerade')dnl"
		fi
	fi

	if test "${DOMAINTABLE,,}" = yes; then
		echo "FEATURE(\`domaintable', \`hash -o /etc/mail/domaintable.db')dnl"
	fi

	if test "$FROM_HEADER" != "$FQHOSTNAME" ; then
		if test -n "$SENDMAIL_GENERICS_DOMAIN" -a "${SENDMAIL_GENERICS_DOMAIN,,}" != no ; then
			SENDMAIL_GENERICS_DOMAIN="$SENDMAIL_GENERICS_DOMAIN $FQHOSTNAME"
		else
			SENDMAIL_GENERICS_DOMAIN="$FQHOSTNAME"
		fi
	fi
	if test -n "$SENDMAIL_GENERICS_DOMAIN" -a "${SENDMAIL_GENERICS_DOMAIN,,}" != no ; then
		echo "FEATURE(\`generics_entire_domain')dnl"
		if test -n "$FROM_HEADER" ; then
			echo "GENERICS_DOMAIN(\`$SENDMAIL_GENERICS_DOMAIN $FROM_HEADER')dnl"
		else
			echo "GENERICS_DOMAIN(\`$SENDMAIL_GENERICS_DOMAIN')dnl"
		fi
		echo "GENERICS_DOMAIN_FILE(\`-o /etc/mail/local-host-names %[^\#]')dnl"
	else
		if test -n "$FROM_HEADER" ; then
			echo "GENERICS_DOMAIN(\`$FROM_HEADER')dnl"
			echo "GENERICS_DOMAIN_FILE(\`-o /etc/mail/local-host-names %[^\#]')dnl"
		fi
	fi

	# Foreign package amavis needs libmilter interface
	if test "${USE_AMAVIS,,}" = yes ; then
		echo "define(\`MILTER')dnl"
		cat <<-EOF
		divert(-1)
		INPUT_MAIL_FILTER(\`milter-amavis',\
				  \`S=local:/var/run/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m')
		divert(0)dnl
		EOF
	fi

	# Enable SMTP-AUTH as client (plain, gssapi, digest-md5, and cram-md5)
	# AUTH_DIR is defined in OSTYPE(`suse-linux') as /etc/mail/auth
	if test -n "$SMTP_AUTH_MECHANISMS" -a "${SMTP_AUTH_MECHANISMS,,}" != no ; then
		echo "FEATURE(\`authinfo',		\`hash -o 'AUTH_DIR\`/auth-info')dnl"
		if test "${SMTP_AUTH_MECHANISMS,,}" != all ; then
			echo "define(\`confAUTH_MECHANISMS',	\`${SMTP_AUTH_MECHANISMS^^}')dnl"
		else
			echo "define(\`confAUTH_MECHANISMS',dnl"
			echo "\`GSSAPI OTP DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl"
		fi
	fi

	# Enable SMTP-AUTH as server (gssapi, digest-md5, and cram-md5)
	if test -n "$SMTP_AUTH_SERVER" -a "${SMTP_AUTH_SERVER,,}" != no ; then
		case "${SMTP_AUTH_SERVER,,}" in
		*all*|*plain*)
			echo "define(\`confAUTH_OPTIONS',	\`A,y' )dnl" ;;
		*)	echo "define(\`confAUTH_OPTIONS',	\`A,p,y')dnl"
		esac
		if test "${SMTP_AUTH_SERVER,,}" != all ; then
			echo "define(\`confAUTH_MECHANISMS',	\`${SMTP_AUTH_SERVER^^}')dnl"
			echo "TRUST_AUTH_MECH(\`${SMTP_AUTH_SERVER^^}')dnl"
		else
			echo "define(\`confAUTH_MECHANISMS',dnl"
			echo "\`GSSAPI OTP DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl"
			echo "TRUST_AUTH_MECH(\`GSSAPI OTP DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')"dnl
		fi
	else
		echo "define(\`confTLS_SRV_OPTIONS',	\`V')"dnl
	fi

	# Enable STARTTLS Certificates
	# CERT_DIR is defined in OSTYPE(`suse-linux') as /etc/mail/certs
	case "$STARTTLS" in
	server)
		echo "define(\`confCACERT',		 CERT_DIR\`/CA.cert.pem')dnl"
		echo "define(\`confSERVER_CERT',	 CERT_DIR\`/MYServer.cert.pem')dnl"
		echo "define(\`confSERVER_KEY',		 CERT_DIR\`/MYServer.key.pem')dnl"
		;;
	client)
		echo "define(\`confCACERT',		 CERT_DIR\`/CA.cert.pem')dnl"
		echo "define(\`confCLIENT_CERT',	 CERT_DIR\`/MYClient.cert.pem')dnl"
		echo "define(\`confCLIENT_KEY',		 CERT_DIR\`/MYClient.key.pem')dnl"
		;;
	both)
		echo "define(\`confCACERT',		 CERT_DIR\`/CA.cert.pem')dnl"
		echo "define(\`confSERVER_CERT',	 CERT_DIR\`/MYServer.cert.pem')dnl"
		echo "define(\`confSERVER_KEY',		 CERT_DIR\`/MYServer.key.pem')dnl"
		echo "define(\`confCLIENT_CERT',	 CERT_DIR\`/MYClient.cert.pem')dnl"
		echo "define(\`confCLIENT_KEY',		 CERT_DIR\`/MYClient.key.pem')dnl"
		;;
	esac
	if test -n "$STARTTLS" -a "${STARTTLS,,}" != no ; then
		echo "define(\`confAUTH_MECHANISMS',	\`EXTERNAL 'defn(\`confAUTH_MECHANISMS'))dnl"
		echo "TRUST_AUTH_MECH(\`EXTERNAL')dnl"
		echo "define(\`confDONT_BLAME_SENDMAIL', defn(\`confDONT_BLAME_SENDMAIL')dnl"
		echo "\`,GroupWritableSASLDBFile')dnl"
	fi
	if test "${STARTTLS,,}" = server -o "${STARTTLS,,}" = both ; then
		# Port 465 is depricated since 1998-11-12, now RFC 6409 defines Post 587 aka submission
		if test -n "$SENDMAIL_MTA_SSL_PORT" -a "$SENDMAIL_MTA_SSL_PORT" != 587 -a "${SENDMAIL_MTA_SSL_PORT,,}" != submission ; then
			echo "DAEMON_OPTIONS(\`Family=inet, Port=${SENDMAIL_MTA_SSL_PORT}, Name=MTA-SSL, Modifier=s')dnl"
		else
			echo "DAEMON_OPTIONS(\`Family=inet, Port=587, Name=MSA, Modifier=Es')dnl"
		fi
		# Stop all SMTP VERB and VRFY commands, also the mailq command and the -q option become restricted
		echo "define(\`confPRIVACY_FLAGS',	confPRIVACY_FLAGS\`,goaway,restrictmailq,restrictqrun')dnl"
	fi

	if test $SENDMAIL_UUCP_MAX_MSG -gt 0 ; then
		echo "define(\`UUCP_MAILER_MAX',	\`$SENDMAIL_UUCP_MAX_MSG')dnl"
	fi

	cat <<-EOF
	DOMAIN(\`generic')dnl
	MAILER(\`local')dnl
	MAILER(\`smtp')dnl
	MAILER(\`procmail')dnl
	MAILER(\`uucp')dnl
	MAILER(\`bsmtp')dnl
	MAILER(\`fido')dnl
	EOF
	if test -n "$SENDMAIL_LOCALHOST" -a "${SENDMAIL_LOCALHOST,,}" != no ; then
		echo "LOCAL_CONFIG"
		echo "Cw${SENDMAIL_LOCALHOST}${EXPAND+" $EXPAND"}"
	fi
}

gen_submit_m4()
{
	cat <<-EOF
	######################################################################
	# /etc/mail/submit.cf
	#
	# Generated by /usr/lib/sendmail.d/update on $(date +'%Y/%m/%d %H:%M:%S')
	# controlled by /etc/sysconfig/mail and /etc/sysconfig/sendmail
	#
	######################################################################
	divert(-1)
	include(\`/usr/share/sendmail/m4/cf.m4')
	define(\`SMLIBDIR',			\`/usr/lib/sendmail.d')dnl
	define(\`MAIL_SETTINGS_DIR',		\`/etc/mail/')dnl
	define(\`confDEAD_LETTER_DROP',		\`/var/log/dead.letter')dnl
	define(\`HELP_FILE',			 SMLIBDIR\`/helpfile')dnl
	define(\`confHOSTS_FILE',		\`/etc/hosts')dnl
	define(\`confCT_FILE',			\`-o /etc/mail/trusted-users %[^\#]')dnl
	define(\`confCR_FILE',			\`-o /etc/mail/relay-domains %[^\#]')dnl
	define(\`confSERVICE_SWITCH_FILE',	\`/etc/mail/service.switch')dnl
	define(\`confEBINDIR',			 SMLIBDIR\`/bin')dnl
	divert(0)dnl
	VERSIONID(\`@(#)Setup for SUSE Linux	$VERSION (SUSE Linux) $DATE')dnl
	EOF
	#
	# Enable trusted users file and OS trusted users
	#
	echo "FEATURE(\`use_ct_file')dnl"
	echo $(grep confTRUSTED_USERS /usr/share/sendmail/ostype/suse-linux.m4 2> /dev/null)
	if test "${SENDMAIL_EXPENSIVE,,}" = yes ; then
		echo "FEATURE(\`accept_unresolvable_domains')dnl"
		echo "FEATURE(\`accept_unqualified_senders')dnl"
	fi
	if test "${DIALUP,,}" = yes ; then
		echo "define(\`confTO_QUEUEWARN',		\`1d')dnl"
		echo "define(\`confTO_QUEUEWARN_URGENT',	\`4h')dnl"
		echo "define(\`confTO_QUEUERETURN',		\`7d')dnl"
		echo "define(\`confTRY_NULL_MX_LIST',		 true)dnl"
	fi
	if test "${SENDMAIL_NOCANONIFY,,}" = yes ; then
		echo "FEATURE(\`nocanonify')dnl"
		echo "define(\`confDIRECT_SUBMISSION_MODIFIERS', \`C')dnl"
	else
		echo "FEATURE(\`nocanonify',	\`canonify_hosts')dnl"
		echo "define(\`confDIRECT_SUBMISSION_MODIFIERS', \`C')dnl"
	fi
	if test "${NODNS,,}" = yes ; then
		echo "HACK(\`nodns')dnl"
	fi
	if test "$FROM_HEADER" != "$FQHOSTNAME" ; then
		if test -n "$SENDMAIL_GENERICS_DOMAIN" -a "${SENDMAIL_GENERICS_DOMAIN,,}" != no ; then
			SENDMAIL_GENERICS_DOMAIN="$SENDMAIL_GENERICS_DOMAIN $FQHOSTNAME"
		else
			SENDMAIL_GENERICS_DOMAIN="$FQHOSTNAME"
		fi
	fi
	if test -n "$SENDMAIL_GENERICS_DOMAIN" -a "${SENDMAIL_GENERICS_DOMAIN,,}" != no ; then
		echo "FEATURE(\`generics_entire_domain')dnl"
		if test -n "$FROM_HEADER" ; then
			echo "GENERICS_DOMAIN(\`$SENDMAIL_GENERICS_DOMAIN $FROM_HEADER')dnl"
		else
			echo "GENERICS_DOMAIN(\`$SENDMAIL_GENERICS_DOMAIN')dnl"
		fi
		echo "GENERICS_DOMAIN_FILE(\`-o /etc/mail/local-host-names %[^\#]')dnl"
	else
		if test -n "$FROM_HEADER" ; then
			echo "GENERICS_DOMAIN(\`$FROM_HEADER')dnl"
			echo "GENERICS_DOMAIN_FILE(\`-o /etc/mail/local-host-names %[^\#]')dnl"
		fi
	fi
	if test -n "$SENDMAIL_MTA_PORT" -a "$SENDMAIL_MTA_PORT" != 25 -a "${SENDMAIL_MTA_PORT,,}" != smtp ; then
		echo "define(\`confMTAPort',	\`${SENDMAIL_MTA_PORT}')dnl"
	fi
	cat <<-EOF
	divert(-1)
	include(\`/usr/share/sendmail/cf/submit.mc')
	divert(0)dnl
	EOF
}

# Generate a sendmail-m4 to stdout if called with -m4
# (The usual stdout is redirected to stderr)
# Part 2
if test "${1,,}" = "-m4" ; then
    if test "${2,,}" != submit ; then
	gen_sendmail_m4 >&5
    else
	gen_submit_m4   >&5
    fi
    exit $?
fi

if test "${MAIL_CREATE_CONFIG,,}" != no ; then
	umask 0022
	sendupdate=$(mktemp /etc/sendmail.cf.XXXXXX) || exit 1
	submupdate=$(mktemp /etc/mail/submit.cf.XXXXXX)   || exit 1
	chmod 0644 $sendupdate
	chmod 0644 $submupdate
	if test -n "$NULLCLIENT" -a "${NULLCLIENT,,}" != no ; then
		(m4 - > $sendupdate) <<-EOF
		divert(-1)
		include(\`/usr/share/sendmail/m4/cf.m4')
		divert(0)dnl
		VERSIONID(\`@(#)Setup for SUSE Linux	$VERSION (SUSE Linux) $DATE')
		OSTYPE(\`suse-linux')dnl
		FEATURE(\`nocanonify')dnl
		FEATURE(\`nullclient', \`$NULLCLIENT')dnl
		LOCAL_CONFIG
		EOF
	else
		gen_sendmail_m4 | m4 - > $sendupdate
		test $? -eq 0 || let e++
	fi
	gen_submit_m4 | m4 - > $submupdate
	test $? -eq 0 || let e++

	mv -f $sendupdate /etc/sendmail.cf.update
	sendupdate=/etc/sendmail.cf.update
	check_md5_and_move /etc/sendmail.cf    $sendupdate

	mv -f $submupdate /etc/submit.cf.update
	submupdate=/etc/submit.cf.update
	check_md5_and_move /etc/mail/submit.cf $submupdate
fi

nofold=""
test "${SENDMAIL_DB_FOLD,,}" = no && nofold=-f

makedb () {
	local type=hash
	local db="${1}"
	local src="${db%.db}"
	db="${src}.db"

	test -e "$src" || return
	test "${src##*/}" = userdb && type=btree

	if test "$src" -nt "$db" -o ! -e "$db"
	then
		echo "Rebuilding ${db}."
		setmask "$src"
		makemap $type $nofold $db < $src
		if test $? -eq 0
		then
			test -e $db && touch $db
			chmod --reference="$src" $db
		else
			let e++
		fi
	fi
}

if test -e /etc/aliases
then
	typeset -i new=0

	test -e /etc/aliases.db || let new++

	for a in /etc/aliases /etc/mail/aliases.d/*
	do
		test -e "$a" || continue
		test "$a" -nt /etc/aliases && let new++
	done
	if ((new > 0))
	then
		echo "Rebuilding /etc/aliases.db."
		setmask /etc/aliases
		sendmail -bi
		if test $? -eq 0 ; then
			test -e /etc/aliases.db && touch /etc/aliases.db
			chmod --reference=/etc/aliases /etc/aliases.db
		else
			let e++
		fi
	fi
fi

makedb /etc/mail/access.db
makedb /etc/mail/auth/auth-info.db
makedb /etc/mail/bitdomain.db
makedb /etc/mail/domaintable.db
makedb /etc/mail/genericstable.db
makedb /etc/mail/mailertable.db
makedb /etc/mail/userdb.db
makedb /etc/mail/uudomain.db
makedb /etc/mail/virtusertable.db

exit $e
