1 #!/bin/sh 2 # 3 # $NetBSD: ypinit.sh,v 1.4 1997/10/08 14:09:19 lukem Exp $ 4 # 5 # ypinit.sh - setup a master or slave YP server 6 # 7 # Originally written by Mats O Jansson <moj (at] stacken.kth.se> 8 # Modified by Jason R. Thorpe <thorpej (at] NetBSD.ORG> 9 # 10 11 DOMAINNAME=/bin/domainname 12 HOSTNAME=/bin/hostname 13 YPWHICH=/usr/bin/ypwhich 14 YPXFR=/usr/sbin/ypxfr 15 MAKEDBM=/usr/sbin/makedbm 16 YP_DIR=/var/yp 17 18 ERROR=USAGE # assume usage error 19 20 umask 077 # protect created directories 21 22 if [ $# -eq 1 ]; then 23 if [ $1 = "-m" ]; then # ypinit -m 24 DOMAIN=`${DOMAINNAME}` 25 SERVERTYPE=MASTER 26 ERROR= 27 fi 28 fi 29 30 if [ $# -eq 2 ]; then 31 if [ $1 = "-m" ]; then # ypinit -m domainname 32 DOMAIN=${2} 33 SERVERTYPE=MASTER 34 ERROR= 35 fi 36 if [ $1 = "-s" ]; then # ypinit -s master_server 37 DOMAIN=`${DOMAINNAME}` 38 SERVERTYPE=SLAVE 39 MASTER=${2} 40 ERROR= 41 fi 42 fi 43 44 if [ $# -eq 3 ]; then 45 if [ $1 = "-s" ]; then # ypinit -s master_server domainname 46 DOMAIN=${3} 47 SERVERTYPE=SLAVE 48 MASTER=${2} 49 ERROR= 50 fi 51 fi 52 53 if [ X${ERROR} = X"USAGE" ]; then 54 cat << \__usage 1>&2 55 usage: ypinit -m [domainname] 56 ypinit -s master_server [domainname] 57 58 The `-m' flag builds a master YP server, and the `-s' flag builds 59 a slave YP server. When building a slave YP server, `master_server' 60 must be an existing, reachable YP server. 61 __usage 62 63 exit 1 64 fi 65 66 # Check if domainname is set, don't accept an empty domainname 67 if [ X${DOMAIN} = "X" ]; then 68 cat << \__no_domain 1>&2 69 The local host's YP domain name has not been set. Please set it with 70 the domainname(8) command or pass the domain as an argument to ypinit(8). 71 __no_domain 72 73 exit 1 74 fi 75 76 # Check if hostname is set, don't accept an empty hostname 77 HOST=`${HOSTNAME}` 78 if [ X${HOST} = "X" ]; then 79 cat << \__no_hostname 1>&2 80 The local host's hostname has not been set. Please set it with the 81 hostname(8) command. 82 __no_hostname 83 84 exit 1 85 fi 86 87 # Check if the YP directory exists. 88 if [ ! -d ${YP_DIR} -o -f ${YP_DIR} ] 89 then 90 echo "The directory ${YP_DIR} does not exist. Restore it from the distribution." 1>&2 91 exit 1 92 fi 93 94 echo "Server type: ${SERVERTYPE}" 95 echo "Domain: ${DOMAIN}" 96 if [ X${SERVERTYPE} = X"SLAVE" ]; then 97 echo "Master: ${MASTER}" 98 fi 99 echo "" 100 cat << \__notice1 101 102 Installing the YP database will require that you answer a few questions. 103 Questions will all be asked at the beginning of the procedure. 104 105 __notice1 106 107 if [ -d "${YP_DIR}/${DOMAIN}" ]; then 108 echo -n "Can we destroy the existing ${YP_DIR}/${DOMAIN} and its contents? [y/n: n] " 109 read KILL 110 111 ERROR= 112 case ${KILL} in 113 y*|Y*) 114 ERROR="DELETE" 115 ;; 116 117 *) 118 ERROR= 119 ;; 120 esac 121 122 if [ X${ERROR} = X"DELETE" ]; then 123 if ! rm -rf ${YP_DIR}/${DOMAIN}; then 124 echo "Can't clean up old directory ${YP_DIR}/${DOMAIN}." 1>&2 125 exit 1 126 fi 127 else 128 echo "OK, please clean it up by hand and start again." 129 exit 0 130 fi 131 fi 132 133 if ! mkdir "${YP_DIR}/${DOMAIN}"; then 134 echo "Can't make new directory ${YP_DIR}/${DOMAIN}." 1>&2 135 exit 1 136 fi 137 138 if [ X${SERVERTYPE} = X"MASTER" ]; then 139 if [ ! -f ${YP_DIR}/Makefile ]; then 140 if [ ! -f ${YP_DIR}/Makefile.main ]; then 141 echo "Can't find ${YP_DIR}/Makefile.main. " 1>&2 142 exit 1 143 fi 144 cp ${YP_DIR}/Makefile.main ${YP_DIR}/Makefile 145 fi 146 147 SUBDIR=`grep "^SUBDIR=" ${YP_DIR}/Makefile` 148 149 if [ X"${SUBDIR}" = "X" ]; then 150 echo "Can't find line starting with 'SUBDIR=' in ${YP_DIR}/Makefile. " 1>&2 151 exit 1 152 fi 153 154 NEWSUBDIR="SUBDIR=" 155 for DIR in `echo ${SUBDIR} | cut -c8-255`; do 156 if [ ${DIR} != ${DOMAIN} ]; then 157 NEWSUBDIR="${NEWSUBDIR} ${DIR}" 158 fi 159 done 160 NEWSUBDIR="${NEWSUBDIR} ${DOMAIN}" 161 162 if [ -f ${YP_DIR}/Makefile.tmp ]; then 163 rm ${YP_DIR}/Makefile.tmp 164 fi 165 166 mv ${YP_DIR}/Makefile ${YP_DIR}/Makefile.tmp 167 sed -e "s/^${SUBDIR}/${NEWSUBDIR}/" ${YP_DIR}/Makefile.tmp > \ 168 ${YP_DIR}/Makefile 169 rm ${YP_DIR}/Makefile.tmp 170 171 if [ ! -f ${YP_DIR}/Makefile.yp ]; then 172 echo "Can't find ${YP_DIR}/Makefile.yp." 1>&2 173 exit 1 174 fi 175 176 cp ${YP_DIR}/Makefile.yp ${YP_DIR}/${DOMAIN}/Makefile 177 178 # Create an empty `ypservers' map so that yppush won't 179 # lose when we run "make". 180 ( 181 cd ${YP_DIR}/${DOMAIN} 182 touch ypservers 183 cat ypservers | ${MAKEDBM} - ypservers 184 ) 185 186 echo "Done. Be sure to run \`make' in ${YP_DIR}." 187 fi 188 189 if [ X${SERVERTYPE} = X"SLAVE" ]; then 190 echo "" 191 192 for MAP in `${YPWHICH} -d ${DOMAIN} -m | cut -d\ -f1`; do 193 echo "Transfering ${MAP}..." 194 if ! ${YPXFR} -h ${MASTER} -c -d ${DOMAIN} ${MAP}; then 195 echo "Can't transfer map ${MAP}." 1>&2 196 exit 1 197 fi 198 done 199 200 echo "" 201 echo "Don't forget to update the \`ypservers' on ${MASTER}." 202 exit 0 203 fi 204