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