aboutsummaryrefslogtreecommitdiff
path: root/plugins/check_snmp.c
diff options
context:
space:
mode:
authorGravatar Holger Weiss <holger@zedat.fu-berlin.de> 2013-08-21 15:00:27 +0200
committerGravatar Holger Weiss <holger@zedat.fu-berlin.de> 2013-08-21 15:00:27 +0200
commit461cea42615936f0fdf9c75fa72d0fc0a88eaff6 (patch)
tree56289295ffb45802267cfee36ce73128f66f3a09 /plugins/check_snmp.c
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.
Diffstat (limited to 'plugins/check_snmp.c')
-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 7c3bc4b9..d2f2f8b5 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -150,16 +150,18 @@ static char *fix_snmp_range(char *th)
{
double left, right;
char *colon, *ret;
- if (!(colon = strchr(th, ':')))
+
+ if ((colon = strchr(th, ':')) == NULL || *(colon + 1) == '\0')
return th;
- *colon = 0;
left = strtod(th, NULL);
right = strtod(colon + 1, NULL);
- if (right >= left) {
+ if (right >= left)
return th;
- }
- ret = malloc(strlen(th) + strlen(colon + 1) + 2);
+
+ if ((ret = malloc(strlen(th) + 2)) == NULL)
+ die(STATE_UNKNOWN, _("Cannot malloc"));
+ *colon = '\0';
sprintf(ret, "@%s:%s", colon + 1, th);
free(th);
return ret;