diff options
Diffstat (limited to 'usr.sbin/prometheus_sysctl_exporter')
-rw-r--r-- | usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c b/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c index e452e305d2bf..931d8e965d00 100644 --- a/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c +++ b/usr.sbin/prometheus_sysctl_exporter/prometheus_sysctl_exporter.c @@ -67,13 +67,12 @@ oid_get_root(struct oid *o) } /* Obtains the OID for a sysctl by name. */ -static void +static bool oid_get_by_name(struct oid *o, const char *name) { o->len = nitems(o->id); - if (sysctlnametomib(name, o->id, &o->len) != 0) - err(1, "sysctl(%s)", name); + return (sysctlnametomib(name, o->id, &o->len) == 0); } /* Returns whether an OID is placed below another OID. */ @@ -644,7 +643,15 @@ main(int argc, char *argv[]) for (i = 0; i < argc; ++i) { struct oid o, root; - oid_get_by_name(&root, argv[i]); + if (!oid_get_by_name(&root, argv[i])) { + /* + * Ignore trees provided as arguments that + * can't be found. They might belong, for + * example, to kernel modules not currently + * loaded. + */ + continue; + } o = root; do { oid_print(&o, &on, print_descriptions, exclude, include, fp); |