aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--plugins/check_snmp.c12
2 files changed, 11 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 58768d39..e261abfd 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ This file documents the major additions and syntax changes between releases.
Try to detect arguments passed via --with-ping[6]-command and set options accordingly (#2908236)
Fix memory leak in check_http for large pages (Jimmy Bergman - #2957455)
Fix compilation with GCC 2.96 (Konstantin Khomoutov - #2977105)
+ Fix regression introduced in #1867716 where partially valid performance strings would not be printed anymore
WARNINGS
Updated developer documentation to say that performance labels should not have an equals sign or
single quote in the label
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index dcb31386..ce3919d1 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -122,6 +122,7 @@ main (int argc, char **argv)
int result = STATE_UNKNOWN;
int return_code = 0;
int external_error = 0;
+ double perftmp;
char **command_line = NULL;
char *cl_hidden_auth = NULL;
char *oidname = NULL;
@@ -351,10 +352,17 @@ main (int argc, char **argv)
if (nunits > (size_t)0 && (size_t)i < nunits && unitv[i] != NULL)
asprintf (&outbuff, "%s %s", outbuff, unitv[i]);
- if (is_numeric(show)) {
+ /* Try a two-way conversion of show and add perfdata only if we get
+ * something back at the end */
+ ptr = NULL;
+ perftmp = strtod(show, &ptr);
+ if (ptr != show) {
+ ptr = NULL;
+ asprintf(&ptr, "%0.9g", perftmp);
strncat(perfstr, oidname, sizeof(perfstr)-strlen(perfstr)-1);
strncat(perfstr, "=", sizeof(perfstr)-strlen(perfstr)-1);
- strncat(perfstr, show, sizeof(perfstr)-strlen(perfstr)-1);
+ strncat(perfstr, ptr, sizeof(perfstr)-strlen(perfstr)-1);
+ free(ptr);
if (type)
strncat(perfstr, type, sizeof(perfstr)-strlen(perfstr)-1);