Blame nss/tests/ssl/ssl.sh

Packit 40b132
#! /bin/bash
Packit 40b132
#
Packit 40b132
# This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
# License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit 40b132
Packit 40b132
########################################################################
Packit 40b132
#
Packit 40b132
# mozilla/security/nss/tests/ssl/ssl.sh
Packit 40b132
#
Packit 40b132
# Script to test NSS SSL
Packit 40b132
#
Packit 40b132
# needs to work on all Unix and Windows platforms
Packit 40b132
#
Packit 40b132
# special strings
Packit 40b132
# ---------------
Packit 40b132
#   FIXME ... known problems, search for this string
Packit 40b132
#   NOTE .... unexpected behavior
Packit 40b132
#
Packit 40b132
########################################################################
Packit 40b132
Packit 40b132
############################## ssl_init ################################
Packit 40b132
# local shell function to initialize this script
Packit 40b132
########################################################################
Packit 40b132
ssl_init()
Packit 40b132
{
Packit 40b132
  SCRIPTNAME=ssl.sh      # sourced - $0 would point to all.sh
Packit 40b132
Packit 40b132
  if [ -z "${CLEANUP}" ] ; then     # if nobody else is responsible for
Packit 40b132
      CLEANUP="${SCRIPTNAME}"       # cleaning this script will do it
Packit 40b132
  fi
Packit 40b132
  
Packit 40b132
  if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ]; then
Packit 40b132
      cd ../common
Packit 40b132
      . ./init.sh
Packit 40b132
  fi
Packit 40b132
  if [ -z "${IOPR_SSL_SOURCED}" ]; then
Packit 40b132
      . ../iopr/ssl_iopr.sh
Packit 40b132
  fi
Packit 40b132
  if [ ! -r $CERT_LOG_FILE ]; then  # we need certificates here
Packit 40b132
      cd ../cert
Packit 40b132
      . ./cert.sh
Packit 40b132
  fi
Packit 40b132
  SCRIPTNAME=ssl.sh
Packit 40b132
  echo "$SCRIPTNAME: SSL tests ==============================="
Packit 40b132
Packit 40b132
  grep "SUCCESS: SSL passed" $CERT_LOG_FILE >/dev/null || {
Packit 40b132
      html_head "SSL Test failure"
Packit 40b132
      Exit 8 "Fatal - cert.sh needs to pass first"
Packit 40b132
  }
Packit 40b132
Packit 40b132
  if [ -z "$NSS_TEST_DISABLE_CRL" ] ; then
Packit 40b132
      grep "SUCCESS: SSL CRL prep passed" $CERT_LOG_FILE >/dev/null || {
Packit 40b132
          html_head "SSL Test failure"
Packit 40b132
          Exit 8 "Fatal - SSL of cert.sh needs to pass first"
Packit 40b132
      }
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  PORT=${PORT-8443}
Packit 40b132
  NSS_SSL_TESTS=${NSS_SSL_TESTS:-normal_normal}
Packit 40b132
  nss_ssl_run="stapling cov auth stress"
Packit 40b132
  NSS_SSL_RUN=${NSS_SSL_RUN:-$nss_ssl_run}
Packit 40b132
Packit 40b132
  # Test case files
Packit 40b132
  SSLCOV=${QADIR}/ssl/sslcov.txt
Packit 40b132
  SSLAUTH=${QADIR}/ssl/sslauth.txt
Packit 40b132
  SSLSTRESS=${QADIR}/ssl/sslstress.txt
Packit 40b132
  REQUEST_FILE=${QADIR}/ssl/sslreq.dat
Packit 40b132
Packit 40b132
  #temparary files
Packit 40b132
  SERVEROUTFILE=${TMP}/tests_server.$$
Packit 40b132
  SERVERPID=${TMP}/tests_pid.$$
Packit 40b132
Packit 40b132
  R_SERVERPID=../tests_pid.$$
Packit 40b132
Packit 40b132
  TEMPFILES="$TMPFILES ${SERVEROUTFILE}  ${SERVERPID}"
Packit 40b132
Packit 40b132
  fileout=0 #FIXME, looks like all.sh tried to turn this on but actually didn't
Packit 40b132
  #fileout=1
Packit 40b132
  #verbose="-v" #FIXME - see where this is usefull
Packit 40b132
Packit 40b132
  USER_NICKNAME=TestUser
Packit 40b132
  NORM_EXT=""
Packit 40b132
Packit 40b132
  if [ -z "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
      ECC_STRING=" - with ECC"
Packit 40b132
  else
Packit 40b132
      ECC_STRING=""
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  CSHORT="-c ABCDEF:0016:0032:0033:0038:0039:003B:003C:003D:0040:0041:0067:006A:006B:0084:009C:009E:00A2cdefgijklmnvyz"
Packit 40b132
  CLONG="-c ABCDEF:C001:C002:C003:C004:C005:C006:C007:C008:C009:C00A:C00B:C00C:C00D:C00E:C00F:C010:C011:C012:C013:C014:C023:C027:C02B:C02F:0016:0032:0033:0038:0039:003B:003C:003D:0040:0041:0067:006A:006B:0084:009C:009E:00A2cdefgijklmnvyz"
Packit 40b132
Packit 40b132
  if [ "${OS_ARCH}" != "WINNT" ]; then
Packit 40b132
      ulimit -n 1000 # make sure we have enough file descriptors
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  cd ${CLIENTDIR}
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### is_selfserv_alive ##########################
Packit 40b132
# local shell function to exit with a fatal error if selfserver is not
Packit 40b132
# running
Packit 40b132
########################################################################
Packit 40b132
is_selfserv_alive()
Packit 40b132
{
Packit 40b132
  if [ ! -f "${SERVERPID}" ]; then
Packit 40b132
      echo "$SCRIPTNAME: Error - selfserv PID file ${SERVERPID} doesn't exist"
Packit 40b132
      sleep 5
Packit 40b132
      if [ ! -f "${SERVERPID}" ]; then
Packit 40b132
          Exit 9 "Fatal - selfserv pid file ${SERVERPID} does not exist"
Packit 40b132
      fi
Packit 40b132
  fi
Packit 40b132
  
Packit 40b132
  if [ "${OS_ARCH}" = "WINNT" ] && \
Packit 40b132
     [ "$OS_NAME" = "CYGWIN_NT" -o "$OS_NAME" = "MINGW32_NT" ]; then
Packit 40b132
      PID=${SHELL_SERVERPID}
Packit 40b132
  else
Packit 40b132
      PID=`cat ${SERVERPID}`
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  echo "kill -0 ${PID} >/dev/null 2>/dev/null" 
Packit 40b132
  kill -0 ${PID} >/dev/null 2>/dev/null || Exit 10 "Fatal - selfserv process not detectable"
Packit 40b132
Packit 40b132
  echo "selfserv with PID ${PID} found at `date`"
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### wait_for_selfserv ##########################
Packit 40b132
# local shell function to wait until selfserver is running and initialized
Packit 40b132
########################################################################
Packit 40b132
wait_for_selfserv()
Packit 40b132
{
Packit 40b132
  echo "trying to connect to selfserv at `date`"
Packit 40b132
  echo "tstclnt -p ${PORT} -h ${HOSTADDR} ${CLIENT_OPTIONS} -q \\"
Packit 40b132
  echo "        -d ${P_R_CLIENTDIR} -v < ${REQUEST_FILE}"
Packit 40b132
  ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} ${CLIENT_OPTIONS} -q \
Packit 40b132
          -d ${P_R_CLIENTDIR} -v < ${REQUEST_FILE}
Packit 40b132
  if [ $? -ne 0 ]; then
Packit 40b132
      sleep 5
Packit 40b132
      echo "retrying to connect to selfserv at `date`"
Packit 40b132
      echo "tstclnt -p ${PORT} -h ${HOSTADDR} ${CLIENT_OPTIONS} -q \\"
Packit 40b132
      echo "        -d ${P_R_CLIENTDIR} -v < ${REQUEST_FILE}"
Packit 40b132
      ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} ${CLIENT_OPTIONS} -q \
Packit 40b132
              -d ${P_R_CLIENTDIR} -v < ${REQUEST_FILE}
Packit 40b132
      if [ $? -ne 0 ]; then
Packit 40b132
          html_failed "Waiting for Server"
Packit 40b132
      fi
Packit 40b132
  fi
Packit 40b132
  is_selfserv_alive
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### kill_selfserv ##############################
Packit 40b132
# local shell function to kill the selfserver after the tests are done
Packit 40b132
########################################################################
Packit 40b132
kill_selfserv()
Packit 40b132
{
Packit 40b132
  if [ "${OS_ARCH}" = "WINNT" ] && \
Packit 40b132
     [ "$OS_NAME" = "CYGWIN_NT" -o "$OS_NAME" = "MINGW32_NT" ]; then
Packit 40b132
      PID=${SHELL_SERVERPID}
Packit 40b132
  else
Packit 40b132
      PID=`cat ${SERVERPID}`
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  echo "trying to kill selfserv with PID ${PID} at `date`"
Packit 40b132
Packit 40b132
  if [ "${OS_ARCH}" = "WINNT" -o "${OS_ARCH}" = "WIN95" -o "${OS_ARCH}" = "OS2" ]; then
Packit 40b132
      echo "${KILL} ${PID}"
Packit 40b132
      ${KILL} ${PID}
Packit 40b132
  else
Packit 40b132
      echo "${KILL} -USR1 ${PID}"
Packit 40b132
      ${KILL} -USR1 ${PID}
Packit 40b132
  fi
Packit 40b132
  wait ${PID}
Packit 40b132
  if [ ${fileout} -eq 1 ]; then
Packit 40b132
      cat ${SERVEROUTFILE}
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  # On Linux selfserv needs up to 30 seconds to fully die and free
Packit 40b132
  # the port.  Wait until the port is free. (Bug 129701)
Packit 40b132
  if [ "${OS_ARCH}" = "Linux" ]; then
Packit 40b132
      echo "selfserv -b -p ${PORT} 2>/dev/null;"
Packit 40b132
      until ${BINDIR}/selfserv -b -p ${PORT} 2>/dev/null; do
Packit 40b132
          echo "RETRY: selfserv -b -p ${PORT} 2>/dev/null;"
Packit 40b132
          sleep 1
Packit 40b132
      done
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  echo "selfserv with PID ${PID} killed at `date`"
Packit 40b132
Packit 40b132
  rm ${SERVERPID}
Packit 40b132
  html_detect_core "kill_selfserv core detection step"
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### start_selfserv #############################
Packit 40b132
# local shell function to start the selfserver with the parameters required 
Packit 40b132
# for this test and log information (parameters, start time)
Packit 40b132
# also: wait until the server is up and running
Packit 40b132
########################################################################
Packit 40b132
start_selfserv()
Packit 40b132
{
Packit 40b132
  if [ -n "$testname" ] ; then
Packit 40b132
      echo "$SCRIPTNAME: $testname ----"
Packit 40b132
  fi
Packit 40b132
  sparam=`echo $sparam | sed -e 's;_; ;g'`
Packit 40b132
  if [ -z "$NSS_DISABLE_ECC" ] && \
Packit 40b132
     [ -z "$NO_ECC_CERTS" -o "$NO_ECC_CERTS" != "1"  ] ; then
Packit 40b132
      ECC_OPTIONS="-e ${HOSTADDR}-ec"
Packit 40b132
  else
Packit 40b132
      ECC_OPTIONS=""
Packit 40b132
  fi
Packit 40b132
  if [ "$1" = "mixed" ]; then
Packit 40b132
      ECC_OPTIONS="-e ${HOSTADDR}-ecmixed"
Packit 40b132
  fi
Packit 40b132
  echo "selfserv starting at `date`"
Packit 40b132
  echo "selfserv -D -p ${PORT} -d ${P_R_SERVERDIR} -n ${HOSTADDR} ${SERVER_OPTIONS} \\"
Packit 40b132
  echo "         ${ECC_OPTIONS} -S ${HOSTADDR}-dsa -w nss ${sparam} -i ${R_SERVERPID}\\"
Packit 40b132
  echo "         $verbose -H 1 &"
Packit 40b132
  if [ ${fileout} -eq 1 ]; then
Packit 40b132
      ${PROFTOOL} ${BINDIR}/selfserv -D -p ${PORT} -d ${P_R_SERVERDIR} -n ${HOSTADDR} ${SERVER_OPTIONS} \
Packit 40b132
               ${ECC_OPTIONS} -S ${HOSTADDR}-dsa -w nss ${sparam} -i ${R_SERVERPID} $verbose -H 1 \
Packit 40b132
               > ${SERVEROUTFILE} 2>&1 &
Packit 40b132
      RET=$?
Packit 40b132
  else
Packit 40b132
      ${PROFTOOL} ${BINDIR}/selfserv -D -p ${PORT} -d ${P_R_SERVERDIR} -n ${HOSTADDR} ${SERVER_OPTIONS} \
Packit 40b132
               ${ECC_OPTIONS} -S ${HOSTADDR}-dsa -w nss ${sparam} -i ${R_SERVERPID} $verbose -H 1 &
Packit 40b132
      RET=$?
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  # The PID $! returned by the MKS or Cygwin shell is not the PID of
Packit 40b132
  # the real background process, but rather the PID of a helper
Packit 40b132
  # process (sh.exe).  MKS's kill command has a bug: invoking kill
Packit 40b132
  # on the helper process does not terminate the real background
Packit 40b132
  # process.  Our workaround has been to have selfserv save its PID
Packit 40b132
  # in the ${SERVERPID} file and "kill" that PID instead.  But this
Packit 40b132
  # doesn't work under Cygwin; its kill command doesn't recognize
Packit 40b132
  # the PID of the real background process, but it does work on the
Packit 40b132
  # PID of the helper process.  So we save the value of $! in the
Packit 40b132
  # SHELL_SERVERPID variable, and use it instead of the ${SERVERPID}
Packit 40b132
  # file under Cygwin.  (In fact, this should work in any shell
Packit 40b132
  # other than the MKS shell.)
Packit 40b132
  SHELL_SERVERPID=$!
Packit 40b132
  wait_for_selfserv
Packit 40b132
Packit 40b132
  if [ "${OS_ARCH}" = "WINNT" ] && \
Packit 40b132
     [ "$OS_NAME" = "CYGWIN_NT" -o "$OS_NAME" = "MINGW32_NT" ]; then
Packit 40b132
      PID=${SHELL_SERVERPID}
Packit 40b132
  else
Packit 40b132
      PID=`cat ${SERVERPID}`
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  echo "selfserv with PID ${PID} started at `date`"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################## ssl_cov #################################
Packit 40b132
# local shell function to perform SSL Cipher Coverage tests
Packit 40b132
########################################################################
Packit 40b132
ssl_cov()
Packit 40b132
{
Packit 40b132
  html_head "SSL Cipher Coverage $NORM_EXT - server $SERVER_MODE/client $CLIENT_MODE $ECC_STRING"
Packit 40b132
Packit 40b132
  testname=""
Packit 40b132
  if [ -z "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
      sparam="$CLONG"
Packit 40b132
  else
Packit 40b132
      sparam="$CSHORT"
Packit 40b132
  fi
Packit 40b132
Packit 40b132
  mixed=0
Packit 40b132
  start_selfserv # Launch the server
Packit 40b132
Packit 40b132
  VMIN="ssl2"
Packit 40b132
  VMAX="tls1.1"
Packit 40b132
               
Packit 40b132
  exec < ${SSLCOV}
Packit 40b132
  while read ectype testmax param testname
Packit 40b132
  do
Packit 40b132
      echo "${testname}" | grep "EXPORT" > /dev/null 
Packit 40b132
      EXP=$?
Packit 40b132
      echo "${testname}" | grep "SSL2" > /dev/null
Packit 40b132
      SSL2=$?
Packit 40b132
Packit 40b132
      if [ "${SSL2}" -eq 0 ] ; then
Packit 40b132
          # We cannot use asynchronous cert verification with SSL2
Packit 40b132
          SSL2_FLAGS=-O
Packit 40b132
          VMIN="ssl2"
Packit 40b132
      else
Packit 40b132
          # Do not enable SSL2 for non-SSL2-specific tests. SSL2 is disabled by
Packit 40b132
          # default in libssl but it is enabled by default in tstclnt; we want
Packit 40b132
          # to test the libssl default whenever possible.
Packit 40b132
          SSL2_FLAGS=
Packit 40b132
          VMIN="ssl3"
Packit 40b132
      fi
Packit 40b132
      
Packit 40b132
      if [ "$NORM_EXT" = "Extended Test" -a "${SSL2}" -eq 0 ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
      elif [ "$ectype" = "ECC" -a -n "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (ECC only)"
Packit 40b132
      elif [ "$SERVER_MODE" = "fips" -o "$CLIENT_MODE" = "fips" ] && [ "$SSL2" -eq 0 -o "$EXP" -eq 0 ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
      elif [ "`echo $ectype | cut -b 1`" != "#" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: running $testname ----------------------------"
Packit 40b132
          VMAX="ssl3"
Packit 40b132
          if [ "$testmax" = "TLS10" ]; then
Packit 40b132
              VMAX="tls1.0"
Packit 40b132
          fi
Packit 40b132
          if [ "$testmax" = "TLS11" ]; then
Packit 40b132
              VMAX="tls1.1"
Packit 40b132
          fi
Packit 40b132
          if [ "$testmax" = "TLS12" ]; then
Packit 40b132
              VMAX="tls1.2"
Packit 40b132
          fi
Packit 40b132
Packit 40b132
# These five tests need an EC cert signed with RSA
Packit 40b132
# This requires a different certificate loaded in selfserv
Packit 40b132
# due to a (current) NSS limitation of only loaded one cert
Packit 40b132
# per type so the default selfserv setup will not work.
Packit 40b132
#:C00B TLS ECDH RSA WITH NULL SHA
Packit 40b132
#:C00C TLS ECDH RSA WITH RC4 128 SHA
Packit 40b132
#:C00D TLS ECDH RSA WITH 3DES EDE CBC SHA
Packit 40b132
#:C00E TLS ECDH RSA WITH AES 128 CBC SHA
Packit 40b132
#:C00F TLS ECDH RSA WITH AES 256 CBC SHA
Packit 40b132
Packit 40b132
          if [ $mixed -eq 0 ]; then
Packit 40b132
            if [ "${param}" = ":C00B" -o "${param}" = ":C00C" -o "${param}" = ":C00D" -o "${param}" = ":C00E" -o "${param}" = ":C00F" ]; then
Packit 40b132
              kill_selfserv
Packit 40b132
              start_selfserv mixed
Packit 40b132
              mixed=1
Packit 40b132
            else
Packit 40b132
              is_selfserv_alive
Packit 40b132
            fi
Packit 40b132
          else 
Packit 40b132
            if [ "${param}" = ":C00B" -o "${param}" = ":C00C" -o "${param}" = ":C00D" -o "${param}" = ":C00E" -o "${param}" = ":C00F" ]; then
Packit 40b132
              is_selfserv_alive
Packit 40b132
            else
Packit 40b132
              kill_selfserv
Packit 40b132
              start_selfserv
Packit 40b132
              mixed=0
Packit 40b132
            fi
Packit 40b132
          fi
Packit 40b132
Packit 40b132
          echo "tstclnt -p ${PORT} -h ${HOSTADDR} -c ${param} -V ${VMIN}:${VMAX} ${SSL2_FLAGS} ${CLIENT_OPTIONS} \\"
Packit 40b132
          echo "        -f -d ${P_R_CLIENTDIR} -v -w nss < ${REQUEST_FILE}"
Packit 40b132
Packit 40b132
          rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
          ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -c ${param} -V ${VMIN}:${VMAX} ${SSL2_FLAGS} ${CLIENT_OPTIONS} -f \
Packit 40b132
                  -d ${P_R_CLIENTDIR} -v -w nss < ${REQUEST_FILE} \
Packit 40b132
                  >${TMP}/$HOST.tmp.$$  2>&1
Packit 40b132
          ret=$?
Packit 40b132
          cat ${TMP}/$HOST.tmp.$$ 
Packit 40b132
          rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
          html_msg $ret 0 "${testname}" \
Packit 40b132
                   "produced a returncode of $ret, expected is 0"
Packit 40b132
      fi
Packit 40b132
  done
Packit 40b132
Packit 40b132
  kill_selfserv
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################## ssl_auth ################################
Packit 40b132
# local shell function to perform SSL  Client Authentication tests
Packit 40b132
########################################################################
Packit 40b132
ssl_auth()
Packit 40b132
{
Packit 40b132
  html_head "SSL Client Authentication $NORM_EXT - server $SERVER_MODE/client $CLIENT_MODE $ECC_STRING"
Packit 40b132
Packit 40b132
  exec < ${SSLAUTH}
Packit 40b132
  while read ectype value sparam cparam testname
Packit 40b132
  do
Packit 40b132
      [ -z "$ectype" ] && continue
Packit 40b132
      echo "${testname}" | grep "don't require client auth" > /dev/null
Packit 40b132
      CAUTH=$?
Packit 40b132
Packit 40b132
      if [ "${CLIENT_MODE}" = "fips" -a "${CAUTH}" -eq 0 ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
      elif [ "$ectype" = "SNI" -a "$NORM_EXT" = "Extended Test" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
      elif [ "$ectype" = "ECC" -a  -n "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (ECC only)"
Packit 40b132
      elif [ "`echo $ectype | cut -b 1`" != "#" ]; then
Packit 40b132
          cparam=`echo $cparam | sed -e 's;_; ;g' -e "s/TestUser/$USER_NICKNAME/g" `
Packit 40b132
          if [ "$ectype" = "SNI" ]; then
Packit 40b132
              cparam=`echo $cparam | sed -e "s/Host/$HOST/g" -e "s/Dom/$DOMSUF/g" `
Packit 40b132
              sparam=`echo $sparam | sed -e "s/Host/$HOST/g" -e "s/Dom/$DOMSUF/g" `
Packit 40b132
          fi
Packit 40b132
          start_selfserv
Packit 40b132
Packit 40b132
          echo "tstclnt -p ${PORT} -h ${HOSTADDR} -f -d ${P_R_CLIENTDIR} -v ${CLIENT_OPTIONS} \\"
Packit 40b132
          echo "        ${cparam}  < ${REQUEST_FILE}"
Packit 40b132
          rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
          ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -f ${cparam} ${CLIENT_OPTIONS} \
Packit 40b132
                  -d ${P_R_CLIENTDIR} -v < ${REQUEST_FILE} \
Packit 40b132
                  >${TMP}/$HOST.tmp.$$  2>&1
Packit 40b132
          ret=$?
Packit 40b132
          cat ${TMP}/$HOST.tmp.$$ 
Packit 40b132
          rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
Packit 40b132
          #workaround for bug #402058
Packit 40b132
          [ $ret -ne 0 ] && ret=1
Packit 40b132
          [ $value -ne 0 ] && value=1
Packit 40b132
Packit 40b132
          html_msg $ret $value "${testname}" \
Packit 40b132
                   "produced a returncode of $ret, expected is $value"
Packit 40b132
          kill_selfserv
Packit 40b132
      fi
Packit 40b132
  done
Packit 40b132
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
ssl_stapling_sub()
Packit 40b132
{
Packit 40b132
    testname=$1
Packit 40b132
    SO=$2
Packit 40b132
    value=$3
Packit 40b132
Packit 40b132
    if [ "$NORM_EXT" = "Extended Test" ] ; then
Packit 40b132
	# these tests use the ext_client directory for tstclnt,
Packit 40b132
	# which doesn't contain the required "TestCA" for server cert
Packit 40b132
	# verification, I don't know if it would be OK to add it...
Packit 40b132
	echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
	return 0
Packit 40b132
    fi
Packit 40b132
    if [ "$SERVER_MODE" = "fips" -o "$CLIENT_MODE" = "fips" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
	return 0
Packit 40b132
    fi
Packit 40b132
Packit 40b132
    SAVE_SERVER_OPTIONS=${SERVER_OPTIONS}
Packit 40b132
    SERVER_OPTIONS="${SERVER_OPTIONS} ${SO}"
Packit 40b132
Packit 40b132
    SAVE_P_R_SERVERDIR=${P_R_SERVERDIR}
Packit 40b132
    P_R_SERVERDIR=${P_R_SERVERDIR}/../stapling/
Packit 40b132
Packit 40b132
    echo "${testname}"
Packit 40b132
Packit 40b132
    start_selfserv
Packit 40b132
Packit 40b132
    echo "tstclnt -p ${PORT} -h ${HOSTADDR} -f -d ${P_R_CLIENTDIR} -v ${CLIENT_OPTIONS} \\"
Packit 40b132
    echo "        -T -O -F -M 1 -V ssl3: < ${REQUEST_FILE}"
Packit 40b132
    rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
    ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -f ${CLIENT_OPTIONS} \
Packit 40b132
	    -d ${P_R_CLIENTDIR} -v -T -O -F -M 1 -V ssl3: < ${REQUEST_FILE} \
Packit 40b132
	    >${TMP}/$HOST.tmp.$$  2>&1
Packit 40b132
    ret=$?
Packit 40b132
    cat ${TMP}/$HOST.tmp.$$
Packit 40b132
    rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
Packit 40b132
    # hopefully no workaround for bug #402058 needed here?
Packit 40b132
    # (see commands in ssl_auth
Packit 40b132
Packit 40b132
    html_msg $ret $value "${testname}" \
Packit 40b132
	    "produced a returncode of $ret, expected is $value"
Packit 40b132
    kill_selfserv
Packit 40b132
Packit 40b132
    SERVER_OPTIONS=${SAVE_SERVER_OPTIONS}
Packit 40b132
    P_R_SERVERDIR=${SAVE_P_R_SERVERDIR}
Packit 40b132
}
Packit 40b132
Packit 40b132
ssl_stapling_stress()
Packit 40b132
{
Packit 40b132
    testname="Stress OCSP stapling, server uses random status"
Packit 40b132
    SO="-A TestCA -T random"
Packit 40b132
    value=0
Packit 40b132
Packit 40b132
    if [ "$NORM_EXT" = "Extended Test" ] ; then
Packit 40b132
	# these tests use the ext_client directory for tstclnt,
Packit 40b132
	# which doesn't contain the required "TestCA" for server cert
Packit 40b132
	# verification, I don't know if it would be OK to add it...
Packit 40b132
	echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
	return 0
Packit 40b132
    fi
Packit 40b132
    if [ "$SERVER_MODE" = "fips" -o "$CLIENT_MODE" = "fips" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
	return 0
Packit 40b132
    fi
Packit 40b132
Packit 40b132
    SAVE_SERVER_OPTIONS=${SERVER_OPTIONS}
Packit 40b132
    SERVER_OPTIONS="${SERVER_OPTIONS} ${SO}"
Packit 40b132
Packit 40b132
    SAVE_P_R_SERVERDIR=${P_R_SERVERDIR}
Packit 40b132
    P_R_SERVERDIR=${P_R_SERVERDIR}/../stapling/
Packit 40b132
Packit 40b132
    echo "${testname}"
Packit 40b132
    start_selfserv
Packit 40b132
Packit 40b132
    echo "strsclnt -q -p ${PORT} -d ${P_R_CLIENTDIR} ${CLIENT_OPTIONS} -w nss \\"
Packit 40b132
    echo "         -c 1000 -V ssl3: -N -T $verbose ${HOSTADDR}"
Packit 40b132
    echo "strsclnt started at `date`"
Packit 40b132
    ${PROFTOOL} ${BINDIR}/strsclnt -q -p ${PORT} -d ${P_R_CLIENTDIR} ${CLIENT_OPTIONS} -w nss \
Packit 40b132
	    -c 1000 -V ssl3: -N -T $verbose ${HOSTADDR}
Packit 40b132
    ret=$?
Packit 40b132
Packit 40b132
    echo "strsclnt completed at `date`"
Packit 40b132
    html_msg $ret $value \
Packit 40b132
	    "${testname}" \
Packit 40b132
	    "produced a returncode of $ret, expected is $value."
Packit 40b132
    kill_selfserv
Packit 40b132
Packit 40b132
    SERVER_OPTIONS=${SAVE_SERVER_OPTIONS}
Packit 40b132
    P_R_SERVERDIR=${SAVE_P_R_SERVERDIR}
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ ssl_stapling ##############################
Packit 40b132
# local shell function to perform SSL Cert Status (OCSP Stapling) tests
Packit 40b132
########################################################################
Packit 40b132
ssl_stapling()
Packit 40b132
{
Packit 40b132
  html_head "SSL Cert Status (OCSP Stapling) $NORM_EXT - server $SERVER_MODE/client $CLIENT_MODE $ECC_STRING"
Packit 40b132
Packit 40b132
  # tstclnt Exit code:
Packit 40b132
  # 0: have fresh and valid revocation data, status good
Packit 40b132
  # 1: cert failed to verify, prior to revocation checking
Packit 40b132
  # 2: missing, old or invalid revocation data
Packit 40b132
  # 3: have fresh and valid revocation data, status revoked
Packit 40b132
Packit 40b132
  # selfserv modes
Packit 40b132
  # good, revoked, unkown: Include locally signed response. Requires: -A
Packit 40b132
  # failure: Include OCSP failure status, such as "try later" (unsigned)
Packit 40b132
  # badsig: use a good status but with an invalid signature
Packit 40b132
  # corrupted: stapled cert status is an invalid block of data
Packit 40b132
Packit 40b132
  ssl_stapling_sub "OCSP stapling, signed response, good status"     "-A TestCA -T good"      0
Packit 40b132
  ssl_stapling_sub "OCSP stapling, signed response, revoked status"  "-A TestCA -T revoked"   3
Packit 40b132
  ssl_stapling_sub "OCSP stapling, signed response, unknown status"  "-A TestCA -T unknown"   2
Packit 40b132
  ssl_stapling_sub "OCSP stapling, unsigned failure response"        "-A TestCA -T failure"   2
Packit 40b132
  ssl_stapling_sub "OCSP stapling, good status, bad signature"       "-A TestCA -T badsig"    2
Packit 40b132
  ssl_stapling_sub "OCSP stapling, invalid cert status data"         "-A TestCA -T corrupted" 2
Packit 40b132
  ssl_stapling_sub "Valid cert, Server doesn't staple"               ""                       2
Packit 40b132
Packit 40b132
  ssl_stapling_stress
Packit 40b132
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
Packit 40b132
############################## ssl_stress ##############################
Packit 40b132
# local shell function to perform SSL stress test
Packit 40b132
########################################################################
Packit 40b132
ssl_stress()
Packit 40b132
{
Packit 40b132
  html_head "SSL Stress Test $NORM_EXT - server $SERVER_MODE/client $CLIENT_MODE $ECC_STRING"
Packit 40b132
Packit 40b132
  exec < ${SSLSTRESS}
Packit 40b132
  while read ectype value sparam cparam testname
Packit 40b132
  do
Packit 40b132
      if [ -z "$ectype" ]; then
Packit 40b132
          # silently ignore blank lines
Packit 40b132
          continue
Packit 40b132
      fi
Packit 40b132
Packit 40b132
      echo "${testname}" | grep "SSL2" > /dev/null
Packit 40b132
      SSL2=$?
Packit 40b132
      echo "${testname}" | grep "client auth" > /dev/null
Packit 40b132
      CAUTH=$?
Packit 40b132
Packit 40b132
      if [ "${SSL2}" -eq 0 -a "$NORM_EXT" = "Extended Test" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
      elif [ "$ectype" = "SNI" -a "$NORM_EXT" = "Extended Test" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname for $NORM_EXT"
Packit 40b132
      elif [ "$ectype" = "ECC" -a  -n "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (ECC only)"
Packit 40b132
      elif [ "${SERVER_MODE}" = "fips" -o "${CLIENT_MODE}" = "fips" ] && [ "${SSL2}" -eq 0 ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
      elif [ "${CLIENT_MODE}" = "fips" -a "${CAUTH}" -ne 0 ] ; then
Packit 40b132
          echo "$SCRIPTNAME: skipping  $testname (non-FIPS only)"
Packit 40b132
      elif [ "`echo $ectype | cut -b 1`" != "#" ]; then
Packit 40b132
          cparam=`echo $cparam | sed -e 's;_; ;g' -e "s/TestUser/$USER_NICKNAME/g" `
Packit 40b132
          if [ "$ectype" = "SNI" ]; then
Packit 40b132
              cparam=`echo $cparam | sed -e "s/Host/$HOST/g" -e "s/Dom/$DOMSUF/g" `
Packit 40b132
              sparam=`echo $sparam | sed -e "s/Host/$HOST/g" -e "s/Dom/$DOMSUF/g" `
Packit 40b132
          fi
Packit 40b132
Packit 40b132
# These tests need the mixed cert 
Packit 40b132
# Stress TLS ECDH-RSA AES 128 CBC with SHA (no reuse)
Packit 40b132
# Stress TLS ECDH-RSA AES 128 CBC with SHA (no reuse, client auth)
Packit 40b132
          p=`echo "$sparam" | sed -e "s/\(.*\)\(-c_:C0..\)\(.*\)/\2/"`;
Packit 40b132
          if [ "$p" = "-c_:C00E" ]; then
Packit 40b132
              start_selfserv mixed
Packit 40b132
          else
Packit 40b132
              start_selfserv
Packit 40b132
          fi
Packit 40b132
Packit 40b132
          if [ "`uname -n`" = "sjsu" ] ; then
Packit 40b132
              echo "debugging disapering selfserv... ps -ef | grep selfserv"
Packit 40b132
              ps -ef | grep selfserv
Packit 40b132
          fi
Packit 40b132
Packit 40b132
          echo "strsclnt -q -p ${PORT} -d ${P_R_CLIENTDIR} ${CLIENT_OPTIONS} -w nss $cparam \\"
Packit 40b132
          echo "         $verbose ${HOSTADDR}"
Packit 40b132
          echo "strsclnt started at `date`"
Packit 40b132
          ${PROFTOOL} ${BINDIR}/strsclnt -q -p ${PORT} -d ${P_R_CLIENTDIR} ${CLIENT_OPTIONS} -w nss $cparam \
Packit 40b132
                   $verbose ${HOSTADDR}
Packit 40b132
          ret=$?
Packit 40b132
          echo "strsclnt completed at `date`"
Packit 40b132
          html_msg $ret $value \
Packit 40b132
                   "${testname}" \
Packit 40b132
                   "produced a returncode of $ret, expected is $value. "
Packit 40b132
          if [ "`uname -n`" = "sjsu" ] ; then
Packit 40b132
              echo "debugging disapering selfserv... ps -ef | grep selfserv"
Packit 40b132
              ps -ef | grep selfserv
Packit 40b132
          fi
Packit 40b132
          kill_selfserv
Packit 40b132
      fi
Packit 40b132
  done
Packit 40b132
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ ssl_crl_ssl ###############################
Packit 40b132
# local shell function to perform SSL test with/out revoked certs tests
Packit 40b132
########################################################################
Packit 40b132
ssl_crl_ssl()
Packit 40b132
{
Packit 40b132
  html_head "CRL SSL Client Tests $NORM_EXT $ECC_STRING"
Packit 40b132
  
Packit 40b132
  # Using First CRL Group for this test. There are $CRL_GRP_1_RANGE certs in it.
Packit 40b132
  # Cert number $UNREVOKED_CERT_GRP_1 was not revoked
Packit 40b132
  CRL_GROUP_BEGIN=$CRL_GRP_1_BEGIN
Packit 40b132
  CRL_GROUP_RANGE=$CRL_GRP_1_RANGE
Packit 40b132
  UNREVOKED_CERT=$UNREVOKED_CERT_GRP_1
Packit 40b132
Packit 40b132
  exec < ${SSLAUTH}
Packit 40b132
  while read ectype value sparam cparam testname
Packit 40b132
  do
Packit 40b132
    [ "$ectype" = "" ] && continue
Packit 40b132
    if [ "$ectype" = "ECC" -a  -n "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
        echo "$SCRIPTNAME: skipping $testname (ECC only)"
Packit 40b132
    elif [ "$ectype" = "SNI" ]; then
Packit 40b132
        continue
Packit 40b132
    elif [ "`echo $ectype | cut -b 1`" != "#" ]; then
Packit 40b132
	servarg=`echo $sparam | awk '{r=split($0,a,"-r") - 1;print r;}'`
Packit 40b132
	pwd=`echo $cparam | grep nss`
Packit 40b132
	user=`echo $cparam | grep TestUser`
Packit 40b132
	_cparam=$cparam
Packit 40b132
	case $servarg in
Packit 40b132
	    1) if [ -z "$pwd" -o -z "$user" ]; then
Packit 40b132
                 rev_modvalue=0
Packit 40b132
               else
Packit 40b132
	         rev_modvalue=254
Packit 40b132
               fi
Packit 40b132
               ;;
Packit 40b132
	    2) rev_modvalue=254 ;;
Packit 40b132
	    3) if [ -z "$pwd" -o -z "$user" ]; then
Packit 40b132
		rev_modvalue=0
Packit 40b132
		else
Packit 40b132
		rev_modvalue=1
Packit 40b132
		fi
Packit 40b132
		;;
Packit 40b132
	    4) rev_modvalue=1 ;;
Packit 40b132
	esac
Packit 40b132
	TEMP_NUM=0
Packit 40b132
	while [ $TEMP_NUM -lt $CRL_GROUP_RANGE ]
Packit 40b132
	  do
Packit 40b132
	  CURR_SER_NUM=`expr ${CRL_GROUP_BEGIN} + ${TEMP_NUM}`
Packit 40b132
	  TEMP_NUM=`expr $TEMP_NUM + 1`
Packit 40b132
	  USER_NICKNAME="TestUser${CURR_SER_NUM}"
Packit 40b132
	  cparam=`echo $_cparam | sed -e 's;_; ;g' -e "s/TestUser/$USER_NICKNAME/g" `
Packit 40b132
	  start_selfserv
Packit 40b132
	  
Packit 40b132
	  echo "tstclnt -p ${PORT} -h ${HOSTADDR} -f -d ${R_CLIENTDIR} -v \\"
Packit 40b132
	  echo "        ${cparam}  < ${REQUEST_FILE}"
Packit 40b132
	  rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
	  ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -f ${cparam} \
Packit 40b132
	      -d ${R_CLIENTDIR} -v < ${REQUEST_FILE} \
Packit 40b132
	      >${TMP}/$HOST.tmp.$$  2>&1
Packit 40b132
	  ret=$?
Packit 40b132
	  cat ${TMP}/$HOST.tmp.$$ 
Packit 40b132
	  rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
	  if [ $CURR_SER_NUM -ne $UNREVOKED_CERT ]; then
Packit 40b132
	      modvalue=$rev_modvalue
Packit 40b132
              testAddMsg="revoked"
Packit 40b132
	  else
Packit 40b132
              testAddMsg="not revoked"
Packit 40b132
	      modvalue=$value
Packit 40b132
	  fi
Packit 40b132
	  
Packit 40b132
	  html_msg $ret $modvalue "${testname} (cert ${USER_NICKNAME} - $testAddMsg)" \
Packit 40b132
		"produced a returncode of $ret, expected is $modvalue"
Packit 40b132
	  kill_selfserv
Packit 40b132
	done
Packit 40b132
    fi
Packit 40b132
  done
Packit 40b132
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################# is_revoked ###############################
Packit 40b132
# local shell function to check if certificate is revoked
Packit 40b132
########################################################################
Packit 40b132
is_revoked() {
Packit 40b132
    certNum=$1
Packit 40b132
    currLoadedGrp=$2
Packit 40b132
    
Packit 40b132
    found=0
Packit 40b132
    ownerGrp=1
Packit 40b132
    while [ $ownerGrp -le $TOTAL_GRP_NUM -a $found -eq 0 ]
Packit 40b132
      do
Packit 40b132
      currGrpBegin=`eval echo \$\{CRL_GRP_${ownerGrp}_BEGIN\}`
Packit 40b132
      currGrpRange=`eval echo \$\{CRL_GRP_${ownerGrp}_RANGE\}`
Packit 40b132
      currGrpEnd=`expr $currGrpBegin + $currGrpRange - 1`
Packit 40b132
      if [ $certNum -ge $currGrpBegin -a $certNum -le $currGrpEnd ]; then
Packit 40b132
          found=1
Packit 40b132
      else
Packit 40b132
          ownerGrp=`expr $ownerGrp + 1`
Packit 40b132
      fi
Packit 40b132
    done
Packit 40b132
    if [ $found -eq 1 -a $currLoadedGrp -lt $ownerGrp ]; then
Packit 40b132
        return 1
Packit 40b132
    fi
Packit 40b132
    if [ $found -eq 0 ]; then
Packit 40b132
        return 1
Packit 40b132
    fi
Packit 40b132
    unrevokedGrpCert=`eval echo \$\{UNREVOKED_CERT_GRP_${ownerGrp}\}`
Packit 40b132
    if [ $certNum -eq $unrevokedGrpCert ]; then
Packit 40b132
        return 1
Packit 40b132
    fi
Packit 40b132
    return 0
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### load_group_crl #############################
Packit 40b132
# local shell function to load CRL 
Packit 40b132
########################################################################
Packit 40b132
load_group_crl() {
Packit 40b132
    group=$1
Packit 40b132
    ectype=$2
Packit 40b132
Packit 40b132
    OUTFILE_TMP=${TMP}/$HOST.tmp.$$
Packit 40b132
    grpBegin=`eval echo \$\{CRL_GRP_${group}_BEGIN\}`
Packit 40b132
    grpRange=`eval echo \$\{CRL_GRP_${group}_RANGE\}`
Packit 40b132
    grpEnd=`expr $grpBegin + $grpRange - 1`
Packit 40b132
    
Packit 40b132
    if [ "$grpBegin" = "" -o "$grpRange" = "" ]; then
Packit 40b132
        ret=1
Packit 40b132
        return 1;
Packit 40b132
    fi
Packit 40b132
    
Packit 40b132
    # Add -ec suffix for ECC
Packit 40b132
    if [ "$ectype" = "ECC" ] ; then
Packit 40b132
      ecsuffix="-ec"
Packit 40b132
      eccomment="ECC "
Packit 40b132
    else
Packit 40b132
      ecsuffix=""
Packit 40b132
      eccomment=""
Packit 40b132
    fi
Packit 40b132
    
Packit 40b132
    if [ "$RELOAD_CRL" != "" ]; then
Packit 40b132
        if [ $group -eq 1 ]; then
Packit 40b132
            echo "==================== Resetting to group 1 crl ==================="
Packit 40b132
            kill_selfserv
Packit 40b132
            start_selfserv
Packit 40b132
            is_selfserv_alive
Packit 40b132
        fi
Packit 40b132
        echo "================= Reloading ${eccomment}CRL for group $grpBegin - $grpEnd ============="
Packit 40b132
Packit 40b132
        echo "tstclnt -p ${PORT} -h ${HOSTADDR} -f -d ${R_CLIENTDIR} -v \\"
Packit 40b132
        echo "          -V ssl3: -w nss -n TestUser${UNREVOKED_CERT_GRP_1}${ecsuffix}"
Packit 40b132
        echo "Request:"
Packit 40b132
        echo "GET crl://${SERVERDIR}/root.crl_${grpBegin}-${grpEnd}${ecsuffix}"
Packit 40b132
        echo ""
Packit 40b132
        echo "RELOAD time $i"
Packit 40b132
Packit 40b132
        REQF=${R_CLIENTDIR}.crlreq
Packit 40b132
        cat > ${REQF} <<_EOF_REQUEST_
Packit 40b132
GET crl://${SERVERDIR}/root.crl_${grpBegin}-${grpEnd}${ecsuffix}
Packit 40b132
Packit 40b132
_EOF_REQUEST_
Packit 40b132
Packit 40b132
        ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -f  \
Packit 40b132
            -d ${R_CLIENTDIR} -v -V ssl3: -w nss -n TestUser${UNREVOKED_CERT_GRP_1}${ecsuffix} \
Packit 40b132
            >${OUTFILE_TMP}  2>&1 < ${REQF}
Packit 40b132
Packit 40b132
        cat ${OUTFILE_TMP}
Packit 40b132
        grep "CRL ReCache Error" ${OUTFILE_TMP}
Packit 40b132
        if [ $? -eq 0 ]; then
Packit 40b132
            ret=1
Packit 40b132
            return 1
Packit 40b132
        fi
Packit 40b132
    else
Packit 40b132
        echo "=== Updating DB for group $grpBegin - $grpEnd and restarting selfserv ====="
Packit 40b132
Packit 40b132
        kill_selfserv
Packit 40b132
        CU_ACTION="Importing ${eccomment}CRL for groups $grpBegin - $grpEnd"
Packit 40b132
        crlu -d ${R_SERVERDIR} -I -i ${SERVERDIR}/root.crl_${grpBegin}-${grpEnd}${ecsuffix} \
Packit 40b132
             -p ../tests.pw.928
Packit 40b132
        ret=$?
Packit 40b132
        if [ "$ret" -eq 0 ]; then
Packit 40b132
	    html_passed "${CU_ACTION}"
Packit 40b132
            return 1
Packit 40b132
        fi
Packit 40b132
        start_selfserv        
Packit 40b132
    fi
Packit 40b132
    is_selfserv_alive
Packit 40b132
    ret=$?
Packit 40b132
    echo "================= CRL Reloaded ============="
Packit 40b132
}
Packit 40b132
Packit 40b132
########################### ssl_crl_cache ##############################
Packit 40b132
# local shell function to perform SSL test for crl cache functionality
Packit 40b132
# with/out revoked certs 
Packit 40b132
########################################################################
Packit 40b132
ssl_crl_cache()
Packit 40b132
{
Packit 40b132
  html_head "Cache CRL SSL Client Tests $NORM_EXT $ECC_STRING"
Packit 40b132
  SSLAUTH_TMP=${TMP}/authin.tl.tmp
Packit 40b132
  SERV_ARG=-r_-r
Packit 40b132
  rm -f ${SSLAUTH_TMP}
Packit 40b132
  echo ${SSLAUTH_TMP}
Packit 40b132
Packit 40b132
  grep -- " $SERV_ARG " ${SSLAUTH} | grep -v "^#" | grep -v none | grep -v bogus > ${SSLAUTH_TMP}
Packit 40b132
  echo $?
Packit 40b132
  while [ $? -eq 0 -a -f ${SSLAUTH_TMP} ]
Packit 40b132
    do
Packit 40b132
    sparam=$SERV_ARG
Packit 40b132
    start_selfserv
Packit 40b132
    exec < ${SSLAUTH_TMP}
Packit 40b132
    while read ectype value sparam cparam testname
Packit 40b132
      do
Packit 40b132
      [ "$ectype" = "" ] && continue
Packit 40b132
      if [ "$ectype" = "ECC" -a  -n "$NSS_DISABLE_ECC" ] ; then
Packit 40b132
        echo "$SCRIPTNAME: skipping  $testname (ECC only)"
Packit 40b132
      elif [ "$ectype" = "SNI" ]; then
Packit 40b132
          continue
Packit 40b132
      else
Packit 40b132
        servarg=`echo $sparam | awk '{r=split($0,a,"-r") - 1;print r;}'`
Packit 40b132
        pwd=`echo $cparam | grep nss`
Packit 40b132
        user=`echo $cparam | grep TestUser`
Packit 40b132
        _cparam=$cparam
Packit 40b132
        case $servarg in
Packit 40b132
            1) if [ -z "$pwd" -o -z "$user" ]; then
Packit 40b132
                rev_modvalue=0
Packit 40b132
                else
Packit 40b132
                rev_modvalue=254
Packit 40b132
                fi
Packit 40b132
                ;;
Packit 40b132
            2) rev_modvalue=254 ;;
Packit 40b132
Packit 40b132
            3) if [ -z "$pwd" -o -z "$user" ]; then
Packit 40b132
                rev_modvalue=0
Packit 40b132
                else
Packit 40b132
                rev_modvalue=1
Packit 40b132
                fi
Packit 40b132
                ;;
Packit 40b132
            4) rev_modvalue=1 ;;
Packit 40b132
	  esac
Packit 40b132
        TEMP_NUM=0
Packit 40b132
        LOADED_GRP=1
Packit 40b132
        while [ ${LOADED_GRP} -le ${TOTAL_GRP_NUM} ]
Packit 40b132
          do
Packit 40b132
          while [ $TEMP_NUM -lt $TOTAL_CRL_RANGE ]
Packit 40b132
            do
Packit 40b132
            CURR_SER_NUM=`expr ${CRL_GRP_1_BEGIN} + ${TEMP_NUM}`
Packit 40b132
            TEMP_NUM=`expr $TEMP_NUM + 1`
Packit 40b132
            USER_NICKNAME="TestUser${CURR_SER_NUM}"
Packit 40b132
            cparam=`echo $_cparam | sed -e 's;_; ;g' -e "s/TestUser/$USER_NICKNAME/g" `
Packit 40b132
Packit 40b132
            echo "Server Args: $SERV_ARG"
Packit 40b132
            echo "tstclnt -p ${PORT} -h ${HOSTADDR} -f -d ${R_CLIENTDIR} -v \\"
Packit 40b132
            echo "        ${cparam}  < ${REQUEST_FILE}"
Packit 40b132
            rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
            ${PROFTOOL} ${BINDIR}/tstclnt -p ${PORT} -h ${HOSTADDR} -f ${cparam} \
Packit 40b132
	        -d ${R_CLIENTDIR} -v < ${REQUEST_FILE} \
Packit 40b132
                >${TMP}/$HOST.tmp.$$  2>&1
Packit 40b132
            ret=$?
Packit 40b132
            cat ${TMP}/$HOST.tmp.$$ 
Packit 40b132
            rm ${TMP}/$HOST.tmp.$$ 2>/dev/null
Packit 40b132
            is_revoked ${CURR_SER_NUM} ${LOADED_GRP}
Packit 40b132
            isRevoked=$?
Packit 40b132
            if [ $isRevoked -eq 0 ]; then
Packit 40b132
                modvalue=$rev_modvalue
Packit 40b132
                testAddMsg="revoked"
Packit 40b132
            else
Packit 40b132
                modvalue=$value
Packit 40b132
                testAddMsg="not revoked"
Packit 40b132
            fi
Packit 40b132
Packit 40b132
            is_selfserv_alive
Packit 40b132
            ss_status=$?
Packit 40b132
            if [ "$ss_status" -ne 0 ]; then
Packit 40b132
                html_msg $ret $modvalue \
Packit 40b132
                    "${testname}(cert ${USER_NICKNAME} - $testAddMsg)" \
Packit 40b132
                    "produced a returncode of $ret, expected is $modvalue. " \
Packit 40b132
                    "selfserv is not alive!"
Packit 40b132
            else
Packit 40b132
                html_msg $ret $modvalue \
Packit 40b132
                    "${testname}(cert ${USER_NICKNAME} - $testAddMsg)" \
Packit 40b132
                    "produced a returncode of $ret, expected is $modvalue"
Packit 40b132
            fi
Packit 40b132
          done
Packit 40b132
          LOADED_GRP=`expr $LOADED_GRP + 1`
Packit 40b132
          TEMP_NUM=0
Packit 40b132
          if [ "$LOADED_GRP" -le "$TOTAL_GRP_NUM" ]; then
Packit 40b132
              load_group_crl $LOADED_GRP $ectype
Packit 40b132
              html_msg $ret 0 "Load group $LOADED_GRP ${eccomment}crl " \
Packit 40b132
                  "produced a returncode of $ret, expected is 0"
Packit 40b132
          fi
Packit 40b132
        done
Packit 40b132
        # Restart selfserv to roll back to two initial group 1 crls
Packit 40b132
        # TestCA CRL and TestCA-ec CRL 
Packit 40b132
        kill_selfserv
Packit 40b132
        start_selfserv
Packit 40b132
      fi
Packit 40b132
    done
Packit 40b132
    kill_selfserv
Packit 40b132
    SERV_ARG="${SERV_ARG}_-r"
Packit 40b132
    rm -f ${SSLAUTH_TMP}
Packit 40b132
    grep -- " $SERV_ARG " ${SSLAUTH} | grep -v "^#" | grep -v none | grep -v bogus  > ${SSLAUTH_TMP}
Packit 40b132
  done
Packit 40b132
  TEMPFILES=${SSLAUTH_TMP}
Packit 40b132
  html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
Packit 40b132
############################## ssl_cleanup #############################
Packit 40b132
# local shell function to finish this script (no exit since it might be
Packit 40b132
# sourced)
Packit 40b132
########################################################################
Packit 40b132
ssl_cleanup()
Packit 40b132
{
Packit 40b132
  rm $SERVERPID 2>/dev/null
Packit 40b132
  cd ${QADIR}
Packit 40b132
  . common/cleanup.sh
Packit 40b132
}
Packit 40b132
Packit 40b132
############################## ssl_run #################################
Packit 40b132
# local shell function to run coverage, authentication and stress tests
Packit 40b132
########################################################################
Packit 40b132
ssl_run()
Packit 40b132
{
Packit 40b132
    for SSL_RUN in ${NSS_SSL_RUN}
Packit 40b132
    do
Packit 40b132
        case "${SSL_RUN}" in
Packit 40b132
        "stapling")
Packit 40b132
            ssl_stapling
Packit 40b132
            ;;
Packit 40b132
        "cov")
Packit 40b132
            ssl_cov
Packit 40b132
            ;;
Packit 40b132
        "auth")
Packit 40b132
            ssl_auth
Packit 40b132
            ;;
Packit 40b132
        "stress")
Packit 40b132
            ssl_stress
Packit 40b132
            ;;
Packit 40b132
         esac
Packit 40b132
    done
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ ssl_run_all ###############################
Packit 40b132
# local shell function to run both standard and extended ssl tests
Packit 40b132
########################################################################
Packit 40b132
ssl_run_all()
Packit 40b132
{
Packit 40b132
    ORIG_SERVERDIR=$SERVERDIR
Packit 40b132
    ORIG_CLIENTDIR=$CLIENTDIR
Packit 40b132
    ORIG_R_SERVERDIR=$R_SERVERDIR
Packit 40b132
    ORIG_R_CLIENTDIR=$R_CLIENTDIR
Packit 40b132
    ORIG_P_R_SERVERDIR=$P_R_SERVERDIR
Packit 40b132
    ORIG_P_R_CLIENTDIR=$P_R_CLIENTDIR
Packit 40b132
Packit 40b132
    USER_NICKNAME=TestUser
Packit 40b132
    NORM_EXT=""
Packit 40b132
    cd ${CLIENTDIR}
Packit 40b132
Packit 40b132
    ssl_run
Packit 40b132
Packit 40b132
    SERVERDIR=$EXT_SERVERDIR
Packit 40b132
    CLIENTDIR=$EXT_CLIENTDIR
Packit 40b132
    R_SERVERDIR=$R_EXT_SERVERDIR
Packit 40b132
    R_CLIENTDIR=$R_EXT_CLIENTDIR
Packit 40b132
    P_R_SERVERDIR=$P_R_EXT_SERVERDIR
Packit 40b132
    P_R_CLIENTDIR=$P_R_EXT_CLIENTDIR
Packit 40b132
Packit 40b132
    USER_NICKNAME=ExtendedSSLUser
Packit 40b132
    NORM_EXT="Extended Test"
Packit 40b132
    cd ${CLIENTDIR}
Packit 40b132
    
Packit 40b132
    ssl_run
Packit 40b132
Packit 40b132
    # the next round of ssl tests will only run if these vars are reset
Packit 40b132
    SERVERDIR=$ORIG_SERVERDIR
Packit 40b132
    CLIENTDIR=$ORIG_CLIENTDIR
Packit 40b132
    R_SERVERDIR=$ORIG_R_SERVERDIR
Packit 40b132
    R_CLIENTDIR=$ORIG_R_CLIENTDIR
Packit 40b132
    P_R_SERVERDIR=$ORIG_P_R_SERVERDIR
Packit 40b132
    P_R_CLIENTDIR=$ORIG_P_R_CLIENTDIR
Packit 40b132
Packit 40b132
    USER_NICKNAME=TestUser
Packit 40b132
    NORM_EXT=
Packit 40b132
    cd ${QADIR}/ssl
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ ssl_set_fips ##############################
Packit 40b132
# local shell function to set FIPS mode on/off
Packit 40b132
########################################################################
Packit 40b132
ssl_set_fips()
Packit 40b132
{
Packit 40b132
    CLTSRV=$1
Packit 40b132
    ONOFF=$2
Packit 40b132
Packit 40b132
    if [ ${CLTSRV} = "server" ]; then
Packit 40b132
        DBDIRS="${SERVERDIR} ${EXT_SERVERDIR}"
Packit 40b132
    else
Packit 40b132
        DBDIRS="${CLIENTDIR} ${EXT_CLIENTDIR}"
Packit 40b132
    fi
Packit 40b132
    
Packit 40b132
    if [ "${ONOFF}" = "on" ]; then
Packit 40b132
        FIPSMODE=true
Packit 40b132
        RET_EXP=0
Packit 40b132
    else
Packit 40b132
        FIPSMODE=false
Packit 40b132
        RET_EXP=1
Packit 40b132
    fi
Packit 40b132
Packit 40b132
    html_head "SSL - FIPS mode ${ONOFF} for ${CLTSRV}"
Packit 40b132
Packit 40b132
    for DBDIR in ${DBDIRS}
Packit 40b132
    do
Packit 40b132
        EXT_OPT=
Packit 40b132
        echo ${DBDIR} | grep ext > /dev/null
Packit 40b132
        if [ $? -eq 0 ]; then
Packit 40b132
            EXT_OPT="extended "
Packit 40b132
        fi
Packit 40b132
Packit 40b132
        echo "${SCRIPTNAME}: Turning FIPS ${ONOFF} for the ${EXT_OPT} ${CLTSRV}"
Packit 40b132
Packit 40b132
        echo "modutil -dbdir ${DBDIR} -fips ${FIPSMODE} -force"
Packit 40b132
        ${BINDIR}/modutil -dbdir ${DBDIR} -fips ${FIPSMODE} -force 2>&1
Packit 40b132
        RET=$?  
Packit 40b132
        html_msg "${RET}" "0" "${TESTNAME} (modutil -fips ${FIPSMODE})" \
Packit 40b132
                 "produced a returncode of ${RET}, expected is 0"
Packit 40b132
  
Packit 40b132
        echo "modutil -dbdir ${DBDIR} -list"
Packit 40b132
        DBLIST=`${BINDIR}/modutil -dbdir ${DBDIR} -list 2>&1`
Packit 40b132
        RET=$?  
Packit 40b132
        html_msg "${RET}" "0" "${TESTNAME} (modutil -list)" \
Packit 40b132
                 "produced a returncode of ${RET}, expected is 0"
Packit 40b132
Packit 40b132
        echo "${DBLIST}" | grep "FIPS PKCS #11"
Packit 40b132
        RET=$?
Packit 40b132
        html_msg "${RET}" "${RET_EXP}" "${TESTNAME} (grep \"FIPS PKCS #11\")" \
Packit 40b132
                 "produced a returncode of ${RET}, expected is ${RET_EXP}"
Packit 40b132
    done
Packit 40b132
Packit 40b132
    html "
"
Packit 40b132
}
Packit 40b132
Packit 40b132
############################ ssl_set_fips ##############################
Packit 40b132
# local shell function to run all tests set in NSS_SSL_TESTS variable 
Packit 40b132
########################################################################
Packit 40b132
ssl_run_tests()
Packit 40b132
{
Packit 40b132
    for SSL_TEST in ${NSS_SSL_TESTS}
Packit 40b132
    do
Packit 40b132
        case "${SSL_TEST}" in
Packit 40b132
        "crl")
Packit 40b132
            ssl_crl_ssl
Packit 40b132
            ssl_crl_cache
Packit 40b132
            ;;
Packit 40b132
        "iopr")
Packit 40b132
            ssl_iopr_run
Packit 40b132
            ;;
Packit 40b132
        *)
Packit 40b132
            SERVER_MODE=`echo "${SSL_TEST}" | cut -d_ -f1`
Packit 40b132
            CLIENT_MODE=`echo "${SSL_TEST}" | cut -d_ -f2`
Packit 40b132
Packit 40b132
            case "${SERVER_MODE}" in
Packit 40b132
            "normal")
Packit 40b132
                SERVER_OPTIONS=
Packit 40b132
                ;;
Packit 40b132
            "bypass")
Packit 40b132
                SERVER_OPTIONS="-B -s"
Packit 40b132
                ;;
Packit 40b132
            "fips")
Packit 40b132
                SERVER_OPTIONS=
Packit 40b132
                ssl_set_fips server on
Packit 40b132
                ;;
Packit 40b132
            *)
Packit 40b132
                echo "${SCRIPTNAME}: Error: Unknown server mode ${SERVER_MODE}"
Packit 40b132
                continue
Packit 40b132
                ;;
Packit 40b132
            esac
Packit 40b132
Packit 40b132
            case "${CLIENT_MODE}" in
Packit 40b132
            "normal")
Packit 40b132
                CLIENT_OPTIONS=
Packit 40b132
                ;;
Packit 40b132
            "bypass")
Packit 40b132
                CLIENT_OPTIONS="-B -s"
Packit 40b132
                ;;
Packit 40b132
            "fips")
Packit 40b132
                SERVER_OPTIONS=
Packit 40b132
                ssl_set_fips client on
Packit 40b132
                ;;
Packit 40b132
            *)
Packit 40b132
                echo "${SCRIPTNAME}: Error: Unknown client mode ${CLIENT_MODE}"
Packit 40b132
                continue
Packit 40b132
                ;;
Packit 40b132
            esac
Packit 40b132
Packit 40b132
            ssl_run_all
Packit 40b132
Packit 40b132
            if [ "${SERVER_MODE}" = "fips" ]; then
Packit 40b132
                ssl_set_fips server off
Packit 40b132
            fi
Packit 40b132
Packit 40b132
            if [ "${CLIENT_MODE}" = "fips" ]; then
Packit 40b132
                ssl_set_fips client off
Packit 40b132
            fi
Packit 40b132
            ;;
Packit 40b132
        esac
Packit 40b132
    done
Packit 40b132
}
Packit 40b132
Packit 40b132
################################# main #################################
Packit 40b132
Packit 40b132
ssl_init
Packit 40b132
ssl_run_tests
Packit 40b132
ssl_cleanup
Packit 40b132