#!/bin/bash

LANGUAGE=ru_RU
TEXTDOMAINDIR=/usr/share/locale/
TEXTDOMAIN=ald-renew-tickets

ALDBeginMarker="# _ALD_BEGIN_"
ALDEndMarker="# _ALD_END_"

ALDComment=\
$ALDBeginMarker"\n"\
"# This file is partially modified by ald(7).\n"\
"# Do not edit data between _ALD_BEGIN_ and _ALD_END_ labels manually.\n"\
"# These lines are updated automatically by ald-renew-tickets(1).\n"\
$ALDEndMarker;

CronString="MAILTO = \"\"\n00 * * * * ald-renew-tickets now"

User=""

TempFile="/tmp/ald_renew_tmp"
TempFile2="/tmp/ald_renew_tmp2"

MSG_CRON_FAILED=$"Failed to set crontab"
MSG_OFF=$"off"
MSG_ON=$"on"

usage()
{
    echo $"Usage: "
    echo $"  ald-renew-tickets now|on|off|stat"
    echo $"      now  - renew tickets now"
    echo $"      on   - schedule automatic renewal each hour"
    echo $"      off  - disable automatic renewal"
    echo $"      stat - displays automatic renewal status (on/off)"
    echo ""
}

makeOn()
{
    removeTempFile
    crontab -u $User -l > $TempFile 2> /dev/null
    #check last command result
    #if [ $? != 0 ]; then
    #remove ald markers
    sed "/$ALDBeginMarker/,/$ALDEndMarker/d" < $TempFile > $TempFile2
    cat $TempFile2 > $TempFile
    #fi
    #add ald markers
    #Add ald header
    echo -e $ALDComment > $TempFile2
    cat $TempFile >> $TempFile2
    cat $TempFile2 > $TempFile
    #add strings to end of file
    if [ -z $KRB5CCNAME ] || [ "$KRB5CCNAME" = "" ]; then
	#sed -i "\$a$ALDBeginMarker$ALDEndMarker" $TempFile
	sed -i "\$a$ALDBeginMarker\n$CronString\n$ALDEndMarker" $TempFile
    else
	sed -i "\$a$ALDBeginMarker\nKRB5CCNAME = \"$KRB5CCNAME\"\n$CronString\n$ALDEndMarker" $TempFile
    fi
    crontab -u $User $TempFile
    if [ $? != 0 ]; then
	echo $MSG_CRON_FAILED
    fi
    removeTempFile
}

makeNow()
{
    kinit -R -5
    klist -5 -f
}

makeOff()
{
    removeTempFile
    crontab -u $User -l > $TempFile 2> /dev/null
    #check last command result
    if [ $? != 0 ]; then
	return 0
    else
	#remove ald markers
	sed "/$ALDBeginMarker/,/$ALDEndMarker/d" < $TempFile > $TempFile2
	cat $TempFile2 > $TempFile
    fi
    crontab -u $User $TempFile
    if [ $? != 0 ]; then
	echo $MSG_CRON_FAILED
    fi
    removeTempFile
}

makeStat()
{
    removeTempFile
    crontab -u $User -l > $TempFile 2> /dev/null
    #check last command result
    if [ $? != 0 ]; then
	echo $MSG_OFF
	removeTempFile
	return 0
    else
	#TODO
	#BAD WAY
	krb=`sed -n 's/KRB5CCNAME = \(.*\)/\1/p' $TempFile`
	t=`cat $TempFile | grep -v "#" | grep "ald-renew-tickets" | wc -l`
	if [ "\"$KRB5CCNAME\"" = "$krb" ] && [ "$t" = "1" ]; then
	    echo $MSG_ON
	elif [ "" = "$krb" ] && [ "$t" = "1" ]; then
	    echo $MSG_ON
	else
	    echo $MSG_OFF
	    makeOff
	fi
    fi
    removeTempFile
}

setTempFile()
{
    User=`id -nu`;
}

removeTempFile()
{
    if [ -f $TempFile ]; then
	unlink $TempFile
    fi
    if [ -f $TempFile2 ]; then
	unlink $TempFile2
    fi
}

umask 0077
setTempFile
removeTempFile

case $# in
1)  case $1 in
    now)  makeNow;;
    on)   makeOn;;
    off)  makeOff;;
    stat) makeStat;;
    on)   makeOn;;
    *)    usage;;
    esac;;
*)  usage;;
esac

