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