summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2013-08-21 13:00:27 (GMT)
committerHolger Weiss <holger@zedat.fu-berlin.de>2013-08-21 13:00:27 (GMT)
commit461cea42615936f0fdf9c75fa72d0fc0a88eaff6 (patch)
tree56289295ffb45802267cfee36ce73128f66f3a09
parentae8ff32eac1d04df77c73298afafc99471226d1b (diff)
downloadmonitoring-plugins-461cea42615936f0fdf9c75fa72d0fc0a88eaff6.tar.gz
check_snmp: Fix support for inverse thresholds
Commit bd782990566eec91b8312cfc2765a7e2bd9e67da reintroduced support for inverse threshold ranges such as "2:1", but it broke standard thresholds such as "1:2" (by converting this range into "1") or "1:" (by converting this range into "@:2"). This commit fixes those two bugs, plus an off-by-one error while computing the number of bytes to allocate when handling inverse thresholds (two additional bytes were allocated where three were required to hold '@' and ':' and '\0'). While at it, we also check whether malloc(3) succeeded.
-rw-r--r--plugins/check_snmp.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index 7c3bc4b..d2f2f8b 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -150,16 +150,18 @@ static char *fix_snmp_range(char *th)
150{ 150{
151 double left, right; 151 double left, right;
152 char *colon, *ret; 152 char *colon, *ret;
153 if (!(colon = strchr(th, ':'))) 153
154 if ((colon = strchr(th, ':')) == NULL || *(colon + 1) == '\0')
154 return th; 155 return th;
155 *colon = 0;
156 156
157 left = strtod(th, NULL); 157 left = strtod(th, NULL);
158 right = strtod(colon + 1, NULL); 158 right = strtod(colon + 1, NULL);
159 if (right >= left) { 159 if (right >= left)
160 return th; 160 return th;
161 } 161
162 ret = malloc(strlen(th) + strlen(colon + 1) + 2); 162 if ((ret = malloc(strlen(th) + 2)) == NULL)
163 die(STATE_UNKNOWN, _("Cannot malloc"));
164 *colon = '\0';
163 sprintf(ret, "@%s:%s", colon + 1, th); 165 sprintf(ret, "@%s:%s", colon + 1, th);
164 free(th); 166 free(th);
165 return ret; 167 return ret;