|
|
@@ -3,7 +3,7 @@
|
|
|
* Nagios negate plugin
|
|
|
*
|
|
|
* License: GPL
|
|
|
-* Copyright (c) 2002-2007 Nagios Plugins Development Team
|
|
|
+* Copyright (c) 2002-2008 Nagios Plugins Development Team
|
|
|
*
|
|
|
* Last Modified: $Date$
|
|
|
*
|
|
|
@@ -34,10 +34,10 @@
|
|
|
|
|
|
const char *progname = "negate";
|
|
|
const char *revision = "$Revision$";
|
|
|
-const char *copyright = "2002-2007";
|
|
|
+const char *copyright = "2002-2008";
|
|
|
const char *email = "nagiosplug-devel@lists.sourceforge.net";
|
|
|
|
|
|
-#define DEFAULT_TIMEOUT 9
|
|
|
+#define DEFAULT_TIMEOUT 11
|
|
|
|
|
|
#include "common.h"
|
|
|
#include "utils.h"
|
|
|
@@ -49,6 +49,7 @@ static const char **process_arguments (int, char **);
|
|
|
int validate_arguments (char **);
|
|
|
void print_help (void);
|
|
|
void print_usage (void);
|
|
|
+int subst_text = FALSE;
|
|
|
|
|
|
static int state[4] = {
|
|
|
STATE_OK,
|
|
|
@@ -61,7 +62,7 @@ int
|
|
|
main (int argc, char **argv)
|
|
|
{
|
|
|
int found = 0, result = STATE_UNKNOWN;
|
|
|
- char *buf;
|
|
|
+ char *buf, *sub;
|
|
|
char **command_line;
|
|
|
output chld_out, chld_err;
|
|
|
int i;
|
|
|
@@ -92,10 +93,22 @@ main (int argc, char **argv)
|
|
|
exit (STATE_WARNING);
|
|
|
}
|
|
|
|
|
|
+ /* Return UNKNOWN or worse if no output is returned */
|
|
|
if (chld_out.lines == 0)
|
|
|
- die (STATE_UNKNOWN, _("No data returned from command\n"));
|
|
|
+ die (max_state_alt (result, STATE_UNKNOWN), _("No data returned from command\n"));
|
|
|
|
|
|
for (i = 0; i < chld_out.lines; i++) {
|
|
|
+ if (subst_text && result != state[result] &&
|
|
|
+ result >= 0 && result <= 4) {
|
|
|
+ /* Loop over each match found */
|
|
|
+ while ((sub = strstr (chld_out.line[i], state_text (result)))) {
|
|
|
+ /* Terminate the first part and skip over the string we'll substitute */
|
|
|
+ *sub = '\0';
|
|
|
+ sub += strlen (state_text (result));
|
|
|
+ /* then put everything back together */
|
|
|
+ asprintf (&chld_out.line[i], "%s%s%s", chld_out.line[i], state_text (state[result]), sub);
|
|
|
+ }
|
|
|
+ }
|
|
|
printf ("%s\n", chld_out.line[i]);
|
|
|
}
|
|
|
|
|
|
@@ -123,11 +136,12 @@ process_arguments (int argc, char **argv)
|
|
|
{"warning", required_argument, 0, 'w'},
|
|
|
{"critical", required_argument, 0, 'c'},
|
|
|
{"unknown", required_argument, 0, 'u'},
|
|
|
+ {"substitute", no_argument, 0, 's'},
|
|
|
{0, 0, 0, 0}
|
|
|
};
|
|
|
|
|
|
while (1) {
|
|
|
- c = getopt_long (argc, argv, "+hVt:o:w:c:u:", longopts, &option);
|
|
|
+ c = getopt_long (argc, argv, "+hVt:o:w:c:u:s", longopts, &option);
|
|
|
|
|
|
if (c == -1 || c == EOF)
|
|
|
break;
|
|
|
@@ -170,6 +184,9 @@ process_arguments (int argc, char **argv)
|
|
|
usage4 (_("Unknown must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer (0-3)."));
|
|
|
permute = FALSE;
|
|
|
break;
|
|
|
+ case 's': /* Substitute status text */
|
|
|
+ subst_text = TRUE;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -232,13 +249,15 @@ print_help (void)
|
|
|
printf (_(UT_TIMEOUT), DEFAULT_TIMEOUT);
|
|
|
printf (" %s\n", _("Keep timeout longer than the plugin timeout to retain CRITICAL status."));
|
|
|
|
|
|
- printf(" -o,--ok=STATUS\n");
|
|
|
- printf(" -w,--warning=STATUS\n");
|
|
|
- printf(" -c,--critical=STATUS\n");
|
|
|
- printf(" -u,--unknown=STATUS\n");
|
|
|
+ printf(" -o, --ok=STATUS\n");
|
|
|
+ printf(" -w, --warning=STATUS\n");
|
|
|
+ printf(" -c, --critical=STATUS\n");
|
|
|
+ printf(" -u, --unknown=STATUS\n");
|
|
|
printf(_(" STATUS can be 'OK', 'WARNING', 'CRITICAL' or 'UNKNOWN' without single\n"));
|
|
|
printf(_(" quotes. Numeric values are accepted. If nothing is specified, permutes\n"));
|
|
|
printf(_(" OK and CRITICAL.\n"));
|
|
|
+ printf(" -s, --substitute\n");
|
|
|
+ printf(_(" Substitute output text as well. Will only substitute text in CAPITALS\n"));
|
|
|
|
|
|
printf ("\n");
|
|
|
printf ("%s\n", _("Examples:"));
|
|
|
@@ -248,11 +267,11 @@ print_help (void)
|
|
|
printf (" %s\n", _("This will return OK instead of WARNING and UNKNOWN instead of CRITICAL"));
|
|
|
printf ("\n");
|
|
|
printf ("%s\n", _("Notes:"));
|
|
|
- printf ("%s\n", _("This plugin is a wrapper to take the output of another plugin and invert it."));
|
|
|
- printf ("%s\n", _("The full path of the plugin must be provided."));
|
|
|
- printf ("%s\n", _("If the wrapped plugin returns OK, the wrapper will return CRITICAL."));
|
|
|
- printf ("%s\n", _("If the wrapped plugin returns CRITICAL, the wrapper will return OK."));
|
|
|
- printf ("%s\n", _("Otherwise, the output state of the wrapped plugin is unchanged."));
|
|
|
+ printf (" %s\n", _("This plugin is a wrapper to take the output of another plugin and invert it."));
|
|
|
+ printf (" %s\n", _("The full path of the plugin must be provided."));
|
|
|
+ printf (" %s\n", _("If the wrapped plugin returns OK, the wrapper will return CRITICAL."));
|
|
|
+ printf (" %s\n", _("If the wrapped plugin returns CRITICAL, the wrapper will return OK."));
|
|
|
+ printf (" %s\n", _("Otherwise, the output state of the wrapped plugin is unchanged."));
|
|
|
|
|
|
printf (_(UT_SUPPORT));
|
|
|
}
|
|
|
@@ -263,5 +282,5 @@ void
|
|
|
print_usage (void)
|
|
|
{
|
|
|
printf (_("Usage:"));
|
|
|
- printf ("%s [-t timeout] [-owcu STATE] <definition of wrapped plugin>\n", progname);
|
|
|
+ printf ("%s [-t timeout] [-owcu STATE] [-s] <definition of wrapped plugin>\n", progname);
|
|
|
}
|