| #! /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 |