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