Makefile.yp revision 1.10
1#	$NetBSD: Makefile.yp,v 1.10 2000/07/30 02:33:13 itojun 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 ipnodes 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
194# Solaris 8 does the following:
195# - /etc/hosts and hosts.{byname,byaddr} are IPv4 only.
196# - /etc/inet/ipnodes and ipnodes.{byname,byaddr} are used for protocol
197#   independent name-to-address mapping.
198#
199# For local name resolution, we made /etc/hosts protocol independent.
200# For NIS name resolution, we obey Solaris 8 practice.
201# - We keep hosts.{byname,byaddr} IPv4 only, to be friendly with Solaris 8
202#   clients.
203# - ipnodes.{byname,byaddr} is used for protocol independent mapping.
204# We generate all the mappings from /etc/hosts, for compatibility with NetBSD
205# local name resolution.
206#
207hosts.time: ${DIR}/hosts
208	-@if [ -f ${.ALLSRC} ]; then \
209		${STDHOSTS} ${.ALLSRC} | ${SED} -e s/#.*$$// | \
210		${AWK} '{for (i = 2; i <= NF; i++) print $$i, $$0 }' | \
211		${SORT} | ${MAKEDBM} - hosts.byname; \
212		${STDHOSTS} ${.ALLSRC} | \
213		${AWK} 'BEGIN { OFS="\t"; } { print $$1, $$0 }' | \
214		${SORT} | ${MAKEDBM} - hosts.byaddr; \
215		${TOUCH} ${.TARGET}; \
216		${ECHO} "updated hosts"; \
217		if [ ! ${NOPUSH} ]; then \
218			${YPPUSH} -d ${DOMAIN} hosts.byname; \
219			${YPPUSH} -d ${DOMAIN} hosts.byaddr; \
220			${ECHO} "pushed hosts"; \
221		else \
222			: ; \
223		fi \
224	else \
225		${ECHO} "couldn't find ${.ALLSRC}"; \
226	fi
227
228
229ipnodes.time: ${DIR}/hosts
230	-@if [ -f ${.ALLSRC} ]; then \
231		${STDHOSTS} -n ${.ALLSRC} | ${SED} -e s/#.*$$// | \
232		${AWK} '{for (i = 2; i <= NF; i++) print $$i, $$0 }' | \
233		${SORT} | ${MAKEDBM} - ipnodes.byname; \
234		${STDHOSTS} -n ${.ALLSRC} | \
235		${AWK} 'BEGIN { OFS="\t"; } { print $$1, $$0 }' | \
236		${SORT} | ${MAKEDBM} - ipnodes.byaddr; \
237		${TOUCH} ${.TARGET}; \
238		${ECHO} "updated ipnodes"; \
239		if [ ! ${NOPUSH} ]; then \
240			${YPPUSH} -d ${DOMAIN} ipnodes.byname; \
241			${YPPUSH} -d ${DOMAIN} ipnodes.byaddr; \
242			${ECHO} "pushed ipnodes"; \
243		else \
244			: ; \
245		fi \
246	else \
247		${ECHO} "couldn't find ${.ALLSRC}"; \
248	fi
249
250
251netgroup.time: ${DIR}/netgroup
252	-@if [ -f ${.ALLSRC} ]; then \
253		${CAT} ${.ALLSRC} | ${SORT} | ${MAKEDBM} - netgroup; \
254		${CAT} ${.ALLSRC} | ${REVNETGROUP} -u -f - | \
255		${SORT} | ${MAKEDBM} - netgroup.byuser; \
256		${CAT} ${.ALLSRC} | ${REVNETGROUP} -h -f - | \
257		${SORT} | ${MAKEDBM} - netgroup.byhost; \
258		${TOUCH} ${.TARGET}; \
259		${ECHO} "updated netgroup"; \
260		if [ ! ${NOPUSH} ]; then \
261			${YPPUSH} -d ${DOMAIN} netgroup; \
262			${YPPUSH} -d ${DOMAIN} netgroup.byuser; \
263			${YPPUSH} -d ${DOMAIN} netgroup.byhost; \
264			${ECHO} "pushed netgroup"; \
265		else \
266			: ; \
267		fi \
268	else \
269		${ECHO} "couldn't find ${.ALLSRC}"; \
270	fi
271
272
273networks.time: ${DIR}/networks
274	-@if [ -f ${.ALLSRC} ]; then \
275		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
276		${AWK} '{print $$1, $$0; \
277		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
278		${SORT} | ${MAKEDBM} - networks.byname; \
279		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
280		    ${.ALLSRC} | \
281		${SORT} | ${MAKEDBM} - networks.byaddr; \
282		${TOUCH} ${.TARGET}; \
283		${ECHO} "updated networks"; \
284		if [ ! ${NOPUSH} ]; then \
285			${YPPUSH} -d ${DOMAIN} networks.byname; \
286			${YPPUSH} -d ${DOMAIN} networks.byaddr; \
287			${ECHO} "pushed networks"; \
288		else \
289			: ; \
290		fi \
291	else \
292		${ECHO} "couldn't find ${.ALLSRC}"; \
293	fi
294
295
296protocols.time: ${DIR}/protocols
297	-@if [ -f ${.ALLSRC} ]; then \
298		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
299		    ${.ALLSRC} | \
300		${SORT} | ${MAKEDBM} - protocols.bynumber; \
301		${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \
302		${AWK} '{print $$1, $$0; \
303		    for (i = 3;i <= NF;i++) print $$i,$$0}' | \
304		${SORT} | ${MAKEDBM} - protocols.byname; \
305		${TOUCH} ${.TARGET}; \
306		${ECHO} "updated protocols"; \
307		if [ ! ${NOPUSH} ]; then \
308			${YPPUSH} -d ${DOMAIN} protocols.bynumber; \
309			${YPPUSH} -d ${DOMAIN} protocols.byname; \
310			${ECHO} "pushed protocols"; \
311		else \
312			: ; \
313		fi \
314	else \
315		${ECHO} "couldn't find ${.ALLSRC}"; \
316	fi
317
318
319rpc.time: ${DIR}/rpc
320	-@if [ -f ${.ALLSRC} ]; then \
321		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
322		    ${.ALLSRC} | \
323		${SORT} | ${MAKEDBM} - rpc.bynumber; \
324		${TOUCH} ${.TARGET}; \
325		${ECHO} "updated rpc"; \
326		if [ ! ${NOPUSH} ]; then \
327			${YPPUSH} -d ${DOMAIN} rpc.bynumber; \
328			${ECHO} "pushed rpc"; \
329		else \
330			: ; \
331		fi \
332	else \
333		${ECHO} "couldn't find ${.ALLSRC}"; \
334	fi
335
336
337services.time: ${DIR}/services
338	-@if [ -f ${.ALLSRC} ]; then \
339		${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \
340		    ${.ALLSRC} | \
341		${SORT} | ${MAKEDBM} - services.byname; \
342		${TOUCH} ${.TARGET}; \
343		${ECHO} "updated services"; \
344		if [ ! ${NOPUSH} ]; then \
345			${YPPUSH} -d ${DOMAIN} services.byname; \
346			${ECHO} "pushed services"; \
347		else \
348			: ; \
349		fi \
350	else \
351		${ECHO} "couldn't find ${.ALLSRC}"; \
352	fi
353
354
355netid.time: ${DIR}/passwd ${DIR}/group ${DIR}/hosts ${DIR}/netid
356	-@${MKNETID} -q -d ${DOMAIN} -p ${DIR}/passwd -g ${DIR}/group -h \
357	      ${DIR}/hosts -m ${DIR}/netid | \
358	  ${SORT} | ${MAKEDBM} - netid.byname; \
359	  ${TOUCH} ${.TARGET}; \
360	  ${ECHO} "updated netid"; \
361	  if [ ! ${NOPUSH} ]; then \
362		${YPPUSH} -d ${DOMAIN} netid.byname; \
363		${ECHO} "pushed netid"; \
364	  else \
365		: ; \
366	  fi
367
368
369ypservers.time: ${.CURDIR}/ypservers
370	-@${MAKEDBM} ypservers ypservers; \
371	${TOUCH} ${.TARGET}; \
372	${ECHO} "updated ypservers"; \
373	if [ ! ${NOPUSH} ]; then \
374		${YPPUSH} -d ${DOMAIN} ypservers; \
375		${ECHO} "pushed ypservers"; \
376	else \
377		: ; \
378	fi
379
380
381passwd: passwd.time
382group: group.time
383hosts: hosts.time
384ipnodes: ipnodes.time
385aliases: aliases.time
386amd.home: amd.home.time
387ethers: ethers.time
388netgroup: netgroup.time
389networks: networks.time
390rpc: rpc.time
391services: services.time
392protocols: protocols.time
393netid: netid.time
394ypservers: ypservers.time
395
396${DIR}/passwd:
397${DIR}/group:
398${DIR}/hosts:
399${DIR}/aliases:
400${AMDDIR}/amd.home:
401${DIR}/ethers:
402${DIR}/master.passwd:
403${DIR}/netgroup:
404${DIR}/networks:
405${DIR}/rpc:
406${DIR}/services:
407${DIR}/protocols:
408${DIR}/netid:
409