summaryrefslogtreecommitdiffstats
path: root/etc/mail
diff options
context:
space:
mode:
authorgshapiro <gshapiro@FreeBSD.org>2001-02-22 04:17:33 +0000
committergshapiro <gshapiro@FreeBSD.org>2001-02-22 04:17:33 +0000
commit167a0e9e84ba7a11e762356996b67169c7548b20 (patch)
tree7c6bada00010e5a1218cad5b4430b3bd70dbbf5c /etc/mail
parenta299914603ba9c1451fead058757c8f1780cc704 (diff)
downloadFreeBSD-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/mail')
-rw-r--r--etc/mail/Makefile164
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}`
OpenPOWER on IntegriCloud