#!/bin/sh
#pragma ident	"@(#)request	1.5	98/09/30 SMI"
#
# Copyright (c) 1998, by Sun Microsystems, Inc.
# All rights reserved.
#
trap 'exit 3' 15

getans()
{
	# need to get the format string because it must be
	# quoted
	fmt=$1
	shift

	printf "$fmt" $*

	while true ;
	do
		read ans

		if [ "$ans" != "" ]
		then
			break
		else
			printf "$fmt" $*
		fi

	done
}

getnum_ans()
{
	def=$1
	# need to get the format string because it must be
	# quoted
	fmt=$2
	shift
	shift

	printf "$fmt" $*

	while true ;
	do
		read ans

		if [ "$ans" != "" ]
		then
			if expr $ans + 0 ;
			then
				if [ $ans -gt 0 ]
				then
					break
				else
			echo `gettext 'Respond with a number > 0.' `
				fi
			else
				echo `gettext 'Respond with a number.' `
			fi
		else
			echo `gettext 'No response. Will use default.' `
			ans=$def
			break
		fi

		printf "$fmt" $*
	done
}

getYN()
{
	# need to get the format string because it must be
	# quoted
	fmt=$1
	yval=$2
	nval=$3
	q2=$4
	shift 4

	printf "$fmt" $*

	while true ;
	do
		read ans

		case $ans in

		$yval	)
			YN=1
			break
			;;

		$nval	)
			YN=0
			break
			;;

		*	)
			echo $q2 '\c'

		esac
	done
}

#
# request_vers in this request script must track request_vers
# in the preinstall script.
#
request_vers=2
cf=$PKG_INSTALL_ROOT/etc/krb5/kdc.conf

get_realm=0
get_times=0
get_kdcs=0
KDC_CONF_REPLACE=1

if [ -f $cf ]
then
	echo
	echo
	getYN "`gettext 'Note: %s already exists.\nDo you wish to generate a new %s interactively? (y)es/(n)o: `" y n \
		"`gettext 'Answer y for yes or n for no:'`" $cf $cf
	if [ $YN -eq 0 ]
	then
		KDC_CONF_REPLACE=0
	else
		get_realm=1
		get_times=1
	fi
else
	get_realm=1
	get_times=1
fi

cf=$PKG_INSTALL_ROOT/etc/krb5/kpropd.acl

KPROPD_ACL_REPLACE=1

if [ -f $cf ]
then
	echo
	echo
	getYN "`gettext 'Note: %s already exists.\nDo you wish to generate a new %s interactively? (y)es/(n)o: `" y n \
		"`gettext 'Answer y for yes or n for no:'`" $cf $cf
	if [ $YN -eq 0 ]
	then
		KPROPD_ACL_REPLACE=0
		if [ $KDC_CONF_REPLACE -eq 0 ]
		then
			cat > $1<<!
REQUEST_VERS=$request_vers
KDC_CONF_REPLACE=$KDC_CONF_REPLACE
KPROPD_ACL_REPLACE=$KPROPD_ACL_REPLACE
!
			exit 0
		fi
	else
		get_realm=1
		get_kdcs=1
	fi

else
	get_realm=1
	get_kdcs=1
fi

while true ;
do
	echo
	echo 
	if [ $get_realm -eq 1 ]
	then
		getans \
	"`gettext 'Please specify the Kerberos V5 realm to be served: '`"
		realm=`echo $ans | tr "[:lower:]" "[:upper:]"`
	fi

	if [ $get_times -eq 1 ]
	then
		getnum_ans 8 \
"`gettext 'How many hours should tickets last in realm %s [%d] ? '`" $realm 8
		tlife=$ans
		getnum_ans 7 \
"`gettext 'How many days should renewable tickets last in realm %s [%d] ? '`" $realm 7
		rlife=$ans
	fi

	if [ $get_kdcs -eq 1 ]
	then
		getans "`gettext 'Please specify the master KDC: '`"
                master=$ans

		getans "`gettext 'Please specify a slave KDC: '`"
		slave="`echo $ans | sed 's/,    //g' `"
		slaves=""
		slaves="$slaves $slave"
	 
		while true ;
		do
			getYN \
		"`gettext 'Are there more slave KDCs? (y)es/(n)o: '`" y n \
		"`gettext 'Answer y for yes or n for no:'`"
	 
			if [ $YN -eq 1 ]
			then
				getans \
			"`gettext 'Please specify another slave KDC: '`" $realm
				slave="`echo $ans | sed 's/,    //g' `"
				slaves="$slaves $slave"
			else
				break
			fi
		done
	fi

	echo
	echo
	echo `gettext 'You have selected:'`
	echo
 
	if [ $get_realm -eq 1 ]
	then
		printf \
"`gettext 'Service over a Kerberos V5 realm called %s'`\n" $realm
	fi

	if [ $get_times -eq 1 ] 
	then 
		printf \
	"`gettext 'Default maximum ticket lifetime of %d hours'`\n" $tlife 
		printf \
	"`gettext 'Default maximum renewable ticket lifetime of %d days'`\n" $rlife 
	fi

	if [ $get_kdcs -eq 1 ]
	then
                printf "`gettext 'A master KDC called %s'`\n" $master
		printf "`gettext 'One or more slave KDCs: %s'`\n" "$slaves"
	fi

	echo
	getYN "`gettext 'Are the above selections correct? (y)es/(n)o: '`" \
		y n "`gettext 'Answer y for yes or n for no.'`"

	if [ $YN -eq 1 ]
	then
		break
	fi
done

echo
echo

cat > $1<<!
REQUEST_VERS=$request_vers
KDC_CONF_REPLACE=$KDC_CONF_REPLACE
KDC_CONF_REALM=$realm
KDC_CONF_TLIFE="${tlife}h 0m 0s"
KDC_CONF_RLIFE="${rlife}d 0h 0m 0s"
KPROPD_ACL_REPLACE=$KPROPD_ACL_REPLACE
KPROPD_ACL_REALM="$realm"
KPROPD_ACL_MASTER="$master"
KPROPD_ACL_SLAVES="$slaves"
!
exit 0
