# 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 global portbase spawn $KRB524D -m -p [expr 7 + $portbase] -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. 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 global des3_krbtgt if {$des3_krbtgt} { return } # 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 }