aboutsummaryrefslogtreecommitdiff
path: root/plugins-scripts/check_rpc.pl
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-scripts/check_rpc.pl')
-rwxr-xr-xplugins-scripts/check_rpc.pl274
1 files changed, 274 insertions, 0 deletions
diff --git a/plugins-scripts/check_rpc.pl b/plugins-scripts/check_rpc.pl
new file mode 100755
index 00000000..51901ac0
--- /dev/null
+++ b/plugins-scripts/check_rpc.pl
@@ -0,0 +1,274 @@
+#! /usr/bin/perl -wT
+#
+# 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
+# current status: $Revision$
+#
+# Copyright Notice: GPL
+#
+BEGIN {
+ if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
+ $runtimedir = $1;
+ $PROGNAME = $2;
+ }
+}
+
+use strict;
+use lib $main::runtimedir;
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+use vars qw($PROGNAME);
+my ($verbose,@proto,%prognum,$host,$response,$prognum,$port,$cmd);
+my ($array_ref,$test,$element,@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 ();
+sub in ($$);
+
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+$ENV{'PATH'}='';
+
+#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);
+
+# -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
+$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_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;
+}
+
+# -p means port number
+if($opt_p =~ /^([0-9]+)$/){
+ $port = "-n $1";
+} else {
+ $port = "";
+}
+
+$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";
+}
+
+sub in ($$) {
+ $array_ref = shift;
+ $test = shift;
+
+ while ( $element = shift @{$array_ref} ) {
+ if ($test eq $element) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+__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