#! /bin/sh
# generate new key for this host
# Copyright (C) 2001, 2002  Henry Spencer.
# 
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
# 
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#

me="ipsec newhostkey"
usage="Usage: $me --output filename [--random device] [--bits n] [--quiet] [--hostname host] [--configdir nssdbdir] [--password password] 
         or
       $me --output - [--random device] [--bits n] [--quiet] [--verbose] [--hostname host]  [--configdir nssdbdir] [--password password] >filename
         or
       $me [--bits n]  (defaults to /etc/ipsec.secrets or /var/lib/openswan/ipsec.secrets.inc)"

bits=2192
verbose=
host=
random="--random /dev/urandom"
output=
configdir=
password=
for dummy
do
	case "$1" in
	--bits)	bits="$2" ; shift	;;
	--quiet)	verbose=	;;
	--hostname)	host="--hostname $2" ; shift	;;
	--output)	output="$2" ; shift		;;
	--verbose)	verbose=--verbose 	;;
	--version)	echo "$me $IPSEC_VERSION" ; exit 0	;;
	--random)	random="--random $2" ; shift	;;
        --configdir)    configdir="--configdir $2" ;    shift   ;;
        --password)     password="--password $2" ;      shift   ;;
	--help)	echo "$usage" ; exit 0	;;
	--)	shift ; break		;;
	-*)	echo "$me: unknown option \`$1'" >&2 ; exit 2	;;
	*)	break			;;
	esac
	shift
done

if test " $output" = " " && test ! -f ${IPSEC_CONFS}/ipsec.secrets
then
    output=${IPSEC_CONFS}/ipsec.secrets
elif test " $output" = " " && test -r /var/lib/openswan/ipsec.secrets.inc && test ! -s /var/lib/openswan/ipsec.secrets.inc
then
    output=/var/lib/openswan/ipsec.secrets.inc
fi

if test " $output" = " "
then
	echo "$0: no --output specification included" >&2
	exit 1
elif test " $verbose" != " " -a " $output" != " -" -a -s "$output"
then
	echo "$0: WARNING: file \`$output' exists, appending to it" >&2
fi

(
	echo ': RSA	{'
	ipsec rsasigkey $verbose $random $configdir $password $host $bits 
	echo '	}'
	echo '# do not change the indenting of that "}"'
) |
if test " $output" = " -"
then
	cat
else
	umask 077
	cat >>$output.new
	mv $output.new $output
fi
