test-gss.sh   [plain text]


#!/bin/sh

port=3007
realm="TEST.APPLE.COM"

service="test"
user="local"
pass="local"
server="localhost"

loc="/usr/local/libexec/heimdal/bin"

tmp="/private/tmp/krb5_testing_$$"
kt_file="${tmp}/server.keytab"
cc_file="${tmp}/krb5ccache"
pw_file="${tmp}/password-file"
export  KRB5CCNAME="FILE:${cc_file}"
export KRB5_KTNAME="FILE:${kt_file}"
export KRB5_CONFIG="${tmp}/kdc.conf"

kinit="kinit -c ${KRB5CCNAME}"
kdestroy="kdestory -c ${KRB5CCNAME}"
klist="klist -c ${KRB5CCNAME}"
kadmin="kadmin -l -r ${realm}"

echo "##### Starting #####"
echo "--------------------"
echo "hostname: ${server}"
echo "realm   : ${realm}"
echo "port    : ${port}"
echo "tmpdir  : ${tmpdir}"
echo ""

mkdir -p "${tmp}"

echo "${pass}" > "${pw_file}"

cat "${loc}/krb5.conf.in" |
	sed \
		-e "s,[@]realm[@],${realm},g" \
		-e "s,[@]objdir[@],${tmp},g" \
		-e "s,[@]port[@],${port},g" \
	> "${KRB5_CONFIG}"

echo "##### KRB5 CONFIG #####"
cat "${KRB5_CONFIG}"
echo "##########"
echo ""

echo "##### Configuring KDC #####"
${kadmin} init \
	--realm-max-ticket-life=1day \
	--realm-max-renewable-life=1month \
	"${realm}" || exit 1

${kadmin} add -p "${pass}" --use-defaults "${user}@${realm}" || exit 1
${kadmin} add -r --use-defaults "host/${server}@${realm}" || exit 1
${kadmin} add -r --use-defaults "${service}/${server}@${realm}" || exit 1

${kadmin} ext_keytab "${user}@${realm}" || exit 1
${kadmin} ext_keytab "host/${server}@${realm}" || exit 1
${kadmin} ext_keytab "${service}/${server}@${realm}" || exit 1

echo "##### Start the kdc #####"
"/System/Library/PrivateFrameworks/Heimdal.framework/Helpers/kdc" \
	--config-file="${KRB5_CONFIG}" \
	--addresses="localhost" \
	--ports="${port}" \
	--no-sandbox &
ret=$!
echo "Sleeping to let kdc start..."
sleep 1

trap "kill -9 ${ret}; echo signal killing ${ret}; exit 0;" EXIT

echo "##### Get tkt for ${user}@${realm} #####"
${kinit} --password-file="${pw_file}" "${user}@${realm}"

echo "##### Starting server/client for test one #####"
"${loc}/test-gss-server" --port ${port} --sname "${service}" &
"${loc}/test-gss-client" --server "${server}" --port ${port} \
		--sprinc "${service}/${server}@${realm}" \
		--cprinc "${user}@${realm}" || exit 100

echo "##### Removing ccache #####"
kdestroy -cache="${cc_file}"

echo "##### Removing setup #####"
${kadmin} del "${service}/${server}@${realm}"
${kadmin} del "host/${server}@${realm}"
${kadmin} del "${user}@${realm}"

rm -rf "${tmp}"

echo "##### DONE #####"
exit 0