diff options
Diffstat (limited to 'plugins/check_snmp.c')
| -rw-r--r-- | plugins/check_snmp.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index f04ca85f..19f78d03 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
| @@ -117,7 +117,7 @@ int needmibs = FALSE; | |||
| 117 | int | 117 | int |
| 118 | main (int argc, char **argv) | 118 | main (int argc, char **argv) |
| 119 | { | 119 | { |
| 120 | int i, len; | 120 | int i, len, line; |
| 121 | int iresult = STATE_UNKNOWN; | 121 | int iresult = STATE_UNKNOWN; |
| 122 | int result = STATE_UNKNOWN; | 122 | int result = STATE_UNKNOWN; |
| 123 | int return_code = 0; | 123 | int return_code = 0; |
| @@ -126,6 +126,7 @@ main (int argc, char **argv) | |||
| 126 | char *cl_hidden_auth = NULL; | 126 | char *cl_hidden_auth = NULL; |
| 127 | char *oidname = NULL; | 127 | char *oidname = NULL; |
| 128 | char *response = NULL; | 128 | char *response = NULL; |
| 129 | char *mult_resp = NULL; | ||
| 129 | char *outbuff; | 130 | char *outbuff; |
| 130 | char *ptr = NULL; | 131 | char *ptr = NULL; |
| 131 | char *show = NULL; | 132 | char *show = NULL; |
| @@ -249,10 +250,10 @@ main (int argc, char **argv) | |||
| 249 | } | 250 | } |
| 250 | } | 251 | } |
| 251 | 252 | ||
| 252 | for (i = 0; i < chld_out.lines; i++) { | 253 | for (line=0, i=0; line < chld_out.lines; line++, i++) { |
| 253 | const char *conv = "%.0f"; | 254 | const char *conv = "%.0f"; |
| 254 | 255 | ||
| 255 | ptr = chld_out.line[i]; | 256 | ptr = chld_out.line[line]; |
| 256 | oidname = strpcpy (oidname, ptr, delimiter); | 257 | oidname = strpcpy (oidname, ptr, delimiter); |
| 257 | response = strstr (ptr, delimiter); | 258 | response = strstr (ptr, delimiter); |
| 258 | if (response == NULL) | 259 | if (response == NULL) |
| @@ -283,6 +284,18 @@ main (int argc, char **argv) | |||
| 283 | else if (strstr (response, "STRING: ")) { | 284 | else if (strstr (response, "STRING: ")) { |
| 284 | show = strstr (response, "STRING: ") + 8; | 285 | show = strstr (response, "STRING: ") + 8; |
| 285 | conv = "%.10g"; | 286 | conv = "%.10g"; |
| 287 | /* Get the rest of the string on multi-line strings */ | ||
| 288 | if (show[0] == '"' && (response[strlen(response)-1] != '\"' || response[strlen(response)-2] != '\\')) { | ||
| 289 | /* Strip out unmatched double-quote */ | ||
| 290 | if (show[0] == '"') show++; | ||
| 291 | if (!mult_resp) mult_resp = strdup(""); | ||
| 292 | asprintf (&mult_resp, "%s%s:\n%s\n", mult_resp, oids[i], strstr (response, "STRING: ") + 8); | ||
| 293 | for (line++; line < chld_out.lines; line++) { | ||
| 294 | asprintf (&mult_resp, "%s%s\n", mult_resp, chld_out.line[line]); | ||
| 295 | if (mult_resp[strlen(mult_resp)-2] == '"' && response[strlen(response)-2] != '\\') break; | ||
| 296 | } | ||
| 297 | } | ||
| 298 | |||
| 286 | } | 299 | } |
| 287 | else if (strstr (response, "Timeticks: ")) | 300 | else if (strstr (response, "Timeticks: ")) |
| 288 | show = strstr (response, "Timeticks: "); | 301 | show = strstr (response, "Timeticks: "); |
| @@ -367,6 +380,7 @@ main (int argc, char **argv) | |||
| 367 | } | 380 | } |
| 368 | 381 | ||
| 369 | printf ("%s %s -%s %s \n", label, state_text (result), outbuff, perfstr); | 382 | printf ("%s %s -%s %s \n", label, state_text (result), outbuff, perfstr); |
| 383 | if (mult_resp) printf ("%s", mult_resp); | ||
| 370 | 384 | ||
| 371 | return result; | 385 | return result; |
| 372 | } | 386 | } |
