summaryrefslogtreecommitdiffstats
path: root/etc/mail/Makefile
blob: c55becac7a517ab434d8bad78a6f7574a68e5b0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#
# $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 `<HOSTNAME>.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
#
# If '<HOSTNAME>.mc' does not exist, it is created using 'freebsd.mc'
# as a template.
# ------------------------------------------------------------------------
#
# The Makefile knows about the following maps:
# access, bitdomain, domaintable, genericstable, mailertable, userdb,
# uucpdomain, virtusertable
#

.ifndef SENDMAIL_MC
SENDMAIL_MC!=           hostname
SENDMAIL_MC:=           ${SENDMAIL_MC}.mc

${SENDMAIL_MC}:
	cp freebsd.mc ${SENDMAIL_MC}
.endif

INSTALL_CF=		${SENDMAIL_MC:R}.cf

SENDMAIL_ALIASES?=	/etc/mail/aliases

#
# 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

#
# The pid is used to stop and restart the running daemon.
#
SENDMAIL_PIDFILE?=	/var/run/sendmail.pid

#
# Some useful programs we need.
#
SENDMAIL?=		/usr/sbin/sendmail
MAKEMAP?=		/usr/sbin/makemap
M4?=			/usr/bin/m4
KILL?=			/bin/kill

# Set a reasonable default
.MAIN:	all

#
# ------------------------------------------------------------------------
#
# 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_TYPE is the database
# type to use when calling makemap.
#
SENDMAIL_MAP_SRC+=	mailertable domaintable bitdomain uucpdomain \
			genericstable virtusertable access
SENDMAIL_MAP_OBJ=
SENDMAIL_MAP_TYPE?=	hash

.for _f in ${SENDMAIL_MAP_SRC} userdb
.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} ${SENDMAIL_MAP_TYPE} ${.TARGET} < ${.OODATE}
.endfor

userdb.db:	userdb
	${MAKEMAP} btree ${.TARGET} < ${.OODATE}


#
# 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_M4_FLAGS} \
		${SENDMAIL_CF_DIR}/m4/cf.m4 ${@:R}.mc > ${.TARGET}

#
# 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:

depend:

cf:		${INSTALL_CF}

submit.cf:	submit.mc
.ifdef SENDMAIL_SET_USER_ID
	@echo ">>> ERROR: You should not create a submit.cf file if you are using a"
	@echo "           set-user-ID sendmail binary (SENDMAIL_SET_USER_ID is set"
	@echo "           in make.conf)."
	@false
.endif

maps:		${SENDMAIL_MAP_OBJ}

aliases:	${SENDMAIL_ALIASES}.db

install:	${INSTALL_CF}
.if ${INSTALL_CF} != /etc/mail/sendmail.cf
	${INSTALL} -c -m ${SHAREMODE} ${INSTALL_CF} /etc/mail/sendmail.cf
.endif

start:
	(. /etc/defaults/rc.conf; source_rc_confs; \
	case "$${sendmail_enable}" in \
	[Yy][Ee][Ss]) \
		/usr/sbin/sendmail $${sendmail_flags} \
		;; \
	*) \
		case "$${sendmail_outbound_enable}" in \
		[Yy][Ee][Ss]) \
			/usr/sbin/sendmail $${sendmail_outbound_flags} \
			;; \
		esac \
		;; \
	esac \
	)

stop:
	${KILL} -TERM `head -1 ${SENDMAIL_PIDFILE}`

restart:
	${KILL} -HUP `head -1 ${SENDMAIL_PIDFILE}`

# User defined targets
.if exists(Makefile.local)
.include "Makefile.local"
.endif
OpenPOWER on IntegriCloud