diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-21 15:00:27 +0200 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-21 15:00:27 +0200 |
commit | 461cea42615936f0fdf9c75fa72d0fc0a88eaff6 (patch) | |
tree | 56289295ffb45802267cfee36ce73128f66f3a09 /plugins/check_snmp.c | |
parent | ae8ff32eac1d04df77c73298afafc99471226d1b (diff) | |
download | monitoring-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.c | 12 |
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) | |||
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; |