Makefile.yp revision 1.15
1#	$NetBSD: Makefile.yp,v 1.15 2001/06/19 12:59:18 wiz 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 accessible 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# Uncomment out the following if you need compatibility with
16# sites that don't support this feature.
17#
18#INSECURE?=	yes
19
20# In addition, by adding shadow to the list of rules we support
21# linux and solaris type shadow maps.
22
23YPDBDIR=	/var/yp
24DIR=		/etc
25AMDDIR=		/etc/amd
26DOMAIN=		"`/usr/bin/basename ${.CURDIR}`"
27
28AWK=		/usr/bin/awk
29CAT=		/bin/cat
30CP=		/bin/cp
31CUT=		/usr/bin/cut
32ECHO=		/bin/echo
33MAKEDBM=	/usr/sbin/makedbm
34MAKEDBM_S=	${MAKEDBM} -s
35MKALIAS=	/usr/sbin/mkalias
36MKNETID=	/usr/sbin/mknetid
37REVNETGROUP=	/usr/sbin/revnetgroup
38RM=		/bin/rm
39SED=		/usr/bin/sed
40SENDMAIL=	/usr/sbin/sendmail
41SORT=		/usr/bin/sort
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 ipnodes 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			${SORT} | ${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			${SORT} | ${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 }' - | ${SORT} | \
70			${MAKEDBM} - passwd.byname; \
71			${CAT} ${.ALLSRC} | ${CUT} -d: -f1-4,8-10 |\
72			${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
73			{ print $$3, $$0 }' - | ${SORT} | \
74			${MAKEDBM} - passwd.byuid; \
75		fi; \
76		${CAT} ${.ALLSRC} | \
77		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
78		{ print $$1, $$0 }' - | ${SORT} | \
79		${MAKEDBM_S} - master.passwd.byname; \
80		${CAT} ${.ALLSRC} | \
81		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
82		{ print $$3, $$0 }' - | ${SORT} | \
83		${MAKEDBM_S} - master.passwd.byuid; \
84		${TOUCH} ${.TARGET}; \
85		${ECHO} "updated passwd"; \
86		if [ ! ${NOPUSH} ]; then \
87			${YPPUSH} -d ${DOMAIN} passwd.byname; \
88			${YPPUSH} -d ${DOMAIN} passwd.byuid; \
89			${YPPUSH} -d ${DOMAIN} master.passwd.byname; \
90			${YPPUSH} -d ${DOMAIN} master.passwd.byuid; \
91			${ECHO} "pushed passwd"; \
92		else \
93			: ; \
94		fi \
95	else \
96		${ECHO} "couldn't find ${.ALLSRC}"; \
97	fi
98
99# XXX: This does not do modify/expire time correctly.
100shadow.time: ${DIR}/master.passwd
101	-@if [ -f ${.ALLSRC} ]; then \
102		umask 077 ; \
103		${CAT} ${.ALLSRC} | ${CUT} -d: -f1-2 | \
104		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
105		{ print $$1, $$0":10779:0:99999:7:::" }' - | \
106		${SORT} | ${MAKEDBM_S} - shadow.byname; \
107		${TOUCH} ${.TARGET}; \
108		${ECHO} "updated shadow"; \
109		if [ ! ${NOPUSH} ]; then \
110			${YPPUSH} -d ${DOMAIN} shadow.byname; \
111			${ECHO} "pushed shadow"; \
112		else \
113			: ; \
114		fi \
115	else \
116		${ECHO} "couldn't find ${.ALLSRC}"; \
117	fi
118
119aliases.time: ${DIR}/mail/aliases
120	-@if [ -f ${.ALLSRC} ]; then \
121		${CP} -p ${.ALLSRC} ${DOMAIN}-aliases; \
122		${SENDMAIL} -bi -oA${PWD}/${DOMAIN}-aliases; \
123		${MAKEDBM} -u ${DOMAIN}-aliases | ${SORT} | \
124		${MAKEDBM} - mail.aliases; \
125		${MKALIAS} mail.aliases mail.byaddr; \
126		${TOUCH} ${.TARGET}; \
127		${RM} ${DOMAIN}-aliases.db ${DOMAIN}-aliases; \
128		${ECHO} "updated aliases"; \
129		if [ ! ${NOPUSH} ]; then \
130			${YPPUSH} -d ${DOMAIN} mail.aliases; \
131			${YPPUSH} -d ${DOMAIN} mail.byaddr; \
132			${ECHO} "pushed aliases"; \
133		else \
134			: ; \
135		fi \
136	else \
137		${ECHO} "couldn't find ${.ALLSRC}"; \
138	fi
139
140
141amd.home.time: ${AMDDIR}/amd.home
142	-@if [ -f ${.ALLSRC} ]; then \
143		${SED} -e "s/#.*$$//" -e "/^$$/d" ${.ALLSRC} | \
144		${AWK} '{ \
145			    for (i = 1; i <= NF; i++) \
146				if (i == NF) { \
147				    if (substr($$i, length($$i), 1) == "\\") { \
148					printf("%s", \
149					    substr($$i, 1, length($$i) - 1)); \
150				    } \
151				    else \
152					printf("%s\n", $$i); \
153				} \
154				else \
155				    printf("%s ", $$i); \
156			}' | \
157		${SORT} | ${MAKEDBM} - amd.home; \
158		${TOUCH} ${.TARGET}; \
159		${ECHO} "updated amd.home"; \
160		if [ ! ${NOPUSH} ]; then \
161			${YPPUSH} -d ${DOMAIN} amd.home; \
162			${ECHO} "pushed amd.home"; \
163		else \
164			: ; \
165		fi \
166	else \
167		${ECHO} "couldn't find ${.ALLSRC}"; \
168	fi
169
170
171ethers.time: ${DIR}/ethers
172	-@if [ -f ${.ALLSRC} ]; then \
173		${STDETHERS} ${.ALLSRC} | ${SED} -e s/#.*$$// | \
174		${AWK} 'BEGIN { FS="\t"; OFS="\t"; } { print $$1, $$0 }' | \
175		${SORT} | ${MAKEDBM} - ethers.byaddr; \
176		${STDETHERS} ${.ALLSRC} | \
177		${AWK} 'BEGIN { FS="\t"; OFS="\t"; } { print $$2, $$0 }' | \
178		${SORT} | ${MAKEDBM} - ethers.byname; \
179		${TOUCH} ${.TARGET}; \
180		${ECHO} "updated ethers"; \
181		if [ ! ${NOPUSH} ]; then \
182			${YPPUSH} -d ${DOMAIN} ethers.byaddr; \
183			${YPPUSH} -d ${DOMAIN} ethers.byname; \
184			${ECHO} "pushed ethers"; \
185		else \
186			: ; \
187		fi \
188	else \
189		${ECHO} "couldn't find ${.ALLSRC}"; \
190	fi
191
192
193group.time: ${DIR}/group
194	-@if [ -f ${.ALLSRC} ]; then \
195		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
196		    { print $$1, $$0 }' ${.ALLSRC} | \
197		${SORT} | ${MAKEDBM} - group.byname; \
198		${AWK} 'BEGIN { FS=":"; OFS="\t"; } /^[a-zA-Z0-9_]/ \
199		    { print $$3, $$0 }' ${.ALLSRC} | \
200		${SORT} | ${MAKEDBM} - group.bygid; \
201		${TOUCH} ${.TARGET}; \
202		${ECHO} "updated group"; \
203		if [ ! ${NOPUSH} ]; then \
204			${YPPUSH} -d ${DOMAIN} group.byname; \
205			${YPPUSH} -d ${DOMAIN} group.bygid; \
206			${ECHO} "pushed group"; \
207		else \
208			: ; \
209		fi \
210	else \
211		${ECHO} "couldn't find ${.ALLSRC}"; \
212	fi
213
214
215# Solaris 8 does the following:
216# - /etc/hosts and hosts.{byname,byaddr} are IPv4 only.
217# - /etc/inet/ipnodes and ipnodes.{byname,byaddr} are used for protocol
218#   independent name-to-address mapping.
219#
220# For local name resolution, we made /etc/hosts protocol independent.
221# For NIS name resolution, we obey Solaris 8 practice.
222# - We keep hosts.{byname,byaddr} IPv4 only, to be friendly with Solaris 8
223#   clients.
224# - ipnodes.{byname,byaddr} is used for protocol independent mapping.
225# We generate all the mappings from /etc/hosts, for compatibility with NetBSD
226# local name resolution.
227#
228hosts.time: ${DIR}/hosts
229	-@if [ -f ${.ALLSRC} ]; then \
230		${STDHOSTS} ${.ALLSRC} | ${SED} -e s/#.*$$// | \
231		${AWK} '{for (i = 2; i <= NF; i++) print $$i, $$0 }' | \
232		${SORT} | ${MAKEDBM} - hosts.byname; \
233		${STDHOSTS} ${.ALLSRC} | \
234		${AWK} 'BEGIN { OFS="\t"; } { print $$1, $$0 }' | \
235		${SORT} | ${MAKEDBM} - hosts.byaddr; \
236		${TOUCH} ${.TARGET}; \
237		${ECHO} "updated hosts"; \
238		if [ ! ${NOPUSH} ]; then \
239			${YPPUSH} -d ${DOMAIN} hosts.byname; \
240			${YPPUSH} -d ${DOMAIN} hosts.byaddr; \
241			${ECHO} "pushed hosts"; \
242		else \
243			: ; \
244		fi \
245	else \
246		${ECHO} "couldn't find ${.ALLSRC}"; \
247	fi
248
249
250ipnodes.time: ${DIR}/hosts
251	-@if [ -f ${.ALLSRC} ]; then \
252		${STDHOSTS} -n ${.ALLSRC} | ${SED} -e s/#.*$$// | \
253		${AWK} '{for (i = 2; i <= NF; i++) print $$i, $$0 }' | \
254		${SORT} | ${MAKEDBM} - ipnodes.byname; \
255		${STDHOSTS} -n ${.ALLSRC} | \
256		${AWK} 'BEGIN { OFS="\t"; } { print $$1, $$0 }' | \
257		${SORT} | ${MAKEDBM} - ipnodes.byaddr; \
258		${TOUCH} ${.TARGET}; \
259		${ECHO} "updated ipnodes"; \
260		if [ ! ${NOPUSH} ]; then \
261			${YPPUSH} -d ${DOMAIN} ipnodes.byname; \
262			${YPPUSH} -d ${DOMAIN} ipnodes.byaddr; \
263			${ECHO} "pushed ipnodes"; \
264		else \
265			: ; \
266		fi \
267	else \
268		${ECHO} "couldn't find ${.ALLSRC}"; \
269	fi
270
271
272netgroup.time: ${DIR}/netgroup
273	-@if [ -f ${.ALLSRC} ]; then \
274		${SED} -e "s/#.*$$//" -e "/^$$/d" ${.ALLSRC} | \
275		${AWK} '{ \
276			    for (i = 1; i <= NF; i++) \
277				if (i == NF) { \
278				    if (substr($$i, length($$i), 1) == "\\") { \
279					printf("%s", \
280					    substr($$i, 1, length($$i) - 1)); \
281				    } \
282				    else \
283					printf("%s\n", $$i); \
284				} \
285				else \
286				    printf("%s ", $$i); \
287			}' | \
288		${SORT} | ${MAKEDBM} - netgroup; \
289		${CAT} ${.ALLSRC} | ${REVNETGROUP} -u -f - | \
290		${SORT} | ${MAKEDBM} - netgroup.byuser; \
291		${CAT} ${.ALLSRC} | ${REVNETGROUP} -h -f - | \
292		${SORT} | ${MAKEDBM} - netgroup.byhost; \
293		${TOUCH} ${.TARGET}; \
294		${ECHO} "updated netgroup"; \
295		if [ ! ${NOPUSH} ]; then \
296			${YPPUSH} -d ${DOMAIN} netgroup; \
297			${YPPUSH} -d ${DOMAIN} netgroup.byuser; \
298			${YPPUSH} -d ${DOMAIN} netgroup.byhost; \
299			${ECHO} "pushed netgroup"; \
300		else \
301			: ; \
302		fi \
303	else \
304		${ECHO} "couldn't find ${.ALLSRC}"; \
305	fi
306
307
308networks.time: ${DIR}/networks
309	-@if [ -f ${.ALLSRC} ]; then \
310		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
311		${AWK} '{print $$1, $$0; \
312		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
313		${SORT} | ${MAKEDBM} - networks.byname; \
314		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
315		    ${.ALLSRC} | \
316		${SORT} | ${MAKEDBM} - networks.byaddr; \
317		${TOUCH} ${.TARGET}; \
318		${ECHO} "updated networks"; \
319		if [ ! ${NOPUSH} ]; then \
320			${YPPUSH} -d ${DOMAIN} networks.byname; \
321			${YPPUSH} -d ${DOMAIN} networks.byaddr; \
322			${ECHO} "pushed networks"; \
323		else \
324			: ; \
325		fi \
326	else \
327		${ECHO} "couldn't find ${.ALLSRC}"; \
328	fi
329
330
331protocols.time: ${DIR}/protocols
332	-@if [ -f ${.ALLSRC} ]; then \
333		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
334		    ${.ALLSRC} | \
335		${SORT} | ${MAKEDBM} - protocols.bynumber; \
336		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
337		${AWK} '{print $$1, $$0; \
338		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
339		${SORT} | ${MAKEDBM} - protocols.byname; \
340		${TOUCH} ${.TARGET}; \
341		${ECHO} "updated protocols"; \
342		if [ ! ${NOPUSH} ]; then \
343			${YPPUSH} -d ${DOMAIN} protocols.bynumber; \
344			${YPPUSH} -d ${DOMAIN} protocols.byname; \
345			${ECHO} "pushed protocols"; \
346		else \
347			: ; \
348		fi \
349	else \
350		${ECHO} "couldn't find ${.ALLSRC}"; \
351	fi
352
353
354rpc.time: ${DIR}/rpc
355	-@if [ -f ${.ALLSRC} ]; then \
356		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
357		    ${.ALLSRC} | \
358		${SORT} | ${MAKEDBM} - rpc.bynumber; \
359		${TOUCH} ${.TARGET}; \
360		${ECHO} "updated rpc"; \
361		if [ ! ${NOPUSH} ]; then \
362			${YPPUSH} -d ${DOMAIN} rpc.bynumber; \
363			${ECHO} "pushed rpc"; \
364		else \
365			: ; \
366		fi \
367	else \
368		${ECHO} "couldn't find ${.ALLSRC}"; \
369	fi
370
371
372services.time: ${DIR}/services
373	-@if [ -f ${.ALLSRC} ]; then \
374		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
375		    ${.ALLSRC} | \
376		${SORT} | ${MAKEDBM} - services.byname; \
377		${TOUCH} ${.TARGET}; \
378		${ECHO} "updated services"; \
379		if [ ! ${NOPUSH} ]; then \
380			${YPPUSH} -d ${DOMAIN} services.byname; \
381			${ECHO} "pushed services"; \
382		else \
383			: ; \
384		fi \
385	else \
386		${ECHO} "couldn't find ${.ALLSRC}"; \
387	fi
388
389
390netid.time: ${DIR}/passwd ${DIR}/group ${DIR}/hosts ${DIR}/netid
391	-@${MKNETID} -q -d ${DOMAIN} -p ${DIR}/passwd -g ${DIR}/group -h \
392	      ${DIR}/hosts -m ${DIR}/netid | \
393	  ${SORT} | ${MAKEDBM} - netid.byname; \
394	  ${TOUCH} ${.TARGET}; \
395	  ${ECHO} "updated netid"; \
396	  if [ ! ${NOPUSH} ]; then \
397		${YPPUSH} -d ${DOMAIN} netid.byname; \
398		${ECHO} "pushed netid"; \
399	  else \
400		: ; \
401	  fi
402
403
404ypservers.time: ${.CURDIR}/ypservers
405	-@${MAKEDBM} ypservers ypservers; \
406	${TOUCH} ${.TARGET}; \
407	${ECHO} "updated ypservers"; \
408	if [ ! ${NOPUSH} ]; then \
409		${YPPUSH} -d ${DOMAIN} ypservers; \
410		${ECHO} "pushed ypservers"; \
411	else \
412		: ; \
413	fi
414
415
416passwd: passwd.time
417group: group.time
418hosts: hosts.time
419ipnodes: ipnodes.time
420aliases: aliases.time
421amd.home: amd.home.time
422ethers: ethers.time
423netgroup: netgroup.time
424networks: networks.time
425rpc: rpc.time
426services: services.time
427shadow: shadow.time
428protocols: protocols.time
429netid: netid.time
430ypservers: ypservers.time
431
432${DIR}/passwd:
433${DIR}/group:
434${DIR}/hosts:
435${DIR}/mail/aliases:
436${AMDDIR}/amd.home:
437${DIR}/ethers:
438${DIR}/master.passwd:
439${DIR}/netgroup:
440${DIR}/networks:
441${DIR}/rpc:
442${DIR}/services:
443${DIR}/protocols:
444${DIR}/netid:
445