blob: 94bafa2d19b35c1154ef513ea9f6bd77a811b48b [file]
#!/bin/bash
# @@@ START COPYRIGHT @@@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# @@@ END COPYRIGHT @@@
source krb5functions
function msg
{
echo "krb5check[$$] `date`: $1" >> $LOG_FILE
}
# ******* main ******
WAIT_INTERVAL=300
REPORT_INTERVAL=12
LOCK_FILE=$TRAF_VAR/krb5check
LOG_FILE=$TRAF_HOME/logs/krb5check
CACHE_FILE=""
HOST_NAME=`hostname -f`
getKeytab
echo "keytab: $KEYTAB"
introMessage="Starting krb5check "
# Echo this process's id to the LOCK_FILE
echo $$ > $LOCK_FILE
while [ $# -gt 0 ]; do
case $1 in
-h)
echo $"Usage: $0 {-c |-h |-r | -w}"
exit
;;
-c)
shift
CACHE_FILE=$1
;;
-r)
shift
REPORT_INTERVAL=$1
;;
-w)
shift
WAIT_INTERVAL=$1
;;
*)
introMessage=$introMessage"Invalid option detected"
echo "$introMessage"
echo $"Usage: $0 {-c |-h |-r | -w}"
exit 1
;;
esac
shift
done
# get keytab
introMessage=$introMessage"using keytab $KEYTAB "
# get principal from the cached entry
getCachedTicket
noTicket=$?
if [[ $noTicket -eq 1 ]]; then
PRINCIPAL="Not Available"
else
PRINCIPAL="$( klist -c $CACHE_FILE | grep 'Default principal' | awk '{print $3}' )"
fi
introMessage=$introMessage" and principal $PRINCIPAL "
msg "$introMessage"
# go into an infinite loop with a WAIT_INTERVAL second pause between each iteration
# print a report the first time
reportCount=$( expr $REPORT_INTERVAL + 1 )
while :; do
# go see if a new ticket has been initd
getCachedTicket
noTicket=$?
if [[ $noTicket -eq 0 ]]; then
# expire time could change between iterations
EXPIRE_TIME=$( date -d "$( klist -c $CACHE_FILE | grep krbtgt | awk '{print $3, $4}' )" +%s )
# report time left every REPORT_INTERVAL times
if [ $reportCount -gt $REPORT_INTERVAL ]; then
getStatus
msg "$TICKET_STATUS"
reportCount=0
else
reportCount=$( expr $reportCount + 1 )
fi
# If ticket has expired, destroy cached entry
if [ $( date +%s ) -ge $EXPIRE_TIME ]; then
kdestroy -c $CACHE_FILE &> /dev/null
msg "Removed expired ticket cache ($CACHE_FILE) for user $PRINCIPAL"
# Otherwise renew it
elif [ $( expr $EXPIRE_TIME - $( date +%s ) ) -le $WAIT_INTERVAL ]; then
msg "Time to renew ticket for $PRINCIPAL"
kinit -R -k -t $KEYTAB $PRINCIPAL
#if [ $? -ne 0 ]; then
# msg "An error occurred while renewing $PRINCIPAL, continuing"
#else
msg "Renewed ticket cache ($CACHE_FILE) for principal $PRINCIPAL"
msg "`klist`"
#fi
fi
else
msg="Ticket has not been created or it has expired"
fi
# wait a bit then go round again
sleep $WAIT_INTERVAL
done