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