#!/bin/sh

#
# Portions of this file are subject to the following copyright(s).  See
# the Net-SNMP's COPYING file for more details and other copyrights
# that may apply:
#
# Portions of this file are copyrighted by:
# Copyright Copyright 2003 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms specified in the COPYING file
# distributed with the Net-SNMP package.
# 

# this shell script is designed to merely dump the configuration
# information about how the net-snmp package was compiled.  The
# information is particularily useful for applications that need to
# link against the net-snmp libraries and hence must know about any
# other libraries that must be linked in as well.

NSC_BASE_AGENT_LIBS="-lnetsnmpagent -lnetsnmpmibs -lnetsnmphelpers -lnetsnmp"

if test "x$1" = "x"; then
  usage="yes"
else
  exec_prefix=/usr/sfw
  prefix=/usr/sfw
  case $1 in
    --debug-tokens)
      echo "find NET-SNMP-SOURCE-DIR -name \"*.c\" -print | xargs grep DEBUGMSGT | grep \\\" | cut -f 2 -d\\\" | sort -u"
      ;;
    --indent-options)
      echo "indent -orig -nbc -bap -nut -nfca `(cd NET-SNMP-INCLUDE-DIR; perl -n -e 'print "-T $1 " if (/}\s*(netsnmp_\w+)\s*;/);' */*.h)`"
      ;;
    --configure-options)
      echo "'--with-sys-contact=root' '--with-sys-location=' '--with-logfile=/var/log/snmpd.log' '--with-persistent-directory=/var/sma_snmp' '--with-default-snmp-version=3' '--enable-shared=yes' '--enable-developer=yes' '--with-libs=-ldl' '--with-defaults=no' '--prefix=/usr/sfw' '--enable-ipv6' '--datadir=/etc/sma' '--with-mibdirs=/etc/sma/snmp/mibs' '--with-cc=cc' '--enable-agentx-dom-sock-only' '--with-mib-modules=host disman/event-mib ucd-snmp/diskio' '--with-pkcs=/usr/lib' '--with-perl-modules=yes' '--with-transports=UDP UDPIPv6 TCPIPv6 TCP' '--with-ldflags=-R../lib' '--libdir=/usr/sfw/lib'"
      ;;
    --snmpd-module-list)
      echo  ucd-snmp/diskio mibII/system_mib mibII/sysORTable mibII/at mibII/interfaces mibII/snmp_mib mibII/tcp mibII/icmp mibII/ip mibII/udp mibII/vacm_vars mibII/setSerialNo ucd-snmp/vmstat_solaris2 ucd-snmp/memory_solaris2 ucd-snmp/proc ucd-snmp/versioninfo ucd-snmp/pass ucd-snmp/pass_persist ucd-snmp/disk ucd-snmp/loadave ucd-snmp/extensible ucd-snmp/errormib ucd-snmp/file ucd-snmp/dlmod ucd-snmp/proxy snmpv3/snmpEngine snmpv3/snmpMPDStats snmpv3/usmStats snmpv3/usmUser notification/snmpNotifyTable notification/snmpNotifyFilterTable notification/snmpNotifyFilterProfileTable target/snmpTargetAddrEntry target/snmpTargetParamsEntry target/target target/target_counters agent/nsTransactionTable agent/nsModuleTable agentx/master agentx/subagent utilities/override host/hr_system host/hr_storage host/hr_device host/hr_other host/hr_proc host/hr_network host/hr_print host/hr_disk host/hr_partition host/hr_filesys host/hr_swrun host/hr_swinst disman/mteTriggerTable disman/mteTriggerDeltaTable disman/mteTriggerExistenceTable disman/mteTriggerBooleanTable disman/mteTriggerThresholdTable disman/mteObjectsTable disman/mteEventTable disman/mteEventNotificationTable util_funcs kernel_sunos5 mibII/tcpTable mibII/ipAddr mibII/var_route mibII/route_write mibII/udpTable mibII/vacm_context header_complex agentx/protocol agentx/client agentx/master_admin agentx/agentx_config
      ;;
    --base-cflags)
      echo -g -Dsolaris2  -I${prefix}/include
      ;;
    --cflags)
      echo -g -Dsolaris2   -I. -I${prefix}/include
      ;;
    --agent-libs)
      # use this one == --netsnmp-agent-libs + --external-libs
      echo -R../lib -L/usr/sfw/lib $NSC_BASE_AGENT_LIBS -ldl -lkvm -lz -lpkcs11 -lkstat -lelf -lm -ldl -lnsl -lsocket -ladm 
      ;;
    --libs)
      # use this one == --netsnmp-libs + --external-libs
      echo -R../lib -L/usr/sfw/lib -lnetsnmp -lgen -lpkcs11 -lkstat -lelf -lm -ldl -lnsl -lsocket -ladm
      ;;
    --external-libs)
      echo -R../lib -lgen -lpkcs11 -lkstat -lelf -lm -ldl -lnsl -lsocket -ladm
      ;;
    --external-agent-libs)
      echo -R../lib -ldl -lkvm -lz -lpkcs11 -lkstat -lelf -lm -ldl -lnsl -lsocket -ladm 
      ;;
    --netsnmp-libs)
      echo -L/usr/sfw/lib -lnetsnmp
      ;;
    --netsnmp-agent-libs)
      echo -L/usr/sfw/lib $NSC_BASE_AGENT_LIBS
      ;;
    --version)
      echo 5.0.9
      ;;
    --help)
      usage="yes"
      ;;
    --prefix)
      echo /usr/sfw
      ;;
    --exec-prefix)
      echo /usr/sfw
      ;;
    --create-snmpv3-user)
      if /usr/bin/ps -e | egrep ' snmpd *$' > /dev/null 2>&1 ; then
         echo "Apparently at least one snmpd demon is already running."
         echo "You must stop them in order to use this command."
         exit 1
      fi

      Aalgorithm="MD5"
      Xalgorithm="DES"
      token=rwuser
      shift
      while test "x$done" = "x" -a "x$1" != "x" ; do
        case $1 in
            -A)
                shift
                if test "x$1" = "x" ; then
                    echo "You must specify an authentication algorithm"
                    exit 1
                fi
                Aalgorithm=$1
                shift
                ;;
            -X)
                shift
                if test "x$1" = "x" ; then
                    echo "You must specify an encryption algorithm"
                    exit 1
                fi
                Xalgorithm=$1
                shift
                ;;
            -a)
                shift
                if test "x$1" = "x" ; then
                    echo "You must specify an authentication pass phrase"
                    exit 1
                fi
                apassphrase=$1
                shift
                ;;
            -x)
                shift
                if test "x$1" = "x" ; then
                    echo "You must specify an encryption pass phrase"
                    exit 1
                fi
                xpassphrase=$1
                shift
                ;;
            -ro)
                token="rouser"
                shift
                ;;
            -*)
                echo "unknown suboption to --create-snmpv3-user: $1"
                exit 1
                ;;
            *)
                done=1
                ;;
        esac
      done
      
      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

      outfile="/var/sma_snmp/snmpd.conf"
      line="createUser $user $Aalgorithm \"$apassphrase\" $Xalgorithm $xpassphrase"
      echo "adding the following line to $outfile:"
      echo "  " $line
      echo $line >> $outfile

      outfile="/etc/sma/snmp/snmpd.conf"
      line="$token $user"
      echo "adding the following line to $outfile:"
      echo "  " $line
      echo $line >> $outfile
      ;;

    --compile-subagent)
      shift
      outname=$1
      while test "x$done" = "x" -a "x$1" != "x" ; do
	case $1 in
            --norm)
	        norm=1
	        shift
		;;
            --cflags)
	        shift
	        if test "x$1" = "x" ; then
	            echo "You must specify the extra cflags"
	            exit 1
	        fi
	        cflags=$1
	        echo "setting extra cflags: $cflags"
	        shift
		;;
            --ldflags)
	        shift
	        if test "x$1" = "x" ; then
	            echo "You must specify the extra ldflags"
	            exit 1
	        fi
	        ldflags=$1
	        echo "setting extra ldflags: $ldflags"
	        shift
		;;
 	    --*)
		echo "unknown suboption to --compile-subagent: $1"
		exit 1
		;;
	    *)
                if test "x$outname" = "x"; then
                  outname=$1
                  shift
                else
	          done=1
                fi
		;;
	esac
      done
      tmpfile=netsnmptmp.$$.c
      if test -f $tmpfile; then
	echo "Ack.  Can't create $tmpfile: already exists"
	exit 1
      fi
      echo "generating the tmporary code file: $tmpfile"
      rm -f $tmp
      cat > $tmpfile <<EOF
/* generated from net-snmp-config */
#include <net-snmp/net-snmp-config.h>
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif /* HAVE_SIGNAL_H */
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
EOF

    # add include files
    while test "$1" != ""; do
      cfiles="$cfiles $1"
      name=`basename $1 | sed 's/\.[co]$/.h/'`
      if test -f $name.h; then
        if grep "init_$name" $name; then
          echo "  #include\"$name\"" >> $tmpfile
        fi
      fi
      shift
    done

      cat >> $tmpfile <<EOF
static int keep_running;

RETSIGTYPE
stop_server(int a) {
    keep_running = 0;
}

int
main (int argc, char **argv) {
  /* print log errors to stderr */
  snmp_enable_stderrlog();
 /* we are a subagent */
  netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);

  /* initialize the agent library */
  init_agent("$outname");

  /* initialize your mib code here */
EOF

    # add init routines
    for i in $cfiles ; do
      name=`basename $i | sed 's/\.[co]$//'`
      echo checking for init_$name in $i
      if grep "init_$name" $i ; then
        echo "  init_${name}();" >> $tmpfile
      fi
      shift
    done

    # finish file
    cat >> $tmpfile <<EOF

  /* ustMain will be used to read ustMain.conf files. */
  init_snmp("$outname");

  /* In case we recevie a request to stop (kill -TERM or kill -INT) */
  keep_running = 1;
#ifdef SIGTERM
  signal(SIGTERM, stop_server);
#endif
#ifdef SIGINT
  signal(SIGINT, stop_server);
#endif

  /* main loop here... */
  while(keep_running) {
    agent_check_and_process(1);
  }

  /* at shutdown time */
  snmp_shutdown("$outname");
  exit(0);
}

EOF
      if test "$?" != 0 -o ! -f "$tmpfile" ; then
        echo "Ack.  Can't create $tmpfile."
	exit 1
      fi
      prefix=/usr/sfw
      cmd="cc $cflags -g -Dsolaris2  -I. -I${prefix}/include -o $outname $tmpfile $cfiles -R../lib -L/usr/sfw/lib -lnetsnmpagent -lnetsnmphelpers -lnetsnmpmibs -lnetsnmp -ldl -lkvm -lz -lpkcs11 -lkstat -lelf -lm -ldl -lnsl -lsocket -ladm $ldflags"
      echo "running: $cmd"
      `$cmd`
      if test "x$norm" != "x1" ; then
        echo "removing the tmporary code file: $tmpfile"
        rm -f $tmpfile
      else
        echo "leaving the tmporary code file: $tmpfile"
      fi
      if test -f $outname ; then
        echo "subagent program $outname created"
      fi
      ;;

    *)
      echo "unknown option $1"
      usage="yes"
      ;;
  esac
fi

if test "x$usage" = "xyes"; then
  echo ""
  echo "Usage:"
  echo "  net-snmp-config [--cflags] [--agent-libs] [--libs] [--version]"
  echo "                  ... [see below for complete flag list]"
  echo ""
  echo "    --version         displays the net-snmp version number"
  echo "    --indent-options  displays the indent options from the Coding Style"
  echo "    --debug-tokens    displays a example command line to search to source"
  echo "                      code for a list of available debug tokens"
  echo ""
  echo "  SNMP Setup commands:"
  echo ""
  echo "    --create-snmpv3-user [-ro] [-a authpass] [-x privpass] [-X DES]"
  echo "                         [-A MD5|SHA] [username]"
  echo ""
  echo "  These options produce the various compilation flags needed when"
  echo "  building external SNMP applications:"
  echo ""
  echo "    --base-cflags     lists additional compilation flags needed"
  echo "                      for external applications (excludes -I. and"
  echo "                      extra developer warning flags, if any)"
  echo "    --cflags          lists additional compilation flags needed"
  echo "    --libs            lists libraries needed for building applications"
  echo "    --agent-libs      lists libraries needed for building subagents"
  echo ""
  echo "    --netsnmp-libs        lists netsnmp specific libraries"
  echo "    --external-libs       lists libraries needed by netsnmp libs"
  echo "    --netsnmp-agent-libs  lists netsnmp specific agent libraries"
  echo "    --external-agent-libs lists libraries needed by netsnmp libs"
  echo ""
  echo "  Automatted subagent building (produces an OUTPUTNAME binary file):"
  echo "  [this feature has not been tested very well yet.  use at your risk.]"
  echo ""
  echo "    --compile-subagent OUTPUTNAME [--norm] [--cflags flags]"
  echo "                                  [--ldflags flags] mibmodule1.c [...]]"
  echo ""
  echo "         --norm           leave the generated .c file around to read."
  echo "         --cflags flags   extra cflags to use (e.g. -I...)."
  echo "         --ldflags flags  extra ld flags to use (e.g. -L... -l...)."
  echo ""
  echo "  Details on how the net-nsmp package was compiled:"
  echo ""
  echo "    --configure-options   Display original configure arguments"
  echo "    --snmpd-module-list   Display the modules compiled into the agent"
  echo "    --prefix              Display the installation prefix"
  echo ""
  exit
fi  
