diff options
Diffstat (limited to 'plugins/check_snmp.c')
-rw-r--r-- | plugins/check_snmp.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index 2d9861bc..0ddfb942 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c @@ -144,6 +144,25 @@ double previous_value[MAX_OIDS]; int perf_labels = 1; +static char *fix_snmp_range(char *th) +{ + double left, right; + char *colon, *ret; + if (!(colon = strchr(th, ':'))) + return th; + *colon = 0; + + left = strtod(th, NULL); + right = strtod(colon + 1, NULL); + if (right >= left) { + return th; + } + ret = malloc(strlen(th) + strlen(colon + 1) + 2); + sprintf(ret, "@%s:%s", colon + 1, th); + free(th); + return ret; +} + int main (int argc, char **argv) { @@ -228,6 +247,10 @@ main (int argc, char **argv) for (i=0; i<numoids; i++) { char *w = th_warn ? strndup(th_warn, strcspn(th_warn, ",")) : NULL; char *c = th_crit ? strndup(th_crit, strcspn(th_crit, ",")) : NULL; + /* translate "2:1" to "@1:2" for backwards compatibility */ + w = w ? fix_snmp_range(w) : NULL; + c = c ? fix_snmp_range(c) : NULL; + /* Skip empty thresholds, while avoiding segfault */ set_thresholds(&thlds[i], w ? strpbrk(w, NP_THRESHOLDS_CHARS) : NULL, |