aboutsummaryrefslogtreecommitdiff
path: root/src/kadmin/testing/scripts/start_servers_local
blob: 0cbed462d1adbcb5d17a97136c607f22c7ef944b (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
#!/bin/sh

DUMMY=${TESTDIR=$TOP/testing}
DUMMY=${STESTDIR=$STOP/testing}
DUMMY=${INITDB=$STESTDIR/scripts/init_db}
DUMMY=${SRVTCL=$TESTDIR/util/kadm5_srv_tcl}; export SRVTCL
DUMMY=${LOCAL_MAKE_KEYTAB=$TESTDIR/scripts/make-host-keytab.pl}
DUMMY=${STOP_SERVERS_LOCAL=$STESTDIR/scripts/stop_servers_local}
DUMMY=${KRB5RCACHEDIR=$TESTDIR} ; export KRB5RCACHEDIR

if [ -d /usr/tmp ]; then
	usrtmp=/usr/tmp
else
	usrtmp=/var/tmp
fi

$STOP_SERVERS_LOCAL -start_servers

if $VERBOSE; then
	REDIRECT=
else
	REDIRECT='>/dev/null'
fi

while :; do
	case $1 in
	-keysalt)
		shift
		if [ $# -gt 0 ]; then
			keysalts="$keysalts $1"
		else
			break
		fi
		;;
	-kdcport)
		shift
		if [ $# -gt 0 ]; then
			kdcport=$1
		else
			break
		fi
		;;
	*)
		break
		;;
	esac
	shift
done

if [ $# -gt 1 ]; then
	echo "Usage: $0 [-kdcport port] [-keysalts tuple] ... [top]" 1>&2
	exit 1
elif [ $# = 1 ]; then
	TOP=$1
	export TOP
fi

# create a fresh db

$INITDB "$keysalts" || exit 1

# Post-process the config files based on our arguments
if [ "$keysalts" != "" ]; then
	sedcmd="s/\([ 	]*supported_enctypes =\).*/\1 $keysalts/"
	sed -e "$sedcmd" < $K5ROOT/kdc.conf > $K5ROOT/kdc.conf.new
	mv $K5ROOT/kdc.conf.new $K5ROOT/kdc.conf
fi
if [ "$kdcport" != "" ] ; then
	sedcmd="s/\(kdc_ports = .*\)[ 	]*/\1, $kdcport/"
	sed -e "$sedcmd" < $K5ROOT/kdc.conf > $K5ROOT/kdc.conf.new
	mv $K5ROOT/kdc.conf.new $K5ROOT/kdc.conf
fi

# allow admin to krlogin as root (for cleanup)
DUMMY=${REALM=SECURE-TEST.OV.COM}; export REALM
hostname=`hostname`
QUALNAME=`$TOP/testing/scripts/qualname.pl $hostname`; export QUALNAME

cat - > /tmp/start_servers_local$$ <<\EOF
if { [catch {
	source $env(STOP)/testing/tcl/util.t
	set r $env(REALM)
	set q $env(QUALNAME)
	puts stdout [kadm5_init $env(SRVTCL) mrroot null \
		[config_params {KADM5_CONFIG_REALM} $r] \
		$KADM5_STRUCT_VERSION $KADM5_API_VERSION_3 server_handle]
	puts stdout [kadm5_create_principal $server_handle \
		[simple_principal host/$q@$r] {KADM5_PRINCIPAL} notathena]
	puts stdout [kadm5_destroy $server_handle]
} err]} {
	puts stderr "initialization error: $err"
	exit 1
}
exit 0
EOF
eval "$SRVTCL < /tmp/start_servers_local$$ $REDIRECT"
x=$?
rm /tmp/start_servers_local$$
if test $x != 0 ; then exit 1 ; fi

# rm -f /etc/v5srvtab
# eval $LOCAL_MAKE_KEYTAB -princ host/xCANONHOSTx /etc/v5srvtab $REDIRECT

# run the servers (from the build tree)

adm_start_file=/tmp/adm_server_start.$$
kdc_start_file=/tmp/kdc_server_start.$$

rm -f $kdc_start_file

if test "x$USER" = x ; then
  USER=$LOGNAME ; export USER
fi

kdc_args="-R dfl:kdc_rcache.$USER"

(trap "" 2; cd $TOP/../kdc; ./krb5kdc $kdc_args; touch $kdc_start_file) \
	< /dev/null > $usrtmp/kdc-log.$USER 2>&1 &

s=1
max_s=60
sofar_s=0
timewait_s=300

ovadm_args=-W

rm -f $adm_start_file

(sleep 1; cd $TOP/server; ./kadmind $ovadm_args; \
	touch $adm_start_file) < /dev/null > $usrtmp/kadm-log.$USER 2>&1 &

# wait until they start

while [ $sofar_s -le $max_s ]; do
	if $VERBOSE; then
		echo "Sleeping for $s seconds to allow servers" \
			"to start..."
	fi

	sofar_s=`expr $sofar_s + $s`

	sleep $s

	if [ -f $adm_start_file -a -f $kdc_start_file ]; then
		break
	fi
done

if [ $sofar_s -gt $max_s ]; then
	echo "Admin server or KDC failed to start after $sofar_s" \
		"seconds." 1>&2
	if [ ! -f $adm_start_file ]; then
	    echo "  No admin server start file $adm_start_file." 1>&2
	fi
	if [ ! -f $kdc_start_file ]; then
	    echo "  No KDC start file $adm_start_file." 1>&2
	fi
	exit 1
fi

rm -f $kdc_start_file $adm_start_file