aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/check_snmp.c23
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,