From: martijn Date: Sat, 4 Nov 2023 09:30:28 +0000 (+0000) Subject: Move SNMPv2-SMI::snmpV2 from mib.c into the new application_internal.c X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=9b67793511abbfdba522668dc7bbcd87a07ef2dc;p=openbsd Move SNMPv2-SMI::snmpV2 from mib.c into the new application_internal.c OK tb@ --- diff --git a/usr.sbin/snmpd/application_internal.c b/usr.sbin/snmpd/application_internal.c index 1dc89432d81..cf6721a30ac 100644 --- a/usr.sbin/snmpd/application_internal.c +++ b/usr.sbin/snmpd/application_internal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: application_internal.c,v 1.2 2023/11/04 09:28:04 martijn Exp $ */ +/* $OpenBSD: application_internal.c,v 1.3 2023/11/04 09:30:28 martijn Exp $ */ /* * Copyright (c) 2023 Martijn van Duren @@ -45,6 +45,8 @@ void appl_internal_get(struct appl_backend *, int32_t, int32_t, const char *, void appl_internal_getnext(struct appl_backend *, int32_t, int32_t, const char *, struct appl_varbind *); struct ber_element *appl_internal_snmp(struct ber_oid *); +struct ber_element *appl_internal_engine(struct ber_oid *); +struct ber_element *appl_internal_usmstats(struct ber_oid *); struct appl_internal_object *appl_internal_object_parent(struct ber_oid *); int appl_internal_object_cmp(struct appl_internal_object *, struct appl_internal_object *); @@ -128,6 +130,29 @@ appl_internal_init(void) NULL); appl_internal_object(&OID(MIB_snmpProxyDrops), appl_internal_snmp, NULL); + + appl_internal_region(&OID(MIB_snmpV2)); + appl_internal_object(&OID(MIB_snmpEngineID), appl_internal_engine, + NULL); + appl_internal_object(&OID(MIB_snmpEngineBoots), appl_internal_engine, + NULL); + appl_internal_object(&OID(MIB_snmpEngineTime), appl_internal_engine, + NULL); + appl_internal_object(&OID(MIB_snmpEngineMaxMsgSize), + appl_internal_engine, NULL); + + appl_internal_object(&OID(MIB_usmStatsUnsupportedSecLevels), + appl_internal_usmstats, NULL); + appl_internal_object(&OID(MIB_usmStatsNotInTimeWindow), + appl_internal_usmstats, NULL); + appl_internal_object(&OID(MIB_usmStatsUnknownUserNames), + appl_internal_usmstats, NULL); + appl_internal_object(&OID(MIB_usmStatsUnknownEngineId), + appl_internal_usmstats, NULL); + appl_internal_object(&OID(MIB_usmStatsWrongDigests), + appl_internal_usmstats, NULL); + appl_internal_object(&OID(MIB_usmStatsDecryptionErrors), + appl_internal_usmstats, NULL); } void @@ -376,6 +401,46 @@ appl_internal_snmp(struct ber_oid *oid) return value; } +struct ber_element * +appl_internal_engine(struct ber_oid *oid) +{ + if (ober_oid_cmp(&OID(MIB_snmpEngineID, 0), oid) == 0) + return ober_add_nstring(NULL, snmpd_env->sc_engineid, + snmpd_env->sc_engineid_len); + else if (ober_oid_cmp(&OID(MIB_snmpEngineBoots, 0), oid) == 0) + return ober_add_integer(NULL, snmpd_env->sc_engine_boots); + else if (ober_oid_cmp(&OID(MIB_snmpEngineTime, 0), oid) == 0) + return ober_add_integer(NULL, snmpd_engine_time()); + else if (ober_oid_cmp(&OID(MIB_snmpEngineMaxMsgSize, 0), oid) == 0) + return ober_add_integer(NULL, READ_BUF_SIZE); + return NULL; +} + +struct ber_element * +appl_internal_usmstats(struct ber_oid *oid) +{ + struct snmp_stats *stats = &snmpd_env->sc_stats; + struct ber_element *value = NULL; + + if (ober_oid_cmp(&OID(MIB_usmStatsUnsupportedSecLevels, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmbadseclevel); + else if (ober_oid_cmp(&OID(MIB_usmStatsNotInTimeWindow, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmtimewindow); + else if (ober_oid_cmp(&OID(MIB_usmStatsUnknownUserNames, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmnosuchuser); + else if (ober_oid_cmp(&OID(MIB_usmStatsUnknownEngineId, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmnosuchengine); + else if (ober_oid_cmp(&OID(MIB_usmStatsWrongDigests, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmwrongdigest); + else if (ober_oid_cmp(&OID(MIB_usmStatsDecryptionErrors, 0), oid) == 0) + value = ober_add_integer(NULL, stats->snmp_usmdecrypterr); + + if (value != NULL) + ober_set_header(value, BER_CLASS_APPLICATION, SNMP_T_COUNTER32); + + return value; +} + struct appl_internal_object * appl_internal_object_parent(struct ber_oid *oid) { diff --git a/usr.sbin/snmpd/mib.c b/usr.sbin/snmpd/mib.c index 5e6e4ca6eca..8e39c2f25aa 100644 --- a/usr.sbin/snmpd/mib.c +++ b/usr.sbin/snmpd/mib.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mib.c,v 1.106 2023/11/04 09:28:04 martijn Exp $ */ +/* $OpenBSD: mib.c,v 1.107 2023/11/04 09:30:28 martijn Exp $ */ /* * Copyright (c) 2012 Joel Knight @@ -216,79 +216,6 @@ mib_sysor(struct oid *oid, struct ber_oid *o, struct ber_element **elm) return (0); } -/* - * Defined in SNMP-USER-BASED-SM-MIB.txt (RFC 3414) - */ -int mib_engine(struct oid *, struct ber_oid *, struct ber_element **); -int mib_usmstats(struct oid *, struct ber_oid *, struct ber_element **); - -static struct oid usm_mib[] = { - { MIB(snmpEngine), OID_MIB }, - { MIB(snmpEngineID), OID_RD, mib_engine }, - { MIB(snmpEngineBoots), OID_RD, mib_engine }, - { MIB(snmpEngineTime), OID_RD, mib_engine }, - { MIB(snmpEngineMaxMsgSize), OID_RD, mib_engine }, - { MIB(usmStats), OID_MIB }, - { MIB(usmStatsUnsupportedSecLevels), OID_RD, mib_usmstats }, - { MIB(usmStatsNotInTimeWindow), OID_RD, mib_usmstats }, - { MIB(usmStatsUnknownUserNames), OID_RD, mib_usmstats }, - { MIB(usmStatsUnknownEngineId), OID_RD, mib_usmstats }, - { MIB(usmStatsWrongDigests), OID_RD, mib_usmstats }, - { MIB(usmStatsDecryptionErrors), OID_RD, mib_usmstats }, - { MIBEND } -}; - -int -mib_engine(struct oid *oid, struct ber_oid *o, struct ber_element **elm) -{ - switch (oid->o_oid[OIDIDX_snmpEngine]) { - case 1: - *elm = ober_add_nstring(*elm, snmpd_env->sc_engineid, - snmpd_env->sc_engineid_len); - break; - case 2: - *elm = ober_add_integer(*elm, snmpd_env->sc_engine_boots); - break; - case 3: - *elm = ober_add_integer(*elm, snmpd_engine_time()); - break; - case 4: - *elm = ober_add_integer(*elm, READ_BUF_SIZE); - break; - default: - return -1; - } - return 0; -} - -int -mib_usmstats(struct oid *oid, struct ber_oid *o, struct ber_element **elm) -{ - struct snmp_stats *stats = &snmpd_env->sc_stats; - long long i; - struct statsmap { - u_int8_t m_id; - u_int32_t *m_ptr; - } mapping[] = { - { OIDVAL_usmErrSecLevel, &stats->snmp_usmbadseclevel }, - { OIDVAL_usmErrTimeWindow, &stats->snmp_usmtimewindow }, - { OIDVAL_usmErrUserName, &stats->snmp_usmnosuchuser }, - { OIDVAL_usmErrEngineId, &stats->snmp_usmnosuchengine }, - { OIDVAL_usmErrDigest, &stats->snmp_usmwrongdigest }, - { OIDVAL_usmErrDecrypt, &stats->snmp_usmdecrypterr }, - }; - - for (i = 0; (u_int)i < (sizeof(mapping) / sizeof(mapping[0])); i++) { - if (oid->o_oid[OIDIDX_usmStats] == mapping[i].m_id) { - *elm = ober_add_integer(*elm, *mapping[i].m_ptr); - ober_set_header(*elm, BER_CLASS_APPLICATION, - SNMP_T_COUNTER32); - return (0); - } - } - return (-1); -} - /* * Import all MIBs */ @@ -307,7 +234,4 @@ mib_init(void) /* SNMPv2-MIB */ smi_mibtree(base_mib); - - /* SNMP-USER-BASED-SM-MIB */ - smi_mibtree(usm_mib); }