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