#!/bin/sh # Generate db/cdb and cf files if necessary. This used to be handled by # /etc/mail/Makefile. teste() { if ! test -e "$1"; then echo "$1 doesn't exist" exit 2 fi } makedb() { teste "${1%.${DB_SUFFIX}}" if [ -z "$SM_FORCE_DBREBUILD" ]; then test "${1%.${DB_SUFFIX}}" -nt "$1" || return 0 fi if [ "$1" = userdb.db ]; then makemap btree "$1" < "${1%.db}" else makemap "$DB_MAP" "$1" < "${1%.${DB_SUFFIX}}" fi } makealiasesdb() { uptodate=1 if [ -z "$SM_FORCE_DBREBUILD" ]; then files=$(grep '^O AliasFile=' sendmail.cf | while read a; do echo ${a#*=}; done) for a in $files; do if [ "$a" = /etc/aliases ]; then # /etc/aliases.db may be used by other MTA, make sure nothing # has touched it since our last newaliases call test "$a" -nt "${a}.${DB_SUFFIX}" || test aliasesdb-stamp -nt "${a}.${DB_SUFFIX}" || test aliasesdb-stamp -ot "${a}.${DB_SUFFIX}" || continue else test "$a" -nt "${a}.${DB_SUFFIX}" || continue fi uptodate=0 break done else uptodate=0 fi [ $uptodate = 1 ] && return 0 # check if alternatives is configured to sendmail if [ "$(readlink -e /usr/bin/newaliases)" = /usr/sbin/sendmail.sendmail ] then /usr/bin/newaliases > /dev/null touch -r /etc/aliases.$DB_SUFFIX aliasesdb-stamp 2> /dev/null else rm -f aliasesdb-stamp fi } makecf() { mc=${1%.cf}.mc teste "$mc" if [ -z "$SM_FORCE_CFREBUILD" ]; then test "$mc" -nt "$1" || return 0 fi if test -f /usr/share/sendmail-cf/m4/cf.m4; then umask 022 [ -e "$1" ] && mv -f "$1" "$1".bak m4 "$mc" > "$1" else echo "WARNING: '$mc' is modified. Please install package sendmail-cf to update your configuration." exit 15 fi } makeall() { # These could be used by sendmail, but are not part of the default install. # To use them you will have to generate your own sendmail.cf with # FEATURE('whatever') test -f bitdomain && makedb bitdomain.$DB_SUFFIX test -f uudomain && makedb uudomain.$DB_SUFFIX test -f genericstable && makedb genericstable.$DB_SUFFIX test -f userdb && makedb userdb.$DB_SUFFIX test -f authinfo && makedb authinfo.$DB_SUFFIX makedb virtusertable.$DB_SUFFIX makedb access.$DB_SUFFIX makedb domaintable.$DB_SUFFIX makedb mailertable.$DB_SUFFIX makecf sendmail.cf makecf submit.cf } cd /etc/mail || exit 1 if /usr/bin/makemap -l | grep -q hash then DB_MAP="hash" DB_SUFFIX="db" else DB_MAP="cdb" DB_SUFFIX="cdb" fi [ $# -eq 0 ] && makeall for target; do case "$target" in *.db|*.cdb) makedb "$target" ;; *.cf) makecf "$target" ;; all) makeall ;; aliases) makealiasesdb ;; clean) rm -f *.db *.cdb *~ aliasesdb-stamp ;; start|stop|restart) service sendmail "$target" ;; *) echo "Don't know how to make $target" exit 2 esac done