1# This Makefile provides an easy way to generate the configuration
2# file and database maps for the sendmail(8) daemon.
3#
4# The user-driven targets are:
5#
6# all     - Build cf, maps and aliases
7# cf      - Build the .cf file from .mc file
8# maps    - Build the feature maps
9# aliases - Build the sendmail aliases
10# install - Install the .cf file as /etc/mail/sendmail.cf
11#
12# For acting on both the MTA daemon and MSP queue running daemon:
13# start        - Start both the sendmail MTA daemon and MSP queue running
14#                daemon with the flags defined in /etc/defaults/rc.conf or
15#                /etc/rc.conf
16# stop         - Stop both the sendmail MTA daemon and MSP queue running
17#                daemon
18# restart      - Restart both the sendmail MTA daemon and MSP queue running
19#                daemon
20#
21# For acting on just the MTA daemon:
22# start-mta    - Start the sendmail MTA daemon with the flags defined in
23#                /etc/defaults/rc.conf or /etc/rc.conf
24# stop-mta     - Stop the sendmail MTA daemon
25# restart-mta  - Restart the sendmail MTA daemon
26#
27# For acting on just the MSP queue running daemon:
28# start-mspq   - Start the sendmail MSP queue running daemon with the
29#                flags defined in /etc/defaults/rc.conf or /etc/rc.conf
30# stop-mspq    - Stop the sendmail MSP queue running daemon
31# restart-mspq - Restart the sendmail MSP queue running daemon
32#
33# Calling `make' will generate the updated versions when either the
34# aliases or one of the map files were changed.
35#
36# A `make install` is only necessary after modifying the .mc file. In
37# this case one would normally also call `make restart' to allow the
38# running sendmail to pick up the changes as well.
39#
40# ------------------------------------------------------------------------
41# This Makefile uses `<HOSTNAME>.mc' as the default MTA .mc file.  This
42# can be changed by defining SENDMAIL_MC in /etc/make.conf, e.g.:
43#
44#	SENDMAIL_MC=/etc/mail/myconfig.mc
45#
46# If '<HOSTNAME>.mc' does not exist, it is created using 'freebsd.mc'
47# as a template.
48#
49# It also uses '<HOSTNAME>.submit.mc' as the default mail submission .mc
50# file.  This can be changed by defining SENDMAIL_SUBMIT_MC in
51# /etc/make.conf, e.g.:
52#
53#	SENDMAIL_SUBMIT_MC=/etc/mail/mysubmit.mc
54#
55# If '<HOSTNAME>.submit.mc' does not exist, it is created using
56# 'freebsd.submit.mc' as a template.
57# ------------------------------------------------------------------------
58#
59# The Makefile knows about the following maps:
60# access, authinfo, bitdomain, domaintable, genericstable, mailertable,
61# userdb, uucpdomain, virtusertable
62#
63
64.ifndef SENDMAIL_MC
65SENDMAIL_MC!=           hostname
66SENDMAIL_MC:=           ${SENDMAIL_MC}.mc
67
68${SENDMAIL_MC}:
69	${CP} freebsd.mc ${SENDMAIL_MC}
70.endif
71
72.ifndef SENDMAIL_SUBMIT_MC
73SENDMAIL_SUBMIT_MC!=	hostname
74SENDMAIL_SUBMIT_MC:=	${SENDMAIL_SUBMIT_MC}.submit.mc
75
76${SENDMAIL_SUBMIT_MC}:
77	${CP} freebsd.submit.mc ${SENDMAIL_SUBMIT_MC}
78.endif
79
80INSTALL_CF=		${SENDMAIL_MC:R}.cf
81
82.ifndef SENDMAIL_SET_USER_ID
83INSTALL_SUBMIT_CF=	${SENDMAIL_SUBMIT_MC:R}.cf
84.endif
85
86SENDMAIL_ALIASES?=	/etc/mail/aliases
87
88#
89# This is the directory where the sendmail configuration files are
90# located.
91#
92.if exists(/usr/share/sendmail/cf)
93SENDMAIL_CF_DIR?=	/usr/share/sendmail/cf
94.elif exists(/usr/src/contrib/sendmail/cf)
95SENDMAIL_CF_DIR?=	/usr/src/contrib/sendmail/cf
96.endif
97
98#
99# The sendmail startup script
100#
101SENDMAIL_START_SCRIPT?=	/etc/rc.d/sendmail
102
103#
104# Some useful programs we need.
105#
106SENDMAIL?=		/usr/sbin/sendmail
107MAKEMAP?=		/usr/sbin/makemap
108M4?=			/usr/bin/m4
109
110# Permissions for generated maps
111SENDMAIL_MAP_PERMS?=	0640
112
113# Set a reasonable default
114.MAIN: all
115
116#
117# ------------------------------------------------------------------------
118#
119# The Makefile picks up the list of files from SENDMAIL_MAP_SRC and
120# stores the matching .db filenames in SENDMAIL_MAP_OBJ if the file
121# exists in the current directory.  SENDMAIL_MAP_TYPE is the database
122# type to use when calling makemap.
123#
124SENDMAIL_MAP_SRC+=	mailertable domaintable bitdomain uucpdomain \
125			genericstable virtusertable access authinfo
126SENDMAIL_MAP_OBJ=
127SENDMAIL_MAP_TYPE?=	hash
128
129.for _f in ${SENDMAIL_MAP_SRC} userdb
130.if exists(${_f})
131SENDMAIL_MAP_OBJ+=	${_f}.db
132.endif
133.endfor
134
135#
136# The makemap command is used to generate a hashed map from the textfile.
137#
138.for _f in ${SENDMAIL_MAP_SRC}
139.if (exists(${_f}.sample) && !exists(${_f}))
140${_f}: ${_f}.sample
141	sed -e 's/^/#/' < ${.OODATE} > ${.TARGET}
142.endif
143
144${_f}.db: ${_f}
145	${MAKEMAP} ${SENDMAIL_MAP_TYPE} ${.TARGET} < ${.OODATE}
146	chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
147.endfor
148
149userdb.db: userdb
150	${MAKEMAP} btree ${.TARGET} < ${.OODATE}
151	chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
152
153
154#
155# The .cf file needs to be recreated if the templates were modified.
156#
157M4FILES!=	find ${SENDMAIL_CF_DIR} -type f -name '*.m4' -print
158
159#
160# M4(1) is used to generate the .cf file from the .mc file.
161#
162.SUFFIXES: .cf .mc
163
164.mc.cf: ${M4FILES}
165	${M4} -D_CF_DIR_=${SENDMAIL_CF_DIR}/ ${SENDMAIL_M4_FLAGS} \
166	    ${SENDMAIL_CF_DIR}/m4/cf.m4 ${@:R}.mc > ${.TARGET}
167
168#
169# Aliases are handled separately since they normally reside in /etc
170# and can be rebuild without the help of makemap.
171#
172.for _f in ${SENDMAIL_ALIASES}
173${_f}.db: ${_f}
174	${SENDMAIL} -bi -OAliasFile=${.ALLSRC}
175	chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
176.endfor
177
178#
179# ------------------------------------------------------------------------
180#
181
182all: cf maps aliases
183
184clean:
185
186depend:
187
188cf: ${INSTALL_CF} ${INSTALL_SUBMIT_CF}
189
190.ifdef SENDMAIL_SET_USER_ID
191install: install-cf
192.else
193install: install-cf install-submit-cf
194.endif
195
196install-cf: ${INSTALL_CF}
197.if ${INSTALL_CF} != /etc/mail/sendmail.cf
198	${INSTALL} -m ${SHAREMODE} ${INSTALL_CF} /etc/mail/sendmail.cf
199.endif
200
201
202install-submit-cf: ${INSTALL_SUBMIT_CF}
203.ifdef SENDMAIL_SET_USER_ID
204	@echo ">>> ERROR: You should not create a submit.cf file if you are using a"
205	@echo "           set-user-ID sendmail binary (SENDMAIL_SET_USER_ID is set"
206	@echo "           in make.conf)."
207	@false
208.else
209.if ${INSTALL_SUBMIT_CF} != /etc/mail/submit.cf
210	${INSTALL} -m ${SHAREMODE} ${INSTALL_SUBMIT_CF} /etc/mail/submit.cf
211.endif
212.endif
213
214aliases: ${SENDMAIL_ALIASES:%=%.db}
215
216maps: ${SENDMAIL_MAP_OBJ}
217
218start start-mta start-mspq:
219	@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
220		echo -n 'Starting:'; \
221		sh ${SENDMAIL_START_SCRIPT} $@; \
222		echo '.'; \
223	fi
224
225stop stop-mta stop-mspq:
226	@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
227		echo -n 'Stopping:'; \
228		sh ${SENDMAIL_START_SCRIPT} $@; \
229		echo '.'; \
230	fi
231
232restart restart-mta restart-mspq:
233	@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
234		echo -n 'Restarting:'; \
235		sh ${SENDMAIL_START_SCRIPT} $@; \
236		echo '.'; \
237	fi
238
239# User defined targets
240.if exists(Makefile.local)
241.include "Makefile.local"
242.endif
243
244# For the definition of $SHAREMODE
245.include <bsd.own.mk>
246