1# Test for the sample clients 2# This is a DejaGnu test script. 3# This script tests that sample user-user communication works. 4 5# This mostly just calls procedures in test/dejagnu/config/default.exp. 6 7if ![info exists KLIST] { 8 set KLIST [findfile $objdir/../../clients/klist/klist] 9} 10 11if ![info exists KDESTROY] { 12 set KDESTROY [findfile $objdir/../../clients/kdestroy/kdestroy] 13} 14 15if ![info exists SSERVER] { 16 set SSERVER [findfile $objdir/../../appl/sample/sserver/sserver] 17} 18if ![info exists SCLIENT] { 19 set SCLIENT [findfile $objdir/../../appl/sample/sclient/sclient] 20} 21 22# Set up the Kerberos files and environment. 23if {![get_hostname] || ![setup_kerberos_files] || ![setup_kerberos_env]} { 24 return 25} 26 27# Initialize the Kerberos database. The argument tells 28# setup_kerberos_db that it is being called from here. 29if ![setup_kerberos_db 0] { 30 return 31} 32 33proc start_sserver_daemon { inetd } { 34 global spawn_id 35 global sserver_pid 36 global sserver_spawn_id 37 global SSERVER 38 global T_INETD 39 global tmppwd 40 global portbase 41 42 # if inetd = 0, then we are running stand-alone 43 if !{$inetd} { 44 # Start the sserver 45 spawn $SSERVER -p [expr 8 + $portbase] -S $tmppwd/keytab 46 set sserver_pid [exp_pid] 47 set sserver_spawn_id $spawn_id 48 49 verbose "sserver_spawn is $sserver_spawn_id" 1 50 51 # Give sserver some time to start 52 sleep 2 53 } else { 54 # Start the sserver 55 spawn $T_INETD [expr 8 + $portbase] $SSERVER sserver -S $tmppwd/keytab 56 set sserver_pid [exp_pid] 57 set sserver_spawn_id $spawn_id 58 59 verbose "sserver_spawn (t_inetd) is $sserver_spawn_id" 1 60 61 expect { 62 -ex "Ready!" { } 63 eof { error "couldn't start t_inetd helper" } 64 } 65 } 66 67 return 1 68} 69 70 71proc stop_sserver_daemon { } { 72 global sserver_pid 73 global sserver_spawn_id 74 75 if [info exists sserver_pid] { 76 catch "close -i $sserver_spawn_id" 77 catch "exec kill $sserver_pid" 78 wait -i $sserver_spawn_id 79 unset sserver_pid 80 } 81 82 return 1 83} 84 85proc stop_check_sserver_daemon { } { 86 global sserver_spawn_id 87 global sserver_pid 88 89 # Check the exit status of sserver - should exit here 90 set status_list [wait -i $sserver_spawn_id] 91 verbose "wait -i $sserver_spawn_id returned $status_list (sserver)" 92 catch "close -i $sserver_spawn_id" 93 if { [lindex $status_list 2] != 0 || [lindex $status_list 3] != 0 } { 94 send_log "exit status: $status_list\n" 95 verbose "exit status: $status_list" 96 fail "sserver" 97 } else { 98 pass "sserver" 99 } 100 # In either case the server shutdown 101 unset sserver_pid 102} 103 104proc test_sclient { msg } { 105 global REALMNAME 106 global SCLIENT 107 global hostname 108 global spawn_id 109 global portbase 110 111 # Test the client 112 spawn $SCLIENT $hostname [expr 8 + $portbase] 113 verbose "sclient_spawn is $spawn_id" 1 114 115 expect { 116 "sendauth succeeded, reply is:" { 117 verbose "Start proper message" 118 } 119 timeout { 120 fail $msg 121 return 0 122 } 123 eof { 124 fail $msg 125 return 0 126 } 127 } 128 129 expect { 130 "You are krbtest/admin@$REALMNAME\r" { 131 verbose "received valid sample message"} 132 eof { 133 fail $msg 134 return 0 135 } 136 } 137 # This last expect seems useless, but without it the test hangs on 138 # NETBSD. 139 expect { 140 "\r" { } 141 } 142 143 if ![check_exit_status "ssample"] { 144 return 0 145 } 146 147 return 1 148} 149# We are about to start up a couple of daemon processes. We do all 150# the rest of the tests inside a proc, so that we can easily kill the 151# processes when the procedure ends. 152 153proc doit { } { 154 global hostname 155 global KEY 156 global sserver_pid 157 global sserver_spawn_id 158 159 # Start up the kerberos and kadmind daemons. 160 if ![start_kerberos_daemons 0] { 161 return 162 } 163 164 # Use kadmin to add an host key. 165 if ![add_random_key sample/$hostname 1] { 166 return 167 } 168 169 # Use ksrvutil to create a keytab entry for sample 170 if ![setup_keytab 1 sample] { 171 return 172 } 173 174 # Use kinit to get a ticket. 175 if ![kinit krbtest/admin adminpass$KEY 1] { 176 return 177 } 178 179 run_once sample_standalone { 180 if ![start_sserver_daemon 0 ] { 181 return 182 } 183 184 if ![test_sclient sclient] { 185 return 186 } 187 188 pass "sample - standalone" 189 190 stop_check_sserver_daemon 191 } 192 193 if ![start_sserver_daemon 1 ] { 194 return 195 } 196 197 if ![test_sclient sclient-inetd] { 198 return 199 } 200 201 pass "sample - inetd" 202 203 stop_check_sserver_daemon 204 return 205} 206 207set status [catch doit msg] 208 209stop_sserver_daemon 210 211stop_kerberos_daemons 212 213if { $status != 0 } { 214 send_error "ERROR: error in sample.exp\n" 215 send_error "$msg\n" 216 exit 1 217} 218