aboutsummaryrefslogtreecommitdiff
path: root/src/tests/dejagnu/krb-standalone/v4krb524d.exp
blob: 4cef8eab4fb2f62f191933765d96f5ecbd484c93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# 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 -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
}