Blame src/tests/dejagnu/krb-standalone/kprop.exp

Packit fd8b60
# Password-changing Kerberos test.
Packit fd8b60
# This is a DejaGnu test script.
Packit fd8b60
Packit fd8b60
# We are about to start up a couple of daemon processes.  We do all
Packit fd8b60
# the rest of the tests inside a proc, so that we can easily kill the
Packit fd8b60
# processes when the procedure ends.
Packit fd8b60
Packit fd8b60
proc setup_replica {} {
Packit fd8b60
    global tmppwd hostname REALMNAME env
Packit fd8b60
    file delete $tmppwd/replica-stash $tmppwd/replica-acl
Packit fd8b60
    file copy -force $tmppwd/stash:foo $tmppwd/replica-stash
Packit fd8b60
    file copy -force $tmppwd/acl $tmppwd/replica-acl
Packit fd8b60
    if ![file exists $tmppwd/kpropdacl] {
Packit fd8b60
	set aclfile [open $tmppwd/kpropd-acl w]
Packit fd8b60
	puts $aclfile "host/$hostname@$REALMNAME"
Packit fd8b60
	close $aclfile
Packit fd8b60
    }
Packit fd8b60
    file copy -force $tmppwd/adb.lock $tmppwd/replica-adb.lock
Packit fd8b60
    if [info exists env(K5TEST_LMDB)] {
Packit fd8b60
	set suffixes { .mdb .mdb-lock .lockout.mdb .lockout.mdb-lock }
Packit fd8b60
    } else {
Packit fd8b60
	set suffixes { {} .kadm5 .kadm5.lock .ok }
Packit fd8b60
    }
Packit fd8b60
    foreach suffix $suffixes {
Packit fd8b60
	file copy -force $tmppwd/kdc-db$suffix $tmppwd/replica-db$suffix
Packit fd8b60
    }
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
proc scan_kpropd_output {} {
Packit fd8b60
    global kpropd_spawn_id kpropd_pid
Packit fd8b60
Packit fd8b60
    # See if kpropd logged anything.  It should exit after processing
Packit fd8b60
    # one kprop connection.
Packit fd8b60
    expect {
Packit fd8b60
	-i $kpropd_spawn_id
Packit fd8b60
	eof {
Packit fd8b60
	    wait -i $kpropd_spawn_id
Packit fd8b60
	    unset kpropd_spawn_id kpropd_pid
Packit fd8b60
	}
Packit fd8b60
	timeout { }
Packit fd8b60
	-re "Connection from \[a-zA-Z.-\]*" { exp_continue }
Packit fd8b60
	-re "krb5_recvauth" { exp_continue }
Packit fd8b60
	-re "authenticated client" { exp_continue }
Packit fd8b60
	-re "calling kdb5_util to load database\r\n" { exp_continue }
Packit fd8b60
	-re "Child PID is \[0-9\]*\r\n" { exp_continue }
Packit fd8b60
	-re "Rejected connection" {
Packit fd8b60
	    fail "kprop (rejected)"
Packit fd8b60
	}
Packit fd8b60
    }
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
proc doit { } {
Packit fd8b60
    global KLIST KDESTROY
Packit fd8b60
    global REALMNAME KEY
Packit fd8b60
    global KADMIN_LOCAL KTUTIL KDB5_UTIL KPROPLOG KPROP kpropd_spawn_id
Packit fd8b60
    global hostname tmppwd spawn_id timeout
rpm-build 1cb403
    global KRBIV supported_enctypes portbase mode ulog
Packit fd8b60
Packit fd8b60
    # Delete any db, ulog files
Packit fd8b60
    delete_db
Packit fd8b60
Packit fd8b60
    # Initialize the Kerberos database.  The argument tells
Packit fd8b60
    # setup_kerberos_db that it is being called from here.
Packit fd8b60
    if ![setup_kerberos_db 0] {
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
    setup_replica
Packit fd8b60
    if ![start_kerberos_daemons 0] {
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
    if ![add_random_key host/$hostname 0] {
Packit fd8b60
	fail "kprop (host key)"
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
    if ![setup_keytab 0] {
Packit fd8b60
	fail "kprop (keytab)"
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    # Get kprop server up and running.
Packit fd8b60
    envstack_push
Packit fd8b60
    setup_kerberos_env replica
Packit fd8b60
    start_kpropd
Packit fd8b60
    envstack_pop
Packit fd8b60
Packit fd8b60
    # Use kadmin to add a key.
Packit fd8b60
    if ![add_kerberos_key wakawaka 0] {
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    # Dump master database.
Packit fd8b60
    envstack_push
Packit fd8b60
    setup_kerberos_env kdc
Packit fd8b60
    spawn $KDB5_UTIL dump $tmppwd/replica_datatrans
Packit fd8b60
    expect eof
Packit fd8b60
    if ![check_exit_status "kprop (kdb5_util dump)"] { return }
Packit fd8b60
Packit fd8b60
    # Just in case kpropd is a little slow in starting up...
Packit fd8b60
    sleep 1
Packit fd8b60
Packit fd8b60
    # Try a propagation.
Packit fd8b60
    spawn $KPROP -f $tmppwd/replica_datatrans -P [expr 10 + $portbase] -s $tmppwd/keytab $hostname
Packit fd8b60
    expect eof
Packit fd8b60
    set kprop_exit [check_exit_status "kprop (exit status)"]
Packit fd8b60
    # log output for debugging
Packit fd8b60
    scan_kpropd_output
Packit fd8b60
    if !$kprop_exit { return }
Packit fd8b60
Packit fd8b60
    # Examine new database.
Packit fd8b60
    setup_kerberos_env replica
Packit fd8b60
    spawn $KADMIN_LOCAL -r $REALMNAME -q listprincs
Packit fd8b60
    expect {
Packit fd8b60
	wakawaka@ {
Packit fd8b60
	    expect eof
Packit fd8b60
	}
Packit fd8b60
	eof {
Packit fd8b60
	    fail "kprop (updated replica data)"
Packit fd8b60
	    return
Packit fd8b60
	}
Packit fd8b60
	timeout {
Packit fd8b60
	    fail "kprop (examining new db)"
Packit fd8b60
	    return
Packit fd8b60
	}
Packit fd8b60
    }
Packit fd8b60
    pass "kprop"
Packit fd8b60
}
Packit fd8b60
Packit fd8b60
run_once kprop {
Packit fd8b60
    catch "unset kpropd_pid"
Packit fd8b60
    catch "unset kpropd_spawn_id"
Packit fd8b60
Packit fd8b60
    # Set up the Kerberos files and environment.
Packit fd8b60
    if {![get_hostname] || ![setup_kerberos_files] || ![setup_kerberos_env]} {
Packit fd8b60
	return
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    set status [catch doit msg]
Packit fd8b60
Packit fd8b60
    stop_kerberos_daemons
Packit fd8b60
Packit fd8b60
    # if kpropd is running, kill it
Packit fd8b60
    if [info exists kpropd_pid] {
Packit fd8b60
	catch {
Packit fd8b60
	    exec kill $kpropd_pid
Packit fd8b60
	    expect -i $kpropd_spawn_id eof
Packit fd8b60
	    wait -i $kpropd_spawn_id
Packit fd8b60
	    unset kpropd_pid kpropd_spawn_id
Packit fd8b60
	}
Packit fd8b60
    }
Packit fd8b60
Packit fd8b60
    delete_db
Packit fd8b60
Packit fd8b60
    if { $status != 0 } {
Packit fd8b60
	send_error "ERROR: error in kprop.exp\n"
Packit fd8b60
	send_error "$msg\n"
Packit fd8b60
	exit 1
Packit fd8b60
    }
Packit fd8b60
}