diff options
Diffstat (limited to 'Monitoring/plugins/check_rpc')
-rwxr-xr-x | Monitoring/plugins/check_rpc | 375 |
1 files changed, 0 insertions, 375 deletions
diff --git a/Monitoring/plugins/check_rpc b/Monitoring/plugins/check_rpc deleted file mode 100755 index 10a847ef..00000000 --- a/Monitoring/plugins/check_rpc +++ /dev/null @@ -1,375 +0,0 @@ -#! /usr/bin/perl -w -# -# check_rpc plugin for nagios -# -# usage: -# check_rpc host service -# -# Check if an rpc serice is registered and running -# using rpcinfo - $proto $host $prognum 2>&1 |"; -# -# Use these hosts.cfg entries as examples -# -# command[check_nfs]=/some/path/libexec/check_rpc $HOSTADDRESS$ nfs -# service[check_nfs]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_rpc -# -# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop -# Modified May 2002 Subhendu Ghosh - support for ePN and patches -# -# Copyright Notice: GPL -# - -use strict; -use lib "/usr/lib/nagios/plugins"; -use utils qw($TIMEOUT %ERRORS &print_revision &support); -use vars qw($PROGNAME); -my ($verbose,@proto,%prognum,$host,$response,$prognum,$port,$cmd,$progver,$state); -my ($array_ref,$test,$element,@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_u = $opt_t =''; -$state = 'UNKNOWN'; -$progver = $response=$response2= $response3 =''; - -$PROGNAME = "check_rpc"; -sub print_help (); -sub print_usage (); -sub in ($$); - -$ENV{'BASH_ENV'}=''; -$ENV{'ENV'}=''; -$ENV{'PATH'}=''; -$ENV{'LC_ALL'}='C'; - -#Initialise protocol for each progname number -# 'u' for UDP, 't' for TCP -$proto[10003]='u'; -$proto[10004]='u'; -$proto[10007]='u'; - -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,'1.4.15'); - 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 -$opt_C = shift unless ($opt_C); -unless ($opt_C) { print_usage(); exit -1; } -@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'}; -} - -# -p means port number -if($opt_p =~ /^([0-9]+)$/){ - $port = "-n $1"; -} else { - $port = ""; -} - -$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 'UNKNOWN'; - 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,'1.4.15'); - 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"; -} - -sub in ($$) { - $array_ref = shift; - $test = shift; - - while ( $element = shift @{$array_ref} ) { - if ($test eq $element) { - return 1; - } - } - return 0; -} - |