| #! /bin/sh -f |
| |
| # |
| # Variables: (* = exported) |
| # *SNMP_TMPDIR: place to put files used in testing. |
| # SNMP_TESTDIR: where the test scripts are kept. |
| # *SNMP_PERSISTENT_FILE: where to store the agent's persistent information |
| # (XXX: this should be specific to just the agent) |
| |
| # MinGW/MSYS only: translate an MSYS path back into a DOS path such that snmpd |
| # and the Net-SNMP applications can understand it. One of the features of MSYS |
| # is that if a POSIX-style path is passed as a command-line argument to an |
| # executable that MSYS translates that path to a DOS-style path before |
| # starting the executable. This is a key feature of MSYS that makes it |
| # possible to run shell scripts unmodified and at the same time to use |
| # executables that accept DOS-style paths. There is no support however for |
| # automatical translation of environment variables that contain paths. Hence |
| # this function that translates paths explicitly. |
| translate_path() { |
| if [ "$OSTYPE" = msys ]; then |
| local t=`set \ |
| | sed -n -e "s/^$1='\(.*\)'$/${SNMP_ENV_SEPARATOR}\1/p" \ |
| -e "s/^$1=\(.*\)$/${SNMP_ENV_SEPARATOR}\1/p" \ |
| | sed -e "s|${SNMP_ENV_SEPARATOR}/c/|${SNMP_ENV_SEPARATOR}c:/|g" \ |
| -e "s|${SNMP_ENV_SEPARATOR}/tmp/|${SNMP_ENV_SEPARATOR}c:/windows/temp/|g" \ |
| | sed -e "s/^${SNMP_ENV_SEPARATOR}//" \ |
| ` |
| eval "$1='$t'" |
| fi |
| } |
| |
| # |
| # Only allow ourselves to be eval'ed once |
| # |
| if [ "x$TESTCONF_SH_EVALED" != "xyes" ]; then |
| TESTCONF_SH_EVALED=yes |
| |
| # |
| # set cpu and memory limits to prevent major damage |
| # |
| # defaults: 1h CPU, 500MB VMEM |
| # |
| [ "x$SNMP_LIMIT_VMEM" = "x" ] && SNMP_LIMIT_VMEM=512000 |
| [ "x$SNMP_LIMIT_CPU" = "x" ] && SNMP_LIMIT_CPU=3600 |
| # ulimit will fail if existing limit is lower -- ignore because it's ok |
| ulimit -S -t $SNMP_LIMIT_CPU 2>/dev/null |
| # not all sh-alikes support "ulimit -v" -- play safe |
| [ "x$BASH_VERSION" != "x" ] && ulimit -S -v $SNMP_LIMIT_VMEM 2>/dev/null |
| |
| # |
| # Set up an NL suppressing echo command |
| # |
| case "`echo 'x\c'`" in |
| 'x\c') |
| ECHO() { echo -n $*; } |
| ;; |
| x) |
| ECHO() { echo $*\\c; } |
| ;; |
| *) |
| echo "I don't understand your echo command ..." |
| exit 1 |
| ;; |
| esac |
| # |
| # how verbose should we be (0 or 1) |
| # |
| if [ "x$SNMP_VERBOSE" = "x" ]; then |
| SNMP_VERBOSE=0 |
| export SNMP_VERBOSE |
| fi |
| |
| SNMP_ENV_SEPARATOR="`${builddir}/net-snmp-config --env-separator`" |
| |
| if [ "x$MIBDIRS" = "x" ]; then |
| if [ "x$SNMP_PREFER_NEAR_MIBS" = "x1" ]; then |
| MIBDIRS=${srcdir}/mibs |
| export MIBDIRS |
| fi |
| fi |
| |
| # Set up the path to the programs we want to use. |
| if [ "x$SNMP_PATH" = "x" ]; then |
| PATH=${builddir}/agent:${builddir}/apps:$PATH |
| export PATH |
| SNMP_PATH=yes |
| export SNMP_PATH |
| fi |
| |
| # make sure that we can fulfill all library dependencies |
| _ld_lib_path="${SNMP_UPDIR}/snmplib/.libs:${SNMP_UPDIR}/agent/.libs:${SNMP_UPDIR}/agent/helpers/.libs" |
| case `uname` in |
| CYGWIN*) |
| PATH="${_ld_lib_path}:$PATH" |
| export PATH |
| ;; |
| Darwin*) |
| if [ "x$DYLD_LIBRARY_PATH" != "x" ]; then |
| DYLD_LIBRARY_PATH="${_ld_lib_path}:${DYLD_LIBRARY_PATH}" |
| else |
| DYLD_LIBRARY_PATH="${_ld_lib_path}" |
| fi |
| export DYLD_LIBRARY_PATH |
| ;; |
| HP-UX*) |
| if [ "x$SHLIB_PATH" != "x" ]; then |
| SHLIB_PATH="${_ld_lib_path}:${SHLIB_PATH}" |
| else |
| SHLIB_PATH="${_ld_lib_path}" |
| fi |
| export SHLIB_PATH |
| ;; |
| *) |
| if [ "x$LD_LIBRARY_PATH" != "x" ]; then |
| LD_LIBRARY_PATH="${_ld_lib_path}:${LD_LIBRARY_PATH}" |
| else |
| LD_LIBRARY_PATH="${_ld_lib_path}" |
| fi |
| export LD_LIBRARY_PATH |
| ;; |
| esac |
| |
| # Set up temporary directory |
| if [ "x$SNMP_HEADERONLY" != "xyes" ]; then |
| if [ "x$SNMP_TMPDIR" = "x" ]; then |
| if [ "x$testnum" = "x" ] ; then |
| testnum=0 |
| fi |
| SNMP_TMPDIR="/tmp/snmp-test-$testnum-$$" |
| translate_path SNMP_TMPDIR |
| export SNMP_TMPDIR |
| if [ -d $SNMP_TMPDIR ]; then |
| echo "$0: ERROR: $SNMP_TMPDIR already existed." |
| exit 1; |
| fi |
| fi |
| if [ ! -d $SNMP_TMPDIR ]; then |
| mkdir -p $SNMP_TMPDIR |
| chmod 0700 $SNMP_TMPDIR |
| fi |
| if [ "x$SNMP_TMP_PERSISTENTDIR" = "x" ]; then |
| SNMP_TMP_PERSISTENTDIR=$SNMP_TMPDIR/persist |
| export SNMP_TMP_PERSISTENTDIR |
| fi |
| if [ ! -d $SNMP_TMP_PERSISTENTDIR ]; then |
| mkdir $SNMP_TMP_PERSISTENTDIR |
| chmod 0700 $SNMP_TMP_PERSISTENTDIR |
| fi |
| fi |
| |
| if [ "x$SNMP_SAVE_TMPDIR" = "x" ]; then |
| SNMP_SAVE_TMPDIR="no" |
| export SNMP_SAVE_TMPDIR |
| fi |
| |
| SNMP_IGNORE_WINDOWS_REGISTRY="true" |
| export SNMP_IGNORE_WINDOWS_REGISTRY |
| SNMP_PERLPROG="`${builddir}/net-snmp-config --perlprog`" |
| SNMP_TESTDIR="$SNMP_BASEDIR/tests" |
| SNMP_CONFIG_FILE="$SNMP_TMPDIR/snmpd.conf" |
| SNMPTRAPD_CONFIG_FILE="$SNMP_TMPDIR/snmptrapd.conf" |
| SNMPAPP_CONFIG_FILE="$SNMP_TMPDIR/snmp.conf" |
| AGENTX_CONFIG_FILE="$SNMP_TMPDIR/agentx.conf" |
| SNMP_SNMPTRAPD_LOG_FILE="$SNMP_TMPDIR/snmptrapd.log" |
| SNMP_SNMPTRAPD_PID_FILE="$SNMP_TMPDIR/snmptrapd.pid" |
| SNMP_SNMPD_PID_FILE="$SNMP_TMPDIR/snmpd.pid" |
| SNMP_SNMPD_LOG_FILE="$SNMP_TMPDIR/snmpd.log" |
| SNMP_AGENTX_PID_FILE="$SNMP_TMPDIR/agentx.pid" |
| SNMP_AGENTX_LOG_FILE="$SNMP_TMPDIR/agentx.log" |
| SNMPCONFPATH="${SNMP_TMPDIR}${SNMP_ENV_SEPARATOR}${SNMP_TMP_PERSISTENTDIR}" |
| translate_path SNMPCONFPATH |
| export SNMPCONFPATH |
| SNMP_PERSISTENT_DIR=$SNMP_TMP_PERSISTENTDIR |
| translate_path SNMP_PERSISTENT_DIR |
| export SNMP_PERSISTENT_DIR |
| #SNMP_PERSISTENT_FILE="$SNMP_TMP_PERSISTENTDIR/persistent-store.conf" |
| #export SNMP_PERSISTENT_FILE |
| |
| ## Setup default flags and ports iff not done |
| if [ "x$SNMP_FLAGS" = "x" ]; then |
| SNMP_FLAGS="-d" |
| fi |
| if test -x /bin/netstat ; then |
| NETSTAT=/bin/netstat |
| elif test -x /usr/bin/netstat ; then |
| NETSTAT=/usr/bin/netstat |
| elif test -x /usr/sbin/netstat ; then |
| # e.g. Tru64 Unix |
| NETSTAT=/usr/sbin/netstat |
| elif test -x /usr/etc/netstat ; then |
| # e.g. IRIX |
| NETSTAT=/usr/etc/netstat |
| elif test -x /cygdrive/c/windows/system32/netstat ; then |
| # Cygwin |
| NETSTAT=/cygdrive/c/windows/system32/netstat |
| elif test -x /c/Windows/System32/netstat ; then |
| # MinGW + MSYS |
| NETSTAT=/c/Windows/System32/netstat |
| else |
| NETSTAT="" |
| fi |
| |
| if [ "x$OSTYPE" = "xmsys" ]; then |
| # Obtain the MSYS installation path from the !C: environment variable, |
| # remove surrounding single quotes and convert backslashes into forward |
| # slashes. |
| MSYS_PATH="$(set \ |
| | sed -n 's|^\!C:='"'"'\(.*\)'"'"'$|\1|p' | sed 's|\\|/|g')" |
| MSYS_SH="$MSYS_PATH/sh.exe" |
| fi |
| |
| PROBE_FOR_PORT() { |
| BASE_PORT=$1 |
| MAX_RETRIES=10 |
| if test -x "$NETSTAT" ; then |
| if test -z "$RANDOM"; then |
| RANDOM=2 |
| fi |
| while : |
| do |
| BASE_PORT=`expr $BASE_PORT + \( $RANDOM % 100 \)` |
| IN_USE=`$NETSTAT -a -n 2>/dev/null | grep "[\.:]$BASE_PORT "` |
| if [ $? -ne 0 ]; then |
| echo "$BASE_PORT" |
| break |
| fi |
| MAX_RETRIES=`expr $MAX_RETRIES - 1` |
| if [ $MAX_RETRIES -eq 0 ]; then |
| echo "ERROR: Could not find available port." >&2 |
| echo "NOPORT" |
| exit 255 |
| fi |
| done |
| else |
| echo "ERROR: Cannot probe for port - netstat not found." >&2 |
| echo "NOPORT" |
| exit 255 |
| fi |
| } |
| |
| if [ "x$SNMP_SNMPD_PORT" = "x" ]; then |
| SNMP_SNMPD_PORT=`PROBE_FOR_PORT 8765` |
| fi |
| if [ "x$SNMP_SNMPTRAPD_PORT" = "x" ]; then |
| SNMP_SNMPTRAPD_PORT=`PROBE_FOR_PORT 5678` |
| fi |
| if [ "x$SNMP_AGENTX_PORT" = "x" ]; then |
| SNMP_AGENTX_PORT=`PROBE_FOR_PORT 7676` |
| fi |
| if [ "x$SNMP_TRANSPORT_SPEC" = "x" ];then |
| SNMP_TRANSPORT_SPEC="udp" |
| fi |
| if [ "x$SNMP_TEST_DEST" = "x" -a $SNMP_TRANSPORT_SPEC != "unix" ];then |
| SNMP_TEST_DEST="127.0.0.1:" |
| fi |
| export SNMP_FLAGS SNMP_SNMPD_PORT SNMP_SNMPTRAPD_PORT |
| |
| # Make sure the agent doesn't parse any config file but what we give it. |
| # this is mainly to protect against a broken agent that doesn't |
| # properly handle combinations of -c and -C. (since I've broke it before). |
| #SNMPCONFPATH="$SNMP_TMPDIR/does-not-exist" |
| #export SNMPCONFPATH |
| |
| fi # Only allow ourselves to be eval'ed once |