[Nagiosplug-checkins] CVS: nagiosplug/plugins-scripts check_rpc.pl,1.2,1.3
Subhendu Ghosh
sghosh at users.sourceforge.net
Thu May 9 20:52:02 CEST 2002
Update of /cvsroot/nagiosplug/nagiosplug/plugins-scripts
In directory usw-pr-cvs1:/tmp/cvs-serv26739/plugins-scripts
Modified Files:
check_rpc.pl
Log Message:
updates for ePN, patch for multiple version check
Index: check_rpc.pl
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins-scripts/check_rpc.pl,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** check_rpc.pl 2 May 2002 16:43:29 -0000 1.2
--- check_rpc.pl 10 May 2002 03:51:17 -0000 1.3
***************
*** 1,3 ****
! #! /usr/bin/perl -wT
#
# check_rpc plugin for nagios
--- 1,3 ----
! #! /usr/local/bin/perl -w
#
# check_rpc plugin for nagios
***************
*** 15,34 ****
#
# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop
# current status: $Revision$
#
# Copyright Notice: GPL
#
-
use strict;
! use FindBin;
! use lib "$FindBin::Bin";
use utils qw($TIMEOUT %ERRORS &print_revision &support);
use vars qw($PROGNAME);
! my ($verbose, at proto,%prognum,$host,$response,$prognum,$port,$cmd);
my ($array_ref,$test,$element, at progkeys,$proto,$a,$b);
! my ($opt_V,$opt_h,$opt_C,$opt_p,$opt_H);
! $opt_V = $opt_h = $opt_C = $opt_p = $opt_H = '';
sub print_help ();
sub print_usage ();
--- 15,38 ----
#
# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop
+ # Modified May 2002 Subhendu Ghosh - support for ePN and patches
# current status: $Revision$
#
# Copyright Notice: GPL
+ # $Id$
#
use strict;
! use lib utils.pm;
use utils qw($TIMEOUT %ERRORS &print_revision &support);
use vars qw($PROGNAME);
! my ($verbose, at proto,%prognum,$host,$response,$prognum,$port,$cmd,$progver,$state);
my ($array_ref,$test,$element, at progkeys,$proto,$a,$b);
! my ($opt_V,$opt_h,$opt_C,$opt_p,$opt_H,$opt_c,$opt_u,$opt_t);
! my ($line, @progvers, $response2,$response3);
! $opt_V = $opt_h = $opt_C = $opt_p = $opt_H = $opt_c = $opt_u = $opt_t ='';
! $state = 'OK';
! $progver = $response=$response2= $response3 ='';
+ $PROGNAME = "check_rpc";
sub print_help ();
sub print_usage ();
***************
*** 47,78 ****
use Getopt::Long;
Getopt::Long::Configure('bundling');
! GetOptions
! ("V" => \$opt_V, "version" => \$opt_V,
"h" => \$opt_h, "help" => \$opt_h,
"C=s" => \$opt_C, "command=s" => \$opt_C,
"p=i" => \$opt_p, "port=i" => \$opt_p,
! "H=s" => \$opt_H, "hostname=s" => \$opt_H);
# -h means display verbose help screen
! if ($opt_h) { print_help(); exit 0; }
# -V means display version number
! if ($opt_V) { print_revision($PROGNAME,'$Revision$ '); exit 0; }
# -H means host name
! $opt_H = shift unless ($opt_H);
! unless ($opt_H) { print_usage(); exit -1; }
! if($opt_H && $opt_H =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]+(\.[a-zA-Z][-a-zA-Z0-9]+)*)$/) {
! $host = $1;
! } else {
! print "$opt_H is not a valid host name\n";
! exit -1;
}
! while (<DATA>) {
! ($a,$b) = split;
! $prognum{$a} = $b;
}
! close DATA;
# -C means command name or number
--- 51,230 ----
use Getopt::Long;
Getopt::Long::Configure('bundling');
! GetOptions(
! "V" => \$opt_V, "version" => \$opt_V,
"h" => \$opt_h, "help" => \$opt_h,
"C=s" => \$opt_C, "command=s" => \$opt_C,
"p=i" => \$opt_p, "port=i" => \$opt_p,
! "H=s" => \$opt_H, "hostname=s" => \$opt_H,
! "c=s" => \$opt_c, "progver=s" => \$opt_c,
! "v+" => \$verbose, "verbose+" => \$verbose,
! "u" => \$opt_u, "udp" => \$opt_u,
! "t" => \$opt_t, "tcp" => \$opt_t
! );
# -h means display verbose help screen
! if ($opt_h) { print_help(); exit $ERRORS{'OK'}; }
# -V means display version number
! if ($opt_V) {
! print_revision($PROGNAME,'$Revision$ ');
! exit $ERRORS{'Ok'};
! }
!
! # Hash containing all RPC program names and numbers
! # Add to the hash if support for new RPC program is required
!
! %prognum = (
! "portmapper" => 100000 ,
! "portmap" => 100000 ,
! "sunrpc" => 100000 ,
! "rpcbind" => 100000 ,
! "rstatd" => 100001 ,
! "rstat" => 100001 ,
! "rup" => 100001 ,
! "perfmeter" => 100001 ,
! "rstat_svc" => 100001 ,
! "rusersd" => 100002 ,
! "rusers" => 100002 ,
! "nfs" => 100003 ,
! "nfsprog" => 100003 ,
! "ypserv" => 100004 ,
! "ypprog" => 100004 ,
! "mountd" => 100005 ,
! "mount" => 100005 ,
! "showmount" => 100005 ,
! "ypbind" => 100007 ,
! "walld" => 100008 ,
! "rwall" => 100008 ,
! "shutdown" => 100008 ,
! "yppasswdd" => 100009 ,
! "yppasswd" => 100009 ,
! "etherstatd" => 100010 ,
! "etherstat" => 100010 ,
! "rquotad" => 100011 ,
! "rquotaprog" => 100011 ,
! "quota" => 100011 ,
! "rquota" => 100011 ,
! "sprayd" => 100012 ,
! "spray" => 100012 ,
! "3270_mapper" => 100013 ,
! "rje_mapper" => 100014 ,
! "selection_svc" => 100015 ,
! "selnsvc" => 100015 ,
! "database_svc" => 100016 ,
! "rexd" => 100017 ,
! "rex" => 100017 ,
! "alis" => 100018 ,
! "sched" => 100019 ,
! "llockmgr" => 100020 ,
! "nlockmgr" => 100021 ,
! "x25_inr" => 100022 ,
! "statmon" => 100023 ,
! "status" => 100024 ,
! "bootparam" => 100026 ,
! "ypupdated" => 100028 ,
! "ypupdate" => 100028 ,
! "keyserv" => 100029 ,
! "keyserver" => 100029 ,
! "sunlink_mapper" => 100033 ,
! "tfsd" => 100037 ,
! "nsed" => 100038 ,
! "nsemntd" => 100039 ,
! "showfhd" => 100043 ,
! "showfh" => 100043 ,
! "ioadmd" => 100055 ,
! "rpc.ioadmd" => 100055 ,
! "NETlicense" => 100062 ,
! "sunisamd" => 100065 ,
! "debug_svc" => 100066 ,
! "dbsrv" => 100066 ,
! "ypxfrd" => 100069 ,
! "rpc.ypxfrd" => 100069 ,
! "bugtraqd" => 100071 ,
! "kerbd" => 100078 ,
! "event" => 100101 ,
! "na.event" => 100101 ,
! "logger" => 100102 ,
! "na.logger" => 100102 ,
! "sync" => 100104 ,
! "na.sync" => 100104 ,
! "hostperf" => 100107 ,
! "na.hostperf" => 100107 ,
! "activity" => 100109 ,
! "na.activity" => 100109 ,
! "hostmem" => 100112 ,
! "na.hostmem" => 100112 ,
! "sample" => 100113 ,
! "na.sample" => 100113 ,
! "x25" => 100114 ,
! "na.x25" => 100114 ,
! "ping" => 100115 ,
! "na.ping" => 100115 ,
! "rpcnfs" => 100116 ,
! "na.rpcnfs" => 100116 ,
! "hostif" => 100117 ,
! "na.hostif" => 100117 ,
! "etherif" => 100118 ,
! "na.etherif" => 100118 ,
! "iproutes" => 100120 ,
! "na.iproutes" => 100120 ,
! "layers" => 100121 ,
! "na.layers" => 100121 ,
! "snmp" => 100122 ,
! "na.snmp" => 100122 ,
! "snmp-cmc" => 100122 ,
! "snmp-synoptics" => 100122 ,
! "snmp-unisys" => 100122 ,
! "snmp-utk" => 100122 ,
! "traffic" => 100123 ,
! "na.traffic" => 100123 ,
! "nfs_acl" => 100227 ,
! "sadmind" => 100232 ,
! "nisd" => 100300 ,
! "rpc.nisd" => 100300 ,
! "nispasswd" => 100303 ,
! "rpc.nispasswdd" => 100303 ,
! "ufsd" => 100233 ,
! "ufsd" => 100233 ,
! "pcnfsd" => 150001 ,
! "pcnfs" => 150001 ,
! "amd" => 300019 ,
! "amq" => 300019 ,
! "bwnfsd" => 545580417 ,
! "fypxfrd" => 600100069 ,
! "freebsd-ypxfrd" => 600100069 ,
! );
!
! # -v means verbose, -v-v means verbose twice = print above hash
! if (defined $verbose && ($verbose > 1) ){
! my $key;
! print "Supported programs:\n";
! print " name\t=>\tnumber\n";
! print " ===============================\n";
! foreach $key (sort keys %prognum) {
! print " $key \t=>\t$prognum{$key} \n";
! }
! print "\n\n";
! print_usage();
! exit $ERRORS{'OK'};
! }
# -H means host name
! unless ($opt_H) { print_usage(); exit $ERRORS{'UNKNOWN'}; }
!
! if (! utils::is_hostname($opt_H)){
! print "$opt_H is not a valid host name\n";
! print_usage();
! exit $ERRORS{"UNKNOWN"};
! }else{
! $host = $opt_H;
}
! if ($opt_t && $opt_u) {
! print "Cannot define tcp AND udp\n";
! print_usage();
! exit $ERRORS{'UNKNOWN'};
}
!
# -C means command name or number
***************
*** 81,92 ****
@progkeys = keys %prognum;
if ($opt_C =~ m/^([0-9]+)$/){
! $response = "RPC ok: program $opt_p (version ";
$prognum = $1;
} elsif ( in( \@progkeys, $opt_C)) {
! $response = "RPC ok: $opt_C (version ";
$prognum = $prognum{$opt_C};
} else {
print "Program $opt_C is not defined\n";
! exit -1;
}
--- 233,244 ----
@progkeys = keys %prognum;
if ($opt_C =~ m/^([0-9]+)$/){
! # $response = "RPC ok: program $opt_C (version ";
$prognum = $1;
} elsif ( in( \@progkeys, $opt_C)) {
! # $response = "RPC ok: $opt_C (version ";
$prognum = $prognum{$opt_C};
} else {
print "Program $opt_C is not defined\n";
! exit $ERRORS{'UNKNOWN'};
}
***************
*** 100,139 ****
$proto = 'u';
$proto = $proto[$prognum] if ($proto[$prognum]);
! $cmd = "/usr/sbin/rpcinfo $port -" . "$proto $host $prognum 2>&1 |";
! print "$cmd\n" if ($verbose);
! open CMD, $cmd;
!
! while ( <CMD> ) {
! chomp;
! if ( /program $prognum version ([0-9]*) ready and waiting/ ) {
! $response .= "$1) is running";
! print "$response\n";
! exit 0;
! }
}
- print "RPC CRITICAL: Program $opt_C not registered\n";
- exit 2;
sub print_help() {
print_revision($PROGNAME,'$Revision$ ');
! print "Copyright (c) 2000 Karl DeBisschop/Truongchinh Nguyen\n";
print "\n";
print "Check if a rpc service is registered and running using\n";
! print " rpcinfo -<protocol> <host> <program number>\n";
print "\n";
print_usage();
print "\n";
! print "<host> The server providing the rpc service\n";
! print "<program> The program name (or number).\n\n";
support();
}
sub print_usage () {
! print "$PROGNAME -H host -C rpc_command [-p port]\n";
! print "$PROGNAME [-h | --help]\n";
! print "$PROGNAME [-V | --version]\n";
}
--- 252,364 ----
$proto = 'u';
$proto = $proto[$prognum] if ($proto[$prognum]);
! $proto = 't' if ($opt_t);
! $proto = 'u' if ($opt_u);
!
!
! # Just in case of problems, let's not hang Nagios
! $SIG{'ALRM'} = sub {
! print ("ERROR: No response from RPC server (alarm)\n");
! exit $ERRORS{"UNKNOWN"};
! };
! alarm($TIMEOUT);
!
! # -c is progver - if we need to check multiple specified versions.
! if (defined $opt_c ) {
! my $vers;
! @progvers = split(/,/ ,$opt_c );
! foreach $vers (sort @progvers) {
! if($vers =~ /^([0-9]+)$/){
! $progver = "$1";
! print "Checking $opt_C version $progver proto $proto\n" if $verbose;
! get_rpcinfo();
! }else{
! print "Version $vers is not an integer\n" if $verbose;
! }
!
! }
! }else{
! get_rpcinfo();
! }
!
!
! ## translate proto for output
! if ($proto eq "u" ){
! $proto = "udp";
! }else{
! $proto = "tcp";
! }
!
! if ($state eq 'OK') {
! print "$state: RPC program $opt_C".$response." $proto running\n";
! }else{
! if($response){
! print "$state: RPC program $opt_C".$response2." $proto is not running,".$response." $proto is running\n";
! }else{
! print "$state: RPC program $opt_C $response2 $proto is not running\n";
! }
}
+ exit $ERRORS{$state};
+ ######## Subroutines ==========================
+
+ sub get_rpcinfo {
+ $cmd = "$utils::PATH_TO_RPCINFO $port -" . "$proto $host $prognum $progver 2>&1 |";
+ print "$cmd\n" if ($verbose);
+ open CMD, $cmd or die "Can't fork for rpcinfo: $!\n" ;
+
+ while ( $line = <CMD> ) {
+ printf "$line " if $verbose;
+ chomp $line;
+
+ if ( $line =~ /program $prognum version ([0-9]*) ready and waiting/ ) {
+ $response .= " version $1";
+ $state = 'OK' unless $state ne 'OK';
+ print "1:$response \n" if $verbose;
+ }
+
+ if ( $line =~ /program $prognum version ([0-9]*) is not available/ ) {
+ $response2 .= " version $1";
+ $state = 'CRITICAL';
+ print "2:$response2 \n" if $verbose;
+ }
+ if ( $line =~ /program $prognum is not available/ ) {
+ $response3 = "";
+ $response3 = "tcp" if $opt_t;
+ $response3 = "udp" if $opt_u;
+ $state = 'CRITICAL';
+ print "3:$response3 \n" if $verbose;
+ }
+ }
+ close CMD;
+ }
sub print_help() {
print_revision($PROGNAME,'$Revision$ ');
! print "Copyright (c) 2002 Karl DeBisschop/Truongchinh Nguyen/Subhendu Ghosh\n";
print "\n";
print "Check if a rpc service is registered and running using\n";
! print " rpcinfo -H host -C rpc_command \n";
print "\n";
print_usage();
print "\n";
! print " <host> The server providing the rpc service\n";
! print " <rpc_command> The program name (or number).\n";
! print " <program_version> The version you want to check for (one or more)\n";
! print " Should prevent checks of unknown versions being syslogged\n";
! print " e.g. 2,3,6 to check v2, v3, and v6\n";
! print " [-u | -t] Test UDP or TCP\n";
! print " [-v] Verbose \n";
! print " [-v -v] Verbose - will print supported programs and numbers \n";
! print "\n";
support();
}
sub print_usage () {
! print "Usage: \n";
! print " $PROGNAME -H host -C rpc_command [-p port] [-c program_version] [-u|-t] [-v]\n";
! print " $PROGNAME [-h | --help]\n";
! print " $PROGNAME [-V | --version]\n";
}
***************
*** 150,270 ****
}
- __DATA__
- portmapper 100000
- portmap 100000
- sunrpc 100000
- rpcbind 100000
- rstatd 100001
- rstat 100001
- rup 100001
- perfmeter 100001
- rstat_svc 100001
- rusersd 100002
- rusers 100002
- nfs 100003
- nfsprog 100003
- ypserv 100004
- ypprog 100004
- mountd 100005
- mount 100005
- showmount 100005
- ypbind 100007
- walld 100008
- rwall 100008
- shutdown 100008
- yppasswdd 100009
- yppasswd 100009
- etherstatd 100010
- etherstat 100010
- rquotad 100011
- rquotaprog 100011
- quota 100011
- rquota 100011
- sprayd 100012
- spray 100012
- 3270_mapper 100013
- rje_mapper 100014
- selection_svc 100015
- selnsvc 100015
- database_svc 100016
- rexd 100017
- rex 100017
- alis 100018
- sched 100019
- llockmgr 100020
- nlockmgr 100021
- x25_inr 100022
- statmon 100023
- status 100024
- bootparam 100026
- ypupdated 100028
- ypupdate 100028
- keyserv 100029
- keyserver 100029
- sunlink_mapper 100033
- tfsd 100037
- nsed 100038
- nsemntd 100039
- showfhd 100043
- showfh 100043
- ioadmd 100055
- rpc.ioadmd 100055
- NETlicense 100062
- sunisamd 100065
- debug_svc 100066
- dbsrv 100066
- ypxfrd 100069
- rpc.ypxfrd 100069
- bugtraqd 100071
- kerbd 100078
- event 100101
- na.event 100101
- logger 100102
- na.logger 100102
- sync 100104
- na.sync 100104
- hostperf 100107
- na.hostperf 100107
- activity 100109
- na.activity 100109
- hostmem 100112
- na.hostmem 100112
- sample 100113
- na.sample 100113
- x25 100114
- na.x25 100114
- ping 100115
- na.ping 100115
- rpcnfs 100116
- na.rpcnfs 100116
- hostif 100117
- na.hostif 100117
- etherif 100118
- na.etherif 100118
- iproutes 100120
- na.iproutes 100120
- layers 100121
- na.layers 100121
- snmp 100122
- na.snmp 100122
- snmp-cmc 100122
- snmp-synoptics 100122
- snmp-unisys 100122
- snmp-utk 100122
- traffic 100123
- na.traffic 100123
- nfs_acl 100227
- sadmind 100232
- nisd 100300
- rpc.nisd 100300
- nispasswd 100303
- rpc.nispasswdd 100303
- ufsd 100233
- ufsd 100233
- pcnfsd 150001
- pcnfs 150001
- amd 300019
- amq 300019
- bwnfsd 545580417
- fypxfrd 600100069
- freebsd-ypxfrd 600100069
--- 375,376 ----
More information about the Commits
mailing list