Makefile.yp revision 1.13
1# $NetBSD: Makefile.yp,v 1.13 2000/10/11 16:51:55 itojun 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# 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 ${CAT} ${.ALLSRC} | ${SORT} | ${MAKEDBM} - netgroup; \ 275 ${CAT} ${.ALLSRC} | ${REVNETGROUP} -u -f - | \ 276 ${SORT} | ${MAKEDBM} - netgroup.byuser; \ 277 ${CAT} ${.ALLSRC} | ${REVNETGROUP} -h -f - | \ 278 ${SORT} | ${MAKEDBM} - netgroup.byhost; \ 279 ${TOUCH} ${.TARGET}; \ 280 ${ECHO} "updated netgroup"; \ 281 if [ ! ${NOPUSH} ]; then \ 282 ${YPPUSH} -d ${DOMAIN} netgroup; \ 283 ${YPPUSH} -d ${DOMAIN} netgroup.byuser; \ 284 ${YPPUSH} -d ${DOMAIN} netgroup.byhost; \ 285 ${ECHO} "pushed netgroup"; \ 286 else \ 287 : ; \ 288 fi \ 289 else \ 290 ${ECHO} "couldn't find ${.ALLSRC}"; \ 291 fi 292 293 294networks.time: ${DIR}/networks 295 -@if [ -f ${.ALLSRC} ]; then \ 296 ${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \ 297 ${AWK} '{print $$1, $$0; \ 298 for (i = 3;i <= NF;i++) print $$i,$$0}' | \ 299 ${SORT} | ${MAKEDBM} - networks.byname; \ 300 ${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \ 301 ${.ALLSRC} | \ 302 ${SORT} | ${MAKEDBM} - networks.byaddr; \ 303 ${TOUCH} ${.TARGET}; \ 304 ${ECHO} "updated networks"; \ 305 if [ ! ${NOPUSH} ]; then \ 306 ${YPPUSH} -d ${DOMAIN} networks.byname; \ 307 ${YPPUSH} -d ${DOMAIN} networks.byaddr; \ 308 ${ECHO} "pushed networks"; \ 309 else \ 310 : ; \ 311 fi \ 312 else \ 313 ${ECHO} "couldn't find ${.ALLSRC}"; \ 314 fi 315 316 317protocols.time: ${DIR}/protocols 318 -@if [ -f ${.ALLSRC} ]; then \ 319 ${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \ 320 ${.ALLSRC} | \ 321 ${SORT} | ${MAKEDBM} - protocols.bynumber; \ 322 ${SED} -e "/^#/d" -e s/#.*$$// ${.ALLSRC} | \ 323 ${AWK} '{print $$1, $$0; \ 324 for (i = 3;i <= NF;i++) print $$i,$$0}' | \ 325 ${SORT} | ${MAKEDBM} - protocols.byname; \ 326 ${TOUCH} ${.TARGET}; \ 327 ${ECHO} "updated protocols"; \ 328 if [ ! ${NOPUSH} ]; then \ 329 ${YPPUSH} -d ${DOMAIN} protocols.bynumber; \ 330 ${YPPUSH} -d ${DOMAIN} protocols.byname; \ 331 ${ECHO} "pushed protocols"; \ 332 else \ 333 : ; \ 334 fi \ 335 else \ 336 ${ECHO} "couldn't find ${.ALLSRC}"; \ 337 fi 338 339 340rpc.time: ${DIR}/rpc 341 -@if [ -f ${.ALLSRC} ]; then \ 342 ${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \ 343 ${.ALLSRC} | \ 344 ${SORT} | ${MAKEDBM} - rpc.bynumber; \ 345 ${TOUCH} ${.TARGET}; \ 346 ${ECHO} "updated rpc"; \ 347 if [ ! ${NOPUSH} ]; then \ 348 ${YPPUSH} -d ${DOMAIN} rpc.bynumber; \ 349 ${ECHO} "pushed rpc"; \ 350 else \ 351 : ; \ 352 fi \ 353 else \ 354 ${ECHO} "couldn't find ${.ALLSRC}"; \ 355 fi 356 357 358services.time: ${DIR}/services 359 -@if [ -f ${.ALLSRC} ]; then \ 360 ${AWK} 'BEGIN { OFS="\t"; } $$1 !~ /^#/ { print $$2, $$0 }' \ 361 ${.ALLSRC} | \ 362 ${SORT} | ${MAKEDBM} - services.byname; \ 363 ${TOUCH} ${.TARGET}; \ 364 ${ECHO} "updated services"; \ 365 if [ ! ${NOPUSH} ]; then \ 366 ${YPPUSH} -d ${DOMAIN} services.byname; \ 367 ${ECHO} "pushed services"; \ 368 else \ 369 : ; \ 370 fi \ 371 else \ 372 ${ECHO} "couldn't find ${.ALLSRC}"; \ 373 fi 374 375 376netid.time: ${DIR}/passwd ${DIR}/group ${DIR}/hosts ${DIR}/netid 377 -@${MKNETID} -q -d ${DOMAIN} -p ${DIR}/passwd -g ${DIR}/group -h \ 378 ${DIR}/hosts -m ${DIR}/netid | \ 379 ${SORT} | ${MAKEDBM} - netid.byname; \ 380 ${TOUCH} ${.TARGET}; \ 381 ${ECHO} "updated netid"; \ 382 if [ ! ${NOPUSH} ]; then \ 383 ${YPPUSH} -d ${DOMAIN} netid.byname; \ 384 ${ECHO} "pushed netid"; \ 385 else \ 386 : ; \ 387 fi 388 389 390ypservers.time: ${.CURDIR}/ypservers 391 -@${MAKEDBM} ypservers ypservers; \ 392 ${TOUCH} ${.TARGET}; \ 393 ${ECHO} "updated ypservers"; \ 394 if [ ! ${NOPUSH} ]; then \ 395 ${YPPUSH} -d ${DOMAIN} ypservers; \ 396 ${ECHO} "pushed ypservers"; \ 397 else \ 398 : ; \ 399 fi 400 401 402passwd: passwd.time 403group: group.time 404hosts: hosts.time 405ipnodes: ipnodes.time 406aliases: aliases.time 407amd.home: amd.home.time 408ethers: ethers.time 409netgroup: netgroup.time 410networks: networks.time 411rpc: rpc.time 412services: services.time 413shadow: shadow.time 414protocols: protocols.time 415netid: netid.time 416ypservers: ypservers.time 417 418${DIR}/passwd: 419${DIR}/group: 420${DIR}/hosts: 421${DIR}/mail/aliases: 422${AMDDIR}/amd.home: 423${DIR}/ethers: 424${DIR}/master.passwd: 425${DIR}/netgroup: 426${DIR}/networks: 427${DIR}/rpc: 428${DIR}/services: 429${DIR}/protocols: 430${DIR}/netid: 431