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