#! /usr/bin/ksh
# ssh-host-key-setup script to create ssh host keys
# Written by Richard K. Lloyd <rkl@connectinternetsolutions.com>
# (C) Connect Internet Solutions Limited 2017

set +u
progname=`basename $0`
prefix=/usr/local

error()
# Display error message and exit script with code 1
{
   echo "$progname: ERROR - $1 (aborted)" >&2
   exit 1
}

if [ `id -u` -ne 0 ]
then
  error "You must run this script as root"
fi 

sysconfdir=$prefix/etc
if [ ! -d $sysconfdir ]
then
   mkdir -p $sysconfdir 2>/dev/null
   if [ -d $sysconfdir ]
   then
      echo "Created $sysconfdir directory"
   else
      error "Can't create $sysconfdir directory"
   fi
fi

ssh_keygen=$prefix/bin/ssh-keygen
if [ ! -x $ssh_keygen ]
then
   error "Please 'gmake install' before running this script"
fi

do_keygen()
# Generate appropriate SSH key
# $1 = -t param to ssh-keygen
# $2 = Output key basename
{
   outkey=$sysconfdir/$2
   poutkey=$outkey.pub

   if [ -s $outkey -o -s $poutkey ]
   then
      echo "$outkey or $poutkey already exists, so skipped its generation"
   else
      echo "\nGenerating $outkey and $poutkey..."
      $ssh_keygen -t $1 -f $outkey -N "" 2>/dev/null
      if [ -s $outkey -a -s $poutkey ]
      then
         echo "$outkey and $poutkey generated successfully"
         chmod og= $outkey $poutkey
      else
         rm -f $outkey $poutkey
         error "Failed to generate $outkey or $poutkey"
      fi
   fi
}

# Note that rsa1 is no longer supported, even though the host-key:
# Makefile rule still attempts to generate an rsa1 key!
do_keygen dsa     ssh_host_dsa_key
do_keygen rsa     ssh_host_rsa_key
do_keygen ed25519 ssh_host_ed25519_key
do_keygen ecdsa   ssh_host_ecdsa_key

exit 0
