X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_by_ssh.c;h=d0dbf34a140e289342465d80dcf6f955568790a7;hb=c459ca07706ee315da3eac91344c2f1d9a152685;hp=37874bf8ccaed50718929be10061857f26adc2b6;hpb=ed62784a0b68959fd13fe5bc53a5aef4f17fbffa;p=nagiosplug.git diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 37874bf..d0dbf34 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c @@ -5,8 +5,6 @@ * License: GPL * Copyright (c) 2000-2008 Nagios Plugins Development Team * -* Last Modified: $Date$ -* * Description: * * This file contains the check_by_ssh plugin @@ -25,12 +23,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * -* $Id$ * *****************************************************************************/ const char *progname = "check_by_ssh"; -const char *revision = "$Revision$"; const char *copyright = "2000-2008"; const char *email = "nagiosplug-devel@lists.sourceforge.net"; @@ -76,6 +72,9 @@ main (int argc, char **argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); + /* Parse extra opts if any */ + argv=np_extra_opts (&argc, argv, progname); + /* process arguments */ if (process_arguments (argc, argv) == ERROR) usage_va(_("Could not parse arguments")); @@ -97,11 +96,11 @@ main (int argc, char **argv) if (skip_stderr == -1) /* --skip-stderr specified without argument */ skip_stderr = chld_err.lines; - /* UNKNOWN if (non-skipped) output found on stderr */ + /* UNKNOWN or worse if (non-skipped) output found on stderr */ if(chld_err.lines > skip_stderr) { printf (_("Remote command execution failed: %s\n"), chld_err.line[skip_stderr]); - return STATE_UNKNOWN; + return max_state_alt(result, STATE_UNKNOWN); } /* this is simple if we're not supposed to be passive. @@ -130,21 +129,20 @@ main (int argc, char **argv) local_time = time (NULL); commands = 0; for(i = skip_stdout; i < chld_out.lines; i++) { - status_text = strstr (chld_out.line[i], "STATUS CODE: "); - if (status_text == NULL) { - printf ("%s", chld_out.line[i]); - return result; - } + status_text = chld_out.line[i++]; + if (i == chld_out.lines || strstr (chld_out.line[i], "STATUS CODE: ") == NULL) + die (STATE_UNKNOWN, _("%s: Error parsing output\n"), progname); + if (service[commands] && status_text - && sscanf (status_text, "STATUS CODE: %d", &cresult) == 1) + && sscanf (chld_out.line[i], "STATUS CODE: %d", &cresult) == 1) { fprintf (fp, "[%d] PROCESS_SERVICE_CHECK_RESULT;%s;%s;%d;%s\n", (int) local_time, host_shortname, service[commands++], - cresult, chld_out.line[i]); + cresult, status_text); } } - /* force an OK state */ + /* Multiple commands and passive checking should always return OK */ return result; } @@ -199,7 +197,7 @@ process_arguments (int argc, char **argv) switch (c) { case 'V': /* version */ - print_revision (progname, revision); + print_revision (progname, NP_VERSION); exit (STATE_OK); case 'h': /* help */ print_help (); @@ -305,7 +303,7 @@ process_arguments (int argc, char **argv) asprintf (&remotecmd, "%s", argv[c]); } - if (commands > 1) + if (commands > 1 || passive) asprintf (&remotecmd, "%s;echo STATUS CODE: $?;", remotecmd); if (remotecmd == NULL || strlen (remotecmd) <= 1) @@ -337,7 +335,7 @@ validate_arguments (void) void print_help (void) { - print_revision (progname, revision); + print_revision (progname, NP_VERSION); printf ("Copyright (c) 1999 Karl DeBisschop \n"); printf (COPYRIGHT, copyright, email); @@ -350,6 +348,8 @@ print_help (void) printf (_(UT_HELP_VRSN)); + printf (_(UT_EXTRA_OPTS)); + printf (_(UT_HOST_PORT), 'p', "none"); printf (_(UT_IPv46)); @@ -363,7 +363,7 @@ print_help (void) printf (" %s\n", "-E, --skip-stderr[=n]"); printf (" %s\n", _("Ignore all or (if specified) first n lines on STDERR [optional]")); printf (" %s\n", "-f"); - printf (" %s\n", _("tells ssh to fork rather than create a tty [optional]")); + printf (" %s\n", _("tells ssh to fork rather than create a tty [optional]. This will always return OK if ssh is executed")); printf (" %s\n","-C, --command='COMMAND STRING'"); printf (" %s\n", _("command to execute on the remote machine")); printf (" %s\n","-l, --logname=USERNAME"); @@ -402,6 +402,12 @@ print_help (void) printf (" %s\n", "[1080933700] PROCESS_SERVICE_CHECK_RESULT;flint;c2;0; up 2 days"); printf (" %s\n", "[1080933700] PROCESS_SERVICE_CHECK_RESULT;flint;c3;0; up 2 days"); +#ifdef NP_EXTRA_OPTS + printf("\n"); + printf("%s\n", _("Notes:")); + printf(_(UT_EXTRA_OPTS_NOTES)); +#endif + printf(_(UT_SUPPORT)); }