diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2001-02-22 04:17:33 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2001-02-22 04:17:33 +0000 |
commit | 167a0e9e84ba7a11e762356996b67169c7548b20 (patch) | |
tree | 7c6bada00010e5a1218cad5b4430b3bd70dbbf5c /etc | |
parent | a299914603ba9c1451fead058757c8f1780cc704 (diff) | |
download | FreeBSD-src-167a0e9e84ba7a11e762356996b67169c7548b20.zip FreeBSD-src-167a0e9e84ba7a11e762356996b67169c7548b20.tar.gz |
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
Diffstat (limited to 'etc')
-rw-r--r-- | etc/mail/Makefile | 164 |
1 files changed, 144 insertions, 20 deletions
diff --git a/etc/mail/Makefile b/etc/mail/Makefile index 4d66a33..55b2bf3 100644 --- a/etc/mail/Makefile +++ b/etc/mail/Makefile @@ -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}` |