start_servers_local [plain text]
#!/bin/sh
DUMMY=${TESTDIR=$TOP/testing}
DUMMY=${STESTDIR=$STOP/testing}
DUMMY=${SAVE_FILES=$STESTDIR/scripts/save_files.sh}
DUMMY=${FIX_CONF_FILES=$TESTDIR/scripts/fixup-conf-files.pl}
DUMMY=${INITDB=$STESTDIR/scripts/init_db}
DUMMY=${SRVTCL=$TESTDIR/util/ovsec_kadm_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
v4files=false
while :; do
case $1 in
-keysalt)
shift
if [ $ keysalts="$keysalts $1"
else
break
fi
;;
-kdcport)
shift
if [ $ kdcport=$1
else
break
fi
;;
-v4files)
if [ "`whoami`" != "root" ]; then
echo "You must be root to use -v4files!" 1>&2
exit 1
fi
v4files=true
;;
*)
break
;;
esac
shift
done
if [ $ echo "Usage: $0 [-kdcport port] [-keysalts tuple] ... [top]" 1>&2
exit 1
elif [ $ TOP=$1
export TOP
fi
if $v4files; then
$SAVE_FILES || exit 1
$FIX_CONF_FILES || exit 1
fi
$INITDB "$keysalts" || exit 1
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
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 [ovsec_kadm_init $env(SRVTCL) mrroot null $r \
$OVSEC_KADM_STRUCT_VERSION $OVSEC_KADM_API_VERSION_1 server_handle]
puts stdout [ovsec_kadm_create_principal $server_handle \
[simple_principal host/$q@$r] {OVSEC_KADM_PRINCIPAL} notathena]
puts stdout [ovsec_kadm_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
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=10
max_s=60
sofar_s=0
timewait_s=300
while true; do
rm -f $adm_start_file
(sleep 5; cd $TOP/server; ./kadmind $ovadm_args; \
touch $adm_start_file) < /dev/null > $usrtmp/kadm-log.$USER 2>&1 &
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 -le $max_s ]; then
if $VERBOSE; then
LOG_USER='log_user 1'
else
LOG_USER='log_user 0'
fi
if $EXPECT <<EOF
$LOG_USER
spawn telnet 127.0.0.1 1751
expect {
"Connection refused" {
close
wait
exit 1
}
"Connected" {
send "close\n"
close
wait
exit 0
}
default {
catch {close}
wait
exit 1
}
}
EOF
then
rm -f $kdc_start_file $adm_start_file
break
else
if $VERBOSE; then
echo "Could not connect to Admin server;" \
"attempting restart ($sofar_s" \
"seconds so far)."
fi
max_s=$timewait_s
continue
fi
else
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
done