#! /bin/csh -f
#
# run client side of SSL protocol version test. Run this script
# after starting protServe script.
#
#set SSL_NEWROOT=newcert.cer
set SSL_NEWROOT=localcert.cer
#
# set allow hostname spoof for use with numeric IP address (e.g., 10.0.61.6)
# if the server cert doesn't have a subjectAltName.
#
#set NAME_SPOOF=H
set NAME_SPOOF=
#
# In SSL_AUTO mode, we wait SSL_WAIT seconds between runs of sslServer from
# the protServe script to allow the sslServer to get initialized. 
# Otherwise we wait manually via the sh script doprompt.
#
set SSL_AUTO=0
#
set SSL_HOST=localhost
set QUIET=
while ( $#argv > 0 )
    switch ( "$argv[1]" )
        case a:
            set SSL_AUTO = 1
            shift
            breaksw
        case q:
            set QUIET = q
            shift
            breaksw
        default:
            echo 'Usage: protClient [a(auto)]'
            exit(1)
    endsw
end
#
# options for every run of sslViewer
#
set STD_OPTS="$SSL_HOST a $SSL_NEWROOT $NAME_SPOOF"

echo ===== unrestricted server via SSLSetProtocolVersion
set SSL_PORT=1200
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t o m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 o m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=2t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3t m=t || exit(1)

doprompt $SSL_AUTO $QUIET

echo ===== server restricted to SSL2,3 via SSLSetProtocolVersion
set SSL_PORT=1201
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=3 || exit(1)
runProtClient $QUIET e "Expect error due to server ssl3 restriction" \
	$STD_OPTS P=$SSL_PORT t o || exit(1)
runProtClient $QUIET e "Expect error due to server ssl3 restriction" \
	$STD_OPTS P=$SSL_PORT g=t || exit(1)
	
doprompt $SSL_AUTO $QUIET

echo ===== server restricted to SSL2 via SSLSetProtocolVersion
set SSL_PORT=1202
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=2 || exit(1)
runProtClient $QUIET e "Expect error due to server ssl2 restriction" \
	$STD_OPTS P=$SSL_PORT t o || exit(1)
runProtClient $QUIET e "Expect error due to server ssl2 restriction" \
	$STD_OPTS P=$SSL_PORT 3 o || exit(1)
runProtClient $QUIET e "Expect error due to server ssl2 restriction" \
	$STD_OPTS P=$SSL_PORT g=3t || exit(1)
runProtClient $QUIET e "Expect error due to server ssl2 restriction" \
	$STD_OPTS P=$SSL_PORT g=t || exit(1)
runProtClient $QUIET e "Expect error due to server ssl2 restriction" \
	$STD_OPTS P=$SSL_PORT g=3 || exit(1)

doprompt $SSL_AUTO $QUIET

echo ===== unrestricted server via SSLSetProtocolVersionEnabled
set SSL_PORT=1203

runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t o m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 o m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=2t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3t m=t || exit(1)

doprompt $SSL_AUTO $QUIET

echo ===== server restricted to SSL3, TLS1 via SSLSetProtocolVersionEnabled
set SSL_PORT=1204
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT t o m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 o m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=2t m=t || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3 m=3 || exit(1)
runProtClient $QUIET e "Expect error due to server SSL3,TLS1 restriction " \
	$STD_OPTS P=$SSL_PORT 2 || exit(1)
runProtClient $QUIET e "Expect error due to server SSL3,TLS1 restriction " \
	$STD_OPTS P=$SSL_PORT g=2 || exit(1)

doprompt $SSL_AUTO $QUIET

echo ===== server restricted to SSL2,3 via SSLSetProtocolVersionEnabled
set SSL_PORT=1205

runProtClient $QUIET $STD_OPTS P=$SSL_PORT t m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 3 o m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT 2 m=2 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23t m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=23 m=3 || exit(1)
runProtClient $QUIET $STD_OPTS P=$SSL_PORT g=3 m=3 || exit(1)
#
# Odd case, we try for TLS1, server should respond with 3, which 
# we don't support
runProtClient $QUIET e "Expect error due to server SSL2,3 restriction" \
	$STD_OPTS P=$SSL_PORT g=2t || exit(1)
runProtClient $QUIET e "Expect error due to server SSL2,3 restriction" \
	$STD_OPTS P=$SSL_PORT t o || exit(1)
runProtClient $QUIET e "Expect error due to server SSL2,3 restriction" \
	$STD_OPTS P=$SSL_PORT g=t || exit(1)

echo =====
echo ===== protClient success
echo =====
