From fcc4db5aaadad9784d4a940aea239db46f1b0fe9 Mon Sep 17 00:00:00 2001 From: Thomas Guyot-Sionnest Date: Tue, 26 May 2009 04:17:07 -0400 Subject: [PATCH] Fix check_by_ssh interpretation of quotes in -C parameter (#1985246, #2268675) --- NEWS | 1 + THANKS.in | 1 + plugins/Makefile.am | 4 +-- plugins/check_by_ssh.c | 72 ++++++++++++++++++++++++++++++++---------- 4 files changed, 60 insertions(+), 18 deletions(-) diff --git a/NEWS b/NEWS index 4a1628a..494dd6f 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,7 @@ This file documents the major additions and syntax changes between releases. Fixed awk subst.in/subst script path error (#2722832 - Martin Foster) check_http: Add SSL/TLS hostname extension support (SNI) - (#1939022 - Joe Presbrey) Fixed wrong perfdata label for output traffic in check_mrtgtraf (#2654308 - Gavin Williams) + Fixed check_by_ssh interpretation of quotes in -C parameter (#1985246, #2268675) 1.4.13 25th Sept 2008 Fix Debian bug #460097: check_http --max-age broken (Hilko Bengen) diff --git a/THANKS.in b/THANKS.in index 9209bcf..189ba26 100644 --- a/THANKS.in +++ b/THANKS.in @@ -253,3 +253,4 @@ Chris Pepper Ben Timby Martin Foster Joe Presbrey +Will Preston diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 4e1f210..37de753 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -102,7 +102,7 @@ check_time_LDADD = $(NETLIBS) check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS) check_ups_LDADD = $(NETLIBS) check_users_LDADD = $(BASEOBJS) popen.o -check_by_ssh_LDADD = $(NETLIBS) runcmd.o +check_by_ssh_LDADD = $(NETLIBS) check_ide_smart_LDADD = $(BASEOBJS) negate_LDADD = $(BASEOBJS) urlize_LDADD = $(BASEOBJS) popen.o @@ -144,7 +144,7 @@ check_time_DEPENDENCIES = check_time.c $(NETOBJS) $(DEPLIBS) check_ntp_time_DEPENDENCIES = check_ntp_time.c $(NETOBJS) $(DEPLIBS) check_ups_DEPENDENCIES = check_ups.c $(NETOBJS) $(DEPLIBS) check_users_DEPENDENCIES = check_users.c $(BASEOBJS) popen.o $(DEPLIBS) -check_by_ssh_DEPENDENCIES = check_by_ssh.c $(NETOBJS) runcmd.o $(DEPLIBS) +check_by_ssh_DEPENDENCIES = check_by_ssh.c $(NETOBJS) $(DEPLIBS) negate_DEPENDENCIES = negate.c $(BASEOBJS) $(DEPLIBS) urlize_DEPENDENCIES = urlize.c $(BASEOBJS) popen.o $(DEPLIBS) diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index d0dbf34..793c03d 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c @@ -31,12 +31,17 @@ const char *copyright = "2000-2008"; const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "common.h" -#include "netutils.h" #include "utils.h" -#include "runcmd.h" +#include "netutils.h" +#include "utils_cmd.h" + +#ifndef NP_MAXARGS +#define NP_MAXARGS 1024 +#endif int process_arguments (int, char **); int validate_arguments (void); +void comm_append (const char *); void print_help (void); void print_usage (void); @@ -45,7 +50,8 @@ unsigned int services = 0; int skip_stdout = 0; int skip_stderr = 0; char *remotecmd = NULL; -char *comm = NULL; +char **commargv = NULL; +int commargc = 0; char *hostname = NULL; char *outputfile = NULL; char *host_shortname = NULL; @@ -63,10 +69,10 @@ main (int argc, char **argv) int i; time_t local_time; FILE *fp = NULL; - struct output chld_out, chld_err; + output chld_out, chld_err; remotecmd = ""; - comm = strdup (SSH_COMMAND); + comm_append(SSH_COMMAND); setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); @@ -80,16 +86,19 @@ main (int argc, char **argv) usage_va(_("Could not parse arguments")); /* Set signal handling and alarm timeout */ - if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) { + if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) { usage_va(_("Cannot catch SIGALRM")); } alarm (timeout_interval); /* run the command */ - if (verbose) - printf ("%s\n", comm); + if (verbose) { + printf ("Command: %s\n", commargv[0]); + for (i=1; i NP_MAXARGS) + die(STATE_UNKNOWN, _("%s: Argument limit of %d exceeded\n"), progname, NP_MAXARGS); + + if ((commargv = (char **)realloc(commargv, (commargc+1) * sizeof(char *))) == NULL) + die(STATE_UNKNOWN, _("Can not (re)allocate 'commargv' buffer\n")); + + commargv[commargc-1] = strdup(str); + commargv[commargc] = NULL; + +} int validate_arguments (void) -- 2.30.2