--- /dev/null
+# Standalone Kerberos test.
+# This is a DejaGnu test script.
+# This script tests that the Kerberos tools can talk to each other.
+
+# This mostly just calls procedures in testsuite/config/default.exp.
+
+if ![info exists K524INIT] {
+ set K524INIT [findfile $objdir/../../krb524/k524init]
+}
+
+if ![info exists KRB524D] {
+ set KRB524D [findfile $objdir/../../krb524/krb524d]
+}
+
+if ![info exists KLIST] {
+ set KLIST [findfile $objdir/../../clients/klist/klist]
+}
+
+if ![info exists KDESTROY] {
+ set KDESTROY [findfile $objdir/../../clients/kdestroy/kdestroy]
+}
+
+# Set up the Kerberos files and environment.
+if {![get_hostname] || ![setup_kerberos_files] || ![setup_kerberos_env]} {
+ return
+}
+
+# If we do not have what is for a V4 test - return
+if ![v4_compatible_enctype] {
+ return
+}
+
+# Initialize the Kerberos database. The argument tells
+# setup_kerberos_db that it is being called from here.
+if ![setup_kerberos_db 1] {
+ return
+}
+
+# A procedure to stop the krb524 daemon.
+proc start_k524_daemon { } {
+ global KRB524D
+ global k524d_spawn_id
+ global k524d_pid
+ global REALMNAME
+
+ spawn $KRB524D -m -p 3752 -r $REALMNAME -nofork
+ set k524d_spawn_id $spawn_id
+ set k524d_pid [exp_pid]
+
+ # Give the krb524d daemon a few seconds to get set up.
+ catch "exec sleep 2"
+}
+
+# A procedure to stop the krb524 daemon.
+proc stop_k524_daemon { } {
+ global k524d_spawn_id
+ global k524d_pid
+
+ if [info exists k524d_pid] {
+ catch "close -i $k524d_spawn_id"
+ catch "exec kill $k524d_pid"
+ catch "wait -i $k524d_spawn_id"
+ unset k524d_pid
+ }
+}
+
+# We are about to start up a couple of daemon processes. We do all
+# the rest of the tests inside a proc, so that we can easily kill the
+# processes when the procedure ends.
+
+proc doit { } {
+ global env
+ global KEY
+ global K524INIT
+ # To pass spawn_id to the wait process
+ global spawn_id
+ global KLIST
+ global KDESTROY
+ global tmppwd
+ global REALMNAME
+
+ # Start up the kerberos and kadmind daemons.
+ if ![start_kerberos_daemons 1] {
+ return
+ }
+
+ # Add a user key and get a V5 ticket
+ if {![add_kerberos_key $env(USER) 0] \
+ || ![kinit $env(USER) $env(USER)$KEY 0]} {
+ return
+ }
+
+ # Start the krb524d daemon.
+ start_k524_daemon
+
+ # The k524init program does not advertise anything on success -
+ #only failure.
+ spawn $K524INIT
+ expect {
+ -timeout 10
+ -re "k524init: .*\r" {
+ fail "k524init"
+ return
+ }
+ eof {}
+ timeout {}
+ }
+
+
+ if ![check_exit_status "k524init"] {
+ return
+ }
+ pass "k524init"
+
+ # Make sure that klist can see the ticket.
+ spawn $KLIST -4
+ expect {
+ -re "Kerberos 4 ticket cache:\[ \]*(.+:)?$tmppwd/tkt.*Principal:\[ \]*$env(USER)@$REALMNAME.*krbtgt\.$REALMNAME@$REALMNAME\r\n" {
+ verbose "klist started"
+ }
+ timeout {
+ fail "v4klist"
+ return
+ }
+ eof {
+ fail "v4klist"
+ return
+ }
+ }
+
+ expect {
+ "\r" { }
+ eof { }
+ }
+
+ if ![check_exit_status "klist"] {
+ return
+ }
+ pass "krb524d: v4klist"
+
+ # Destroy the ticket.
+ spawn $KDESTROY -4
+ if ![check_exit_status "kdestroy"] {
+ return
+ }
+ pass "krb524d: v4kdestroy"
+
+ pass "krb524d: krb524d"
+}
+
+set status [catch doit msg]
+
+stop_kerberos_daemons
+
+stop_k524_daemon
+
+if { $status != 0 } {
+ send_error "ERROR: error in v4krb524d.exp\n"
+ send_error "$msg\n"
+ exit 1
+}
+
+