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