#!/bin/sh

PATH=/bin:/usr/bin:/usr/local/bin
export PATH

myname=`basename "$0"`

usage="$myname host community extName"
# e.g. check_snmpexec pbx02.tor.magna.intranet angam check_zaptel

OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3



# enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1
# enterprises.ucdavis.extTable.extEntry.extNames.1 = check_zaptel
# enterprises.ucdavis.extTable.extEntry.extCommand.1 = /master/data/global/bin/check_zaptel
# enterprises.ucdavis.extTable.extEntry.extResult.1 = 0
# enterprises.ucdavis.extTable.extEntry.extOutput.1 = OK: WPT1/5: B8ZS/ESF OK; WPT1/1: B8ZS/ESF OK; WPT1/2: B8ZS/ESF OK; WPT1/3: B8ZS/ESF OK; WPT1/4: B8ZS/ESF OK; 
# enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0
# enterprises.ucdavis.extTable.extEntry.extErrFixCmd.1 = 


if [ $# -ne 3 ]; then
    echo "$myname: need exactly 3 args: $usage"
    exit $UNKNOWN
fi
host="$1"
comm="$2"
name="$3"

# first, find which index belongs to the command we're looking for

# do we need any funny format args here?
num=`snmpwalk -v 1 -c "$comm" "$host" \
    enterprises.ucdavis.extTable.extEntry.extNames \
    | sed -e "/ $name\$/!d" -e 's/ *= .*//' -e 's/.*\.//'`
if [ $? -ne 0 -o -z "$num" ]; then
    echo "$myname: snmp search for '$name' failed"
    exit $UNKNOWN
fi

# let's continue on blind faith here that num is actually a single number

# -Ov - value output only
set -- `snmpget -Ov -v 1 -c "$comm" "$host" \
    "enterprises.ucdavis.extTable.extEntry.extResult.$num" \
    "enterprises.ucdavis.extTable.extEntry.extOutput.$num"`
if [ $? -ne 0 ]; then
    echo "$myname: snmp get for '$name' failed"
    exit $UNKNOWN
fi
if [ $# -eq 0 ]; then
    echo "$myname: snmp get for '$name' gave no results (timeout?)"
    exit $UNKNOWN
fi

res="$1"
shift
case "$1" in
    enterprises.ucdavis.extTable.extEntry.extOutput*)
	echo -n "snmp exec failed, blocked by selinux? "
	;;
esac
echo "$@"
exit "$res"
