|
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 |
}
|