208 lines
6.8 KiB
Bash
208 lines
6.8 KiB
Bash
#! /usr/bin/bash
|
|
|
|
# ATTENTION:
|
|
#
|
|
# Please read spnegoReadme first to setup the testing
|
|
# environment needed
|
|
|
|
# the following ENV should be adjusted to match your environment
|
|
WWW_REALM=JSL.BEIJING
|
|
WWW_KDC=jsl-bjlab1.jsl.beijing
|
|
WWW_URL=http://jsl-bjlab1.jsl.beijing/1.txt
|
|
|
|
PROXY_REALM=JSLDUBLIN.IRELAND.SUN.COM
|
|
PROXY_KDC=anchor.jsldublin.ireland.sun.com
|
|
PROXY_URL=http://sceri.prc.sun.com/~ww155710/1.txt
|
|
PROXY_PARA="-Dhttp.proxyHost=anchor.jsldublin.ireland.sun.com -Dhttp.proxyPort=8080"
|
|
|
|
GOOD_PASS='-Duser=olala -Dpass=1q2w#E$R'
|
|
GOOD_KPASS='-Dkuser=olala -Dkpass=1q2w#E$R'
|
|
BAD_PASS='-Duser=olala -Dpass=false'
|
|
BAD_KPASS='-Dkuser=olala -Dkpass=false'
|
|
|
|
WWW_TAB=www.tab
|
|
PROXY_TAB=proxy.tab
|
|
TAB_PATH=/tmp/krb5cc_156710
|
|
|
|
FILE_CONTENT=content_of_web_file
|
|
|
|
# these ENV determines how much to show in terminal. don't edit
|
|
EXTRA_LOG="-Djava.util.logging.config.file=spnegoLog.properties -Dshowhint"
|
|
|
|
ANY_EXCEPTION='Exception'
|
|
IO_EXCEPTION='java.io.IOException'
|
|
PROTO_EXCEPTION='java.net.ProtocolException'
|
|
HEADER_200='HTTP/1.1 200'
|
|
|
|
# a java run
|
|
function runonce {
|
|
echo Testing $AUTH_TYPE-$TEST_NAME ...
|
|
java -Djava.security.krb5.realm=$USE_REALM \
|
|
-Djava.security.krb5.kdc=$USE_KDC \
|
|
-Djava.security.auth.login.config=spnegoLogin.conf \
|
|
-Dhttp.maxRedirects=2 \
|
|
$AUTH_PREF \
|
|
$EXTRA_PARA \
|
|
$EXTRA_LOG \
|
|
$USER_PASS \
|
|
$KUSER_PASS \
|
|
WebGet $USE_URL 2> err.log > out.log
|
|
if [ "$HAS_CACHE" = true ]; then
|
|
grep -i 'PROVIDING Kerberos' out.log && exit $LINENO
|
|
else
|
|
grep -i 'PROVIDING Kerberos' out.log > /dev/null || echo '....has not query Kerberos user/pass'
|
|
fi
|
|
}
|
|
|
|
function testsuite {
|
|
|
|
# normal runs
|
|
USER_PASS=$GOOD_PASS
|
|
KUSER_PASS=$GOOD_KPASS
|
|
|
|
TEST_NAME=Authenticate
|
|
AUTH_PREF=
|
|
runonce
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_RESPONSE" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_200" err.log > /dev/null || exit $LINENO
|
|
grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
|
|
|
|
TEST_NAME="Authenticate with Negotiate"
|
|
AUTH_PREF=-Dhttp.auth.preference=Negotiate
|
|
runonce
|
|
# first 40X and ask for authen i author-neg and 200 and success
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_RESPONSE" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_200" err.log > /dev/null || exit $LINENO
|
|
grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
|
|
|
|
TEST_NAME="Authenticate with Kerberos"
|
|
AUTH_PREF=-Dhttp.auth.preference=Kerberos
|
|
runonce
|
|
# first 40X and ask for authen i author-neg and 200 and success
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_RESPONSE" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_200" err.log > /dev/null || exit $LINENO
|
|
grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
|
|
|
|
TEST_NAME="Authenticate with Basic"
|
|
AUTH_PREF=-Dhttp.auth.preference=Basic
|
|
runonce
|
|
# first 40X and ask for authen i author-basic and 200 and success
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_RESPONSE" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_200" err.log > /dev/null || exit $LINENO
|
|
grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
|
|
|
|
if [ "$HAS_CACHE" = true ]; then
|
|
echo 'Skip bad kpass test if HAS_CACHE is true'
|
|
else
|
|
# bad kpass should fallback to basic
|
|
|
|
TEST_NAME="Authenticate fallback"
|
|
KUSER_PASS=$BAD_KPASS
|
|
AUTH_PREF=
|
|
runonce
|
|
# first 40X and ask for authen i cannot author-neg but can author-basic and 200 and success
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_RESPONSE" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null && exit $LINENO
|
|
grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$HEADER_200" err.log > /dev/null || exit $LINENO
|
|
grep -i "$ANY_EXCEPTION" err.log > /dev/null && exit $LINENO
|
|
|
|
# auth.pref given, does not fallback
|
|
|
|
TEST_NAME="Authenticate no fallback"
|
|
KUSER_PASS=$BAD_KPASS
|
|
AUTH_PREF=-Dhttp.auth.preference=Negotiate
|
|
runonce # will fail
|
|
# first 40X and ask for authen i cannot author-neg and fail with IO_EXCEPTION
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null && exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_ANY_REQUEST" err.log > /dev/null && exit $LINENO
|
|
grep -i "$IO_EXCEPTION" err.log > /dev/null || exit $LINENO
|
|
|
|
# bad kpass fallback to basic, but bad pass
|
|
TEST_NAME="Authenticate fallback but still cannot go on"
|
|
KUSER_PASS=$BAD_KPASS
|
|
USER_PASS=$BAD_PASS
|
|
AUTH_PREF=
|
|
runonce # will fail
|
|
# first 40X and ask for authen i cannot author-neg and author-basic again and again and fail with PROTO_EXCEPTION
|
|
grep -i "$FILE_CONTENT" out.log > /dev/null && exit $LINENO
|
|
grep -i "$HEADER_40X" err.log > /dev/null || exit $LINENO
|
|
grep -i "$AUTH_NEG_REQUEST" err.log > /dev/null && exit $LINENO
|
|
grep -i "$AUTH_BASIC_REQUEST" err.log > /dev/null || exit $LINENO
|
|
grep -i "$PROTO_EXCEPTION" err.log > /dev/null || exit $LINENO
|
|
fi
|
|
}
|
|
|
|
function testWWW {
|
|
|
|
# WWW Part
|
|
AUTH_TYPE=WWW
|
|
USE_REALM=$WWW_REALM
|
|
USE_KDC=$WWW_KDC
|
|
USE_URL=$WWW_URL
|
|
EXTRA_PARA=
|
|
|
|
HEADER_40X='HTTP/1.1 401'
|
|
AUTH_RESPONSE='WWW-Authenticate:'
|
|
AUTH_NEG_REQUEST='{Authorization: Negotiate'
|
|
AUTH_BASIC_REQUEST='{Authorization: Basic'
|
|
AUTH_ANY_REQUEST='{Authorization:'
|
|
|
|
testsuite
|
|
|
|
echo Pass WWW
|
|
}
|
|
|
|
function testProxy {
|
|
|
|
# Proxy Part
|
|
AUTH_TYPE=Proxy
|
|
USE_REALM=$PROXY_REALM
|
|
USE_KDC=$PROXY_KDC
|
|
USE_URL=$PROXY_URL
|
|
EXTRA_PARA=$PROXY_PARA
|
|
|
|
HEADER_40X='HTTP/1.1 407'
|
|
AUTH_RESPONSE='Proxy-Authenticate:'
|
|
AUTH_NEG_REQUEST='{Proxy-Authorization: Negotiate'
|
|
AUTH_BASIC_REQUEST='{Proxy-Authorization: Basic'
|
|
AUTH_ANY_REQUEST='{Proxy-Authorization:'
|
|
|
|
testsuite
|
|
|
|
echo Pass Proxy
|
|
}
|
|
|
|
HAS_CACHE='false'
|
|
kdestroy
|
|
testWWW
|
|
testProxy
|
|
|
|
HAS_CACHE='true'
|
|
#kinit for WWW_REALM
|
|
cp $WWW_TAB $TAB_PATH
|
|
testWWW
|
|
#kinit for PRXY_REALM
|
|
cp $PROXY_TAB $TAB_PATH
|
|
testProxy
|
|
|
|
kdestroy
|
|
rm err.log
|
|
rm out.log
|
|
|
|
exit 0 |