Index: head/usr.sbin/ypserv/Makefile.yp =================================================================== --- head/usr.sbin/ypserv/Makefile.yp (revision 286891) +++ head/usr.sbin/ypserv/Makefile.yp (revision 286892) @@ -1,657 +1,691 @@ # # Makefile for the NIS databases # # $FreeBSD$ # # This Makefile should only be run on the NIS master server of a domain. # All updated maps will be pushed to all NIS slave servers listed in the # /var/yp/ypservers file. Please make sure that the hostnames of all # NIS servers in your domain are listed in /var/yp/ypservers. # # This Makefile can be modified to support more NIS maps if desired. # # If this machine is an NIS master, reset this variable (NOPUSH=) # in Makefile.local so that changes to the NIS maps can be propagated to # the slave servers. (By default we assume that we are only serving a # small domain with only one server.) # NOPUSH = "True" # If this machine does not wish to generate a linux-style shadow map # from the master.passwd file, reset this variable (SHADOW=) in # Makefile.local. SHADOW = "True" # If you want to use a FreeBSD NIS server to serve non-FreeBSD clients # (i.e. clients who expect the password field in the passwd maps to be # valid) then set this variable (UNSECURE="True") in Makefile.local. # This will cause $YPDIR/passwd to be generated with valid password # fields. This is insecure: FreeBSD normally only serves the # master.passwd and shadow maps (which have real encrypted passwords # in them) to the superuser on other FreeBSD machines, but non-FreeBSD # clients (e.g. SunOS, Solaris (without NIS+), IRIX, HP-UX, etc...) # will only work properly in 'unsecure' mode. # #UNSECURE = "True" # The following line encodes the YP_INTERDOMAIN key into the hosts.byname # and hosts.byaddr maps so that ypserv(8) will do DNS lookups to resolve # hosts not in the current domain. Resetting this variable in # Makefile.local (B=) will disable the DNS lookups. B=-b # Normally, the master.passwd.* and shadow.* maps are guarded against access # from non-privileged users. By resetting S in Makefile.local (S=), the # YP_SECURE key will be removed from these maps, allowing anyone to access # them. S=-s # These are commands which this Makefile needs to properly rebuild the # NIS databases. Don't change these unless you have a good reason. Also # be sure not to place an @ in front of /usr/bin/awk: it isn't necessary # and it'll break everything in sight. # AWK = /usr/bin/awk RM = @/bin/rm -f MV = @/bin/mv -f RMV = /bin/mv -f MKDB = /usr/sbin/yp_mkdb DBLOAD = $(MKDB) -m `hostname` MKNETID = /usr/libexec/mknetid NEWALIASES = /usr/bin/newaliases YPPUSH = /usr/sbin/yppush .if !defined(UPDATE_DOMAIN) DOMAIN = `/bin/domainname` .else DOMAIN = $(UPDATE_DOMAIN) .endif REVNETGROUP = /usr/libexec/revnetgroup TMP = `echo $@.$$$$` # It is advisable to create a separate directory to contain the # source files used to generate your NIS maps. If you intend to # support multiple domains, something like /src/dir/$DOMAIN # would work well. YPSRCDIR = /etc .if !defined(YP_DIR) YPDIR = /var/yp .else YPDIR = $(YP_DIR) .endif YPMAPDIR = $(YPDIR)/$(DOMAIN) # These are the files from which the NIS databases are built. You may edit # these to taste in the event that you wish to keep your NIS source files # separate from your NIS server's actual configuration files. Note that the # NIS passwd and master.passwd files are stored in /var/yp: the server's # real password database is not used by default. However, you may use # the real /etc/passwd and /etc/master.passwd files by: # # # - invoking yppasswdd with `-t /etc/master.passwd' (yppasswdd will do a # 'pwd_mkdb' as needed if /etc/master.passwd is thus specified). # - Specifying the location of the master.passwd file using the # MASTER_PASSWD variable, i.e.: # # # make MASTER_PASSWD=/path/to/some/other/master.passwd # # - (optionally): editing this Makefile to change the default location. # # To add a user, edit $(YPDIR)/master.passwd and type 'make'. The raw # passwd file will be generated from the master.passwd file automagically. # ETHERS = $(YPSRCDIR)/ethers # ethernet addresses (for rarpd) +EUI64 = $(YPSRCDIR)/eui64 # eui64 addresses (for firewire) BOOTPARAMS= $(YPSRCDIR)/bootparams # for booting Sun boxes (bootparamd) HOSTS = $(YPSRCDIR)/hosts IPNODES = $(YPDIR)/ipnodes NETWORKS = $(YPSRCDIR)/networks PROTOCOLS = $(YPSRCDIR)/protocols RPC = $(YPSRCDIR)/rpc SERVICES = $(YPSRCDIR)/services SHELLS = $(YPSRCDIR)/shells GROUP = $(YPSRCDIR)/group ALIASES = $(YPSRCDIR)/mail/aliases NETGROUP = $(YPDIR)/netgroup PASSWD = $(YPDIR)/passwd .if !defined(MASTER_PASSWD) MASTER = $(YPDIR)/master.passwd .else MASTER = $(MASTER_PASSWD) .endif YPSERVERS = $(YPDIR)/ypservers # List of all NIS servers for a domain PUBLICKEY = $(YPSRCDIR)/publickey NETID = $(YPSRCDIR)/netid AMDHOST = $(YPSRCDIR)/amd.map target: @if [ ! -d $(DOMAIN) ]; then mkdir $(DOMAIN); fi; \ cd $(DOMAIN) ; echo "NIS Map update started on `date` for domain $(DOMAIN)" ; \ make -f ../Makefile all; echo "NIS Map update completed." # Read overrides. Note, the current directory will be /var/yp/ # when 'all' is built. .if exists(${YPDIR}/Makefile.local) .include "${YPDIR}/Makefile.local" .endif # List of maps that are always built. # If you want to omit some of them, feel free to comment # them out from this list. TARGETS= servers hosts networks protocols rpc services shells group #TARGETS+= aliases # Sanity checks: filter out targets we can't build -# Note that we don't build the ethers or boorparams maps by default -# since /etc/ethers and /etc/bootparams are not likely to be present +# Note that we don't build the ethers, eui64, or boorparams maps by default +# since /etc/ethers, /etc/eui64 and /etc/bootparams are not likely to be present # on all systems. .if exists($(ETHERS)) TARGETS+= ethers .else ETHERS= /dev/null .endif +.if exists($(EUI64)) +TARGETS+= eui64 +.else +EUI64= /dev/null +.endif + .if exists($(BOOTPARAMS)) TARGETS+= bootparams .else BOOTPARAMS= /dev/null .endif .if exists($(NETGROUP)) TARGETS+= netgrp .else NETGROUP= /dev/null .endif .if exists($(MASTER)) TARGETS+= passwd master.passwd netid .if ${SHADOW} == "\"True\"" TARGETS+= shadow .endif .else MASTER= /dev/null TARGETS+= nopass .endif .if exists($(PUBLICKEY)) TARGETS+= publickey .else PUBLICKEY= /dev/null .endif .if exists($(AMDHOST)) TARGETS+= amd.map .else AMDHOST= /dev/null .endif .if exists($(IPNODES)) TARGETS+= ipnodes .else IPNODES= /dev/null .endif all: $(TARGETS) ethers: ethers.byname ethers.byaddr +eui64: eui64.byname eui64.byid bootparam: bootparams hosts: hosts.byname hosts.byaddr ipnodes: ipnodes.byname ipnodes.byaddr networks: networks.byaddr networks.byname protocols: protocols.bynumber protocols.byname rpc: rpc.byname rpc.bynumber services: services.byname passwd: passwd.byname passwd.byuid shadow: shadow.byname shadow.byuid group: group.byname group.bygid netgrp: netgroup netid: netid.byname servers: ypservers publickey: publickey.byname aliases: mail.aliases master.passwd: master.passwd.byname master.passwd.byuid # # This is a special target used only when doing in-place updates with # rpc.yppasswdd. In this case, the maps will be updated by the rpc.yppasswdd # server and won't need to be remade. They will have to be pushed to the # slaves however. Calling this target implicitly insures that this will # happen. # pushpw: @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) master.passwd.byname ; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) master.passwd.byuid ; fi .if ${SHADOW} == "\"True\"" @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) shadow.byname ; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) shadow.byuid ; fi .endif @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) passwd.byname ; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) passwd.byuid ; fi pushmap: @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $(PUSHMAP) ; fi nopass: @echo "" @echo " ********WARNING********" @echo " Couldn't find the master.passwd source file. This file" @echo " is needed to generate the master.passwd and passwd maps." @echo " The default location is /var/yp/master.passwd. You should" @echo " edit /var/yp/Makefile and set the MASTER variable to point" @echo " to the source file you wish to use for building the passwd" @echo " maps, or else invoke make(1) in the following manner:" @echo "" @echo " make MASTER_PASSWD=/path/to/master.passwd" @echo "" mail.aliases: $(ALIASES) @echo "Updating $@..." @$(NEWALIASES) -oA$(ALIASES) @$(MKDB) -u $(ALIASES).db \ | $(DBLOAD) -i $(ALIASES) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi ypservers: $(YPSERVERS) @echo "Updating $@..." @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*") print $$0"\t"$$0 }' \ $(YPSERVERS) \ | $(DBLOAD) -i $(YPSERVERS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi ethers.byname: $(ETHERS) @echo "Updating $@..." .if ${ETHERS} == "/dev/null" @echo "Ethers source file not found -- skipping" .else @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$2"\t"$$0 }' $(ETHERS) | $(DBLOAD) -i $(ETHERS) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif ethers.byaddr: $(ETHERS) @echo "Updating $@..." .if ${ETHERS} == "/dev/null" @echo "Ethers source file not found -- skipping" .else @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1"\t"$$0 }' $(ETHERS) | $(DBLOAD) -i $(ETHERS) \ + -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ + @$(DBLOAD) -c + @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi + @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi +.endif + +eui64.byname: $(EUI64) + @echo "Updating $@..." +.if ${EUI64} == "/dev/null" + @echo "EUI64 source file not found -- skipping" +.else + @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ + print $$2"\t"$$0 }' $(EUI64) | $(DBLOAD) -i $(EUI64) \ + -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ + @$(DBLOAD) -c + @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi + @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi +.endif + +eui64.byid: $(EUI64) + @echo "Updating $@..." +.if ${EUI64} == "/dev/null" + @echo "EUI64 source file not found -- skipping" +.else + @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ + print $$1"\t"$$0 }' $(EUI64) | $(DBLOAD) -i $(EUI64) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif bootparams: $(BOOTPARAMS) @echo "Updating $@..." .if ${BOOTPARAMS} == "/dev/null" @echo "Bootparams source file not found -- skipping" .else @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$0 }' $(BOOTPARAMS) | $(DBLOAD) -i $(BOOTPARAMS) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif netgroup: $(NETGROUP) netgroup.byhost netgroup.byuser @echo "Updating $@..." .if ${NETGROUP} == "/dev/null" @echo "Netgroup source file not found -- skipping" .else @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$0 }' $(NETGROUP) | $(DBLOAD) -i $(NETGROUP) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif netgroup.byhost: $(NETGROUP) @echo "Updating $@..." .if ${NETGROUP} == "/dev/null" @echo "Netgroup source file not found -- skipping" .else @$(REVNETGROUP) -h -f $(NETGROUP) | \ $(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$0 }' | $(DBLOAD) -i $(NETGROUP) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif netgroup.byuser: $(NETGROUP) @echo "Updating $@..." .if ${NETGROUP} == "/dev/null" @echo "Netgroup source file not found -- skipping" .else @$(REVNETGROUP) -u -f $(NETGROUP) | \ $(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$0 }' | $(DBLOAD) -i $(NETGROUP) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif hosts.byname: $(HOSTS) @echo "Updating $@..." @$(AWK) '/^[0-9]/ { for (n=2; n<=NF && $$n !~ "^#.*"; n++) \ print $$n"\t"$$0 }' $(HOSTS) | $(DBLOAD) ${B} -i $(HOSTS) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi hosts.byaddr: $(HOSTS) @echo "Updating $@..." @$(AWK) '$$1 !~ "^#.*" { print $$1"\t"$$0 }' $(HOSTS) \ | $(DBLOAD) ${B} -i $(HOSTS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi ipnodes.byname: $(IPNODES) @echo "Updating $@..." .if ${IPNODES} == "/dev/null" @echo "Ipnodes source file not found -- skipping" .else @$(AWK) '/^[0-9a-fA-F:]/ { for (n=2; n<=NF && $$n !~ "^#.*"; n++) \ print $$n"\t"$$0 }' $(IPNODES) | $(DBLOAD) ${B} -i $(IPNODES) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif ipnodes.byaddr: $(IPNODES) @echo "Updating $@..." .if ${IPNODES} == "/dev/null" @echo "Ipnodes source file not found -- skipping" .else @$(AWK) '$$1 !~ "^#.*" { print $$1"\t"$$0 }' $(IPNODES) \ | $(DBLOAD) ${B} -i $(IPNODES) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif networks.byname: $(NETWORKS) @echo "Updating $@..." @$(AWK) \ '$$1 !~ "^#.*" { print $$1"\t"$$0; \ for (n=3; n<=NF && $$n !~ "^#.*"; n++) \ print $$n"\t"$$0 \ }' $(NETWORKS) \ | $(DBLOAD) -i $(NETWORKS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi networks.byaddr: $(NETWORKS) @echo "Updating $@..." @$(AWK) '$$1 !~ "^#.*" { print $$2"\t"$$0 }' $(NETWORKS) \ | $(DBLOAD) -i $(NETWORKS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi protocols.byname: $(PROTOCOLS) @echo "Updating $@..." @$(AWK) \ '$$1 !~ "^#.*" { print $$1"\t"$$0; \ for (n=3; n<=NF && $$n !~ "^#.*"; n++) \ print $$n"\t"$$0 \ }' $(PROTOCOLS) | $(DBLOAD) -i $(PROTOCOLS) \ -o $(YPMAPDIR)/$@ - $(TMP); $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi protocols.bynumber: $(PROTOCOLS) @echo "Updating $@..." @$(AWK) '$$1 !~ "^#.*" { print $$2"\t"$$0 }' $(PROTOCOLS) \ | $(DBLOAD) -i $(PROTOCOLS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi rpc.byname: $(RPC) @echo "Updating $@..." @$(AWK) \ '$$1 !~ "^#.*" { print $$1"\t"$$0; \ for (n=3; n<=NF && $$n !~ "^#.*"; n++) \ print $$n"\t"$$0 \ }' $(RPC) | $(DBLOAD) -i $(RPC) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi rpc.bynumber: $(RPC) @echo "Updating $@..." @$(AWK) '$$1 !~ "^#.*" { print $$2"\t"$$0 }' $(RPC) \ | $(DBLOAD) -i $(RPC) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi services.byname: $(SERVICES) @echo "Updating $@..." @$(AWK) \ '$$1 !~ "^#.*" { for (n=1; n<=NF && $$n !~ "^#.*"; n++) { \ if (split($$2, t, "/")) { \ printf("%s/%s", $$n, t[2]) }; \ print "\t"$$0; \ if (n == 1) n = 2; \ } ; print $$2"\t"$$0 ; \ }' $(SERVICES) \ | $(DBLOAD) -i $(SERVICES) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi shells: $(SHELLS) @echo "Updating $@..." @$(AWK) '{ if ($$1 != "" && $$1 !~ "^#.*") print $$0"\t"$$0 }' \ $(SHELLS) \ | $(DBLOAD) -i $(SHELLS) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi publickey.byname: $(PUBLICKEY) @echo "Updating $@..." .if ${PUBLICKEY} == "/dev/null" @echo "Publickey source file not found -- skipping" .else @$(AWK) '$$1 !~ "^#.*" { print $$1"\t"$$2 }' $(PUBLICKEY) \ | $(DBLOAD) -i $(PUBLICKEY) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif $(PASSWD): $(MASTER) @echo "Creating new $@ file from $(MASTER)..." @if [ ! $(UNSECURE) ]; then \ $(AWK) -F: '{if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1":*:"$$3":"$$4":"$$8":"$$9":"$$10}' $(MASTER) \ > $(PASSWD) ; \ else \ $(AWK) -F: '{if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1":"$$2":"$$3":"$$4":"$$8":"$$9":"$$10}' $(MASTER) \ > $(PASSWD) ; fi passwd.byname: $(PASSWD) @echo "Updating $@..." @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1"\t"$$0 }' $(PASSWD) \ | $(DBLOAD) -f -i $(PASSWD) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi passwd.byuid: $(PASSWD) @echo "Updating $@..." @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$3"\t"$$0 }' $(PASSWD) \ | $(DBLOAD) -f -i $(PASSWD) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi group.byname: $(GROUP) @echo "Updating $@..." @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1"\t"$$0 }' $(GROUP) \ | $(DBLOAD) -f -i $(GROUP) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi group.bygid: $(GROUP) @echo "Updating $@..." @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$3"\t"$$0 }' $(GROUP) \ | $(DBLOAD) -f -i $(GROUP) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi netid.byname: $(GROUP) $(PASSWD) $(HOSTS) @echo "Updating $@..." @$(MKNETID) -q -p $(PASSWD) -g $(GROUP) -h $(HOSTS) -n $(NETID) \ -d $(DOMAIN) | $(DBLOAD) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi master.passwd.byname: $(MASTER) @echo "Updating $@..." .if ${MASTER} == "/dev/null" @echo "Master.passwd source file not found -- skipping" .else @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1"\t"$$0 }' $(MASTER) \ | $(DBLOAD) ${S} -f -i $(MASTER) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif master.passwd.byuid: $(MASTER) @echo "Updating $@..." .if ${MASTER} == "/dev/null" @echo "Master.passwd source file not found -- skipping" .else @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$3"\t"$$0 }' $(MASTER) \ | $(DBLOAD) ${S} -f -i $(MASTER) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif shadow.byname: $(MASTER) @echo "Updating $@..." .if ${MASTER} == "/dev/null" @echo "Master.passwd source file not found -- skipping" .else @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$1"\t"$$1":"$$2":12000:0:99999:7:::" }' $(MASTER) \ | sed 's/\( [^:]*:\)\*:/\1!:/' \ | $(DBLOAD) ${S} -f -i $(PASSWD) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif shadow.byuid: $(MASTER) @echo "Updating $@..." .if ${MASTER} == "/dev/null" @echo "Master.passwd source file not found -- skipping" .else @$(AWK) -F: '{ if ($$1 != "" && $$1 !~ "^#.*" && $$1 != "+") \ print $$3"\t"$$1":"$$2":12000:0:99999:7:::" }' $(MASTER) \ | sed 's/\( [^:]*:\)\*:/\1!:/' \ | $(DBLOAD) ${S} -f -i $(PASSWD) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi .endif amd.map: $(AMDHOST) @echo "Updating $@..." @$(AWK) '$$1 !~ "^#.*" { \ for (i = 1; i <= NF; i++) \ if (i == NF) { \ if (substr($$i, length($$i), 1) == "\\") \ printf("%s", substr($$i, 1, length($$i) - 1)); \ else \ printf("%s\n", $$i); \ } \ else \ printf("%s ", $$i); \ }' $(AMDHOST) | \ $(DBLOAD) -i $(AMDHOST) -o $(YPMAPDIR)/$@ - $(TMP); \ $(RMV) $(TMP) $@ @$(DBLOAD) -c @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOMAIN) $@; fi @if [ ! $(NOPUSH) ]; then echo "Pushed $@ map." ; fi Index: head/usr.sbin/ypserv/ypinit.8 =================================================================== --- head/usr.sbin/ypserv/ypinit.8 (revision 286891) +++ head/usr.sbin/ypserv/ypinit.8 (revision 286892) @@ -1,198 +1,200 @@ .\" Copyright (c) 1997 .\" Bill Paul . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Bill Paul. .\" 4. Neither the name of the author nor the names of any co-contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF .\" THE POSSIBILITY OF SUCH DAMAGE. .\" .\" $FreeBSD$ .\" -.Dd November 10, 1997 +.Dd August 18, 2015 .Dt YPINIT 8 .Os .Sh NAME .Nm ypinit .Nd build and install NIS databases .Sh SYNOPSIS .Nm .Fl m .Op Ar domainname .Nm .Fl s .Ar master_server .Op Ar domainname .Nm .Fl u .Op Ar domainname .Sh DESCRIPTION The .Nm utility is a script which sets up databases on a Network Information Service (NIS) master or slave server. .Pp On a master server, .Nm creates the .Pa /var/yp/$DOMAINNAME directory, the .Pa /var/yp/ypservers file, and calls .Pa /var/yp/Makefile to create and populate an initial set of NIS maps. The maps are created from local source files using the .Xr yp_mkdb 8 utility. The utility will prompt the user for a list of servers that support the specified domain; this list is used to populate the ypservers map. .Pp On a slave server, .Nm creates the .Pa /var/yp/$DOMAINNAME , populates it with copies of the NIS maps from the master. The maps are obtained from the master using the .Xr ypxfr 8 utility. The .Nm utility obtains the list of maps to transfer in one of two ways: if the system is configured as an NIS client and is bound to the master server, .Nm is able to use the .Xr ypwhich 1 utility to obtain a list of maps exported by the master server. If the system is not configured as a client of the NIS master, .Nm uses a hardcoded list of maps, some of which may or may not actually exist on the master. The system administrator can edit the .Nm script and modify the map list if necessary. Otherwise, individual maps can be transferred manually from the master using .Xr ypxfr 8 . .Sh OPTIONS The .Nm utility supports the following options: .Bl -tag -width indent .It Fl m Op Ar domainname Set up a master server. By default, .Nm sets up a server for the system default domain. The user can override this default by specifying .Ar domainname explicitly. Maps are constructed from scratch using local files as templates using the .Xr yp_mkdb 8 utility. .It Fl s Ar master_server Op Ar domainname Set up a slave server using .Ar master_name as the master. Maps are copied from .Ar master_server to the slave using .Xr ypxfr 8 . By default, .Nm sets up a server for the system default domain. The user can override this default by specifying .Ar domainname explicitly. .It Fl u Op Ar domainname Update the ypservers map on the master server. When a new slave server is added to a domain, its hostname must be added to the ypservers map so that .Xr yppush 8 can propagate updates on the master to all of the slaves. .El .Sh FILES .Bl -tag -width /var/yp/master.passwd -compact .It Pa /etc/bootparams Bootparams source file .It Pa /etc/ethers Ethers data source file +.It Pa /etc/eui64 +EUI64 data source file .It Pa /etc/group Group source file .It Pa /etc/hosts Hostname/IP address source file .It Pa /etc/netid RPC netid source file .It Pa /etc/networks Networks source file .It Pa /etc/protocols Protocols source file .It Pa /etc/publickey RPC public key/secret key source file .It Pa /etc/services Services data source file .It Pa /etc/shells Shells source file .It Pa /var/yp/master.passwd Passwd database source file .It Pa /var/yp/netgroup Netgroup data source file .It Pa /var/yp/ypservers Ypservers source file (generated by .Nm ) .El .Sh SEE ALSO .Xr mknetid 8 , .Xr revnetgroup 8 , .Xr yp 8 , .Xr yp_mkdb 8 , .Xr yppush 8 , .Xr ypserv 8 , .Xr ypxfr 8 .Sh HISTORY This version of .Nm is based on the .Nm script in .Ox . It first appeared in .Fx 3.0 . .Sh AUTHORS .An -nosplit The original script was written by .An Mats O Jansson Aq Mt moj@stacken.kth.se . It was modified for .Fx by .An Bill Paul Aq Mt wpaul@ctr.columbia.edu . Index: head/usr.sbin/ypserv/ypinit.sh =================================================================== --- head/usr.sbin/ypserv/ypinit.sh (revision 286891) +++ head/usr.sbin/ypserv/ypinit.sh (revision 286892) @@ -1,386 +1,387 @@ #!/bin/sh # $FreeBSD$ # # ypinit.sh - setup a master or slave server. # (Taken from OpenBSD and modified for FreeBSD.) # DOMAINNAME=/bin/domainname HOSTNAME=/bin/hostname YPWHICH=/usr/bin/ypwhich YPXFR=/usr/libexec/ypxfr YP_DIR=/var/yp MAKEDBM=/usr/sbin/yp_mkdb MAPLIST="master.passwd.byname master.passwd.byuid passwd.byname passwd.byuid \ group.byname group.bygid hosts.byname hosts.byaddr services.byname \ rpc.byname rpc.bynumber networks.byname networks.byaddr netgroup \ netgroup.byuser netgroup.byhost netid.byname publickey.byname \ - bootparams ethers.byname ethers.byaddr amd.host mail.aliases \ - ypservers protocols.byname protocols.bynumber netmasks.byaddr" + bootparams ethers.byname ethers.byaddr eui64.byname eui64.byid \ + amd.host mail.aliases ypservers protocols.byname protocols.bynumber \ + netmasks.byaddr" ERROR_EXISTS="NO" umask 077 #set -xv ERROR=USAGE # assume usage error if [ $# -eq 1 ] then if [ $1 = "-m" ] # ypinit -m then DOMAIN=`${DOMAINNAME}` SERVERTYPE=MASTER ERROR= fi if [ $1 = "-u" ] # ypinit -u then DOMAIN=`${DOMAINNAME}` SERVERTYPE=UPDATE ERROR= fi fi if [ $# -eq 2 ] then if [ $1 = "-m" ] # ypinit -m domainname then DOMAIN=${2} SERVERTYPE=MASTER ERROR= fi if [ $1 = "-s" ] # ypinit -s master_server then DOMAIN=`${DOMAINNAME}` SERVERTYPE=SLAVE MASTER=${2} ERROR= fi if [ $1 = "-u" ] # ypinit -u domainname then DOMAIN=${2} SERVERTYPE=UPDATE ERROR= fi fi if [ $# -eq 3 ] then if [ $1 = "-s" ] # ypinit -s master_server domainname then DOMAIN=${3} SERVERTYPE=SLAVE MASTER=${2} ERROR= fi fi if [ "${ERROR}" = "USAGE" ]; then cat << \__usage 1>&2 usage: ypinit -m [domainname] ypinit -s master_server [domainname] ypinit -u [domainname] The `-m' flag builds a master YP server, and the `-s' flag builds a slave YP server. When building a slave YP server, `master_server' must be an existing, reachable YP server. The `-u' is for updating the ypservers map on a master server. __usage exit 1 fi # Check if domainname is set, don't accept an empty domainname if [ -z "${DOMAIN}" ]; then cat << \__no_domain 1>&2 The local host's YP domain name has not been set. Please set it with the domainname(1) command or pass the domain as an argument to ypinit(8). __no_domain exit 1 fi # Check if hostname is set, don't accept an empty hostname HOST=`${HOSTNAME}` if [ -z "${HOST}" ]; then cat << \__no_hostname 1>&2 The local host's hostname has not been set. Please set it with the hostname(1) command. __no_hostname exit 1 fi # Check if we have contact with master. # If we can't list the maps on the master, then we fake it with a # hard-coded list of maps. The FreeBSD ypxfr command will work even # if ypbind isn't running or if we are bound to ourselves instead of # the master (the slave should be bound to itself, but since it has # no maps yet, we can't get a maplist from it). if [ "${SERVERTYPE}" = "SLAVE" ]; then COUNT=`${YPWHICH} -d ${DOMAIN} -m 2>/dev/null | grep -i ${MASTER} | wc -l | tr -d " "` if [ "$COUNT" = "0" ] then echo "Can't enumerate maps from ${MASTER}. Please check that it is running." 1>&2 echo "Note: using hardcoded maplist for map transfers." 1>&2 YPMAPLIST=${MAPLIST} else YPMAPLIST=`${YPWHICH} -d ${DOMAIN} -m | cut -d\ -f1` fi echo "" 1>&2 fi # Check if user is root ID=`id -u` if [ "${ID}" != "0" ]; then echo "You have to be the superuser to run this. Please login as root." 1>&2 exit 1 fi # Check if the YP directory exists. if [ ! -d ${YP_DIR} -o -f ${YP_DIR} ] then echo "The directory ${YP_DIR} doesn't exist. Restore it from the distribution." 1>&2 exit 1 fi echo -n "Server Type: ${SERVERTYPE} Domain: ${DOMAIN}" if [ "${SERVERTYPE}" = "SLAVE" ]; then echo -n " Master: ${MASTER}" fi echo "" if [ "${SERVERTYPE}" != "UPDATE" ]; then cat << \__notice1 Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. __notice1 echo -n "Do you want this procedure to quit on non-fatal errors? [y/n: n] " read DOEXIT case ${DOEXIT} in y*|Y*) ERROR_EXIT="YES" ;; *) ERROR_EXIT="NO" echo "" echo "Ok, please remember to go back and redo manually whatever fails." echo "If you don't, something might not work. " ;; esac if [ -d "${YP_DIR}/${DOMAIN}" ]; then echo "" echo -n "Can we destroy the existing ${YP_DIR}/${DOMAIN} and its contents? [y/n: n] " read KILL ERROR= case ${KILL} in y*|Y*) ERROR="DELETE" ;; *) ERROR= ;; esac if [ "${ERROR}" = "DELETE" ]; then if ! rm -rf ${YP_DIR}/${DOMAIN}; then echo "Can't clean up old directory ${YP_DIR}/${DOMAIN}." 1>&2 exit 1 fi else echo "OK, please clean it up by hand and start again. Bye" exit 0 fi fi if ! mkdir "${YP_DIR}/${DOMAIN}"; then echo "Can't make new directory ${YP_DIR}/${DOMAIN}." 1>&2 exit 1 fi fi if [ "${SERVERTYPE}" = "MASTER" ]; then if [ ! -f ${YP_DIR}/Makefile ] then if [ ! -f ${YP_DIR}/Makefile.dist ] then echo "Can't find ${YP_DIR}/Makefile.dist. " 1>&2 exit 1 fi cp ${YP_DIR}/Makefile.dist ${YP_DIR}/Makefile fi fi if [ "${SERVERTYPE}" = "SLAVE" ]; then echo "There will be no further questions. The remainder of the procedure" echo "should take a few minutes, to copy the databases from ${MASTER}." for MAP in ${YPMAPLIST} do echo "Transfering ${MAP}..." if ! ${YPXFR} -p ${YP_DIR} -h ${MASTER} -c -d ${DOMAIN} ${MAP}; then echo "Can't transfer map ${MAP}." 1>&2 ERROR_EXISTS="YES" if [ "${ERROR_EXIT}" = "YES" ]; then exit 1 fi fi done echo "" if [ "${ERROR_EXISTS}" = "YES" ]; then echo "${HOST} has been setup as an YP slave server with errors. " 1>&2 echo "Please remember fix any problem that occurred." 1>&2 else echo "${HOST} has been setup as an YP slave server without any errors. " fi echo "Don't forget to update map ypservers on ${MASTER}." exit 0 fi LIST_OK="NO" while [ "${LIST_OK}" = "NO" ]; do if [ "${SERVERTYPE}" = "MASTER" ]; then HOST_LIST="${HOST}" echo "" echo "At this point, we have to construct a list of this domains YP servers." echo "${HOST} is already known as master server." echo "Please continue to add any slave servers, one per line. When you are" echo "done with the list, type a ." echo " master server : ${HOST}" fi if [ "${SERVERTYPE}" = "UPDATE" ]; then HOST_LIST="${HOST}" NEW_LIST="" MASTER_NAME="" SHORT_HOST=`echo ${HOST} | cut -d. -f1` if [ -f ${YP_DIR}/${DOMAIN}/ypservers ]; then for srv in `${MAKEDBM} -u ${YP_DIR}/${DOMAIN}/ypservers | grep -v "^YP" | tr "\t" " " | cut -d\ -f1`; do short_srv=`echo ${srv} | cut -d. -f1` if [ "${SHORT_HOST}" != "${short_srv}" ] then if [ "${NEW_LIST}" = "" ]; then NEW_LIST="${srv}" else NEW_LIST="${NEW_LIST} ${srv}" fi fi done; MASTER_NAME=`${MAKEDBM} -u ${YP_DIR}/${DOMAIN}/ypservers | grep "^YP_MASTER_NAME" | tr "\t" " " | cut -d\ -f2` fi echo "" echo "Update the list of hosts running YP servers in domain ${DOMAIN}." echo "Master for this domain is ${MASTER_NAME}." echo "" echo "First verify old servers, type \\\\ to remove a server." echo "Then add new servers, one per line. When done type a ." echo "" echo " master server : ${HOST}" if [ "${NEW_LIST}" != "" ]; then for node in $NEW_LIST; do echo -n " verify host : [${node}] " read verify if [ "${verify}" != "\\" ]; then HOST_LIST="${HOST_LIST} ${node}" fi done; fi fi echo -n " next host to add: " while read h do echo -n " next host to add: " HOST_LIST="${HOST_LIST} ${h}" done echo "" echo "The current list of NIS servers looks like this:" echo "" for h in `echo ${HOST_LIST}`; do echo ${h} done echo "" echo -n "Is this correct? [y/n: y] " read hlist_ok case $hlist_ok in n*) echo "Let's try the whole thing again...";; N*) echo "Let's try the whole thing again...";; *) LIST_OK="YES";; esac done echo "Building ${YP_DIR}/${DOMAIN}/ypservers..." rm -f ${YP_DIR}/ypservers touch -f ${YP_DIR}/ypservers rm -f ${YP_DIR}/${DOMAIN}/ypservers for host in ${HOST_LIST}; do echo "${host} ${host}" >> ${YP_DIR}/ypservers echo "${host} ${host}" done | ${MAKEDBM} - ${YP_DIR}/${DOMAIN}/ypservers if [ $? -ne 0 ]; then echo "" 1>&2 echo "Couldn't build yp data base ${YP_DIR}/${DOMAIN}/ypservers." 1>&2 ERROR_EXISTS="YES" if [ "${ERROR_EXIT}" = "YES" ]; then exit 1 fi fi if [ "${SERVERTYPE}" = "MASTER" ]; then CUR_PWD=`pwd` cd ${YP_DIR} echo "Running ${YP_DIR}/Makefile..." if ! make NOPUSH=True UPDATE_DOMAIN=${DOMAIN} YP_DIR=${YP_DIR}; then echo "" 1>&2 echo "Error running Makefile." 1>&2 ERROR_EXISTS="YES" if [ "${ERROR_EXIT}" = "YES" ]; then exit 1 fi fi cd ${CUR_PWD} echo "" if [ "${ERROR_EXISTS}" = "YES" ]; then echo "${HOST} has been setup as an YP master server with errors. " 1>&2 echo "Please remember fix any problem that occurred." 1>&2 else echo "${HOST} has been setup as an YP master server without any errors. " fi fi