1 #!/usr/bin/ksh
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License, Version 1.0 only
   7 # (the "License").  You may not use this file except in compliance
   8 # with the License.
   9 #
  10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  11 # or http://www.opensolaris.org/os/licensing.
  12 # See the License for the specific language governing permissions
  13 # and limitations under the License.
  14 #
  15 # When distributing Covered Code, include this CDDL HEADER in each
  16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  17 # If applicable, add the following below this CDDL HEADER, with the
  18 # fields enclosed by brackets "[]" replaced with your own identifying
  19 # information: Portions Copyright [yyyy] [name of copyright owner]
  20 #
  21 # CDDL HEADER END
  22 #
  23 #
  24 # Copyright (c) 2001 by Sun Microsystems, Inc.
  25 # All rights reserved.
  26 #
  27 
  28 #
  29 # Source the utilities.
  30 #
  31 DIRNAME=`dirname $0`
  32 . ${DIRNAME}/utilities.san
  33 
  34 #
  35 # Process the input arguments.
  36 #
  37 VALIDOPTS=dr:p:
  38 process_args $@
  39 
  40 #
  41 # In case the tester wants to see script output, allow them
  42 # to run in debug mode.
  43 #
  44 TESTNAME=`basename $0`
  45 if [ ! -z "${DEBUG}" ]
  46 then
  47     OUTFILE=/tmp/${TESTNAME}.$$
  48     echo "Output from test: ${TESTNAME}" >${OUTFILE}
  49     echo >>${OUTFILE}
  50     echo "debug output can be found at ${OUTFILE}"
  51 else
  52     OUTFILE=/dev/null
  53 fi
  54 
  55 #
  56 # Set DNSSERV and DNSDMAIN if server has a resolv.conf. Return 0 if it does,
  57 # nonzero otherwise.
  58 #
  59 get_dns_parms()
  60 {
  61     if [ ! -f /etc/resolv.conf ]
  62     then
  63         return 1
  64     fi
  65     
  66     nsr=0
  67     dmn=0
  68     DNSRV=""
  69     DNAME=""
  70     for item in `cat /etc/resolv.conf`
  71     do
  72         if [ "${item}" = "nameserver" ]
  73         then
  74             nsr=1
  75             continue
  76         fi
  77         if [ "${item}" = "domain" ]
  78         then
  79             dmn=1
  80             continue
  81         fi
  82         if [ ${nsr} -eq 1 ]
  83         then
  84             if [ -z "${DNSRV}" ]
  85             then
  86                 DNSRV=${item}
  87             else
  88                 DNSRV="${DNSRV} ${item}"
  89             fi
  90             nsr=0
  91             continue
  92         fi
  93         if [ ${dmn} -eq 1 ]
  94         then
  95             DNAME="${item}"
  96             dmn=0
  97             continue
  98         fi
  99     done
 100     if [ ! -z "${DNSRV}" ]
 101     then
 102         DNSSERV="DNSserv=${DNSRV}"
 103     fi
 104     if [ ! -z "${DNAME}" ]
 105     then
 106         DNSDMAIN="DNSdmain=\"${DNAME}\""
 107     fi
 108     if [ ! -z "${DNSSERV}" -o ! -z "${DNSDMAIN}" ]
 109     then
 110         return 0
 111     fi
 112     return 1
 113 }
 114 
 115 #
 116 # Set variables.
 117 #
 118 SRVNAME=`uname -n`
 119 SRVADDR=`get_server_ip`
 120 DHCP_DEFAULTS=/etc/inet/dhcpsvc.conf
 121 
 122 #
 123 # If the DHCP server is running, kill it.
 124 #
 125 pkill -x -u 0 in.dhcpd
 126 
 127 #
 128 # Make sure to clean up before we configure.
 129 #
 130 /usr/sbin/dhcpconfig -U -f -x  >>${OUTFILE} 2>&1
 131 rm -f ${DHCP_DEFAULTS} >>${OUTFILE} 2>&1
 132 
 133 #
 134 # Config.
 135 #
 136 /usr/sbin/dhcpconfig -D -r ${DHCPRSRC} -p ${DHCPPATH} >>${OUTFILE} 2>&1
 137 RET=$?
 138 if [ "${RET}" != "0" ]
 139 then
 140     echo "Error configuring DHCP = ${RET}"
 141     echo "${TESTNAME} - Test failed!"
 142     exit 1
 143 fi
 144 
 145 #
 146 # Verify that the dhcp defaults file was created.
 147 #
 148 if [ ! -f ${DHCP_DEFAULTS} ]
 149 then
 150     echo "${DHCP_DEFAULTS} not created."
 151     echo "${TESTNAME} - Test failed!"
 152     exit 1
 153 fi
 154 
 155 #
 156 # Verify that the run mode was defined in the defaults file
 157 #
 158 DEFLINE=`grep "RUN_MODE=server" ${DHCP_DEFAULTS}`
 159 if [ -z "${DEFLINE}" ]
 160 then
 161     echo "RUN_MODE not set correctly in ${DHCP_DEFAULTS}"
 162     echo "${TESTNAME} - Test failed!"
 163     exit 1
 164 fi
 165 
 166 #
 167 # Verify that the datastore resource was defined in the defaults file
 168 #
 169 DEFLINE=`grep "RESOURCE=${DHCPRSRC}" ${DHCP_DEFAULTS}`
 170 if [ -z "${DEFLINE}" ]
 171 then
 172     echo "RESOURCE not set correctly in ${DHCP_DEFAULTS}"
 173     echo "${TESTNAME} - Test failed!"
 174     exit 1
 175 fi
 176 
 177 #
 178 # Verify that the datastore path was defined in the defaults file
 179 #
 180 DEFLINE=`grep "PATH=${DHCPPATH}" ${DHCP_DEFAULTS}`
 181 if [ -z "${DEFLINE}" ]
 182 then
 183     echo "PATH not set correctly in ${DHCP_DEFAULTS}"
 184     echo "${TESTNAME} - Test failed!"
 185     exit 1
 186 fi
 187 
 188 #
 189 # Verify that the dhcptab data was created.
 190 #
 191 DATAFILE=/tmp/${TESTNAME}.data.$$
 192 /usr/sbin/dhtadm -r ${DHCPRSRC} -p ${DHCPPATH} -P >${DATAFILE} 2>>${OUTFILE}
 193 RET=$?
 194 if [ "${RET}" != "0" ]
 195 then
 196     rm ${DATAFILE}
 197     echo "Error displaying dhcptab = ${RET}"
 198     echo "${TESTNAME} - Test failed!"
 199     exit 1
 200 fi
 201 
 202 #
 203 # Verify that the Locale symbol is defined in the dhcptab.
 204 #
 205 LOCALE=`grep "^Locale" ${DATAFILE}`
 206 if [ -z "${LOCALE}" ]
 207 then
 208     rm ${DATAFILE}
 209     echo "Locale macro does not exist in dhcptab"
 210     echo "${TESTNAME} - Test failed!"
 211     exit 1
 212 fi
 213 
 214 #
 215 # Verify that the server macro is defined in the dhcptab.
 216 #
 217 SERVER_MACRO=`grep "^${SRVNAME}" ${DATAFILE}`
 218 if [ -z "${SERVER_MACRO}" ]
 219 then
 220     rm ${DATAFILE}
 221     echo "Server macro does not exist in dhcptab"
 222     echo "${TESTNAME} - Test failed!"
 223     exit 1
 224 fi
 225 rm ${DATAFILE}
 226 
 227 #
 228 # Grab the server macro definition
 229 #
 230 MACRO_DEFINITION=$(get_value ${SERVER_MACRO})
 231 
 232 #
 233 # Verify that the Locale symbol is defined as part of the macro definition
 234 #
 235 SRCH=":Include=Locale:"
 236 macro_find_and_replace
 237 
 238 #
 239 # Verify that the LeaseTim symbol is defined as part of the macro definition
 240 #
 241 SRCH=":LeaseTim=86400:"
 242 macro_find_and_replace
 243 
 244 #
 245 # Verify that the LeaseNeg symbol is defined as part of the macro definition
 246 #
 247 SRCH=":LeaseNeg:"
 248 macro_find_and_replace
 249 
 250 #
 251 # Verify that the Timeserv symbol is defined as part of the macro definition
 252 #
 253 SRCH=":Timeserv=${SRVADDR}:"
 254 macro_find_and_replace
 255 
 256 #
 257 # Go get the DNS settings
 258 #
 259 get_dns_parms
 260 
 261 #
 262 # Verify that the DNSdmain symbol is defined as part of the macro definition
 263 #
 264 SRCH=:${DNSDMAIN}:
 265 macro_find_and_replace
 266 
 267 #
 268 # Verify that the DNSserv symbol is defined as part of the macro definition
 269 #
 270 SRCH=:${DNSSERV}:
 271 macro_find_and_replace
 272 
 273 #
 274 # Verify that all symbols have been accounted for
 275 #
 276 if [ "${MACRO_DEFINITION}" != ":" ]
 277 then
 278     echo "Server macro definition has invalid extra symbols: ${MACRO_DEFINITION}"
 279     echo "${TESTNAME} - Test failed!"
 280     exit 1
 281 fi
 282 
 283 #
 284 # Verify that the dhcp server was started.
 285 #
 286 PID=`pgrep -x -u 0 in.dhcpd`
 287 if [ -z "${PID}" ]
 288 then
 289     echo "DHCP Server was not started."
 290     echo "${TESTNAME} - Test failed!"
 291     exit 1
 292 fi
 293 
 294 echo "${TESTNAME} - Test passed."
 295 exit 0