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