diff options
| -rw-r--r-- | plugins/check_snmp.c | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index 0adf3be8..c1d8e2dd 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
| @@ -170,8 +170,10 @@ static char buffer[DEFAULT_BUFFER_SIZE]; | |||
| 170 | static bool ignore_mib_parsing_errors = false; | 170 | static bool ignore_mib_parsing_errors = false; |
| 171 | 171 | ||
| 172 | static char *fix_snmp_range(char *th) { | 172 | static char *fix_snmp_range(char *th) { |
| 173 | double left, right; | 173 | double left; |
| 174 | char *colon, *ret; | 174 | double right; |
| 175 | char *colon; | ||
| 176 | char *ret; | ||
| 175 | 177 | ||
| 176 | if ((colon = strchr(th, ':')) == NULL || *(colon + 1) == '\0') | 178 | if ((colon = strchr(th, ':')) == NULL || *(colon + 1) == '\0') |
| 177 | return th; | 179 | return th; |
| @@ -190,9 +192,11 @@ static char *fix_snmp_range(char *th) { | |||
| 190 | } | 192 | } |
| 191 | 193 | ||
| 192 | int main(int argc, char **argv) { | 194 | int main(int argc, char **argv) { |
| 193 | int len, total_oids; | 195 | int len; |
| 196 | int total_oids; | ||
| 194 | size_t line; | 197 | size_t line; |
| 195 | unsigned int bk_count = 0, dq_count = 0; | 198 | unsigned int bk_count = 0; |
| 199 | unsigned int dq_count = 0; | ||
| 196 | int iresult = STATE_UNKNOWN; | 200 | int iresult = STATE_UNKNOWN; |
| 197 | int result = STATE_UNKNOWN; | 201 | int result = STATE_UNKNOWN; |
| 198 | int return_code = 0; | 202 | int return_code = 0; |
| @@ -208,11 +212,14 @@ int main(int argc, char **argv) { | |||
| 208 | char *th_warn = NULL; | 212 | char *th_warn = NULL; |
| 209 | char *th_crit = NULL; | 213 | char *th_crit = NULL; |
| 210 | char type[8] = ""; | 214 | char type[8] = ""; |
| 211 | output chld_out, chld_err; | 215 | output chld_out; |
| 216 | output chld_err; | ||
| 212 | char *previous_string = NULL; | 217 | char *previous_string = NULL; |
| 213 | char *ap = NULL; | 218 | char *ap = NULL; |
| 214 | char *state_string = NULL; | 219 | char *state_string = NULL; |
| 215 | size_t response_length, current_length, string_length; | 220 | size_t response_length; |
| 221 | size_t current_length; | ||
| 222 | size_t string_length; | ||
| 216 | char *temp_string = NULL; | 223 | char *temp_string = NULL; |
| 217 | char *quote_string = NULL; | 224 | char *quote_string = NULL; |
| 218 | time_t current_time; | 225 | time_t current_time; |
| @@ -676,11 +683,6 @@ int main(int argc, char **argv) { | |||
| 676 | 683 | ||
| 677 | /* process command-line arguments */ | 684 | /* process command-line arguments */ |
| 678 | int process_arguments(int argc, char **argv) { | 685 | int process_arguments(int argc, char **argv) { |
| 679 | char *ptr; | ||
| 680 | int c = 1; | ||
| 681 | size_t j = 0, jj = 0; | ||
| 682 | |||
| 683 | int option = 0; | ||
| 684 | static struct option longopts[] = {STD_LONG_OPTS, | 686 | static struct option longopts[] = {STD_LONG_OPTS, |
| 685 | {"community", required_argument, 0, 'C'}, | 687 | {"community", required_argument, 0, 'C'}, |
| 686 | {"oid", required_argument, 0, 'o'}, | 688 | {"oid", required_argument, 0, 'o'}, |
| @@ -723,7 +725,7 @@ int process_arguments(int argc, char **argv) { | |||
| 723 | return ERROR; | 725 | return ERROR; |
| 724 | 726 | ||
| 725 | /* reverse compatibility for very old non-POSIX usage forms */ | 727 | /* reverse compatibility for very old non-POSIX usage forms */ |
| 726 | for (c = 1; c < argc; c++) { | 728 | for (int c = 1; c < argc; c++) { |
| 727 | if (strcmp("-to", argv[c]) == 0) | 729 | if (strcmp("-to", argv[c]) == 0) |
| 728 | strcpy(argv[c], "-t"); | 730 | strcpy(argv[c], "-t"); |
| 729 | if (strcmp("-wv", argv[c]) == 0) | 731 | if (strcmp("-wv", argv[c]) == 0) |
| @@ -732,13 +734,16 @@ int process_arguments(int argc, char **argv) { | |||
| 732 | strcpy(argv[c], "-c"); | 734 | strcpy(argv[c], "-c"); |
| 733 | } | 735 | } |
| 734 | 736 | ||
| 735 | while (1) { | 737 | size_t j = 0; |
| 736 | c = getopt_long(argc, argv, "nhvVO46t:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:N:L:U:a:x:A:X:M:f:z:", longopts, &option); | 738 | size_t jj = 0; |
| 739 | while (true) { | ||
| 740 | int option = 0; | ||
| 741 | int option_char = getopt_long(argc, argv, "nhvVO46t:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:N:L:U:a:x:A:X:M:f:z:", longopts, &option); | ||
| 737 | 742 | ||
| 738 | if (c == -1 || c == EOF) | 743 | if (option_char == -1 || option_char == EOF) |
| 739 | break; | 744 | break; |
| 740 | 745 | ||
| 741 | switch (c) { | 746 | switch (option_char) { |
| 742 | case '?': /* usage */ | 747 | case '?': /* usage */ |
| 743 | usage5(); | 748 | usage5(); |
| 744 | case 'h': /* help */ | 749 | case 'h': /* help */ |
| @@ -821,7 +826,7 @@ int process_arguments(int argc, char **argv) { | |||
| 821 | */ | 826 | */ |
| 822 | needmibs = true; | 827 | needmibs = true; |
| 823 | } | 828 | } |
| 824 | for (ptr = strtok(optarg, ", "); ptr != NULL; ptr = strtok(NULL, ", "), j++) { | 829 | for (char *ptr = strtok(optarg, ", "); ptr != NULL; ptr = strtok(NULL, ", "), j++) { |
| 825 | while (j >= oids_size) { | 830 | while (j >= oids_size) { |
| 826 | oids_size += OID_COUNT_STEP; | 831 | oids_size += OID_COUNT_STEP; |
| 827 | oids = realloc(oids, oids_size * sizeof(*oids)); | 832 | oids = realloc(oids, oids_size * sizeof(*oids)); |
| @@ -829,16 +834,16 @@ int process_arguments(int argc, char **argv) { | |||
| 829 | oids[j] = strdup(ptr); | 834 | oids[j] = strdup(ptr); |
| 830 | } | 835 | } |
| 831 | numoids = j; | 836 | numoids = j; |
| 832 | if (c == 'E' || c == 'e') { | 837 | if (option_char == 'E' || option_char == 'e') { |
| 833 | jj++; | 838 | jj++; |
| 834 | while (j + 1 >= eval_size) { | 839 | while (j + 1 >= eval_size) { |
| 835 | eval_size += OID_COUNT_STEP; | 840 | eval_size += OID_COUNT_STEP; |
| 836 | eval_method = realloc(eval_method, eval_size * sizeof(*eval_method)); | 841 | eval_method = realloc(eval_method, eval_size * sizeof(*eval_method)); |
| 837 | memset(eval_method + eval_size - OID_COUNT_STEP, 0, 8); | 842 | memset(eval_method + eval_size - OID_COUNT_STEP, 0, 8); |
| 838 | } | 843 | } |
| 839 | if (c == 'E') | 844 | if (option_char == 'E') |
| 840 | eval_method[j + 1] |= WARN_PRESENT; | 845 | eval_method[j + 1] |= WARN_PRESENT; |
| 841 | else if (c == 'e') | 846 | else if (option_char == 'e') |
| 842 | eval_method[j + 1] |= CRIT_PRESENT; | 847 | eval_method[j + 1] |= CRIT_PRESENT; |
| 843 | } | 848 | } |
| 844 | break; | 849 | break; |
| @@ -895,7 +900,7 @@ int process_arguments(int argc, char **argv) { | |||
| 895 | die(STATE_UNKNOWN, _("Could not reallocate labels[%d]"), (int)nlabels); | 900 | die(STATE_UNKNOWN, _("Could not reallocate labels[%d]"), (int)nlabels); |
| 896 | } | 901 | } |
| 897 | labels[nlabels - 1] = optarg; | 902 | labels[nlabels - 1] = optarg; |
| 898 | ptr = thisarg(optarg); | 903 | char *ptr = thisarg(optarg); |
| 899 | labels[nlabels - 1] = ptr; | 904 | labels[nlabels - 1] = ptr; |
| 900 | if (ptr[0] == '\'') | 905 | if (ptr[0] == '\'') |
| 901 | labels[nlabels - 1] = ptr + 1; | 906 | labels[nlabels - 1] = ptr + 1; |
| @@ -1154,24 +1159,23 @@ static char *nextarg(char *str) { | |||
| 1154 | 1159 | ||
| 1155 | /* multiply result (values 0 < n < 1 work as divider) */ | 1160 | /* multiply result (values 0 < n < 1 work as divider) */ |
| 1156 | static char *multiply(char *str) { | 1161 | static char *multiply(char *str) { |
| 1157 | char *endptr; | ||
| 1158 | double val; | ||
| 1159 | char *conv = "%f"; | ||
| 1160 | |||
| 1161 | if (multiplier == 1) | 1162 | if (multiplier == 1) |
| 1162 | return (str); | 1163 | return (str); |
| 1163 | 1164 | ||
| 1164 | if (verbose > 2) | 1165 | if (verbose > 2) |
| 1165 | printf(" multiply input: %s\n", str); | 1166 | printf(" multiply input: %s\n", str); |
| 1166 | 1167 | ||
| 1167 | val = strtod(str, &endptr); | 1168 | char *endptr; |
| 1169 | double val = strtod(str, &endptr); | ||
| 1168 | if ((val == 0.0) && (endptr == str)) { | 1170 | if ((val == 0.0) && (endptr == str)) { |
| 1169 | die(STATE_UNKNOWN, _("multiplier set (%.1f), but input is not a number: %s"), multiplier, str); | 1171 | die(STATE_UNKNOWN, _("multiplier set (%.1f), but input is not a number: %s"), multiplier, str); |
| 1170 | } | 1172 | } |
| 1171 | 1173 | ||
| 1172 | if (verbose > 2) | 1174 | if (verbose > 2) |
| 1173 | printf(" multiply extracted double: %f\n", val); | 1175 | printf(" multiply extracted double: %f\n", val); |
| 1176 | |||
| 1174 | val *= multiplier; | 1177 | val *= multiplier; |
| 1178 | char *conv = "%f"; | ||
| 1175 | if (fmtstr_set) { | 1179 | if (fmtstr_set) { |
| 1176 | conv = fmtstr; | 1180 | conv = fmtstr; |
| 1177 | } | 1181 | } |
