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