#!/bin/bash

set -e
ETCDIR=/etc


function usage () {
    echo "$0: [--etcdir <dir>]"
    echo "--etcdir - indicates rootdir of configuration files, default ${ETCDIR}"
}

while [ $# -gt 0 ] ; do
    case $1 in
	--etcdir)
	    ETCDIR=$2
	    shift
	    shift
	;;
	*)
	    usage
	    shift
    esac
done

echo ${ETCDIR}
echo -n "Default cell or realm is "
cat ${ETCDIR}/openafs/ThisCell

echo "Do you want to change it? (y,N)"
read r
case $r in
    y|Y)
	echo "What cell do you want?"
	echo "0 - ist.utl.pt"
	echo "1 - realm.tagus.ist.utl.pt"
	echo "x - other"
    ;;
    *)
	exit 0;
esac

read r
case $r in
    0)
	CELL=ist.utl.pt
	REALM=IST.UTL.PT
	;;
    1)
	CELL=realm.tagus.ist.utl.pt
	REALM=REALM.TAGUS.IST.UTL.PT
	;;
    *)
	echo "What is the openafs cell?"
	read CELL
	echo "What is then Kerberos realm?"
	read REALM
esac

echo $CELL > ${ETCDIR}/openafs/ThisCell
TMPPROG=`mktemp`
TMPFILE=`mktemp`
cp ${ETCDIR}/krb5.conf ${TMPFILE}
echo "/default_realm/ { print \"default_realm = $REALM\"} ; ! /default_realm/ {print} ;" > ${TMPPROG}
awk -f ${TMPPROG} ${TMPFILE} > ${ETCDIR}/krb5.conf
rm ${TMPFILE}
rm ${TMPPROG}

cp -p ${ETCDIR}/krb5.conf ${ETCDIR}/krb5.conf.tp-srv-conf-old
TIMESYNCPROTECT="#######kdc_timesync protected######"
if ! egrep -q "${TIMESYNCPROTECT}" ${ETCDIR}/krb5.conf ; then
    echo "kdc_timesync not protected"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    gawk '/^[[:space:]]*kdc_timesync/ {print "#######kdc_timesync protected######" ;
        print "# On MIT Kerberos kdc_timesync = 1" ;
        print "# On Heimdal Kerberos kdc_timesync = 0" ; } ;
        { print }' ${TMPFILE} > ${ETCDIR}/krb5.conf
fi

if dpkg --status heimdal-clients > /dev/null ; then
    echo "Heimdal Kerberos"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    gawk '! /^[[:space:]]*kdc_timesync/ { print } ; /^[[:space:]]*kdc_timesync/ {print "\tkdc_timesync = 0 " ; }' ${TMPFILE} > ${ETCDIR}/krb5.conf
else
    if dpkg --status krb5-user > /dev/null ; then
        echo "MIT Kerberos"
	TMPFILE=`mktemp`
	cp ${ETCDIR}/krb5.conf ${TMPFILE}
        gawk '! /^[[:space:]]*kdc_timesync/ { print } ; /^[[:space:]]*kdc_timesync/ {print "\tkdc_timesync = 1 " ; }' ${TMPFILE} > ${ETCDIR}/krb5.conf
    else
        echo "I don't know what kind of Kerberos is installed"
    fi
fi

if ! egrep -q "^REALM.TAGUS.IST.UTL.PT = {" ${ETCDIR}/krb5.conf ; then
    echo "Nao tem informacao acerca do REALM do taguspark"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    awk '{ print } ; /\[realms\]/ { print "REALM.TAGUS.IST.UTL.PT = { ";
	print "         kdc = kerberos.tagus.ist.utl.pt" ;
	print "         kdc = kerberos-1.tagus.ist.utl.pt" ;
	print "         kdc = kerberos-2.tagus.ist.utl.pt" ;
	print "         admin_server = kerberos.tagus.ist.utl.pt" ;
	print "}" ; } ' ${TMPFILE} > ${ETCDIR}/krb5.conf
    rm ${TMPFILE}
fi

if ! egrep -q "^IST.UTL.PT = {" ${ETCDIR}/krb5.conf ; then
    echo "Nao tem informacao acerca do REALM do IST-Alameda"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    awk '{ print } ; /\[realms\]/ { print "IST.UTL.PT = { ";
	print "         kdc = kerberos1.ist.utl.pt" ;
	print "         kdc = kerberos2.ist.utl.pt" ;
	print "         admin_server = kerberos.ist.utl.pt" ;
	print "}" ; } ' ${TMPFILE} > ${ETCDIR}/krb5.conf
    rm ${TMPFILE}
fi

if ! egrep -q "tagus.ist.utl.pt = REALM.TAGUS.IST.UTL.PT" ${ETCDIR}/krb5.conf ; then
    echo "Nao tem mapeamento dominio realm para o Taguspark"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    awk '{ print } ; /\[domain_realm\]/ { print "      .tagus.ist.utl.pt = REALM.TAGUS.IST.UTL.PT " ; 
        print "      tagus.ist.utl.pt = REALM.TAGUS.IST.UTL.PT" } ; ' ${TMPFILE} > ${ETCDIR}/krb5.conf
fi

if ! egrep -q "ist.utl.pt = IST.UTL.PT" ${ETCDIR}/krb5.conf ; then
    echo "Nao tem mapeamento dominio realm para o IST-Alameda"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/krb5.conf ${TMPFILE}
    awk '{ print } ; /\[domain_realm\]/ { print "      .ist.utl.pt = IST.UTL.PT " ; 
        print "      ist.utl.pt = IST.UTL.PT" } ; ' ${TMPFILE} > ${ETCDIR}/krb5.conf
fi


cp -p ${ETCDIR}/openafs/CellServDB ${ETCDIR}/openafs/CellServDB.tp-srv-conf-old
if ! egrep -q "^>realm.tagus.ist.utl.pt" ${ETCDIR}/openafs/CellServDB ; then
    echo "Nao tem informacao acerca da celula do Taguspark"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/openafs/CellServDB ${TMPFILE}
    cat > ${ETCDIR}/openafs/CellServDB <<EOF
>realm.tagus.ist.utl.pt
193.136.166.1           # marta.tagus.ist.utl.pt
193.136.166.2           # tania.tagus.ist.utl.pt
193.136.166.73          # gisela.tagus.ist.utl.pt
193.136.166.74          # hortensia.tagus.ist.utl.pt
193.136.166.75          # neusa.tagus.ist.utl.pt
EOF
    cat ${TMPFILE} >> ${ETCDIR}/openafs/CellServDB
    rm ${TMPFILE}
fi

if ! egrep -q "^>ist.utl.pt" ${ETCDIR}/openafs/CellServDB ; then
    echo "Nao tem informacao acerca da celula do IST-Alameda"
    TMPFILE=`mktemp`
    cp ${ETCDIR}/openafs/CellServDB ${TMPFILE}
    cat > ${ETCDIR}/openafs/CellServDB <<EOF
>ist.utl.pt
193.136.128.33          # afs01.ist.utl.pt
193.136.128.34          # afs02.ist.utl.pt
193.136.128.35          # afs03.ist.utl.pt
193.136.128.36          # afs04.ist.utl.pt
EOF
    cat ${TMPFILE} >> ${ETCDIR}/openafs/CellServDB
    rm ${TMPFILE}
fi

echo -n "Default cell or realm is "
cat ${ETCDIR}/openafs/ThisCell

echo "Do you want to change it? (y,N)"
read r
case $r in
    y|Y)
	echo "What cell do you want?"
	echo "0 - ist.utl.pt"
	echo "1 - realm.tagus.ist.utl.pt"
	echo "x - other"
    ;;
    *)
	exit 0;
esac

read r
case $r in
    0)
	CELL=ist.utl.pt
	REALM=IST.UTL.PT
	;;
    1)
	CELL=realm.tagus.ist.utl.pt
	REALM=REALM.TAGUS.IST.UTL.PT
	;;
    *)
	echo "What is the openafs cell?"
	read CELL
	echo "What is then Kerberos realm?"
	read REALM
esac

echo $CELL > ${ETCDIR}/openafs/ThisCell
TMPPROG=`mktemp`
TMPFILE=`mktemp`
cp ${ETCDIR}/krb5.conf ${TMPFILE}
echo "/default_realm/ { print \"default_realm = $REALM\"} ; ! /default_realm/ {print} ;" > ${TMPPROG}
awk -f ${TMPPROG} ${TMPFILE} > ${ETCDIR}/krb5.conf
rm ${TMPFILE}
rm ${TMPPROG}
