diff options
Diffstat (limited to 'plugins/check_snmp.c')
| -rw-r--r-- | plugins/check_snmp.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index bf210222..d3871040 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
| @@ -62,6 +62,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
| 62 | /* Longopts only arguments */ | 62 | /* Longopts only arguments */ |
| 63 | #define L_CALCULATE_RATE CHAR_MAX+1 | 63 | #define L_CALCULATE_RATE CHAR_MAX+1 |
| 64 | #define L_RATE_MULTIPLIER CHAR_MAX+2 | 64 | #define L_RATE_MULTIPLIER CHAR_MAX+2 |
| 65 | #define L_INVERT_SEARCH CHAR_MAX+3 | ||
| 65 | 66 | ||
| 66 | /* Gobble to string - stop incrementing c when c[0] match one of the | 67 | /* Gobble to string - stop incrementing c when c[0] match one of the |
| 67 | * characters in s */ | 68 | * characters in s */ |
| @@ -115,6 +116,7 @@ char *units; | |||
| 115 | char *port; | 116 | char *port; |
| 116 | char *snmpcmd; | 117 | char *snmpcmd; |
| 117 | char string_value[MAX_INPUT_BUFFER] = ""; | 118 | char string_value[MAX_INPUT_BUFFER] = ""; |
| 119 | int invert_search=0; | ||
| 118 | char **labels = NULL; | 120 | char **labels = NULL; |
| 119 | char **unitv = NULL; | 121 | char **unitv = NULL; |
| 120 | size_t nlabels = 0; | 122 | size_t nlabels = 0; |
| @@ -433,16 +435,16 @@ main (int argc, char **argv) | |||
| 433 | /* Process this block for string matching */ | 435 | /* Process this block for string matching */ |
| 434 | else if (eval_method[i] & CRIT_STRING) { | 436 | else if (eval_method[i] & CRIT_STRING) { |
| 435 | if (strcmp (show, string_value)) | 437 | if (strcmp (show, string_value)) |
| 436 | iresult = STATE_CRITICAL; | 438 | iresult = (invert_search==0) ? STATE_CRITICAL : STATE_OK; |
| 437 | else | 439 | else |
| 438 | iresult = STATE_OK; | 440 | iresult = (invert_search==0) ? STATE_OK : STATE_CRITICAL; |
| 439 | } | 441 | } |
| 440 | 442 | ||
| 441 | /* Process this block for regex matching */ | 443 | /* Process this block for regex matching */ |
| 442 | else if (eval_method[i] & CRIT_REGEX) { | 444 | else if (eval_method[i] & CRIT_REGEX) { |
| 443 | excode = regexec (&preg, response, 10, pmatch, eflags); | 445 | excode = regexec (&preg, response, 10, pmatch, eflags); |
| 444 | if (excode == 0) { | 446 | if (excode == 0) { |
| 445 | iresult = STATE_OK; | 447 | iresult = (invert_search==0) ? STATE_OK : STATE_CRITICAL; |
| 446 | } | 448 | } |
| 447 | else if (excode != REG_NOMATCH) { | 449 | else if (excode != REG_NOMATCH) { |
| 448 | regerror (excode, &preg, errbuf, MAX_INPUT_BUFFER); | 450 | regerror (excode, &preg, errbuf, MAX_INPUT_BUFFER); |
| @@ -450,7 +452,7 @@ main (int argc, char **argv) | |||
| 450 | exit (STATE_CRITICAL); | 452 | exit (STATE_CRITICAL); |
| 451 | } | 453 | } |
| 452 | else { | 454 | else { |
| 453 | iresult = STATE_CRITICAL; | 455 | iresult = (invert_search==0) ? STATE_CRITICAL : STATE_OK; |
| 454 | } | 456 | } |
| 455 | } | 457 | } |
| 456 | 458 | ||
| @@ -584,6 +586,7 @@ process_arguments (int argc, char **argv) | |||
| 584 | {"next", no_argument, 0, 'n'}, | 586 | {"next", no_argument, 0, 'n'}, |
| 585 | {"rate", no_argument, 0, L_CALCULATE_RATE}, | 587 | {"rate", no_argument, 0, L_CALCULATE_RATE}, |
| 586 | {"rate-multiplier", required_argument, 0, L_RATE_MULTIPLIER}, | 588 | {"rate-multiplier", required_argument, 0, L_RATE_MULTIPLIER}, |
| 589 | {"invert-search", no_argument, 0, L_INVERT_SEARCH}, | ||
| 587 | {0, 0, 0, 0} | 590 | {0, 0, 0, 0} |
| 588 | }; | 591 | }; |
| 589 | 592 | ||
| @@ -796,6 +799,9 @@ process_arguments (int argc, char **argv) | |||
| 796 | if(!is_integer(optarg)||(rate_multiplier=atoi(optarg)<=0)) | 799 | if(!is_integer(optarg)||(rate_multiplier=atoi(optarg)<=0)) |
| 797 | usage2(_("Rate multiplier must be a positive integer"),optarg); | 800 | usage2(_("Rate multiplier must be a positive integer"),optarg); |
| 798 | break; | 801 | break; |
| 802 | case L_INVERT_SEARCH: | ||
| 803 | invert_search=1; | ||
| 804 | break; | ||
| 799 | } | 805 | } |
| 800 | } | 806 | } |
| 801 | 807 | ||
| @@ -1044,10 +1050,12 @@ print_help (void) | |||
| 1044 | printf (" %s\n", _("Return OK state (for that OID) if extended regular expression REGEX matches")); | 1050 | printf (" %s\n", _("Return OK state (for that OID) if extended regular expression REGEX matches")); |
| 1045 | printf (" %s\n", "-R, --eregi=REGEX"); | 1051 | printf (" %s\n", "-R, --eregi=REGEX"); |
| 1046 | printf (" %s\n", _("Return OK state (for that OID) if case-insensitive extended REGEX matches")); | 1052 | printf (" %s\n", _("Return OK state (for that OID) if case-insensitive extended REGEX matches")); |
| 1047 | printf (" %s\n", "-l, --label=STRING"); | 1053 | printf (" %s\n", "--invert-search"); |
| 1048 | printf (" %s\n", _("Prefix label for output from plugin (default -l 'SNMP')")); | 1054 | printf (" %s\n", _("Invert search result (CRITICAL if found)")); |
| 1049 | 1055 | ||
| 1050 | /* Output Formatting */ | 1056 | /* Output Formatting */ |
| 1057 | printf (" %s\n", "-l, --label=STRING"); | ||
| 1058 | printf (" %s\n", _("Prefix label for output from plugin")); | ||
| 1051 | printf (" %s\n", "-u, --units=STRING"); | 1059 | printf (" %s\n", "-u, --units=STRING"); |
| 1052 | printf (" %s\n", _("Units label(s) for output data (e.g., 'sec.').")); | 1060 | printf (" %s\n", _("Units label(s) for output data (e.g., 'sec.').")); |
| 1053 | printf (" %s\n", "-D, --output-delimiter=STRING"); | 1061 | printf (" %s\n", "-D, --output-delimiter=STRING"); |
