#!/bin/sh
#
# this shell script is designed to add new SNMPv3 users
# to Net-SNMP config file.

if /bin/ps acx | /usr/bin/egrep ' snmpd *$' > /dev/null 2>&1 ; then
    echo "Apparently at least one snmpd daemon is already running."
    echo "You must stop them in order to use this command."
    exit 1
fi

Aalgorithm="MD5"
Xalgorithm="DES"
token=rwuser

while test "x$done" = "x" -a "x$1" != "x" -a "x$usage" != "xyes"; do

unset shifted
case $1 in
    --version|--ver*)
      echo 5.9.4
      exit 0
      ;;
    --help)
      usage="yes"
      ;;

    -A|-a)
	shift
	if test "x$1" = "x" ; then
	    echo "You must specify an authentication algorithm or pass phrase"
	    exit 1
	fi
        case $1 in
            MD5|SHA|SHA-512|SHA-384|SHA-256|SHA-224)
	    Aalgorithm=$1
	    shift
	    ;;
            md5|sha)
	    Aalgorithm=$(echo "$1" | tr a-z A-Z)
	    shift
	    ;;
            *)
	    apassphrase=$1
	    shift
	    ;;
        esac
        ;;
    -X|-x)
	shift
	if test "x$1" = "x" ; then
	    echo "You must specify an encryption algorithm or pass phrase"
	    exit 1
	fi
        case $1 in
            DES|AES|AES128)
	    Xalgorithm=$1
	    shift
	    ;;
            des|aes|aes128)
	    Xalgorithm=$(echo "$1" | tr a-z A-Z)
	    shift
	    ;;
            *)
	    xpassphrase=$1
	    shift
	    ;;
	esac
	;;
    -ro)
        token="rouser"
	shift
	;;
    -*)
	echo "unknown suboption to $0: $1"
	usage=yes
	done=1
	;;
    *)
        done=1
        ;;
    esac
done

if test "x$usage" = "xyes"; then
    echo ""
    echo "Usage:"
    echo "  net-snmp-create-v3-user [-ro] [-A authpass] [-X privpass]"
    echo "                          [-a MD5|SHA|SHA-512|SHA-384|SHA-256|SHA-224] [-x DES|AES|AES128] [username]"
    echo ""
    exit
fi

if test "x$1" = "x" ; then
    prompt=yes
    echo "Enter a SNMPv3 user name to create: "
    read user
else
    user=$1
    shift
fi
if test "x$user" = "x" ; then
    echo "You must specify a user name"
    exit 1
fi
if test "x$apassphrase" = "x" ; then
    prompt=yes
    echo "Enter authentication pass-phrase: "
    read apassphrase
fi
if test "x$apassphrase" = "x" ; then
    echo "You must specify an authentication pass-phrase"
    exit 1
fi
    if test "x$prompt" = "xyes" -a "x$xpassphrase" = "x" ; then
    echo "Enter encryption pass-phrase: "
    echo "  [press return to reuse the authentication pass-phrase]"
    read xpassphrase
fi
outdir="/var/net-snmp"
outfile="$outdir/snmpd.conf"
if test "x$xpassphrase" = "x" ; then
    line="createUser $user $Aalgorithm \"$apassphrase\" $Xalgorithm"
else
    line="createUser $user $Aalgorithm \"$apassphrase\" $Xalgorithm \"$xpassphrase\""
fi
echo "adding the following line to $outfile:"
echo "   $line"
# in case it hasn't ever been started yet, start it.
if test ! -d "$outdir"; then
    mkdir "$outdir"
fi
if test ! -d "$outfile"; then
    touch "$outfile"
fi
echo "$line" >> "$outfile"
prefix=/usr/pkg
datarootdir=${prefix}/share
# To suppress shellcheck complaints about $prefix and $datarootdir.
: "$prefix" "$datarootdir"
outfile="${datarootdir}/snmp/snmpd.conf"
line="$token $user"
echo "adding the following line to $outfile:"
echo "   $line"
if test ! -d "$outfile"; then
    touch "$outfile"
fi
echo "$line" >> $outfile
