#!/bin/sh

pkg_admin=/usr/pkg/sbin/pkg_admin

usage() {
	echo 'Usage: audit-packages [-deqsVv] [-c config_file] [-F file]' >& $2
	echo '                      [-g file] [-h file]' >& $2
	echo '                      [-K pkg_dbdir] [-n package] [-p package]' >& $2
	echo '                      [-Q varname] [-t type]' >& $2
	echo "Please use the audit, audit-pkg, audit-batch and fetch-pkg-vulnerabilities" >& $2
	echo "commands of pkg_admin instead." >& $2
	exit $1
}

do_pkgdb=
do_eol=
do_fetch=
do_quiet=
do_sign=
do_verbose=
do_check_file=
do_check_pattern=
do_check_installed=
do_check_vul_file=
do_limit_type=
do_print_var=

opts='F:K:Q:Vc:deg:h:n:p:qst:v'


if type getopts >/dev/null 2>&1; then
	# Use POSIX getopts.
	#
	getoptcmd='getopts ${opts} opt && opt=-${opt}'
	optargcmd=':'
	optremcmd='shift $((${OPTIND} -1))'
else
	type getopt >/dev/null 2>&1 ||
	    echo "/bin/sh shell is too old; try ksh or bash" && exit 1

	# Use old-style getopt(1) (doesn't handle whitespace in args).
	#
	args="$(getopt ${opts} $*)"
	if [ $? -ne 0 ]; then
		usage 1 2
	fi
	set -- ${args}

	getoptcmd='[ $# -gt 0 ] && opt="$1" && shift'
	optargcmd='OPTARG="$1"; shift'
	optremcmd=':'
fi




while eval ${getoptcmd}; do
	case ${opt} in
	-F)
		eval ${optargcmd}
		do_check_file=${OPTARG}
		;;
	-K)
		eval ${optargcmd}
		do_pkgdb="${opt} ${OPTARG}"
		;;
	-Q)
		eval ${optargcmd}
		do_print_var="${OPTARG}"
		;;
	-V)
		exec ${pkg_admin} -V
		;;
	-c)
		echo "The audit-packages wrapper does not support -c" >&2
		echo "Please use the audit, audit-pkg, audit-batch and fetch-pkg-vulnerabilities" >& 2
		echo "commands of pkg_admin instead." >& 2
		exit 1
		;;
	-d)
		do_fetch=1
		;;
	-e)
		do_eol=-e
		;;
	-g)
		echo "The audit-packages wrapper does not support -g" >&2
		echo "Please switch to \`\`pkg_admin fetch-pkg-vulnerabilities''." >&2
		exit 1
		;;
	-h)
		eval ${optargcmd}
		do_check_vul_file="${OPTARG}"
		;;
	-n)
		eval ${optargcmd}
		do_check_pattern="${OPTARG}"
		;;
	-p)
		eval ${optargcmd}
		do_check_installed="${OPTARG}"
		;;
	-q)
		do_quiet=-q
		;;
	-s)
		do_sign=-s
		;;
	-t)
		eval ${optargcmd}
		do_limit_type="${opt} ${OPTARG}"
		;;
	-v)
		do_verbose="$do_verbose -v"
		;;
	esac
done

if [ -n "${do_fetch}" ]; then
	exec ${pkg_admin} ${do_pkgdb} fetch-pkg-vulnerabilities ${do_sign}
fi

if [ -n "${do_check_vul_file}" ]; then
	exec ${pkg_admin} ${do_pkgdb} check-pkg-vulnerabilities ${do_sign} "${do_check_vul_file}"
fi

if [ -n "${do_print_var}" ]; then
	exec ${pkg_admin} ${do_pkgdb} config-var "${do_print_var}"
fi

if [ -n "${do_check_file}" ]; then
	if [ -n "${do_check_pattern}" -o -n "${do_check_installed}" ]; then
		echo "Only one of -F, -n or -p is interpreted at a time." >& 2
		usage 1 2
	fi
	exec ${pkg_admin} ${do_pkgdb} ${do_verbose} ${do_quiet} audit-pkg \
	    ${do_eol} ${do_limit_type} ${do_check_file}
fi

if [ -n "${do_check_pattern}" ]; then
	if [ -n "${do_check_installed}" ]; then
		echo "Only one of -F, -n or -p is interpreted at a time." >& 2
		usage 1 2
	fi
	exec ${pkg_admin} ${do_pkgdb} ${do_verbose} ${do_quiet} audit-pkg \
	    ${do_eol} ${do_limit_type} ${do_check_pattern}
fi

# If do_check_installed is empty, all packages are checked.
exec ${pkg_admin} ${do_pkgdb} ${do_verbose} ${do_quiet} audit \
    ${do_eol} ${do_limit_type} ${do_check_installed}
