#!/bin/sh 

if test -f Configure.orig
	then
	echo "Make clean first"
	exit
else
	echo "Copying configure file"
	cp Configure Configure.orig
fi

if test -f dtk.config
	then
	. dtk.config
	else
	echo "No dtk.config file - Creating it."
	Last_WORKING_DIR="/dtk"
	Last_WHICH_PERL="/usr/bin/perl"
	Last_WHICH_PERL_LIB="/usr/lib/perl5"
	Last_HOST_NAME=`domainname`;
	case $Last_HOST_NAME in
		'(none)')	Last_HOST_NAME="all.net";;
	esac
	Last_NEW_OS="Linux"
	Last_LOG_COMPRESSED="1";
	Last_MAX_LENGTH="120";
	Last_TIME_OUT="20";
	Last_MAX_LOOP="20";
	Last_EMAIL_TO=root@$Last_HOST_NAME
	Last_Password=""
	Last_TBPKEY=""
	case $Last_HOST_NAME in
		"all.net") Last_EMAIL_TO=fc@$Last_HOST_NAME;;
	esac
fi

DIR=`pwd`
echo "Setting paths in files"
echo -n "Install directory ($Last_WORKING_DIR):"
read WORKING_DIR
if [ $WORKING_DIR ] ; then
	echo "Using $WORKING_DIR"
else
	WORKING_DIR=$Last_WORKING_DIR
fi
if [ ! -d $WORKING_DIR ]  ;  then
	echo -n "Making $WORKING_DIR..."
	mkdir $WORKING_DIR ; echo "Done."
fi
Last_WORKING_DIR=$WORKING_DIR

echo -n "Which perl ($Last_WHICH_PERL):"
read WHICH_PERL
if [ $WHICH_PERL ] ; then
	echo "Using $WHICH_PERL"
else
	WHICH_PERL=$Last_WHICH_PERL
fi
if [ ! -x $WHICH_PERL ] ; then
	echo "$WHICH_PERL not found. Aborting."
	exit
fi
Last_WHICH_PERL=$WHICH_PERL

echo -n "Which perl lib directory ($Last_WHICH_PERL_LIB):"
read WHICH_PERL_LIB
if [ $WHICH_PERL_LIB ] ; then
	echo "Using $WHICH_PERL_LIB"
else
	WHICH_PERL_LIB=$Last_WHICH_PERL_LIB
fi
if [ ! -d $WHICH_PERL_LIB ] ; then
	echo "$WHICH_PERL_LIB not found. Aborting."
	exit
fi
Last_WHICH_PERL_LIB=$WHICH_PERL_LIB

echo "Host information."
echo -n "Which fully-qualified domainname should I claim ($Last_HOST_NAME):"
read NEW_HOST_NAME
if [ $NEW_HOST_NAME ] ; then
	echo "Using $NEW_HOST_NAME"
	Last_EMAIL_TO="root@$NEW_HOST_NAME"
	case $NEW_HOST_NAME in
		"all.net") Last_EMAIL_TO="fc@$NEW_HOST_NAME";;
	esac
else
	NEW_HOST_NAME=$Last_HOST_NAME
	echo "Using $NEW_HOST_NAME"
fi
Last_HOST_NAME=$NEW_HOST_NAME

# New operating system name
echo "Select an OS from this list (by number) or enter the OS name ($Last_NEW_OS):
	1) Linux	2) Solaris	3) SunOS	4) HPUX
	5) AIX		6) SGI		7) NT		8) Ultrix"
echo -n "Selection:"
	read ANS
	case $ANS in
		1) NEW_OS="Linux";;
		2) NEW_OS="Solaris";;
		3) NEW_OS="SunOS";;
		4) NEW_OS="HPUX";;
		5) NEW_OS="AIX";;
		6) NEW_OS="SGI";;
		7) NEW_OS="NT";;
		8) NEW_OS="Ultrix";;
		.*) NEW_OS=$ANS;;
		*) NEW_OS=$Last_NEW_OS;;
	esac
	echo "OS set to $NEW_OS";
	Last_NEW_OS=$NEW_OS
if test -f socket.ph.$NEW_OS
	then
	cp socket.ph.$NEW_OS socket.ph
else
	echo "No socket.ph.$NEW_OS - using socket.ph.default"
	cp socket.ph.default socket.ph
fi

# Compressed logging?
case	$Last_LOG_COMPRESSED in
	"0") LOG_COMPRESSED="0";prompt="(S/y/c/d)";;
	"1") LOG_COMPRESSED="1";prompt="(s/y/C/d)";;
	"2") LOG_COMPRESSED="2";prompt="(s/y/c/D)";;
	"3") LOG_COMPRESSED="3";prompt="(s/Y/c/d)";;
	"*") LOG_COMPRESSED="2";prompt="(s/y/c/D)";;
esac

echo -n "Log files Standard, sYslog, Compressed, or Database format $prompt?($Last_LOG_COMPRESSED):"
        read ANS
        case $ANS in
                S|s) echo "Not compressing Logfiles (0)";LOG_COMPRESSED="0";;
		C|c) echo "Compressing Logfiles (1)";LOG_COMPRESSED="1";;
		D|d) echo "Database Logfiles (2)";LOG_COMPRESSED="2";;
		Y|y) echo "sYslog Logfiles (3)";LOG_COMPRESSED="3";;
                *) echo "LogFile Format Unchanged ($Last_LOG_COMPRESSED)";LOG_COMPRESSED=$Last_LOG_COMPRESSED;;
	esac
Last_LOG_COMPRESSED=$LOG_COMPRESSED

# Deception port fetch password
echo "Password for remote retrieval of the DTK log (all-characters-no-spaces)"
echo " - OR - : for no password)"
echo " - OR - O for One Time Pad"
echo " - OR - A for Algorithmic Authentication"
echo -n " - OR - T for Time-Based Authentication: ($Last_Password)?:"
        read ANS
        case $ANS in
		'O') DTK_PASSWORD="!O";;
		'A') DTK_PASSWORD="!A";;
		'T') DTK_PASSWORD="!T";;
		[A-Za-z]*) DTK_PASSWORD="/$ANS/";;
		':') DTK_PASSWORD="//";;
		*) DTK_PASSWORD="$Last_Password";;
	esac
	echo "Password set to $DTK_PASSWORD";
Last_Password=$DTK_PASSWORD

# Time Based Password
case $DTK_PASSWORD in
	"!T") echo "TBP Key (all-characters-no-spaces)[$Last_TBPKEY]"
	        read ANS
	       	case $ANS in
			'') TBPKEY="$Last_TBPKEY";;
			[A-Za-z]*) TBPKEY="$ANS";;
			*) TBPKEY="$Last_TBPKEY";;
		esac
		echo "Password set to $TBPKEY";
		Last_TBPKEY=$TBPKEY;;
esac

# Buffer overflow maximum recorded size
echo -n "Maximum input length to log ($Last_MAX_LENGTH)?:"
        read ANS
        case $ANS in
		[0-9]*) MAX_LENGTH="$ANS";;
                *) MAX_LENGTH=$Last_MAX_LENGTH;;
	esac
	echo "Maximum Length set to $MAX_LENGTH";
Last_MAX_LENGTH=$MAX_LENGTH

# Time between inputs before we act like a core dump
echo -n "Time (in seconds) between inputs before we act like a core dump ($Last_TIME_OUT)?:"
        read ANS
        case $ANS in
		[0-9]*) TIME_OUT="$ANS";;
                *) TIME_OUT=$Last_TIME_OUT;;
	esac
	echo "Timeout set to $TIME_OUT";
Last_TIME_OUT=$TIME_OUT

# Maximum inputs before we act like a core dump
echo -n "Maximum inputs before we act like a core dump ($Last_MAX_LOOP)?:"
        read ANS
        case $ANS in
		[0-9]*) MAX_LOOP="$ANS";;
                *) MAX_LOOP=$Last_MAX_LOOP;;
	esac
	echo "Loop count set to $MAX_LOOP";
Last_MAX_LOOP=$MAX_LOOP

echo -n "Send email to ($Last_EMAIL_TO)?:"
        read ANS
        case $ANS in
                [a-zA-Z0-9]*) EMAIL_TO="$ANS";;
                *) EMAIL_TO="$Last_EMAIL_TO";;
	esac
	echo "Email going to $EMAIL_TO";
Last_EMAIL_TO="$EMAIL_TO"

echo -n "Updating installation files..."
rm -f junk.sed
echo "s\"WHICH_PERL_LIB\"$WHICH_PERL_LIB\"" > junk.sed
echo "s\"WHICH_PERL\"$WHICH_PERL\"" >>junk.sed
echo "s\"WORKING_DIR\"$WORKING_DIR\"" >> junk.sed
echo "s\"LOG_COMPRESSED\"$LOG_COMPRESSED\"" >> junk.sed
echo "s\"DTK_PASSWORD\"$DTK_PASSWORD\"" >> junk.sed
echo "s\"TBPKEY\"$TBPKEY\"" >> junk.sed
echo "s\"NEW_HOST_NAME\"$NEW_HOST_NAME\"" >> junk.sed
echo "s\"NEW_OS\"$NEW_OS\"" >> junk.sed
echo "s\"EMAIL_TO\"$EMAIL_TO\"" >> junk.sed
echo "s\"MAX_LENGTH\"$MAX_LENGTH\"" >> junk.sed
echo "s\"TIME_OUT\"$TIME_OUT\"" >> junk.sed
echo "s\"MAX_LOOP\"$MAX_LOOP\"" >> junk.sed

for i in *.pl *.response @* dtk.hosts.allow dtk.inetd.conf dtk.rc.local ; do
	sed -f junk.sed < $i > new.$i
	mv $i $i.orig ; mv new.$i $i
done 

echo "Done."

chmod 755 passgen.pl
echo -n "Generate a fake password file based on your password file (Y/n):"
	read ANS
	case $ANS in
		N|n) echo "Ok - using lame built-in @fake.passwd file." ;;
		*) passgen.pl > @fake.passwd.new; mv "@fake.passwd" "@fake.passwd.orig";
			mv "@fake.passwd.new" "@fake.passwd";
			echo "New custom fake password file generated";;
	esac
echo "Done."

case $DTK_PASSWORD in
	"!O") echo -n "Generate an OTP file of 100 mantras (y/n/O):"
		read ANS
		case $ANS in
			[Yy]) newmantra;;
			[Nn]) echo "Ok - no OTP mantra file being built." ;;
			*) echo -n "Using old OTP file if it exists - otherwise creating new one."
			if test -f $WORKING_DIR/OTP
				then
				echo " Found one."
				cp $WORKING_DIR/OTP .
				else
				echo " Creating a new one."
				newmantra
			fi;;
		esac
		echo "Done.";;
	esac

if [ $DIR = $WORKING_DIR ] ; then
	make;echo "All updates completed"
else
	echo -n "Move files in $WORKING_DIR (Y/n):"
	read ANS
	case $ANS in
		N|n) echo "Ok - aborting." ;;
		*) tar cf - README @* *.response OTP *.ph *.pl dtk.* *.c makefile md5dir domd5 | ( cd $WORKING_DIR ; tar xvf - )
			chmod 644 $WORKING_DIR/*
			chmod 755 $WORKING_DIR/*.pl $WORKING_DIR/domd5
			chmod 755 $WORKING_DIR/md5dir
			chmod 644 $WORKING_DIR/md5dir/*
			D=`pwd`
			if test -f $WORKING_DIR/log
				then
				cat $WORKING_DIR/log >> $WORKING_DIR/log.old
			fi
			>$WORKING_DIR/log;chmod 666 $WORKING_DIR/log;cd $WORKING_DIR;make
			echo "Clearing the InfoCon files";rm -f $WORKING_DIR/InfoCon.*
			echo "Making IP log area";mkdir $WORKING_DIR/IP;chmod 755 $WORKING_DIR/IP
			cd $D;echo "Cleaning up"; make clean;;
	esac
fi

echo "Saving dtk.config"
echo "Last_WORKING_DIR=\"$Last_WORKING_DIR\"" > dtk.config
echo "Last_WHICH_PERL=\"$Last_WHICH_PERL\"" >> dtk.config
echo "Last_WHICH_PERL_LIB=\"$Last_WHICH_PERL_LIB\"" >> dtk.config
echo "Last_HOST_NAME=\"$Last_HOST_NAME\"" >> dtk.config
echo "Last_NEW_OS=\"$Last_NEW_OS\"" >> dtk.config
echo "Last_LOG_COMPRESSED=\"$Last_LOG_COMPRESSED\"" >> dtk.config
echo "Last_MAX_LENGTH=\"$Last_MAX_LENGTH\"" >> dtk.config
echo "Last_TIME_OUT=\"$Last_TIME_OUT\"" >> dtk.config
echo "Last_MAX_LOOP=\"$Last_MAX_LOOP\"" >> dtk.config
echo "Last_EMAIL_TO=\"$Last_EMAIL_TO\"" >> dtk.config
echo "Last_Password=\"$Last_Password\"" >> dtk.config
echo "Last_TBPKEY=\"$Last_TBPKEY\"" >> dtk.config

echo "Configure completed - please continue with installation per the download.html file"
