summaryrefslogtreecommitdiffstats
path: root/plugins-scripts
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-scripts')
-rw-r--r--plugins-scripts/.cvsignore5
-rw-r--r--plugins-scripts/Makefile.am30
-rwxr-xr-xplugins-scripts/check_breeze.pl86
-rwxr-xr-xplugins-scripts/check_disk_smb.pl240
-rwxr-xr-xplugins-scripts/check_flexlm.pl149
-rwxr-xr-xplugins-scripts/check_ircd.pl257
-rwxr-xr-xplugins-scripts/check_log.sh214
-rwxr-xr-xplugins-scripts/check_netdns.pl129
-rwxr-xr-xplugins-scripts/check_nfs.pl48
-rwxr-xr-xplugins-scripts/check_ntp.pl236
-rwxr-xr-xplugins-scripts/check_oracle.sh126
-rwxr-xr-xplugins-scripts/check_rpc.pl274
-rwxr-xr-xplugins-scripts/check_sensors.sh65
-rwxr-xr-xplugins-scripts/check_wave.pl129
-rw-r--r--plugins-scripts/subst.in56
-rw-r--r--plugins-scripts/t/check_rpc.t19
-rw-r--r--plugins-scripts/utils.pm.in38
-rw-r--r--plugins-scripts/utils.sh.in22
18 files changed, 2123 insertions, 0 deletions
diff --git a/plugins-scripts/.cvsignore b/plugins-scripts/.cvsignore
new file mode 100644
index 00000000..95d79c72
--- /dev/null
+++ b/plugins-scripts/.cvsignore
@@ -0,0 +1,5 @@
1Makefile
2Makefile.in
3subst
4utils.pm
5utils.sh \ No newline at end of file
diff --git a/plugins-scripts/Makefile.am b/plugins-scripts/Makefile.am
new file mode 100644
index 00000000..4bdf7175
--- /dev/null
+++ b/plugins-scripts/Makefile.am
@@ -0,0 +1,30 @@
1## Process this file with automake to produce Makefile.in
2
3SUFFIXES = .pl .sh
4
5VPATH=$(top_srcdir) $(top_srcdir)/plugins-scripts $(top_srcdir)/plugins-scripts/t
6
7libexec_SCRIPTS = check_breeze check_disk_smb check_flexlm check_ircd \
8 check_log check_ntp check_oracle check_rpc check_sensors check_wave \
9 utils.sh utils.pm
10
11EXTRA_DIST=check_breeze.pl check_disk_smb.pl check_flexlm.pl check_ircd.pl \
12 check_log.sh check_ntp.pl check_oracle.sh check_rpc.pl check_sensors.sh \
13 check_wave.pl utils.sh.in utils.pm.in t
14
15TESTS_ENVIRONMENT=perl -I $(top_builddir) -I $(top_srcdir)
16
17TESTS = @SCRIPT_TEST@
18
19test:
20 perl -I $(top_builddir) -I $(top_srcdir) ../test.pl
21
22CLEANFILES=$(libexec_SCRIPTS)
23
24.pl :
25 $(AWK) -f ./subst $< > $@
26 chmod +x $@
27
28.sh :
29 $(AWK) -f ./subst $< > $@
30 chmod +x $@
diff --git a/plugins-scripts/check_breeze.pl b/plugins-scripts/check_breeze.pl
new file mode 100755
index 00000000..79e36be7
--- /dev/null
+++ b/plugins-scripts/check_breeze.pl
@@ -0,0 +1,86 @@
1#! /usr/bin/perl -wT
2
3BEGIN {
4 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
5 $runtimedir = $1;
6 $PROGNAME = $2;
7 }
8}
9
10use strict;
11use Getopt::Long;
12use vars qw($opt_V $opt_h $opt_H $opt_w $opt_c $PROGNAME);
13use lib $main::runtimedir;
14use utils qw(%ERRORS &print_revision &support &usage);
15
16sub print_help ();
17sub print_usage ();
18
19$ENV{'PATH'}='';
20$ENV{'BASH_ENV'}='';
21$ENV{'ENV'}='';
22
23Getopt::Long::Configure('bundling');
24GetOptions
25 ("V" => \$opt_V, "version" => \$opt_V,
26 "h" => \$opt_h, "help" => \$opt_h,
27 "w=s" => \$opt_w, "warning=s" => \$opt_w,
28 "c=s" => \$opt_c, "critical=s" => \$opt_c,
29 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
30
31if ($opt_V) {
32 print_revision($PROGNAME,'$Revision$');
33 exit $ERRORS{'OK'};
34}
35
36if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
37
38($opt_H) || ($opt_H = shift) || usage("Host name/address not specified\n");
39my $host = $1 if ($opt_H =~ /([-.A-Za-z0-9]+)/);
40($host) || usage("Invalid host: $opt_H\n");
41
42($opt_w) || ($opt_w = shift) || usage("Warning threshold not specified\n");
43my $warning = $1 if ($opt_w =~ /([0-9]{1,2}|100)+/);
44($warning) || usage("Invalid warning threshold: $opt_w\n");
45
46($opt_c) || ($opt_c = shift) || usage("Critical threshold not specified\n");
47my $critical = $1 if ($opt_c =~ /([0-9]{1,2}|100)/);
48($critical) || usage("Invalid critical threshold: $opt_c\n");
49
50my $sig=0;
51$sig = `/usr/bin/snmpget $host public .1.3.6.1.4.1.710.3.2.3.1.3.0`;
52my @test=split(/ /,$sig);
53$sig=$test[2];
54$sig=int($sig);
55if ($sig>100){$sig=100}
56
57print "Signal Strength at: $sig%\n";
58
59exit $ERRORS{'CRITICAL'} if ($sig<$critical);
60exit $ERRORS{'WARNING'} if ($sig<$warning);
61exit $ERRORS{'OK'};
62
63
64sub print_usage () {
65 print "Usage: $PROGNAME -H <host> -w <warn> -c <crit>\n";
66}
67
68sub print_help () {
69 print_revision($PROGNAME,'$Revision$');
70 print "Copyright (c) 2000 Jeffrey Blank/Karl DeBisschop
71
72This plugin reports the signal strength of a Breezecom wireless equipment
73
74";
75 print_usage();
76 print "
77-H, --hostname=HOST
78 Name or IP address of host to check
79-w, --warning=INTEGER
80 Percentage strength below which a WARNING status will result
81-c, --critical=INTEGER
82 Percentage strength below which a CRITICAL status will result
83
84";
85 support();
86}
diff --git a/plugins-scripts/check_disk_smb.pl b/plugins-scripts/check_disk_smb.pl
new file mode 100755
index 00000000..d1b0b3d6
--- /dev/null
+++ b/plugins-scripts/check_disk_smb.pl
@@ -0,0 +1,240 @@
1#! /usr/bin/perl -wT
2#
3#
4# check_disk.pl <host> <share> <user> <pass> [warn] [critical] [port]
5#
6# Nagios host script to get the disk usage from a SMB share
7#
8# Changes and Modifications
9# =========================
10# 7-Aug-1999 - Michael Anthon
11# Created from check_disk.pl script provided with netsaint_statd (basically
12# cause I was too lazy (or is that smart?) to write it from scratch)
13# 8-Aug-1999 - Michael Anthon
14# Modified [warn] and [critical] parameters to accept format of nnn[M|G] to
15# allow setting of limits in MBytes or GBytes. Percentage settings for large
16# drives is a pain in the butt
17
18BEGIN {
19 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
20 $runtimedir = $1;
21 $PROGNAME = $2;
22 }
23}
24
25require 5.004;
26use POSIX;
27use strict;
28use Getopt::Long;
29use vars qw($opt_V $opt_h $opt_H $opt_s $opt_W $opt_u $opt_p $opt_w $opt_c $verbose);
30use vars qw($PROGNAME);
31use lib $main::runtimedir;
32use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
33
34sub print_help ();
35sub print_usage ();
36
37$ENV{'PATH'}='';
38$ENV{'BASH_ENV'}='';
39$ENV{'ENV'}='';
40
41Getopt::Long::Configure('bundling');
42GetOptions
43 ("v" => \$verbose, "verbose" => \$verbose,
44 "V" => \$opt_V, "version" => \$opt_V,
45 "h" => \$opt_h, "help" => \$opt_h,
46 "w=s" => \$opt_w, "warning=s" => \$opt_w,
47 "c=s" => \$opt_c, "critical=s" => \$opt_c,
48 "p=s" => \$opt_p, "password=s" => \$opt_p,
49 "u=s" => \$opt_u, "username=s" => \$opt_u,
50 "s=s" => \$opt_s, "share=s" => \$opt_s,
51 "W=s" => \$opt_W, "workgroup=s" => \$opt_W,
52 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
53
54if ($opt_V) {
55 print_revision($PROGNAME,'$Revision$'); #'
56 exit $ERRORS{'OK'};
57}
58
59if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
60
61my $smbclient="/usr/bin/smbclient";
62my $smbclientoptions="";
63
64($opt_H) || ($opt_H = shift) || usage("Host name not specified\n");
65my $host = $1 if ($opt_H =~ /([-_.A-Za-z0-9]+)/);
66($host) || usage("Invalid host: $opt_H\n");
67
68($opt_s) || ($opt_s = shift) || usage("Share volume not specified\n");
69my $share = $1 if ($opt_s =~ /([-_.A-Za-z0-9]+)/);
70($share) || usage("Invalid share: $opt_s\n");
71
72($opt_u) || ($opt_u = shift) || ($opt_u = "guest");
73my $user = $1 if ($opt_u =~ /([-_.A-Za-z0-9]+)/);
74($user) || usage("Invalid user: $opt_u\n");
75
76($opt_p) || ($opt_p = shift) || ($opt_p = "guest");
77my $pass = $1 if ($opt_p =~ /(.*)/);
78
79($opt_w) || ($opt_w = shift) || ($opt_w = 85);
80my $warn = $1 if ($opt_w =~ /([0-9]{1,2}\%?|100\%?|[0-9]+[kmKM])+/);
81($warn) || usage("Invalid warning threshold: $opt_w\n");
82
83($opt_c) || ($opt_c = shift) || ($opt_c = 95);
84my $crit = $1 if ($opt_c =~ /([0-9]{1,2}\%?|100\%?|[0-9]+[kmKM])/);
85($crit) || usage("Invalid critical threshold: $opt_c\n");
86
87my $workgroup = $1 if (defined($opt_W) && $opt_W =~ /(.*)/);
88
89my $state = "OK";
90my $answer = undef;
91my $res = undef;
92my @lines = undef;
93
94# Just in case of problems, let's not hang Nagios
95$SIG{'ALRM'} = sub {
96 print "No Answer from Client\n";
97 exit $ERRORS{"UNKNOWN"};
98};
99alarm($TIMEOUT);
100
101# Execute an "ls" on the share using smbclient program
102# get the results into $res
103if (defined($workgroup)) {
104 $res = qx/$smbclient \/\/$host\/$share $pass -W $workgroup -U $user $smbclientoptions -c ls/;
105} else {
106 $res = qx/$smbclient \/\/$host\/$share $pass -U $user $smbclientoptions -c ls/;
107}
108#Turn off alarm
109alarm(0);
110
111#Split $res into an array of lines
112@lines = split /\n/, $res;
113
114#Get the last line into $_
115$_ = $lines[$#lines];
116#print "$_\n";
117
118#Process the last line to get free space.
119#If line does not match required regexp, return an UNKNOWN error
120if (/\s*(\d*) blocks of size (\d*)\. (\d*) blocks available/) {
121
122 my ($avail) = ($3*$2)/1024;
123 my ($avail_bytes) = $avail;
124 my ($capper) = int(($3/$1)*100);
125 my ($mountpt) = "\\\\$host\\$share";
126
127 #Check $warn and $crit for type (%/M/G) and set up for tests
128 #P = Percent, K = KBytes
129 my $warn_type;
130 my $crit_type;
131 if ($warn =~ /^([0-9]+$)/) {
132 $warn_type = "P";
133 } elsif ($warn =~ /^([0-9]+)k$/) {
134 my ($warn_type) = "K";
135 $warn = $1;
136 } elsif ($warn =~ /^([0-9]+)M$/) {
137 $warn_type = "K";
138 $warn = $1 * 1024;
139 } elsif ($warn =~ /^([0-9]+)G$/) {
140 $warn_type = "K";
141 $warn = $1 * 1048576;
142 }
143 if ($crit =~ /^([0-9]+$)/) {
144 $crit_type = "P";
145 } elsif ($crit =~ /^([0-9]+)k$/) {
146 $crit_type = "K";
147 $crit = $1;
148 } elsif ($crit =~ /^([0-9]+)M$/) {
149 $crit_type = "K";
150 $crit = $1 * 1024;
151 } elsif ($crit =~ /^([0-9]+)G$/) {
152 $crit_type = "K";
153 $crit = $1 * 1048576;
154 }
155
156 if (int($avail / 1024) > 0) {
157 $avail = int($avail / 1024);
158 if (int($avail /1024) > 0) {
159 $avail = (int(($avail / 1024)*100))/100;
160 $avail = $avail."G";
161 } else {
162 $avail = $avail."M";
163 }
164 } else {
165 $avail = $avail."K";
166 }
167
168#print ":$warn:$warn_type:\n";
169#print ":$crit:$crit_type:\n";
170#print ":$avail:$avail_bytes:$capper:$mountpt:\n";
171 if ((($warn_type eq "P") && (100 - $capper) < $warn) || (($warn_type eq "K") && ($avail_bytes > $warn))) {
172 $answer = "Disk ok - $avail ($capper%) free on $mountpt\n";
173 } elsif ((($crit_type eq "P") && (100 - $capper) < $crit) || (($crit_type eq "K") && ($avail_bytes > $crit))) {
174 $state = "WARNING";
175 $answer = "Only $avail ($capper%) free on $mountpt\n";
176 } else {
177 $state = "CRITICAL";
178 $answer = "Only $avail ($capper%) free on $mountpt\n";
179 }
180} else {
181 $answer = "Result from smbclient not suitable\n";
182 $state = "UNKNOWN";
183 foreach (@lines) {
184 if (/Access denied/) {
185 $answer = "Access Denied\n";
186 $state = "CRITICAL";
187 last;
188 }
189 if (/(Unknown host \w*)/) {
190 $answer = "$1\n";
191 $state = "CRITICAL";
192 last;
193 }
194 if (/(You specified an invalid share name)/) {
195 $answer = "Invalid share name \\\\$host\\$share\n";
196 $state = "CRITICAL";
197 last;
198 }
199 }
200}
201
202
203print $answer;
204print "$state\n" if ($verbose);
205exit $ERRORS{$state};
206
207sub print_usage () {
208 print "Usage: $PROGNAME -H <host> -s <share> -u <user> -p <password>
209 -w <warn> -c <crit> [-W <workgroup>]\n";
210}
211
212sub print_help () {
213 print_revision($PROGNAME,'$Revision$');
214 print "Copyright (c) 2000 Michael Anthon/Karl DeBisschop
215
216Perl Check SMB Disk plugin for Nagios
217
218";
219 print_usage();
220 print "
221-H, --hostname=HOST
222 NetBIOS name of the server
223-s, --share=STRING
224 Share name to be tested
225-W, --workgroup=STRING
226 Workgroup or Domain used (Defaults to \"WORKGROUP\")
227-u, --user=STRING
228 Username to log in to server. (Defaults to \"guest\")
229-p, --password=STRING
230 Password to log in to server. (Defaults to \"guest\")
231-w, --warning=INTEGER
232 Percent of used space at which a warning will be generated (Default: 85%)
233
234-c, --critical=INTEGER
235 Percent of used space at which a critical will be generated (Defaults: 95%)
236
237
238";
239 support();
240}
diff --git a/plugins-scripts/check_flexlm.pl b/plugins-scripts/check_flexlm.pl
new file mode 100755
index 00000000..1d26b7c8
--- /dev/null
+++ b/plugins-scripts/check_flexlm.pl
@@ -0,0 +1,149 @@
1#! /usr/bin/perl -wT
2#
3# usage:
4# check_flexlm.pl license_file
5#
6# Check available flexlm license managers.
7# Use lmstat to check the status of the license server
8# described by the license file given as argument.
9# Check and interpret the output of lmstat
10# and create returncodes and output.
11#
12# Contrary to the nagios concept, this script takes
13# a file, not a hostname as an argument and returns
14# the status of hosts and services described in that
15# file. Use these hosts.cfg entries as an example
16#
17#host[anchor]=any host will do;some.address.com;;check-host-alive;3;120;24x7;1;1;1;
18#service[anchor]=yodel;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yodel_lic
19#service[anchor]=yeehaw;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yeehaw_lic
20#command[check_flexlm]=/some/path/libexec/check_flexlm.pl $ARG1$
21#
22# Notes:
23# - you need the lmstat utility which comes with flexlm.
24# - set the correct path in the variable $lmstat.
25#
26# initial version: 9-10-99 Ernst-Dieter Martin edmt@infineon.com
27#
28# License: GPL
29#
30
31BEGIN {
32 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
33 $runtimedir = $1;
34 $PROGNAME = $2;
35 }
36}
37
38use strict;
39use Getopt::Long;
40use vars qw($opt_V $opt_h $opt_F $verbose $PROGNAME);
41use lib $main::runtimedir;
42use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
43
44sub print_help ();
45sub print_usage ();
46
47$ENV{'PATH'}='';
48$ENV{'BASH_ENV'}='';
49$ENV{'ENV'}='';
50
51Getopt::Long::Configure('bundling');
52GetOptions
53 ("V" => \$opt_V, "version" => \$opt_V,
54 "h" => \$opt_h, "help" => \$opt_h,
55 "v" => \$verbose, "verbose" => \$verbose,
56 "F=s" => \$opt_F, "filename=s" => \$opt_F);
57
58if ($opt_V) {
59 print_revision($PROGNAME,'$Revision$');
60 exit $ERRORS{'OK'};
61}
62
63if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
64
65# Just in case of problems, let's not hang Nagios
66$SIG{'ALRM'} = sub {
67 print "No Answer from Client\n";
68 exit 2;
69};
70alarm($TIMEOUT);
71
72my $lmstat = "/opt/lic/sw/cadadm/default/bin/lmstat";
73
74($opt_F) || ($opt_F = shift) || usage("License file not specified\n");
75my $licfile = $1 if ($opt_F =~ /^(.*)$/);
76($licfile) || usage("Invalid filename: $opt_F\n");
77
78print "$licfile\n" if $verbose;
79
80open CMD,"$lmstat -c $licfile |";
81
82my $serverup = 0;
83my ($ls1,$ls2,$ls3,$lf1,$lf2,$lf3,$servers);
84
85while ( <CMD> ) {
86 if ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*)/ ) {
87 $ls1 = $1;
88 $ls2 = $2;
89 $ls3 = $3;
90 $lf1 = $lf2 = $lf3 = 0;
91 $servers = 3;
92 } elsif ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*)/ ) {
93 $ls1 = $1;
94 $ls2 = $ls3 = "";
95 $lf1 = $lf2 = $lf3 = 0;
96 $servers = 1;
97 } elsif ( / *$ls1: license server UP/ ) {
98 print "$ls1 UP, ";
99 $lf1 = 1
100 } elsif ( / *$ls2: license server UP/ ) {
101 print "$ls2 UP, ";
102 $lf2 = 1
103 } elsif ( / *$ls3: license server UP/ ) {
104 print "$ls3 UP, ";
105 $lf3 = 1
106 } elsif ( / *([^:]*: UP .*)/ ) {
107 print " license server for $1\n";
108 $serverup = 1;
109 }
110}
111if ( $serverup == 0 ) {
112 print " license server not running\n";
113 exit 2;
114}
115
116exit $ERRORS{'OK'} if ( $servers == $lf1 + $lf2 + $lf3 );
117exit $ERRORS{'WARNING'} if ( $servers == 3 && $lf1 + $lf2 + $lf3 == 2 );
118exit $ERRORS{'CRITICAL'};
119
120
121sub print_usage () {
122 print "Usage:
123 $PROGNAME -F <filename> [--verbose]
124 $PROGNAME --help
125 $PROGNAME --version
126";
127}
128
129sub print_help () {
130 print_revision($PROGNAME,'$Revision$');
131 print "Copyright (c) 2000 Ernst-Dieter Martin/Karl DeBisschop
132
133Check available flexlm license managers
134
135";
136 print_usage();
137 print "
138-F, --filename=FILE
139 Name of license file
140-v, --verbose
141 Print some extra debugging information (not advised for normal operation)
142-V, --version
143 Show version and license information
144-h, --help
145 Show this help screen
146
147";
148 support();
149}
diff --git a/plugins-scripts/check_ircd.pl b/plugins-scripts/check_ircd.pl
new file mode 100755
index 00000000..e4c4bd02
--- /dev/null
+++ b/plugins-scripts/check_ircd.pl
@@ -0,0 +1,257 @@
1#!/usr/bin/perl -wT
2
3# -----------------------------------------------------------------------------
4# File Name: check_ircd.pl
5#
6# Author: Richard Mayhew - South Africa
7#
8# Date: 1999/09/20
9#
10# $Id$
11#
12# Description: This script will check to see if an IRCD is running
13# about how many users it has
14#
15# Email: netsaint@splash.co.za
16#
17# -----------------------------------------------------------------------------
18# Copyright 1999 (c) Richard Mayhew
19#
20# Credits go to Ethan Galstad for coding Nagios
21#
22# If any changes are made to this script, please mail me a copy of the
23# changes :)
24#
25# Some code taken from Charlie Cook (check_disk.pl)
26#
27# License GPL
28#
29# -----------------------------------------------------------------------------
30# Date Author Reason
31# ---- ------ ------
32#
33# 1999/09/20 RM Creation
34#
35# 1999/09/20 TP Changed script to use strict, more secure by
36# specifying $ENV variables. The bind command is
37# still insecure through. Did most of my work
38# with perl -wT and 'use strict'
39#
40# test using check_ircd.pl (irc-2.mit.edu|irc.erols.com|irc.core.com)
41#
42# ------------------------------------------------------------------[ Begin ]--
43
44BEGIN {
45 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
46 $runtimedir = $1;
47 $PROGNAME = $2;
48 }
49}
50
51# ----------------------------------------------------------------[ Require ]--
52
53require 5.004;
54
55# -------------------------------------------------------------------[ Uses ]--
56
57use Socket;
58use strict;
59use Getopt::Long;
60use vars qw($opt_V $opt_h $opt_t $opt_p $opt_H $opt_w $opt_c $verbose);
61use vars qw($PROGNAME);
62use lib $main::runtimedir;
63use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
64
65# ----------------------------------------------------[ Function Prototypes ]--
66
67sub print_help ();
68sub print_usage ();
69sub connection ($$$$);
70sub bindRemote ($$$);
71
72# -------------------------------------------------------------[ Enviroment ]--
73
74$ENV{PATH} = "";
75$ENV{ENV} = "";
76$ENV{BASH_ENV} = "";
77
78# -----------------------------------------------------------------[ Global ]--
79
80my $NICK="ircd$$";
81my $USER_INFO="monitor localhost localhost : ";
82
83# -------------------------------------------------------------[ connection ]--
84sub connection ($$$$)
85{
86 my ($in_remotehost,$in_users,$in_warn,$in_crit) = @_;
87 my $state;
88 my $answer;
89
90 print "connection(debug): users = $in_users\n" if $verbose;
91 $in_users =~ s/\ //g;
92
93 if ($in_users >= 0) {
94
95 if ($in_users > $in_crit) {
96 $state = "CRITICAL";
97 $answer = "Critical Number Of Clients Connected : $in_users (Limit = $in_crit)\n";
98
99 } elsif ($in_users > $in_warn) {
100 $state = "WARNING";
101 $answer = "Warning Number Of Clients Connected : $in_users (Limit = $in_warn)\n";
102
103 } else {
104 $state = "OK";
105 $answer = "IRCD ok - Current Local Users: $in_users\n";
106 }
107
108 } else {
109 $state = "UNKNOWN";
110 $answer = "Server $in_remotehost has less than 0 users! Something is Really WRONG!\n";
111 }
112
113 print ClientSocket "quit\n";
114 print $answer;
115 exit $ERRORS{$state};
116}
117
118# ------------------------------------------------------------[ print_usage ]--
119
120sub print_usage () {
121 print "Usage: $PROGNAME -H <host> [-w <warn>] [-c <crit>] [-p <port>]\n";
122}
123
124# -------------------------------------------------------------[ print_help ]--
125
126sub print_help ()
127{
128 print_revision($PROGNAME,'$Revision$ ');
129 print "Copyright (c) 2000 Richard Mayhew/Karl DeBisschop
130
131Perl Check IRCD plugin for Nagios
132
133";
134 print_usage();
135 print "
136-H, --hostname=HOST
137 Name or IP address of host to check
138-w, --warning=INTEGER
139 Number of connected users which generates a warning state (Default: 50)
140-c, --critical=INTEGER
141 Number of connected users which generates a critical state (Default: 100)
142-p, --port=INTEGER
143 Port that the ircd daemon is running on <host> (Default: 6667)
144-v, --verbose
145 Print extra debugging information
146";
147}
148
149# -------------------------------------------------------------[ bindRemote ]--
150
151sub bindRemote ($$$)
152{
153 my ($in_remotehost, $in_remoteport, $in_hostname) = @_;
154 my $proto = getprotobyname('tcp');
155 my $sockaddr;
156 my $this;
157 my $thisaddr = gethostbyname($in_hostname);
158 my $that;
159 my ($name, $aliases,$type,$len,$thataddr) = gethostbyname($in_remotehost);
160# ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($in_hostname);
161
162 if (!socket(ClientSocket,AF_INET, SOCK_STREAM, $proto)) {
163 print "IRCD UNKNOWN: Could not start socket ($!)\n";
164 exit $ERRORS{"UNKNOWN"};
165 }
166 $sockaddr = 'S n a4 x8';
167 $this = pack($sockaddr, AF_INET, 0, $thisaddr);
168 $that = pack($sockaddr, AF_INET, $in_remoteport, $thataddr);
169 if (!bind(ClientSocket, $this)) {
170 print "IRCD UNKNOWN: Could not bind socket ($!)\n";
171 exit $ERRORS{"UNKNOWN"};
172 }
173 if (!connect(ClientSocket, $that)) {
174 print "IRCD UNKNOWN: Could not connect socket ($!)\n";
175 exit $ERRORS{"UNKNOWN"};
176 }
177 select(ClientSocket); $| = 1; select(STDOUT);
178 return \*ClientSocket;
179}
180
181# ===================================================================[ MAIN ]==
182
183MAIN:
184{
185 my $hostname;
186
187 Getopt::Long::Configure('bundling');
188 GetOptions
189 ("V" => \$opt_V, "version" => \$opt_V,
190 "h" => \$opt_h, "help" => \$opt_h,
191 "v" => \$verbose,"verbose" => \$verbose,
192 "t=i" => \$opt_t, "timeout=i" => \$opt_t,
193 "w=i" => \$opt_w, "warning=i" => \$opt_w,
194 "c=i" => \$opt_c, "critical=i" => \$opt_c,
195 "p=i" => \$opt_p, "port=i" => \$opt_p,
196 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
197
198 if ($opt_V) {
199 print_revision($PROGNAME,'$Revision$ ');
200 exit $ERRORS{'OK'};
201 }
202
203 if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
204
205 ($opt_H) || ($opt_H = shift) || usage("Host name/address not specified\n");
206 my $remotehost = $1 if ($opt_H =~ /([-.A-Za-z0-9]+)/);
207 ($remotehost) || usage("Invalid host: $opt_H\n");
208
209 ($opt_w) || ($opt_w = shift) || ($opt_w = 50);
210 my $warn = $1 if ($opt_w =~ /^([0-9]+)$/);
211 ($warn) || usage("Invalid warning threshold: $opt_w\n");
212
213 ($opt_c) || ($opt_c = shift) || ($opt_c = 100);
214 my $crit = $1 if ($opt_c =~ /^([0-9]+)$/);
215 ($crit) || usage("Invalid critical threshold: $opt_c\n");
216
217 ($opt_p) || ($opt_p = shift) || ($opt_p = 6667);
218 my $remoteport = $1 if ($opt_p =~ /^([0-9]+)$/);
219 ($remoteport) || usage("Invalid port: $opt_p\n");
220
221 if ($opt_t && $opt_t =~ /^([0-9]+)$/) { $TIMEOUT = $1; }
222
223 # Just in case of problems, let's not hang Nagios
224 $SIG{'ALRM'} = sub {
225 print "Somthing is Taking a Long Time, Increase Your TIMEOUT (Currently Set At $TIMEOUT Seconds)\n";
226 exit $ERRORS{"UNKNOWN"};
227 };
228
229 alarm($TIMEOUT);
230
231 chomp($hostname = `/bin/hostname`);
232 $hostname = $1 if ($hostname =~ /([-.a-zA-Z0-9]+)/);
233 my ($name, $alias, $proto) = getprotobyname('tcp');
234 print "MAIN(debug): hostname = $hostname\n" if $verbose;
235
236 print "MAIN(debug): binding to remote host: $remotehost -> $remoteport -> $hostname\n" if $verbose;
237 my $ClientSocket = &bindRemote($remotehost,$remoteport,$hostname);
238
239 print ClientSocket "NICK $NICK\nUSER $USER_INFO\n";
240
241 while (<ClientSocket>) {
242 print "MAIN(debug): default var = $_\n" if $verbose;
243
244 # DALnet,LagNet,UnderNet etc. Require this!
245 # Replies with a PONG when presented with a PING query.
246 # If a server doesn't require it, it will be ignored.
247
248 if (m/^PING (.*)/) {print ClientSocket "PONG $1\n";}
249
250 alarm(0);
251
252 # Look for pattern in IRCD Output to gather Client Connections total.
253 connection($remotehost,$1,$warn,$crit) if (m/:I have\s+(\d+)/);
254 }
255 print "IRCD UNKNOWN: Unknown error - maybe could not authenticate\n";
256 exit $ERRORS{"UNKNOWN"};
257}
diff --git a/plugins-scripts/check_log.sh b/plugins-scripts/check_log.sh
new file mode 100755
index 00000000..08e7fef6
--- /dev/null
+++ b/plugins-scripts/check_log.sh
@@ -0,0 +1,214 @@
1#! /bin/sh
2#
3# Log file pattern detector plugin for Nagios
4# Written by Ethan Galstad (nagios@nagios.org)
5# Last Modified: 07-31-1999
6#
7# Usage: ./check_log <log_file> <old_log_file> <pattern>
8#
9# Description:
10#
11# This plugin will scan a log file (specified by the <log_file> option)
12# for a specific pattern (specified by the <pattern> option). Successive
13# calls to the plugin script will only report *new* pattern matches in the
14# log file, since an copy of the log file from the previous run is saved
15# to <old_log_file>.
16#
17# Output:
18#
19# On the first run of the plugin, it will return an OK state with a message
20# of "Log check data initialized". On successive runs, it will return an OK
21# state if *no* pattern matches have been found in the *difference* between the
22# log file and the older copy of the log file. If the plugin detects any
23# pattern matches in the log diff, it will return a CRITICAL state and print
24# out a message is the following format: "(x) last_match", where "x" is the
25# total number of pattern matches found in the file and "last_match" is the
26# last entry in the log file which matches the pattern.
27#
28# Notes:
29#
30# If you use this plugin make sure to keep the following in mind:
31#
32# 1. The "max_attempts" value for the service should be 1, as this
33# will prevent Nagios from retrying the service check (the
34# next time the check is run it will not produce the same results).
35#
36# 2. The "notify_recovery" value for the service should be 0, so that
37# Nagios does not notify you of "recoveries" for the check. Since
38# pattern matches in the log file will only be reported once and not
39# the next time, there will always be "recoveries" for the service, even
40# though recoveries really don't apply to this type of check.
41#
42# 3. You *must* supply a different <old_file_log> for each service that
43# you define to use this plugin script - even if the different services
44# check the same <log_file> for pattern matches. This is necessary
45# because of the way the script operates.
46#
47# Examples:
48#
49# Check for login failures in the syslog...
50#
51# check_log /var/log/messages ./check_log.badlogins.old "LOGIN FAILURE"
52#
53# Check for port scan alerts generated by Psionic's PortSentry software...
54#
55# check_log /var/log/message ./check_log.portscan.old "attackalert"
56#
57
58# Paths to commands used in this script. These
59# may have to be modified to match your system setup.
60
61PATH=""
62
63ECHO="/bin/echo"
64GREP="/bin/grep"
65DIFF="/bin/diff"
66TAIL="/bin/tail"
67CAT="/bin/cat"
68RM="/bin/rm"
69
70PROGNAME=`/bin/basename $0`
71PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
72REVISION=`echo '$Revision$' | /bin/sed -e 's/[^0-9.]//g'`
73
74. $PROGPATH/utils.sh
75
76print_usage() {
77 echo "Usage: $PROGNAME -F logfile -O oldlog -q query"
78 echo "Usage: $PROGNAME --help"
79 echo "Usage: $PROGNAME --version"
80}
81
82print_help() {
83 print_revision $PROGNAME $REVISION
84 echo ""
85 print_usage
86 echo ""
87 echo "Log file pattern detector plugin for Nagios"
88 echo ""
89 support
90}
91
92# Make sure the correct number of command line
93# arguments have been supplied
94
95if [ $# -lt 1 ]; then
96 print_usage
97 exit $STATE_UNKNOWN
98fi
99
100# Grab the command line arguments
101
102#logfile=$1
103#oldlog=$2
104#query=$3
105exitstatus=$STATE_WARNING #default
106while test -n "$1"; do
107 case "$1" in
108 --help)
109 print_help
110 exit $STATE_OK
111 ;;
112 -h)
113 print_help
114 exit $STATE_OK
115 ;;
116 --version)
117 print_revision $PROGNAME $VERSION
118 exit $STATE_OK
119 ;;
120 -V)
121 print_revision $PROGNAME $VERSION
122 exit $STATE_OK
123 ;;
124 --filename)
125 logfile=$2
126 shift
127 ;;
128 -F)
129 logfile=$2
130 shift
131 ;;
132 --oldlog)
133 oldlog=$2
134 shift
135 ;;
136 -O)
137 oldlog=$2
138 shift
139 ;;
140 --query)
141 query=$2
142 shift
143 ;;
144 -q)
145 query=$2
146 shift
147 ;;
148 -x)
149 exitstatus=$2
150 shift
151 ;;
152 --exitstatus)
153 exitstatus=$2
154 shift
155 ;;
156 *)
157 echo "Unknown argument: $1"
158 print_usage
159 exit $STATE_UNKNOWN
160 ;;
161 esac
162 shift
163done
164
165# If the source log file doesn't exist, exit
166
167if [ ! -e $logfile ]; then
168 $ECHO "Log check error: Log file $logfile does not exist!\n"
169 exit 2
170fi
171
172# If the old log file doesn't exist, this must be the first time
173# we're running this test, so copy the original log file over to
174# the old diff file and exit
175
176if [ ! -e $oldlog ]; then
177 $CAT $logfile > $oldlog
178 $ECHO "Log check data initialized...\n"
179 exit 0
180fi
181
182# The old log file exists, so compare it to the original log now
183
184# The temporary file that the script should use while
185# processing the log file.
186if [-x /bin/mktemp]; then
187 tempdiff="/bin/mktemp /tmp/check_log.XXXXXXXXXX"
188else
189 tempdiff="/tmp/check_log.`/bin/date '+%H%M%S'`"
190 /bin/touch $tempdiff
191 chmod 600 $tempdiff
192fi
193
194$DIFF $logfile $oldlog > $tempdiff
195
196# Count the number of matching log entries we have
197count=`$GREP -c "$query" $tempdiff`
198
199# Get the last matching entry in the diff file
200lastentry=`$GREP "$query" $tempdiff | $TAIL --lines=1`
201
202$RM -f $tempdiff
203$CAT $logfile > $oldlog
204
205if [ "$count" = "0" ]; then # no matches, exit with no error
206 $ECHO "Log check ok - 0 pattern matches found\n"
207 exitstatus=0
208else # Print total matche count and the last entry we found
209 $ECHO "($count) $lastentry"
210fi
211
212exit exitstatus
213
214
diff --git a/plugins-scripts/check_netdns.pl b/plugins-scripts/check_netdns.pl
new file mode 100755
index 00000000..4bf7bd76
--- /dev/null
+++ b/plugins-scripts/check_netdns.pl
@@ -0,0 +1,129 @@
1#!/usr/bin/perl -w
2
3# Perl version of check_dns plugin which calls DNS directly instead of
4# relying on nslookup (which has bugs)
5#
6# Copyright 2000, virCIO, LLP
7#
8# $Log$
9# Revision 1.1 2002/02/28 06:43:00 egalstad
10# Initial revision
11#
12# Revision 1.1 2000/08/03 20:41:12 karldebisschop
13# rename to avoid conflict when installing
14#
15# Revision 1.1 2000/08/03 19:27:08 karldebisschop
16# use Net::DNS to check name server
17#
18# Revision 1.1 2000/07/20 19:09:13 cwg
19# All the pieces needed to use my version of check_dns.
20#
21
22use Getopt::Long;
23use Net::DNS;
24
25 Getopt::Long::Configure(`bundling`);
26GetOptions("V" => $opt_V, "version" => $opt_V,
27 "h" => $opt_h, "help" => $opt_h,
28 "t=i" => $opt_t, "timeout=i" => $opt_t,
29 "s=s" => $opt_s, "server=s" => $opt_s,
30 "H=s" => $opt_H, "hostname=s" => $opt_H);
31
32# -h means display verbose help screen
33if($opt_h){ print_help(); exit 0; }
34
35# -V means display version number
36if ($opt_V) { print_version(); exit 0; }
37
38# -H means host name
39$opt_H = shift unless ($opt_H);
40unless ($opt_H) { print_usage(); exit -1; }
41if ($opt_H &&
42 $opt_H =~ m/^([0-9]+.[0-9]+.[0-9]+.[0-9]+|[a-zA-Z][-a-zA-Z0]+(.[a-zA-Z][-a-zA-Z0]+)*)$/)
43{
44 $host = $1;
45} else {
46 print "$opt_H is not a valid host name";
47 exit -1;
48}
49
50# -s means server name
51$opt_s = shift unless ($opt_s);
52if ($opt_s) {
53 if ($opt_s =~ m/^([0-9]+.[0-9]+.[0-9]+.[0-9]+|[a-zA-Z][-a-zA-Z0]+(.[a-zA-Z][-a-zA-Z0]+)*)$/)
54 {
55 $server = $1;
56 } else {
57 print "$opt_s is not a valid host name";
58 exit -1;
59 }
60}
61
62# -t means timeout
63my $timeout = 10 unless ($opt_t);
64
65my $res = new Net::DNS::Resolver;
66#$res->debug(1);
67if ($server) {
68 $res->nameservers($server);
69}
70
71$res->tcp_timeout($timeout);
72$SIG{ALRM} = &catch_alarm;
73alarm($timeout);
74
75$query = $res->query($host);
76if ($query) {
77 my @answer = $query->answer;
78 if (@answer) {
79 print join(`/`, map {
80 $_->type . ` ` . $_->rdatastr;
81 } @answer);
82 exit 0;
83 } else {
84 print "empty answer";
85 exit 2;
86 }
87}
88else {
89 print "query failed: ", $res->errorstring, "";
90 exit 2;
91}
92
93sub catch_alarm {
94 print "query timed out";
95 exit 2;
96}
97
98sub print_version () {
99 my $arg0 = $0;
100 chomp $arg0;
101 print "$arg0 version 0.1";
102}
103sub print_help() {
104 print_version();
105 print "";
106 print "Check if a nameserver can resolve a given hostname.";
107 print "";
108 print_usage();
109 print "";
110 print "-H, --hostname=HOST";
111 print " The name or address you want to query";
112 print "-s, --server=HOST";
113 print " Optional DNS server you want to use for the lookup";
114 print "-t, --timeout=INTEGER";
115 print " Seconds before connection times out (default: 10)";
116 print "-h, --help";
117 print " Print detailed help";
118 print "-V, --version";
119 print " Print version numbers and license information";
120}
121
122sub print_usage () {
123 my $arg0 = $0;
124 chomp $arg0;
125 print "$arg0 check_dns -H host [-s server] [-t timeout]";
126 print "$arg0 [-h | --help]";
127 print "$arg0 [-V | --version]";
128}
129
diff --git a/plugins-scripts/check_nfs.pl b/plugins-scripts/check_nfs.pl
new file mode 100755
index 00000000..040466d3
--- /dev/null
+++ b/plugins-scripts/check_nfs.pl
@@ -0,0 +1,48 @@
1#!/usr/local/bin/perl
2#
3# check_nfs plugin for nagios
4#
5# usage:
6# check_nfs.pl server
7#
8# Check if a nfs server is registered and running
9# using rpcinfo -T udp <arg1> 100003.
10# 100003 is the rpc programmnumber for nfs.
11# <arg1> is the server queried.
12#
13#
14# Use these hosts.cfg entries as examples
15#
16#service[fs0]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_nfs
17#command[check_nfs]=/some/path/libexec/check_nfs.pl $HOSTADDRESS$
18#
19# initial version: 9-13-99 Ernst-Dieter Martin edmt@infineon.com
20# current status: looks like working
21#
22#
23# Copyright Notice: Do as you please, credit me, but don't blame me
24#
25
26
27$server = shift;
28
29
30open CMD,"/bin/rpcinfo -T udp $server 100003 |";
31
32$response = "nfs version ";
33
34while ( <CMD> ) {
35 if ( /program 100003 version ([0-9]*) ready and waiting/ ) {
36 $response = $ response . "$1,";
37 }
38}
39
40if ( $response eq "nfs version " ) {
41 print "rpcinfo: RPC: Program not registered\n";
42 exit 2;
43}
44
45$response =~ s/,$//;
46print "$response\n";
47
48exit 0;
diff --git a/plugins-scripts/check_ntp.pl b/plugins-scripts/check_ntp.pl
new file mode 100755
index 00000000..f3f6f78b
--- /dev/null
+++ b/plugins-scripts/check_ntp.pl
@@ -0,0 +1,236 @@
1#! /usr/bin/perl -wT
2
3# (c)1999 Ian Cass, Knowledge Matters Ltd.
4# Read the GNU copyright stuff for all the legalese
5#
6# Check NTP time servers plugin. This plugin requires the ntpdate utility to
7# be installed on the system, however since it's part of the ntp suite, you
8# should already have it installed.
9#
10# Nothing clever done in this program - its a very simple bare basics hack to
11# get the job done.
12#
13# Things to do...
14# check @words[9] for time differences greater than +/- x secs & return a
15# warning.
16#
17# (c) 1999 Mark Jewiss, Knowledge Matters Limited
18# 22-9-1999, 12:45
19#
20# Modified script to accept 2 parameters or set defaults.
21# Now issues warning or critical alert is time difference is greater than the
22# time passed.
23#
24# These changes have not been tested completely due to the unavailability of a
25# server with the incorrect time.
26#
27# (c) 1999 Bo Kersey, VirCIO - Managed Server Solutions <bo@vircio.com>
28# 22-10-99, 12:17
29#
30# Modified the script to give useage if no parameters are input.
31#
32# Modified the script to check for negative as well as positive
33# time differences.
34#
35# Modified the script to work with ntpdate 3-5.93e Wed Apr 14 20:23:03 EDT 1999
36#
37# Modified the script to work with ntpdate's that return adjust or offset...
38#
39#
40# Script modified 2000 June 01 by William Pietri <william@bianca.com>
41#
42# Modified script to handle weird cases:
43# o NTP server doesn't respond (e.g., has died)
44# o Server has correct time but isn't suitable synchronization
45# source. This happens while starting up and if contact
46# with master has been lost.
47#
48BEGIN {
49 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
50 $runtimedir = $1;
51 $PROGNAME = $2;
52 }
53}
54
55require 5.004;
56use POSIX;
57use strict;
58use Getopt::Long;
59use vars qw($opt_V $opt_h $opt_H $opt_w $opt_c $verbose $PROGNAME);
60use lib $main::runtimedir;
61use utils qw($TIMEOUT %ERRORS &print_revision &support);
62
63sub print_help ();
64sub print_usage ();
65
66$ENV{'PATH'}='';
67$ENV{'BASH_ENV'}='';
68$ENV{'ENV'}='';
69
70Getopt::Long::Configure('bundling');
71GetOptions
72 ("V" => \$opt_V, "version" => \$opt_V,
73 "h" => \$opt_h, "help" => \$opt_h,
74 "v" => \$verbose, "verbose" => \$verbose,
75 "w=s" => \$opt_w, "warning=s" => \$opt_w,
76 "c=s" => \$opt_c, "critical=s" => \$opt_c,
77 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
78
79if ($opt_V) {
80 print_revision($PROGNAME,'$Revision$ ');
81 exit $ERRORS{'OK'};
82}
83
84if ($opt_h) {
85 print_help();
86 exit $ERRORS{'OK'};
87}
88
89$opt_H = shift unless ($opt_H);
90my $host = $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]+)*)$/);
91unless ($host) {
92 print_usage();
93 exit $ERRORS{'UNKNOWN'};
94}
95
96($opt_w) || ($opt_w = shift) || ($opt_w = 60);
97my $warning = $1 if ($opt_w =~ /([0-9]+)/);
98
99($opt_c) || ($opt_c = shift) || ($opt_c = 120);
100my $critical = $1 if ($opt_c =~ /([0-9]+)/);
101
102my $answer = undef;
103my $offset = undef;
104my $msg; # first line of output to print if format is invalid
105
106my $state = $ERRORS{'UNKNOWN'};
107my $ntpdate_error = $ERRORS{'UNKNOWN'};
108my $dispersion_error = $ERRORS{'UNKNOWN'};
109
110my $key = undef;
111
112# Just in case of problems, let's not hang Nagios
113$SIG{'ALRM'} = sub {
114 print ("ERROR: No response from ntp server (alarm)\n");
115 exit $ERRORS{"UNKNOWN"};
116};
117alarm($TIMEOUT);
118
119
120###
121###
122### First, check ntpdate
123###
124###
125
126if (!open (NTPDATE, "/usr/local/sbin/ntpdate -q $host 2>&1 |")) {
127 print "Could not open ntpdate\n";
128 exit $ERRORS{"UNKNOWN"};
129}
130
131while (<NTPDATE>) {
132 print if ($verbose);
133 $msg = $_ unless ($msg);
134 if (/(offset|adjust)\s+([-.\d]+)/i) {
135 $offset = $2;
136 last;
137 }
138}
139
140# soak up remaining output; check for error
141while (<NTPDATE>) {
142 if (/no server suitable for synchronization found/) {
143 $ntpdate_error = $ERRORS{"CRITICAL"};
144 }
145}
146
147close(NTPDATE);
148
149# only declare an error if we also get a non-zero return code from ntpdate
150$ntpdate_error = ($? >> 8) || $ntpdate_error;
151
152###
153###
154### Then scan xntpdc if it exists
155###
156###
157
158if (#open(NTPDC,"/usr/sbin/ntpdc -c $host 2>&1 |") ||
159 open(NTPDC,"/usr/sbin/xntpdc -c $host 2>&1 |") ) {
160 while (<NTPDC>) {
161 print if ($verbose);
162 if (/([^\s]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)/) {
163 if ($8>15) {
164 $dispersion_error = $ERRORS{'CRITICAL'};
165 } elsif ($8>5 && $dispersion_error<$ERRORS{'CRITICAL'}) {
166 $dispersion_error = $ERRORS{'WARNING'};
167 }
168 }
169 }
170 close NTPDC;
171}
172
173# An offset of 0.000000 with an error is probably bogus. Actually,
174# it's probably always bogus, but let's be paranoid here.
175if ($ntpdate_error && $offset && ($offset == 0)) { undef $offset;}
176
177if ($ntpdate_error > $ERRORS{'OK'}) {
178 $state = $ntpdate_error;
179 $answer = "Server for ntp probably down\n";
180 if (defined($offset) && abs($offset) > $critical) {
181 $state = $ERRORS{'CRITICAL'};
182 $answer = "Server Error and time difference $offset seconds greater than +/- $critical sec\n";
183 } elsif (defined($offset) && abs($offset) > $warning) {
184 $answer = "Server error and time difference $offset seconds greater than +/- $warning sec\n";
185 }
186
187} elsif ($dispersion_error > $ERRORS{'OK'}) {
188 $state = $dispersion_error;
189 $answer = "Dispersion too high\n";
190 if (defined($offset) && abs($offset) > $critical) {
191 $state = $ERRORS{'CRITICAL'};
192 $answer = "Dispersion error and time difference $offset seconds greater than +/- $critical sec\n";
193 } elsif (defined($offset) && abs($offset) > $warning) {
194 $answer = "Dispersion error and time difference $offset seconds greater than +/- $warning sec\n";
195 }
196
197} else { # no errors from ntpdate or xntpdc
198 if (defined $offset) {
199 if (abs($offset) > $critical) {
200 $state = $ERRORS{'CRITICAL'};
201 $answer = "Time difference $offset seconds greater than +/- $critical sec\n";
202 } elsif (abs($offset) > $warning) {
203 $state = $ERRORS{'WARNING'};
204 $answer = "Time difference $offset seconds greater than +/- $warning sec\n";
205 } elsif (abs($offset) <= $warning) {
206 $state = $ERRORS{'OK'};
207 $answer = "Time difference $offset seconds\n";
208 }
209 } else { # no offset defined
210 $state = $ERRORS{'UNKNOWN'};
211 $answer = "Invalid format returned from ntpdate ($msg)\n";
212 }
213}
214
215foreach $key (keys %ERRORS) {
216 if ($state==$ERRORS{$key}) {
217 print ("$key: $answer");
218 last;
219 }
220}
221exit $state;
222
223sub print_usage () {
224 print "Usage: $PROGNAME -H <host> [-w <warn>] [-c <crit>]\n";
225}
226
227sub print_help () {
228 print_revision($PROGNAME,'$Revision$');
229 print "Copyright (c) 2000 Bo Kersey/Karl DeBisschop\n";
230 print "\n";
231 print_usage();
232 print "\n";
233 print "<warn> = Clock offset in seconds at which a warning message will be generated.\n Defaults to 60.\n";
234 print "<crit> = Clock offset in seconds at which a critical message will be generated.\n Defaults to 120.\n\n";
235 support();
236}
diff --git a/plugins-scripts/check_oracle.sh b/plugins-scripts/check_oracle.sh
new file mode 100755
index 00000000..1a4d8ab6
--- /dev/null
+++ b/plugins-scripts/check_oracle.sh
@@ -0,0 +1,126 @@
1#!/bin/sh
2#
3# latigid010@yahoo.com
4# 01/06/2000
5#
6# This Nagios plugin was created to check remote or local TNS
7# status and check local Database status.
8#
9# Add the following lines to your object config file (i.e. commands.cfg)
10# command[check-tns]=/usr/local/nagios/libexec/check_ora 1 $ARG$
11# command[check-oradb]=/usr/local/nagios/libexec/check_ora 2 $ARG$
12#
13#
14# Usage:
15# To check TNS Status: ./check_ora 1 <Oracle Sid or Hostname/IP address>
16# To Check local database: ./check_ora 2 <ORACLE_SID>
17#
18# I have the script checking for the Oracle PMON process and
19# the sgadefORACLE_SID.dbf file.
20#
21#
22# If you have any problems check that you have the $ORACLE_HOME
23# enviroment variable set, have $ORACLE_HOME/bin in your PATH, and
24# dont forget about your tnsnames.ora file. when checking Local
25# Database status your ORACLE_SID is case sensitive.
26#
27
28PROGNAME=`basename $0`
29PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
30REVISION=`echo '$Revision$' | sed -e 's/[^0-9.]//g'`
31
32. $PROGPATH/utils.sh
33
34
35print_usage() {
36 echo "Usage:"
37 echo " $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
38 echo " $PROGNAME --db <ORACLE_SID>"
39 echo " $PROGNAME --help"
40 echo " $PROGNAME --version"
41}
42
43print_help() {
44 print_revision $PROGNAME $REVISION
45 echo ""
46 print_usage
47 echo ""
48 echo "Check remote or local TNS status and check local Database status"
49 echo ""
50 echo "--tns=SID/IP Address"
51 echo " Check remote TNS server"
52 echo "--db=SID"
53 echo " Check local database (search /bin/ps for PMON process and check"
54 echo " filesystem for sgadefORACLE_SID.dbf"
55 echo "--help"
56 echo " Print this help screen"
57 echo "--version"
58 echo " Print version and license information"
59 echo ""
60 echo "If the plugin doesn't work, check that the $ORACLE_HOME environment"
61 echo "variable is set, that $ORACLE_HOME/bin is in your PATH, and the"
62 echo "tnsnames.ora file is locatable and is properly configured."
63 echo ""
64 echo "When checking Local Database status your ORACLE_SID is case sensitive."
65 echo ""
66 support
67}
68
69case "$1" in
701)
71 cmd='--tns'
72 ;;
732)
74 cmd='--db'
75 ;;
76*)
77 cmd="$1"
78 ;;
79esac
80
81case "$cmd" in
82--tns)
83 export tnschk=` tnsping $2`
84 export tnschk2=` echo $tnschk | grep -c OK`
85 export tnschk3=` echo $tnschk | cut -d\( -f7 | sed y/\)/" "/`
86 if [ ${tnschk2} -eq 1 ] ; then
87 echo "OK - reply time ${tnschk3} from $2"
88 exit 0
89 else
90 echo "No TNS Listener on $2"
91 exit $STATE_CRITICAL
92 fi
93 ;;
94--db)
95 export pmonchk=`ps -ef | grep -v grep | grep ${2} | grep -c pmon`
96 if [ -e $ORACLE_HOME/dbs/sga*${2}* ] ; then
97 if [ ${pmonchk} -eq 1 ] ; then
98 export utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
99 echo "${2} OK - running since ${utime}"
100 exit $STATE_OK
101 fi
102 else
103 echo "${2} Database is DOWN"
104 exit $STATE_CRITICAL
105 fi
106 ;;
107--help)
108 print_help
109 exit $STATE_OK
110 ;;
111-h)
112 print_help
113 exit $STATE_OK
114 ;;
115--version)
116 print_revision $PLUGIN $REVISION
117 exit $STATE_OK
118 ;;
119-V)
120 print_revision $PLUGIN $REVISION
121 exit $STATE_OK
122 ;;
123*)
124 print_usage
125 exit $STATE_UNKNOWN
126esac
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 @@
1#! /usr/bin/perl -wT
2#
3# check_rpc plugin for nagios
4#
5# usage:
6# check_rpc host service
7#
8# Check if an rpc serice is registered and running
9# using rpcinfo - $proto $host $prognum 2>&1 |";
10#
11# Use these hosts.cfg entries as examples
12#
13# command[check_nfs]=/some/path/libexec/check_rpc $HOSTADDRESS$ nfs
14# service[check_nfs]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_rpc
15#
16# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop
17# current status: $Revision$
18#
19# Copyright Notice: GPL
20#
21BEGIN {
22 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
23 $runtimedir = $1;
24 $PROGNAME = $2;
25 }
26}
27
28use strict;
29use lib $main::runtimedir;
30use utils qw($TIMEOUT %ERRORS &print_revision &support);
31use vars qw($PROGNAME);
32my ($verbose,@proto,%prognum,$host,$response,$prognum,$port,$cmd);
33my ($array_ref,$test,$element,@progkeys,$proto,$a,$b);
34my ($opt_V,$opt_h,$opt_C,$opt_p,$opt_H);
35$opt_V = $opt_h = $opt_C = $opt_p = $opt_H = '';
36
37sub print_help ();
38sub print_usage ();
39sub in ($$);
40
41$ENV{'BASH_ENV'}='';
42$ENV{'ENV'}='';
43$ENV{'PATH'}='';
44
45#Initialise protocol for each progname number
46# 'u' for UDP, 't' for TCP
47$proto[10003]='u';
48$proto[10004]='u';
49$proto[10007]='u';
50
51use Getopt::Long;
52Getopt::Long::Configure('bundling');
53GetOptions
54 ("V" => \$opt_V, "version" => \$opt_V,
55 "h" => \$opt_h, "help" => \$opt_h,
56 "C=s" => \$opt_C, "command=s" => \$opt_C,
57 "p=i" => \$opt_p, "port=i" => \$opt_p,
58 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
59
60# -h means display verbose help screen
61if ($opt_h) { print_help(); exit 0; }
62
63# -V means display version number
64if ($opt_V) { print_revision($PROGNAME,'$Revision$ '); exit 0; }
65
66# -H means host name
67$opt_H = shift unless ($opt_H);
68unless ($opt_H) { print_usage(); exit -1; }
69if($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]+)*)$/) {
70 $host = $1;
71} else {
72 print "$opt_H is not a valid host name\n";
73 exit -1;
74}
75
76while (<DATA>) {
77 ($a,$b) = split;
78 $prognum{$a} = $b;
79}
80close DATA;
81
82# -C means command name or number
83$opt_C = shift unless ($opt_C);
84unless ($opt_C) { print_usage(); exit -1; }
85@progkeys = keys %prognum;
86if ($opt_C =~ m/^([0-9]+)$/){
87 $response = "RPC ok: program $opt_p (version ";
88 $prognum = $1;
89} elsif ( in( \@progkeys, $opt_C)) {
90 $response = "RPC ok: $opt_C (version ";
91 $prognum = $prognum{$opt_C};
92} else {
93 print "Program $opt_C is not defined\n";
94 exit -1;
95}
96
97# -p means port number
98if($opt_p =~ /^([0-9]+)$/){
99 $port = "-n $1";
100} else {
101 $port = "";
102}
103
104$proto = 'u';
105$proto = $proto[$prognum] if ($proto[$prognum]);
106$cmd = "/usr/sbin/rpcinfo $port -" . "$proto $host $prognum 2>&1 |";
107print "$cmd\n" if ($verbose);
108open CMD, $cmd;
109
110while ( <CMD> ) {
111 chomp;
112 if ( /program $prognum version ([0-9]*) ready and waiting/ ) {
113 $response .= "$1) is running";
114 print "$response\n";
115 exit 0;
116 }
117}
118
119print "RPC CRITICAL: Program $opt_C not registered\n";
120exit 2;
121
122
123
124sub print_help() {
125 print_revision($PROGNAME,'$Revision$ ');
126 print "Copyright (c) 2000 Karl DeBisschop/Truongchinh Nguyen\n";
127 print "\n";
128 print "Check if a rpc service is registered and running using\n";
129 print " rpcinfo -<protocol> <host> <program number>\n";
130 print "\n";
131 print_usage();
132 print "\n";
133 print "<host> The server providing the rpc service\n";
134 print "<program> The program name (or number).\n\n";
135 support();
136}
137
138sub print_usage () {
139 print "$PROGNAME -H host -C rpc_command [-p port]\n";
140 print "$PROGNAME [-h | --help]\n";
141 print "$PROGNAME [-V | --version]\n";
142}
143
144sub in ($$) {
145 $array_ref = shift;
146 $test = shift;
147
148 while ( $element = shift @{$array_ref} ) {
149 if ($test eq $element) {
150 return 1;
151 }
152 }
153 return 0;
154}
155
156__DATA__
157portmapper 100000
158portmap 100000
159sunrpc 100000
160rpcbind 100000
161rstatd 100001
162rstat 100001
163rup 100001
164perfmeter 100001
165rstat_svc 100001
166rusersd 100002
167rusers 100002
168nfs 100003
169nfsprog 100003
170ypserv 100004
171ypprog 100004
172mountd 100005
173mount 100005
174showmount 100005
175ypbind 100007
176walld 100008
177rwall 100008
178shutdown 100008
179yppasswdd 100009
180yppasswd 100009
181etherstatd 100010
182etherstat 100010
183rquotad 100011
184rquotaprog 100011
185quota 100011
186rquota 100011
187sprayd 100012
188spray 100012
1893270_mapper 100013
190rje_mapper 100014
191selection_svc 100015
192selnsvc 100015
193database_svc 100016
194rexd 100017
195rex 100017
196alis 100018
197sched 100019
198llockmgr 100020
199nlockmgr 100021
200x25_inr 100022
201statmon 100023
202status 100024
203bootparam 100026
204ypupdated 100028
205ypupdate 100028
206keyserv 100029
207keyserver 100029
208sunlink_mapper 100033
209tfsd 100037
210nsed 100038
211nsemntd 100039
212showfhd 100043
213showfh 100043
214ioadmd 100055
215rpc.ioadmd 100055
216NETlicense 100062
217sunisamd 100065
218debug_svc 100066
219dbsrv 100066
220ypxfrd 100069
221rpc.ypxfrd 100069
222bugtraqd 100071
223kerbd 100078
224event 100101
225na.event 100101
226logger 100102
227na.logger 100102
228sync 100104
229na.sync 100104
230hostperf 100107
231na.hostperf 100107
232activity 100109
233na.activity 100109
234hostmem 100112
235na.hostmem 100112
236sample 100113
237na.sample 100113
238x25 100114
239na.x25 100114
240ping 100115
241na.ping 100115
242rpcnfs 100116
243na.rpcnfs 100116
244hostif 100117
245na.hostif 100117
246etherif 100118
247na.etherif 100118
248iproutes 100120
249na.iproutes 100120
250layers 100121
251na.layers 100121
252snmp 100122
253na.snmp 100122
254snmp-cmc 100122
255snmp-synoptics 100122
256snmp-unisys 100122
257snmp-utk 100122
258traffic 100123
259na.traffic 100123
260nfs_acl 100227
261sadmind 100232
262nisd 100300
263rpc.nisd 100300
264nispasswd 100303
265rpc.nispasswdd 100303
266ufsd 100233
267ufsd 100233
268pcnfsd 150001
269pcnfs 150001
270amd 300019
271amq 300019
272bwnfsd 545580417
273fypxfrd 600100069
274freebsd-ypxfrd 600100069
diff --git a/plugins-scripts/check_sensors.sh b/plugins-scripts/check_sensors.sh
new file mode 100755
index 00000000..011aa709
--- /dev/null
+++ b/plugins-scripts/check_sensors.sh
@@ -0,0 +1,65 @@
1#! /bin/sh
2
3PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
4
5PROGNAME=`basename $0`
6PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
7REVISION=`echo '$Revision$' | sed -e 's/[^0-9.]//g'`
8
9. $PROGPATH/utils.sh
10
11
12print_usage() {
13 echo "Usage: $PROGNAME"
14}
15
16print_help() {
17 print_revision $PROGNAME $REVISION
18 echo ""
19 print_usage
20 echo ""
21 echo "This plugin checks hardware status using the lm_sensors package."
22 echo ""
23 support
24 exit 0
25}
26
27case "$1" in
28 --help)
29 print_help
30 exit 0
31 ;;
32 -h)
33 print_help
34 exit 0
35 ;;
36 --version)
37 print_revision $PROGNAME $REVISION
38 exit 0
39 ;;
40 -V)
41 print_revision $PROGNAME $REVISION
42 exit 0
43 ;;
44 *)
45 sensordata=`sensors 2>&1`
46 status=$?
47 if test "$1" = "-v" -o "$1" = "--verbose"; then
48 echo ${sensordata}
49 fi
50 if test ${status} -eq 127; then
51 echo "SENSORS UNKNOWN - command not found (did you install lmsensors?)"
52 exit -1
53 elif test ${status} -ne 0 ; then
54 echo "WARNING - sensors returned state $status"
55 exit 1
56 fi
57 if echo ${sensordata} | egrep ALARM > /dev/null; then
58 echo SENSOR CRITICAL - Sensor alarm detected!
59 exit 2
60 else
61 echo sensor ok
62 exit 0
63 fi
64 ;;
65esac
diff --git a/plugins-scripts/check_wave.pl b/plugins-scripts/check_wave.pl
new file mode 100755
index 00000000..c6e6c662
--- /dev/null
+++ b/plugins-scripts/check_wave.pl
@@ -0,0 +1,129 @@
1#! /usr/bin/perl -wT
2#
3# $Id$
4
5
6BEGIN {
7 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
8 $runtimedir = $1;
9 $PROGNAME = $2;
10 }
11}
12
13use strict;
14use lib $main::runtimedir;
15use utils qw($TIMEOUT %ERRORS &print_revision &support);
16use vars qw($PROGNAME);
17use Getopt::Long;
18use vars qw($opt_V $opt_h $verbose $opt_w $opt_c $opt_H);
19my (@test, $low1, $med1, $high1, $snr, $low2, $med2, $high2);
20my ($low, $med, $high, $lowavg, $medavg, $highavg, $tot, $ss);
21
22sub print_help ();
23sub print_usage ();
24
25$ENV{'PATH'}='';
26$ENV{'BASH_ENV'}='';
27$ENV{'ENV'}='';
28
29Getopt::Long::Configure('bundling');
30GetOptions
31 ("V" => \$opt_V, "version" => \$opt_V,
32 "h" => \$opt_h, "help" => \$opt_h,
33 "v" => \$verbose, "verbose" => \$verbose,
34 "w=s" => \$opt_w, "warning=s" => \$opt_w,
35 "c=s" => \$opt_c, "critical=s" => \$opt_c,
36 "H=s" => \$opt_H, "hostname=s" => \$opt_H);
37
38if ($opt_V) {
39 print_revision($PROGNAME,'$Revision$'); #'
40 exit $ERRORS{'OK'};
41}
42
43if ($opt_h) {
44 print_help();
45 exit $ERRORS{'OK'};
46}
47
48$opt_H = shift unless ($opt_H);
49print_usage() unless ($opt_H);
50my $host = $1 if ($opt_H =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0]+(\.[a-zA-Z][-a-zA-Z0]+)*)$/);
51print_usage() unless ($host);
52
53($opt_c) || ($opt_c = shift) || ($opt_c = 120);
54my $critical = $1 if ($opt_c =~ /([0-9]+)/);
55
56($opt_w) || ($opt_w = shift) || ($opt_w = 60);
57my $warning = $1 if ($opt_w =~ /([0-9]+)/);
58
59$low1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.8.1`;
60@test = split(/ /,$low1);
61$low1 = $test[2];
62
63$med1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.9.1`;
64@test = split(/ /,$med1);
65$med1 = $test[2];
66
67$high1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.10.1`;
68@test = split(/ /,$high1);
69$high1 = $test[2];
70
71sleep(2);
72
73$snr = `snmpget $host public .1.3.6.1.4.1.762.2.5.2.1.17.1`;
74@test = split(/ /,$snr);
75$snr = $test[2];
76$snr = int($snr*25);
77
78$low2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.8.1`;
79@test = split(/ /,$low2);
80$low2 = $test[2];
81
82$med2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.9.1`;
83@test = split(/ /,$med2);
84$med2 = $test[2];
85
86$high2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.10.1`;
87@test = split(/ /,$high2);
88$high2 = $test[2];
89
90$low = $low2 - $low1;
91$med = $med2 - $med1;
92$high = $high2 - $high1;
93
94$tot = $low + $med + $high;
95
96if ($tot==0) {
97 $ss = 0;
98} else {
99 $lowavg = $low / $tot;
100 $medavg = $med / $tot;
101 $highavg = $high / $tot;
102 $ss = ($medavg*50) + ($highavg*100);
103}
104
105printf("Signal Strength at: %3.0f%, SNR at $snr%",$ss);
106
107if ($ss<$critical) {
108 exit(2);
109} elsif ($ss<$warning) {
110 exit(1);
111} else {
112 exit(0);
113}
114
115
116sub print_usage () {
117 print "Usage: $PROGNAME -H <host> [-w <warn>] [-c <crit>]\n";
118}
119
120sub print_help () {
121 print_revision($PROGNAME,'$Revision$');
122 print "Copyright (c) 2000 Jeffery Blank/Karl DeBisschop\n";
123 print "\n";
124 print_usage();
125 print "\n";
126 print "<warn> = Signal strength at which a warning message will be generated.\n";
127 print "<crit> = Signal strength at which a critical message will be generated.\n\n";
128 support();
129}
diff --git a/plugins-scripts/subst.in b/plugins-scripts/subst.in
new file mode 100644
index 00000000..cc0fd1b6
--- /dev/null
+++ b/plugins-scripts/subst.in
@@ -0,0 +1,56 @@
1#!/usr/bin/awk
2
3function which(c,path) {
4 cmd = "test -x " c;
5
6 if (system(cmd)==0) {
7 return c;
8 }
9
10 sub(/\/.*\//,"",c);
11 for (dir in path) {
12 cmd = "test -x " path[dir] "/" c;
13 if (system(cmd)==0) {
14 return path[dir] "/" c;
15 }
16 }
17
18
19 return c;
20}
21
22BEGIN {
23 split(ENVIRON["PATH"] ":/sbin:/usr/sbin",path,/:/);
24}
25
26# scripting language (first line)
27
28/^#! ?\/.*\/python/ {sub(/^#! ?\/.*\/python/,"#! @PYTHON@");}
29/^#! ?\/.*\/perl/ {sub(/^#! ?\/.*\/perl/,"#! @PERL@");}
30/^#! ?\/.*\/[a-z]{0,2}awk/ {sub(/^#! ?\/.*\/[a-z]{0,2}awk/,"#! @AWK@");}
31/^#! ?\/.*\/sh/ {sub(/^#! ?\/.*\/sh/,"#! @SHELL@");}
32
33# Trusted path mechanism (deprecated)
34
35/^[ \t]*\$ENV[ \t]*\{[ \t'"]*PATH[ \t"']*\}[ \t]*=/ {
36 sub(/\=[ \t]*['"][^"']+["']/,"='@trusted_path@' # autoconf-derived");
37}
38
39/^[\t ]*(export[\t ]*)?PATH[\t ]*=['"]+.+["']$/ {
40 sub(/\=.*$/,"='@trusted_path@' # autoconf-derived");
41}
42
43# Specific programs
44
45#
46/^[^#]/ && /(\/.*)?\/(bin|sbin|lib|libexec)\// {
47 match($0,/(\/.*)?\/(bin|sbin|lib|libexec)\/[-_a-zA-Z0-9]+/);
48 start=RSTART+RLENGTH;
49 c=substr($0,RSTART,RLENGTH);
50 sub(c,which(c,path));
51}
52
53{
54 print;
55}
56
diff --git a/plugins-scripts/t/check_rpc.t b/plugins-scripts/t/check_rpc.t
new file mode 100644
index 00000000..afcb867c
--- /dev/null
+++ b/plugins-scripts/t/check_rpc.t
@@ -0,0 +1,19 @@
1use strict;
2use Test;
3use vars qw($tests);
4
5BEGIN {$tests = 2; plan tests => $tests}
6
7my $null = '';
8my $cmd;
9my $str;
10my $t=0;
11
12$cmd = "./check_rpc -V";
13$str = `$cmd`;
14$t += ok $?>>8,0;
15print "Test was: $cmd\n" if ($?);
16$t += ok $str, '/^check_rpc/';
17
18exit(0) if defined($Test::Harness::VERSION);
19exit($tests - $t);
diff --git a/plugins-scripts/utils.pm.in b/plugins-scripts/utils.pm.in
new file mode 100644
index 00000000..361bfe99
--- /dev/null
+++ b/plugins-scripts/utils.pm.in
@@ -0,0 +1,38 @@
1package utils;
2
3require Exporter;
4@ISA = qw(Exporter);
5@EXPORT_OK = qw($TIMEOUT %ERRORS &print_revision &support &usage);
6
7#use strict;
8#use vars($TIMEOUT %ERRORS);
9sub print_revision ($$);
10sub usage;
11sub support();
12
13$TIMEOUT = 15;
14%ERRORS=('UNKNOWN'=>-1,'OK'=>0,'WARNING'=>1,'CRITICAL'=>2);
15
16sub print_revision ($$) {
17 my $commandName = shift;
18 my $pluginRevision = shift;
19 $pluginRevision =~ s/^\$Revision: //;
20 $pluginRevision =~ s/ \$\s*$//;
21 print "$commandName (@PACKAGE@ @VERSION@) $pluginRevision\n";
22 print "@WARRANTY@";
23}
24
25sub support () {
26 my $support='@SUPPORT@';
27 $support =~ s/@/\@/g;
28 $support =~ s/\\n/\n/g;
29 print $support;
30}
31
32sub usage {
33 my $format=shift;
34 printf($format,@_);
35 exit $ERRORS{'UNKNOWN'};
36}
37
381;
diff --git a/plugins-scripts/utils.sh.in b/plugins-scripts/utils.sh.in
new file mode 100644
index 00000000..1e835e67
--- /dev/null
+++ b/plugins-scripts/utils.sh.in
@@ -0,0 +1,22 @@
1#! /bin/sh
2
3STATE_DEPENDENT=-2
4STATE_UNKNOWN=-1
5STATE_OK=0
6STATE_WARNING=1
7STATE_CRITICAL=2
8
9if test -x /usr/bin/printf; then
10 ECHO=/usr/bin/printf
11else
12 ECHO=echo
13fi
14
15print_revision() {
16 echo "$1 (@PACKAGE@ @VERSION@) $2"
17 $ECHO "@WARRANTY@" | /bin/sed -e 's/\n/ /g'
18}
19
20support() {
21 $ECHO "@SUPPORT@" | /bin/sed -e 's/\n/ /g'
22} \ No newline at end of file