Revamp /etc/mail/Makefile:

+ Add support for the new SENDMAIL_MC make.conf knob
+ Add the ability to build .cf files from .mc files
+ Generalize map rebuilding
+ Add the ability to rebuild the aliases file
+ Add the ability to stop, start, and restart sendmail

PR:		bin/13759, bin/19897, bin/24397
This commit is contained in:
Gregory Neil Shapiro 2001-02-22 04:17:33 +00:00
parent 25219d25e6
commit f2e560e181
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=72847

View File

@ -1,31 +1,155 @@
#
# $FreeBSD$
#
# This Makefile provides an easy way to generate the configuration
# file and database maps for the sendmail(8) daemon.
#
# The user-driven targets are:
#
# all - Build cf, maps and aliases
# cf - Build the .cf file from .mc file
# maps - Build the feature maps
# aliases - Build the sendmail aliases
# install - Install the .cf file as /etc/mail/sendmail.cf
# start - Start the sendmail daemon with the flags defined in
# /etc/defaults/rc.conf or /etc/rc.conf
# stop - Stop the sendmail daemon
# restart - Restart the sendmail daemon
#
# Calling `make' will generate the updated versions when either the
# aliases or one of the map files were changed.
#
# A `make install` is only necessary after modifying the .mc file. In
# this case one would normally also call `make restart' to allow the
# running sendmail to pick up the changes as well.
#
# ------------------------------------------------------------------------
#
# This makefile uses `freebsd.mc' as the default .mc file. This can
# be changed by defining SENDMAIL_MC in /etc/make.conf, e.g.:
#
# SENDMAIL_MC=/etc/mail/myconfig.mc
#
# ------------------------------------------------------------------------
#
# The Makefile knows about the following maps:
# access, bitdomain, domaintable, genericstable, mailertable, userdb,
# uucpdomain, virtusertable
#
all: access.db mailertable.db virtusertable.db \
# /etc/mail/aliases.db
SENDMAIL_MC?= freebsd.mc
SENDMAIL_MC_CF= ${SENDMAIL_MC:R}.cf
access.db: access
/usr/sbin/makemap hash access < access
SENDMAIL_ALIASES?= /etc/mail/aliases
virtusertable.db: virtusertable
/usr/sbin/makemap hash virtusertable < virtusertable
#
# This is the directory where the sendmail configuration files are
# located.
#
.if exists(/usr/share/sendmail/cf)
SENDMAIL_CF_DIR?= /usr/share/sendmail/cf
.elif exists(/usr/src/contrib/sendmail/cf)
SENDMAIL_CF_DIR?= /usr/src/contrib/sendmail/cf
.endif
mailertable.db: mailertable
/usr/sbin/makemap hash mailertable < mailertable
#
# The pid is used to stop and restart the running daemon.
#
SENDMAIL_PIDFILE?= /var/run/sendmail.pid
#/etc/mail/aliases.db: /etc/mail/aliases
# newaliases
#
# Some useful programs we need.
#
SENDMAIL?= /usr/sbin/sendmail
MAKEMAP?= /usr/sbin/makemap
M4?= /usr/bin/m4
KILL?= /bin/kill
mailertable:
@echo Generating empty mailertable
sed -e 's/^/#/' < mailertable.sample > mailertable
# Set a reasonable default
.MAIN: all
access:
@echo Generating empty access
sed -e 's/^/#/' < access.sample > access
#
# ------------------------------------------------------------------------
#
# The Makefile picks up the list of files from SENDMAIL_MAP_SRC and
# stores the matching .db filenames in SENDMAIL_MAP_OBJ if the file
# exists in the current directory.
#
SENDMAIL_MAP_SRC+= mailertable domaintable bitdomain uucpdomain \
genericstable virtusertable access userdb
SENDMAIL_MAP_OBJ=
virtusertable:
@echo Generating empty virtusertable
sed -e 's/^/#/' < virtusertable.sample > virtusertable
.for _f in ${SENDMAIL_MAP_SRC}
.if exists(${_f})
SENDMAIL_MAP_OBJ+= ${_f}.db
.endif
.endfor
#
# The makemap command is used to generate a hashed map from the textfile.
#
.for _f in ${SENDMAIL_MAP_SRC}
.if (exists(${_f}.sample) && !exists(${_f}))
${_f}: ${_f}.sample
sed -e 's/^/#/' < ${.OODATE} > ${.TARGET}
.endif
${_f}.db: ${_f}
${MAKEMAP} hash ${.TARGET} < ${.OODATE}
.endfor
#
# The .cf file needs to be recreated if the templates were modified.
#
M4FILES!= find ${SENDMAIL_CF_DIR} -type f -name '*.m4' -print
#
# M4(1) is used to generate the .cf file from the .mc file.
#
.SUFFIXES: .cf .mc
.mc.cf: ${M4FILES}
${M4} -D_CF_DIR_=${SENDMAIL_CF_DIR}/ ${SENDMAIL_CF_DIR}/m4/cf.m4 \
${@:R}.mc > ${.TARGET}
${SENDMAIL_MC_CF}: ${M4FILES}
#
# Aliases are handled separately since they normally reside in /etc
# and can be rebuild without the help of makemap.
#
${SENDMAIL_ALIASES}.db: ${SENDMAIL_ALIASES}
${SENDMAIL} -bi
#
# ------------------------------------------------------------------------
#
all: cf maps aliases
clean:
rm -f access.db virtusertable.db mailertable.db
depend:
cf: ${SENDMAIL_MC_CF}
maps: ${SENDMAIL_MAP_OBJ}
aliases: ${SENDMAIL_ALIASES}.db
install: ${SENDMAIL_MC_CF}
${INSTALL} -c -m ${SHAREMODE} ${SENDMAIL_MC_CF} /etc/mail/sendmail.cf
start:
(. /etc/defaults/rc.conf; \
if [ "$${sendmail_enable}" = "YES" -a -r /etc/mail/sendmail.cf ];\
then \
${SENDMAIL} $${sendmail_flags}; \
fi \
)
stop:
${KILL} -TERM `head -1 ${SENDMAIL_PIDFILE}`
restart:
${KILL} -HUP `head -1 ${SENDMAIL_PIDFILE}`