lkundrak / rpms / sendmail

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