From 8235fd0aef2945e0d638fba3493134588d085d5a Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Tue, 2 Dec 2014 21:13:38 +0100 Subject: check_mailq: Add sudo support This addition is based on a patch contributed by Christopher Schultz. Closes #1099. Closes #1171. diff --git a/NEWS b/NEWS index a923e82..b3d2f1f 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ This file documents the major additions and syntax changes between releases. New check_snmp "-N" option to specify SNMPv3 context name New check_nt "-l" parameters: seconds|minutes|hours|days Make sure check_disk won't hang on hanging (network) file systems + New check_mailq -s option which tells the plugin to use sudo(8) FIXES Let check_real terminate lines with CRLF when talking to the server, as diff --git a/THANKS.in b/THANKS.in index 6c9e1fe..9a9ca3f 100644 --- a/THANKS.in +++ b/THANKS.in @@ -334,3 +334,4 @@ Simon Meggle Jonas Genannt Nick Peelman Sebastian Herbszt +Christopher Schultz diff --git a/configure.ac b/configure.ac index fb8f950..ce1728e 100644 --- a/configure.ac +++ b/configure.ac @@ -1484,6 +1484,16 @@ else AC_MSG_WARN([Get ssh in order to make check_by_ssh plugin]) fi +AC_PATH_PROG(PATH_TO_SUDO,sudo) +AC_ARG_WITH(sudo_command, + ACX_HELP_STRING([--with-sudo-command=PATH], + [sets path to sudo]), PATH_TO_SUDO=$withval) +if test -n "$PATH_TO_SUDO" +then + AC_DEFINE_UNQUOTED(PATH_TO_SUDO,"$PATH_TO_SUDO",[path to sudo]) +else + AC_MSG_WARN([Could not find sudo or eqivalent]) +fi AC_PATH_PROG(PATH_TO_MAILQ,mailq) AC_ARG_WITH(mailq_command, diff --git a/plugins-scripts/check_mailq.pl b/plugins-scripts/check_mailq.pl index 0e8100d..417c4bf 100755 --- a/plugins-scripts/check_mailq.pl +++ b/plugins-scripts/check_mailq.pl @@ -28,7 +28,7 @@ use POSIX; use strict; use Getopt::Long; -use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c $opt_t +use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c $opt_t $opt_s $opt_M $mailq $status $state $msg $msg_q $msg_p $opt_W $opt_C $mailq @lines %srcdomains %dstdomains); use FindBin; @@ -36,6 +36,7 @@ use lib "$FindBin::Bin"; use lib '@libexecdir@'; use utils qw(%ERRORS &print_revision &support &usage ); +my ($sudo); sub print_help (); sub print_usage (); @@ -57,6 +58,17 @@ if ($status){ exit $ERRORS{"UNKNOWN"}; } +if ($opt_s) { + if (defined $utils::PATH_TO_SUDO && -x $utils::PATH_TO_SUDO) { + $sudo = $utils::PATH_TO_SUDO; + } else { + print "ERROR: Cannot execute sudo\n"; + exit $ERRORS{'UNKNOWN'}; + } +} else { + $sudo = ""; +} + $SIG{'ALRM'} = sub { print ("ERROR: timed out waiting for $utils::PATH_TO_MAILQ \n"); exit $ERRORS{"WARNING"}; @@ -69,7 +81,7 @@ if ($mailq eq "sendmail") { ## open mailq if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { - if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) { + if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; exit $ERRORS{'UNKNOWN'}; } @@ -298,7 +310,7 @@ elsif ( $mailq eq "postfix" ) { ## open mailq if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { - if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) { + if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; exit $ERRORS{'UNKNOWN'}; } @@ -380,7 +392,7 @@ elsif ( $mailq eq "qmail" ) { # open qmail-qstat if ( defined $utils::PATH_TO_QMAIL_QSTAT && -x $utils::PATH_TO_QMAIL_QSTAT ) { - if (! open (MAILQ, "$utils::PATH_TO_QMAIL_QSTAT | " ) ) { + if (! open (MAILQ, "$sudo $utils::PATH_TO_QMAIL_QSTAT | " ) ) { print "ERROR: could not open $utils::PATH_TO_QMAIL_QSTAT \n"; exit $ERRORS{'UNKNOWN'}; } @@ -462,7 +474,7 @@ elsif ( $mailq eq "qmail" ) { elsif ( $mailq eq "exim" ) { ## open mailq if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { - if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) { + if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; exit $ERRORS{'UNKNOWN'}; } @@ -505,7 +517,7 @@ elsif ( $mailq eq "exim" ) { elsif ( $mailq eq "nullmailer" ) { ## open mailq if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) { - if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) { + if (! open (MAILQ, "$sudo $utils::PATH_TO_MAILQ | " ) ) { print "ERROR: could not open $utils::PATH_TO_MAILQ \n"; exit $ERRORS{'UNKNOWN'}; } @@ -556,7 +568,8 @@ sub process_arguments(){ "M:s" => \$opt_M, "mailserver:s" => \$opt_M, # mailserver (default sendmail) "w=i" => \$opt_w, "warning=i" => \$opt_w, # warning if above this number "c=i" => \$opt_c, "critical=i" => \$opt_c, # critical if above this number - "t=i" => \$opt_t, "timeout=i" => \$opt_t + "t=i" => \$opt_t, "timeout=i" => \$opt_t, + "s" => \$opt_s, "sudo" => \$opt_s ); if ($opt_V) { @@ -637,7 +650,7 @@ sub process_arguments(){ } sub print_usage () { - print "Usage: $PROGNAME -w -c [-W ] [-C ] [-M ] [-t ] [-v verbose]\n"; + print "Usage: $PROGNAME -w -c [-W ] [-C ] [-M ] [-t ] [-s] [-v]\n"; } sub print_help () { @@ -654,6 +667,7 @@ sub print_help () { print "-C (--Critical) = Min. number of messages for same domain in queue to generate critical alert ( W < C )\n"; print "-t (--timeout) = Plugin timeout in seconds (default = $utils::TIMEOUT)\n"; print "-M (--mailserver) = [ sendmail | qmail | postfix | exim | nullmailer ] (default = autodetect)\n"; + print "-s (--sudo) = Use sudo to call the mailq command\n"; print "-h (--help)\n"; print "-V (--version)\n"; print "-v (--verbose) = debugging output\n"; diff --git a/plugins-scripts/utils.pm.in b/plugins-scripts/utils.pm.in index 0f53243..386831e 100644 --- a/plugins-scripts/utils.pm.in +++ b/plugins-scripts/utils.pm.in @@ -17,6 +17,7 @@ sub support(); sub is_hostname; ## updated by autoconf +$PATH_TO_SUDO = "@PATH_TO_SUDO@"; $PATH_TO_RPCINFO = "@PATH_TO_RPCINFO@" ; $PATH_TO_LMSTAT = "@PATH_TO_LMSTAT@" ; $PATH_TO_SMBCLIENT = "@PATH_TO_SMBCLIENT@" ; -- cgit v0.10-9-g596f