diff --git a/tests/java/KerberosInit.java b/tests/java/KerberosInit.java new file mode 100644 index 000000000..794e16905 --- /dev/null +++ b/tests/java/KerberosInit.java @@ -0,0 +1,92 @@ +/* + * + * Copyright (c) 2007 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id$ + */ + +import javax.security.auth.login.*; +import javax.security.auth.callback.*; + +public class KerberosInit { + + private class TestCallBackHandler implements CallbackHandler { + + public void handle(Callback[] callbacks) + throws UnsupportedCallbackException { + for (int i = 0; i < callbacks.length; i++) { + if (callbacks[i] instanceof TextOutputCallback) { + TextOutputCallback toc = (TextOutputCallback)callbacks[i]; + System.out.println(toc.getMessage()); + } else if (callbacks[i] instanceof NameCallback) { + NameCallback nc = (NameCallback)callbacks[i]; + nc.setName("lha"); + } else if (callbacks[i] instanceof PasswordCallback) { + PasswordCallback pc = (PasswordCallback)callbacks[i]; + pc.setPassword("foo".toCharArray()); + } else { + throw new + UnsupportedCallbackException(callbacks[i], + "Unrecognized Callback"); + } + } + } + } + private TestCallBackHandler getHandler() { + return new TestCallBackHandler(); + } + + public static void main(String[] args) { + + LoginContext lc = null; + try { + lc = new LoginContext("kinit", new KerberosInit().getHandler()); + } catch (LoginException e) { + System.err.println("Cannot create LoginContext. " + e.getMessage()); + System.exit(1); + } catch (SecurityException e) { + System.err.println("Cannot create LoginContext. " + e.getMessage()); + System.exit(1); + } + + try { + lc.login(); + } catch (LoginException e) { + System.err.println("Authentication failed:" + e.getMessage()); + System.exit(1); + } + + System.out.println("lc.login ok"); + System.exit(0); + } +} + diff --git a/tests/java/Makefile.am b/tests/java/Makefile.am new file mode 100644 index 000000000..a467d933d --- /dev/null +++ b/tests/java/Makefile.am @@ -0,0 +1,40 @@ +# $Id: Makefile.am 20739 2007-05-31 16:53:21Z lha $ + +include $(top_srcdir)/Makefile.am.common + +noinst_DATA = krb5.conf + +check_SCRIPTS = $(SCRIPT_TESTS) + +SCRIPT_TESTS = check-kinit + +TESTS = $(SCRIPT_TESTS) + +port = 49188 + +do_subst = sed -e 's,[@]srcdir[@],$(srcdir),g' \ + -e 's,[@]port[@],$(port),g' \ + -e 's,[@]objdir[@],$(top_builddir)/tests/java,g' + +LDADD = ../../lib/krb5/libkrb5.la $(LIB_roken) + +check-kinit: check-kinit.in Makefile + $(do_subst) < $(srcdir)/check-kinit.in > check-kinit.tmp + chmod +x check-kinit.tmp + mv check-kinit.tmp check-kinit + +krb5.conf: krb5.conf.in Makefile + $(do_subst) < $(srcdir)/krb5.conf.in > krb5.conf.tmp + mv krb5.conf.tmp krb5.conf + +CLEANFILES= \ + $(TESTS) \ + *.tmp \ + current-db* \ + krb5.conf \ + messages.log + + +EXTRA_DIST = \ + check-kinit.in \ + krb5.conf.in diff --git a/tests/java/check-kinit.in b/tests/java/check-kinit.in new file mode 100644 index 000000000..866a1b9b9 --- /dev/null +++ b/tests/java/check-kinit.in @@ -0,0 +1,97 @@ +#!/bin/sh +# +# Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan +# (Royal Institute of Technology, Stockholm, Sweden). +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Institute nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $Id$ +# + +srcdir="@srcdir@" +objdir="@objdir@" +port="@port@" + +# If there is no useful db support compile in, disable test +../db/have-db || exit 77 +sh ${srcdir}/have-java.sh || exit 77 + +R=TEST.H5L.SE + +kadmin="${TESTS_ENVIRONMENT} ../../kadmin/kadmin -l -r $R" +kdc="${TESTS_ENVIRONMENT} ../../kdc/kdc --addresses=127.0.0.1 -P $port" + +KRB5_CONFIG="${objdir}/krb5.conf" +export KRB5_CONFIG + +rm -f ${keytabfile} messages.log +rm -f current-db* +rm -f out-* +rm -f mkey.file* + +echo "Compile" +javac -d "${objdir}" "${srcdir}/KerberosInit.java" || exit 1 + +echo Creating database +${kadmin} \ + init \ + --realm-max-ticket-life=1day \ + --realm-max-renewable-life=1month \ + ${R} || exit 1 + +${kadmin} add -p foo --use-defaults lha@${R} || exit 1 +${kadmin} modify --attributes=+requires-pre-auth lha@${R} || exit 1 + +echo Starting kdc +${kdc} & +kdcpid=$! + +sh ${srcdir}/../kdc/wait-kdc.sh +if [ "$?" != 0 ] ; then + kill ${kdcpid} + exit 1 +fi + +trap "kill ${kdcpid}; echo signal killing kdc; exit 1;" EXIT + + +echo "Run" +java \ + -Djava.security.krb5.conf="${objdir}"/krb5.conf \ + -Djava.security.auth.login.config="${srcdir}/jaas.conf" \ + KerberosInit || exit 1 + +echo "Done" + +echo "killing kdc (${kdcpid})" +kill $kdcpid || exit 1 + +trap "" EXIT + +exit 0 diff --git a/tests/java/have-java.sh b/tests/java/have-java.sh new file mode 100644 index 000000000..8a87a6832 --- /dev/null +++ b/tests/java/have-java.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Copyright (c) 2007 Kungliga Tekniska Högskolan +# (Royal Institute of Technology, Stockholm, Sweden). +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Institute nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $Id$ +# + +echo "Checking for java and javac" + +oldifs=$IFS +IFS=: +set -- $PATH +IFS=$oldifs +for i in $*; do + test -n "$i" || i="." + test -x $i/java && j=f + test -x $i/javac && k=c +done + +test "$j$k" = fc || exit 1 + +echo "ok" + +exit 0 diff --git a/tests/java/jaas.conf b/tests/java/jaas.conf new file mode 100644 index 000000000..a61fb4903 --- /dev/null +++ b/tests/java/jaas.conf @@ -0,0 +1,5 @@ +/* $Id$ */ + +kinit { + com.sun.security.auth.module.Krb5LoginModule required; +}; diff --git a/tests/java/krb5.conf.in b/tests/java/krb5.conf.in new file mode 100644 index 000000000..575c416f8 --- /dev/null +++ b/tests/java/krb5.conf.in @@ -0,0 +1,26 @@ +# $Id$ + +[libdefaults] + default_realm = TEST.H5L.SE + + +[realms] + TEST.H5L.SE = { + kdc = localhost:@port@ + } + +[kdc] + database = { + dbname = @objdir@/current-db + realm = TEST.H5L.SE + mkey_file = @objdir@/mkey.file + } + +[logging] + kdc = 0-/FILE:@objdir@/messages.log + default = 0-/FILE:@objdir@/messages.log + +# Check with default and non default salting +# This to check if the kdc return default salting +[kadmin] + default_keys = des:pw-salt des3-cbc-sha1:pw-salt des:pw-salt: