[nagiosplug] check_snmp: Fix regression introduced in #1867716

"Thomas Guyot-Sionnest" <[email protected]>
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
 Module: nagiosplug
 Branch: master
 Commit: 120985853e71d6f20d598d1968f0df9db5163957
 Author: Thomas Guyot-Sionnest <[email protected]>
   Date: Tue Mar 30 22:31:20 2010 -0400
    URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=1209858

check_snmp: Fix regression introduced in #1867716

Bug #1867716 fixed what it meant to fix: broken perfdata strings.
Unfortunately some users relied on half-broken perfdata string where at
least the first token was OK. This patch do a two-way conversion
(string to double then back to string) instead and use the conversion
result for the performance data.

A possible caveat is that the string may change where it normally
shouldn't but the result should be somewhat similar.

---

 NEWS                 |    1 +
 plugins/check_snmp.c |   12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 58768d3..e261abf 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 dcb3138..ce3919d 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);


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.