Blame local/pass_persisttest

Packit fcad23
#!/usr/bin/perl
Packit fcad23
Packit fcad23
# Persistent perl script to respond to pass-through smnp requests
Packit fcad23
Packit fcad23
# put the following in your snmpd.conf file to call this script:
Packit fcad23
#
Packit fcad23
# Unix systems and Cygwin:
Packit fcad23
# pass_persist .1.3.6.1.4.1.8072.2.255 /path/to/pass_persisttest
Packit fcad23
# Windows systems except Cygwin:
Packit fcad23
# pass_persist .1.3.6.1.4.1.8072.2.255 perl /path/to/pass_persisttest
Packit fcad23
Packit fcad23
# Forces a buffer flush after every print
Packit fcad23
$|=1;
Packit fcad23
Packit fcad23
# Save my PID, to help kill this instance.
Packit fcad23
$PIDFILE=$ENV{'PASS_PERSIST_PIDFILE'} || "/tmp/pass_persist.pid";
Packit fcad23
open(PIDFILE, ">$PIDFILE");
Packit fcad23
print PIDFILE "$$\n";
Packit fcad23
close(PIDFILE);
Packit fcad23
Packit fcad23
use strict;
Packit fcad23
Packit fcad23
my $counter = 0;
Packit fcad23
my $place = ".1.3.6.1.4.1.8072.2.255";
Packit fcad23
Packit fcad23
while (<>){
Packit fcad23
  if (m!^PING!){
Packit fcad23
    print "PONG\n";
Packit fcad23
    next;
Packit fcad23
  }
Packit fcad23
Packit fcad23
  my $cmd = $_;
Packit fcad23
  my $req = <>;
Packit fcad23
  my $ret;
Packit fcad23
  chomp($cmd);
Packit fcad23
  chomp($req);
Packit fcad23
Packit fcad23
  if ( $cmd eq "getnext" ) {
Packit fcad23
     if (($req eq  "$place")         ||
Packit fcad23
         ($req eq  "$place.0")       ||
Packit fcad23
         ($req =~ m/$place\.0\..*/)  ||
Packit fcad23
         ($req eq  "$place.1"))       { $ret = "$place.1.0";}       # netSnmpPassString.0
Packit fcad23
  elsif (($req =~ m/$place\.1\..*/)  ||
Packit fcad23
         ($req eq  "$place.2")       ||
Packit fcad23
         ($req eq  "$place.2.0")     ||
Packit fcad23
         ($req =~ m/$place\.2\.0\..*/)    ||
Packit fcad23
         ($req eq  "$place.2.1")          ||
Packit fcad23
         ($req eq  "$place.2.1.0")        ||
Packit fcad23
         ($req =~ m/$place\.2\.1\.0\..*/) ||
Packit fcad23
         ($req eq  "$place.2.1.1")        ||
Packit fcad23
         ($req =~ m/$place\.2\.1\.1\..*/) ||
Packit fcad23
         ($req eq  "$place.2.1.2")        ||
Packit fcad23
         ($req eq  "$place.2.1.2.0")) { $ret = "$place.2.1.2.1";}   # netSnmpPassInteger.1
Packit fcad23
  elsif (($req =~ m/$place\.2\.1\.2\..*/) ||
Packit fcad23
         ($req eq  "$place.2.1.3")   ||
Packit fcad23
         ($req eq  "$place.2.1.3.0")) { $ret = "$place.2.1.3.1";}   # netSnmpPassOID.1
Packit fcad23
  elsif (($req =~ m/$place\.2\..*/)  ||
Packit fcad23
         ($req eq  "$place.3"))       { $ret = "$place.3.0";}       # netSnmpPassTimeTicks.0
Packit fcad23
  elsif (($req =~ m/$place\.3\..*/)  ||
Packit fcad23
         ($req eq  "$place.4"))       { $ret = "$place.4.0";}       # netSnmpPassIpAddress.0
Packit fcad23
  elsif (($req =~ m/$place\.4\..*/)  ||
Packit fcad23
         ($req eq  "$place.5"))       { $ret = "$place.5.0";}       # netSnmpPassCounter.0
Packit fcad23
  elsif (($req =~ m/$place\.5\..*/)  ||
Packit fcad23
         ($req eq  "$place.6"))       { $ret = "$place.6.0";}       # netSnmpPassGauge.0
Packit fcad23
  elsif (($req =~ m/$place\.6\..*/)  ||
Packit fcad23
         ($req eq  "$place.7"))       { $ret = "$place.7.0";}       # netSnmpPassCounter64.0
Packit fcad23
  elsif (($req =~ m/$place\.7\..*/)  ||
Packit fcad23
         ($req eq  "$place.8"))       { $ret = "$place.8.0";}       # netSnmpPassInteger64.0
Packit fcad23
  else   {
Packit fcad23
      print "NONE\n";
Packit fcad23
      next;
Packit fcad23
    }
Packit fcad23
  } else {
Packit fcad23
    if ($req eq $place) {
Packit fcad23
      print "NONE\n";
Packit fcad23
      next;
Packit fcad23
    } else {
Packit fcad23
      $ret = $req;
Packit fcad23
    }
Packit fcad23
  }
Packit fcad23
Packit fcad23
  print "$ret\n";
Packit fcad23
Packit fcad23
  if ($ret eq "$place.1.0") {
Packit fcad23
    print "string\nLife, the Universe, and Everything\n";
Packit fcad23
  } elsif ($ret eq "$place.2.1.2.1") {
Packit fcad23
    print "integer\n42\n";
Packit fcad23
  } elsif ($ret eq "$place.2.1.3.1") {
Packit fcad23
    print "objectid\n$place.99\n";
Packit fcad23
  } elsif ($ret eq "$place.3.0") {
Packit fcad23
    print "timeticks\n363136200\n";
Packit fcad23
  } elsif ($ret eq "$place.4.0") {
Packit fcad23
    print "ipaddress\n127.0.0.1\n";
Packit fcad23
  } elsif ($ret eq "$place.5.0") {
Packit fcad23
    $counter++;
Packit fcad23
    print "counter\n$counter\n";
Packit fcad23
  } elsif ($ret eq "$place.6.0") {
Packit fcad23
    print "gauge\n42\n";
Packit fcad23
  } elsif ($ret eq "$place.7.0") {
Packit fcad23
    print "counter64\n9223372036854775806\n";
Packit fcad23
  } elsif ($ret eq "$place.8.0") {
Packit fcad23
    print "integer64\n9223372036854775807\n";
Packit fcad23
  } else {
Packit fcad23
    print  "string\nack... $ret $req\n";
Packit fcad23
  }
Packit fcad23
}