Makefile.yp revision 1.7
1#	$NetBSD: Makefile.yp,v 1.7 1997/11/18 00:37:23 lukem Exp $
2#
3# This is the YP Makefile, used to create and push YP maps.
4#
5
6# Invoke with NOPUSH != "" to prevent the maps from being yppushed upon rebuild
7#
8NOPUSH?=	""
9
10# Password maps in standard YP are insecure, because the pw_passwd
11# field is accessable by any user. FreeBSD, NetBSD and OpenBSD have
12# a common solution: a secure map (generated with makedbm -s) can
13# only be accessed by a client bound to a privileged port.
14#
15# Comment out the following if you don't need compatibility with
16# sites that don't support this feature
17#
18# XXX:	`secure' maps are currently not supported by the system,
19#	so do not set this to `no' for NetBSD 1.3 clients.
20#
21INSECURE?=	yes
22
23
24YPDBDIR=	/var/yp
25DIR=		/etc
26AMDDIR=		/etc/amd
27DOMAIN=		"`/usr/bin/basename ${.CURDIR}`"
28
29AWK=		/usr/bin/awk
30CAT=		/bin/cat
31CP=		/bin/cp
32CUT=		/usr/bin/cut
33ECHO=		/bin/echo
34MAKEDBM=	/usr/sbin/makedbm
35MAKEDBM_S=	${MAKEDBM} -s
36MKALIAS=	/usr/sbin/mkalias
37MKNETID=	/usr/sbin/mknetid
38REVNETGROUP=	/usr/sbin/revnetgroup
39RM=		/bin/rm
40SED=		/usr/bin/sed
41SENDMAIL=	/usr/sbin/sendmail
42STDETHERS=	/usr/sbin/stdethers
43STDHOSTS=	/usr/sbin/stdhosts
44TOUCH=		/usr/bin/touch
45YPPUSH=		/usr/sbin/yppush
46
47
48# We have a rule for ypservers, but we don't build it by default, since
49# it seldom changes (only when slaves are added/deleted).
50
51all: passwd aliases amd.home ethers group hosts netgroup networks rpc services protocols netid
52
53
54passwd.time: ${DIR}/master.passwd
55	-@if [ -f ${.ALLSRC} ]; then \
56		umask 077 ; \
57		if [ "${INSECURE}" != "yes" ]; then \
58			${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 | \
59			${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
60			{ print $$1, $$1":*:"$$3":"$$4":"$$5":"$$6":"$$7 }' -|\
61			${MAKEDBM} - passwd.byname; \
62			${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 |\
63			${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
64			{ print $$3, $$1":*:"$$3":"$$4":"$$5":"$$6":"$$7 }' -|\
65			${MAKEDBM} - passwd.byuid; \
66		else \
67			${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 | \
68			${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
69			{ print $$1, $$0 }' - | ${MAKEDBM} - passwd.byname; \
70			${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 |\
71			${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
72			{ print $$3, $$0 }' - | ${MAKEDBM} - passwd.byuid; \
73		fi; \
74		${CAT} ${.ALLSRC} | \
75		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
76		{ print $$1, $$0 }' - | ${MAKEDBM_S} - master.passwd.byname; \
77		${CAT} ${.ALLSRC} | \
78		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
79		{ print $$3, $$0 }' - | ${MAKEDBM_S} - master.passwd.byuid; \
80		${TOUCH} ${.TARGET}; \
81		${ECHO} "updated passwd"; \
82		if [ ! ${NOPUSH} ]; then \
83			${YPPUSH} -d ${DOMAIN} passwd.byname; \
84			${YPPUSH} -d ${DOMAIN} passwd.byuid; \
85			${YPPUSH} -d ${DOMAIN} master.passwd.byname; \
86			${YPPUSH} -d ${DOMAIN} master.passwd.byuid; \
87			${ECHO} "pushed passwd"; \
88		else \
89			: ; \
90		fi \
91	else \
92		${ECHO} "couldn't find ${.ALLSRC}"; \
93	fi
94
95
96aliases.time: ${DIR}/aliases
97	-@if [ -f ${.ALLSRC} ]; then \
98		${CP} -p ${.ALLSRC} ${DOMAIN}-aliases; \
99		${SENDMAIL} -bi -oA${PWD}/${DOMAIN}-aliases; \
100		${MAKEDBM} -u ${DOMAIN}-aliases | ${MAKEDBM} - mail.aliases; \
101		${MKALIAS} mail.aliases mail.byaddr; \
102		${TOUCH} ${.TARGET}; \
103		${RM} ${DOMAIN}-aliases.db ${DOMAIN}-aliases; \
104		${ECHO} "updated aliases"; \
105		if [ ! ${NOPUSH} ]; then \
106			${YPPUSH} -d ${DOMAIN} mail.aliases; \
107			${YPPUSH} -d ${DOMAIN} mail.byaddr; \
108			${ECHO} "pushed aliases"; \
109		else \
110			: ; \
111		fi \
112	else \
113		${ECHO} "couldn't find ${.ALLSRC}"; \
114	fi
115
116
117amd.home.time: ${AMDDIR}/amd.home
118	-@if [ -f ${.ALLSRC} ]; then \
119		${SED} -e "s/#.*$$//" -e "/^$$/d" ${.ALLSRC} | \
120		${AWK} '{ \
121			    for (i = 1; i <= NF; i++) \
122				if (i == NF) { \
123				    if (substr($$i, length($$i), 1) == "\\") { \
124					printf("%s", \
125					    substr($$i, 1, length($$i) - 1)); \
126				    } \
127				    else \
128					printf("%s\n", $$i); \
129				} \
130				else \
131				    printf("%s ", $$i); \
132			}' | \
133		${MAKEDBM} - amd.home; \
134		${TOUCH} ${.TARGET}; \
135		${ECHO} "updated amd.home"; \
136		if [ ! ${NOPUSH} ]; then \
137			${YPPUSH} -d ${DOMAIN} amd.home; \
138			${ECHO} "pushed amd.home"; \
139		else \
140			: ; \
141		fi \
142	else \
143		${ECHO} "couldn't find ${.ALLSRC}"; \
144	fi
145
146
147ethers.time: ${DIR}/ethers
148	-@if [ -f ${.ALLSRC} ]; then \
149		${STDETHERS} ${.ALLSRC} | ${SED} -e s/#.*$$// | \
150		${AWK} 'BEGIN { FS="\t"; OFS="\t"; } { print $$1, $$0 }' | \
151		${MAKEDBM} - ethers.byaddr; \
152		${STDETHERS} ${.ALLSRC} | \
153		${AWK} 'BEGIN { FS="\t"; OFS="\t"; } { print $$2, $$0 }' | \
154		${MAKEDBM} - ethers.byname; \
155		${TOUCH} ${.TARGET}; \
156		${ECHO} "updated ethers"; \
157		if [ ! ${NOPUSH} ]; then \
158			${YPPUSH} -d ${DOMAIN} ethers.byaddr; \
159			${YPPUSH} -d ${DOMAIN} ethers.byname; \
160			${ECHO} "pushed ethers"; \
161		else \
162			: ; \
163		fi \
164	else \
165		${ECHO} "couldn't find ${.ALLSRC}"; \
166	fi
167
168
169group.time: ${DIR}/group
170	-@if [ -f ${.ALLSRC} ]; then \
171		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
172		    { print $$1, $$0 }' ${.ALLSRC} | \
173		${MAKEDBM} - group.byname; \
174		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
175		    { print $$3, $$0 }' ${.ALLSRC} | \
176		${MAKEDBM} - group.bygid; \
177		${TOUCH} ${.TARGET}; \
178		${ECHO} "updated group"; \
179		if [ ! ${NOPUSH} ]; then \
180			${YPPUSH} -d ${DOMAIN} group.byname; \
181			${YPPUSH} -d ${DOMAIN} group.bygid; \
182			${ECHO} "pushed group"; \
183		else \
184			: ; \
185		fi \
186	else \
187		${ECHO} "couldn't find ${.ALLSRC}"; \
188	fi
189
190
191hosts.time: ${DIR}/hosts
192	-@if [ -f ${.ALLSRC} ]; then \
193		${STDHOSTS} ${.ALLSRC} | ${SED} -e s/#.*$$// | \
194		${AWK} '{for (i = 2; i <= NF; i++) print $$i, $$0 }' | \
195		${MAKEDBM} - hosts.byname; \
196		${STDHOSTS} ${.ALLSRC} | \
197		${AWK} 'BEGIN { OFS="\t"; } { print $$1, $$0 }' | \
198		${MAKEDBM} - hosts.byaddr; \
199		${TOUCH} ${.TARGET}; \
200		${ECHO} "updated hosts"; \
201		if [ ! ${NOPUSH} ]; then \
202			${YPPUSH} -d ${DOMAIN} hosts.byname; \
203			${YPPUSH} -d ${DOMAIN} hosts.byaddr; \
204			${ECHO} "pushed hosts"; \
205		else \
206			: ; \
207		fi \
208	else \
209		${ECHO} "couldn't find ${.ALLSRC}"; \
210	fi
211
212
213netgroup.time: ${DIR}/netgroup
214	-@if [ -f ${.ALLSRC} ]; then \
215		${CAT} ${.ALLSRC} | ${MAKEDBM} - netgroup; \
216		${CAT} ${.ALLSRC} | ${REVNETGROUP} -u -f - | \
217		${MAKEDBM} - netgroup.byuser; \
218		${CAT} ${.ALLSRC} | ${REVNETGROUP} -h -f - | \
219		${MAKEDBM} - netgroup.byhost; \
220		${TOUCH} ${.TARGET}; \
221		${ECHO} "updated netgroup"; \
222		if [ ! ${NOPUSH} ]; then \
223			${YPPUSH} -d ${DOMAIN} netgroup; \
224			${YPPUSH} -d ${DOMAIN} netgroup.byuser; \
225			${YPPUSH} -d ${DOMAIN} netgroup.byhost; \
226			${ECHO} "pushed netgroup"; \
227		else \
228			: ; \
229		fi \
230	else \
231		${ECHO} "couldn't find ${.ALLSRC}"; \
232	fi
233
234
235networks.time: ${DIR}/networks
236	-@if [ -f ${.ALLSRC} ]; then \
237		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
238		${AWK} '{print $$1, $$0; \
239		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
240		${MAKEDBM} - networks.byname; \
241		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
242		    ${.ALLSRC} | \
243		${MAKEDBM} - networks.byaddr; \
244		${TOUCH} ${.TARGET}; \
245		${ECHO} "updated networks"; \
246		if [ ! ${NOPUSH} ]; then \
247			${YPPUSH} -d ${DOMAIN} networks.byname; \
248			${YPPUSH} -d ${DOMAIN} networks.byaddr; \
249			${ECHO} "pushed networks"; \
250		else \
251			: ; \
252		fi \
253	else \
254		${ECHO} "couldn't find ${.ALLSRC}"; \
255	fi
256
257
258protocols.time: ${DIR}/protocols
259	-@if [ -f ${.ALLSRC} ]; then \
260		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
261		    ${.ALLSRC} | \
262		${MAKEDBM} - protocols.bynumber; \
263		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
264		${AWK} '{print $$1, $$0; \
265		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
266		${MAKEDBM} - protocols.byname; \
267		${TOUCH} ${.TARGET}; \
268		${ECHO} "updated protocols"; \
269		if [ ! ${NOPUSH} ]; then \
270			${YPPUSH} -d ${DOMAIN} protocols.bynumber; \
271			${YPPUSH} -d ${DOMAIN} protocols.byname; \
272			${ECHO} "pushed protocols"; \
273		else \
274			: ; \
275		fi \
276	else \
277		${ECHO} "couldn't find ${.ALLSRC}"; \
278	fi
279
280
281rpc.time: ${DIR}/rpc
282	-@if [ -f ${.ALLSRC} ]; then \
283		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
284		    ${.ALLSRC} | \
285		${MAKEDBM} - rpc.bynumber; \
286		${TOUCH} ${.TARGET}; \
287		${ECHO} "updated rpc"; \
288		if [ ! ${NOPUSH} ]; then \
289			${YPPUSH} -d ${DOMAIN} rpc.bynumber; \
290			${ECHO} "pushed rpc"; \
291		else \
292			: ; \
293		fi \
294	else \
295		${ECHO} "couldn't find ${.ALLSRC}"; \
296	fi
297
298
299services.time: ${DIR}/services
300	-@if [ -f ${.ALLSRC} ]; then \
301		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
302		    ${.ALLSRC} | \
303		${MAKEDBM} - services.byname; \
304		${TOUCH} ${.TARGET}; \
305		${ECHO} "updated services"; \
306		if [ ! ${NOPUSH} ]; then \
307			${YPPUSH} -d ${DOMAIN} services.byname; \
308			${ECHO} "pushed services"; \
309		else \
310			: ; \
311		fi \
312	else \
313		${ECHO} "couldn't find ${.ALLSRC}"; \
314	fi
315
316
317netid.time: ${DIR}/passwd ${DIR}/group ${DIR}/hosts ${DIR}/netid
318	-@${MKNETID} -q -d ${DOMAIN} -p ${DIR}/passwd -g ${DIR}/group -h \
319	      ${DIR}/hosts -m ${DIR}/netid | \
320	  ${MAKEDBM} - netid.byname; \
321	  ${TOUCH} ${.TARGET}; \
322	  ${ECHO} "updated netid"; \
323	  if [ ! ${NOPUSH} ]; then \
324		${YPPUSH} -d ${DOMAIN} netid.byname; \
325		${ECHO} "pushed netid"; \
326	  else \
327		: ; \
328	  fi
329
330
331ypservers.time: ${.CURDIR}/ypservers
332	-@${MAKEDBM} ypservers ypservers; \
333	${TOUCH} ${.TARGET}; \
334	${ECHO} "updated ypservers"; \
335	if [ ! ${NOPUSH} ]; then \
336		${YPPUSH} -d ${DOMAIN} ypservers; \
337		${ECHO} "pushed ypservers"; \
338	else \
339		: ; \
340	fi
341
342
343passwd: passwd.time
344group: group.time
345hosts: hosts.time
346aliases: aliases.time
347amd.home: amd.home.time
348ethers: ethers.time
349netgroup: netgroup.time
350networks: networks.time
351rpc: rpc.time
352services: services.time
353protocols: protocols.time
354netid: netid.time
355ypservers: ypservers.time
356
357${DIR}/passwd:
358${DIR}/group:
359${DIR}/hosts:
360${DIR}/aliases:
361${AMDDIR}/amd.home:
362${DIR}/ethers:
363${DIR}/master.passwd:
364${DIR}/netgroup:
365${DIR}/networks:
366${DIR}/rpc:
367${DIR}/services:
368${DIR}/protocols:
369${DIR}/netid:
370