--- /dev/null
+function kfindcache {
+ klist -A | grep -A1 'Kerberos 5 ticket cache' | grep -iB1 "principal: .*$1" | head -n 1 | cut -f 2 -d "'"
+}
+
+function kdo {
+ local princ="$1"
+ shift;
+ local kinit_args="-l15m -r60m -F"
+ local cache=`kfindcache "$princ"`
+ if [ -n "$cache" ] && ! (KRB5CCNAME="$cache" klist -s "$cache"); then
+ KRB5CCNAME="$cache" kdestroy
+ cache=""
+ fi
+ if [ -z "$cache" ]; then
+ local oldcache=`klist | grep 'Kerberos 5 ticket cache' | cut -f 2 -d "'"`
+ kinit $kinit_args "$princ" || return 1
+ cache=`kfindcache "$princ"`
+ kswitch -c "$oldcache"
+ fi
+ echo "Running $1 with cache $cache (for principal $princ)" >&2
+ KRB5CCNAME="$cache" "$@"
+}
+
+function krootssh {
+ kdo ${ATHENA_USER:-$USER}}/root@ATHENA.MIT.EDU ssh -o "GSSAPIDelegateCredentials no" "$@"
+}