diff options
author | Stef Walter <stef@memberwebs.com> | 2008-03-15 20:06:37 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2008-03-15 20:06:37 +0000 |
commit | 7c851971878e3fd2745112859fbddc145150dcf3 (patch) | |
tree | 880696a589276499555a93f6172125411878e169 | |
parent | 0b87edc7275724cc646341614772ac38d7bb852c (diff) |
Don't bark on MIBs that are not recognized, ignore them and continue.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | daemon/config.c | 36 |
2 files changed, 26 insertions, 13 deletions
@@ -1,7 +1,8 @@ 0.9 ????? - Support failover between multiple agents. - Support table queries by looking up table indexes. - - Major refactoring of internals. + - Major refactoring of internals. + - Warn and ignore MIBs that we don't recognize. 0.8 [2007-07-16] - Fix assertion when reallocating SNMP request memory diff --git a/daemon/config.c b/daemon/config.c index 55ee597..fcc4379 100644 --- a/daemon/config.c +++ b/daemon/config.c @@ -215,17 +215,20 @@ parse_query (rb_item *item, char *query, config_ctx *ctx) if (query && *query) log_warnx ("%s: only using first query argument in snmp URI", ctx->confname); - item->has_query = 1; - /* And parse the query OID */ - if (mib_parse (name, &(item->query_oid)) == -1) - errx (2, "%s: invalid MIB: %s", ctx->confname, name); - if (item->query_oid.len >= ASN_MAXOIDLEN) - errx (2, "request OID is too long"); + if (mib_parse (name, &(item->query_oid)) == -1) { + log_warnx ("%s: ignorning invalid MIB: %s", ctx->confname, name); + return; + } + if (item->query_oid.len >= ASN_MAXOIDLEN) { + log_warnx ("%s: ignoring OID that is too long: %s", ctx->confname, name); + return; + } log_debug ("parsed MIB into oid: %s -> %s", name, asn_oid2str (&item->query_oid)); + item->has_query = 1; item->query_match = value; memset (&item->query_last, 0, sizeof (item->query_last)); item->query_matched = 0; @@ -257,6 +260,21 @@ parse_item (const char *field, char *uri, config_ctx *ctx) /* Make a new item */ item = (rb_item*)xcalloc (sizeof (*item)); + + /* And parse the main field OID */ + if (mib_parse (path, &(item->field_oid)) == -1) { + log_warnx ("%s: ignorning invalid MIB: %s", ctx->confname, path); + free (item); + return NULL; + } + + if (item->field_oid.len >= ASN_MAXOIDLEN) { + log_warnx ("%s: ignoring OID that is too long: %s", ctx->confname, path); + free (item); + return NULL; + } + + /* Setup the basics */ item->field = field; item->community = user ? user : "public"; item->version = version; @@ -268,12 +286,6 @@ parse_item (const char *field, char *uri, config_ctx *ctx) parse_hosts (item, host, ctx); parse_query (item, query, ctx); - /* And parse the main field OID */ - if (mib_parse (path, &(item->field_oid)) == -1) - errx (2, "%s: invalid MIB: %s", ctx->confname, path); - if (item->field_oid.len >= ASN_MAXOIDLEN) - errx (2, "request OID is too long"); - log_debug ("parsed MIB into oid: %s -> %s", path, asn_oid2str (&item->field_oid)); |