From 0f4785a25097ba38bcca379b0646b1b022bdd1cb Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 17 Jun 2024 10:33:39 +0200 Subject: [PATCH] snmp-agent: Move net-snmp headers out of our headers The net-snmp headers are unfortunately defining things that we do not want, like `INET6` and `HAVE_LIBSSL`, so it's better for us not to include them from our headers. --- pdns/dnsdistdist/dnsdist-snmp.cc | 35 ++++++++++++++++---------------- pdns/recursordist/rec-snmp.cc | 17 ++++++++++------ pdns/snmp-agent.cc | 20 +++++++++++++++++- pdns/snmp-agent.hh | 16 ++++----------- 4 files changed, 51 insertions(+), 37 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-snmp.cc b/pdns/dnsdistdist/dnsdist-snmp.cc index 34e9c7cdd3..ab6a0f2a09 100644 --- a/pdns/dnsdistdist/dnsdist-snmp.cc +++ b/pdns/dnsdistdist/dnsdist-snmp.cc @@ -9,6 +9,14 @@ std::unique_ptr g_snmpAgent{nullptr}; #ifdef HAVE_NET_SNMP +#include +#include +#include +#include +#include +#include +#undef INET6 /* SRSLY? */ + #define DNSDIST_OID 1, 3, 6, 1, 4, 1, 43315, 3 #define DNSDIST_STATS_OID DNSDIST_OID, 1 #define DNSDIST_STATS_TABLE_OID DNSDIST_OID, 2 @@ -387,12 +395,9 @@ bool DNSDistSNMPAgent::sendBackendStatusChangeTrap(const DownstreamState& dss) const string backendStatus = dss.getStatus(); netsnmp_variable_list* varList = nullptr; - snmp_varlist_add_variable(&varList, - snmpTrapOID.data(), - snmpTrapOID.size(), - ASN_OBJECT_ID, - backendStatusChangeTrapOID.data(), - backendStatusChangeTrapOID.size() * sizeof(oid)); + addSNMPTrapOID(&varList, + backendStatusChangeTrapOID.data(), + backendStatusChangeTrapOID.size() * sizeof(oid)); snmp_varlist_add_variable(&varList, backendNameOID.data(), @@ -426,12 +431,9 @@ bool DNSDistSNMPAgent::sendCustomTrap(const std::string& reason) #ifdef HAVE_NET_SNMP netsnmp_variable_list* varList = nullptr; - snmp_varlist_add_variable(&varList, - snmpTrapOID.data(), - snmpTrapOID.size(), - ASN_OBJECT_ID, - customTrapOID.data(), - customTrapOID.size() * sizeof(oid)); + addSNMPTrapOID(&varList, + customTrapOID.data(), + customTrapOID.size() * sizeof(oid)); snmp_varlist_add_variable(&varList, trapReasonOID.data(), @@ -462,12 +464,9 @@ bool DNSDistSNMPAgent::sendDNSTrap(const DNSQuestion& dnsQuestion, const std::st netsnmp_variable_list* varList = nullptr; - snmp_varlist_add_variable(&varList, - snmpTrapOID.data(), - snmpTrapOID.size(), - ASN_OBJECT_ID, - actionTrapOID.data(), - actionTrapOID.size() * sizeof(oid)); + addSNMPTrapOID(&varList, + actionTrapOID.data(), + actionTrapOID.size() * sizeof(oid)); snmp_varlist_add_variable(&varList, socketFamilyOID.data(), diff --git a/pdns/recursordist/rec-snmp.cc b/pdns/recursordist/rec-snmp.cc index 0684ed5a72..f433f38374 100644 --- a/pdns/recursordist/rec-snmp.cc +++ b/pdns/recursordist/rec-snmp.cc @@ -30,6 +30,14 @@ #ifdef HAVE_NET_SNMP +#include +#include +#include +#include +#include +#include +#undef INET6 /* SRSLY? */ + #define RECURSOR_OID 1, 3, 6, 1, 4, 1, 43315, 2 #define RECURSOR_STATS_OID RECURSOR_OID, 1 #define RECURSOR_TRAPS_OID RECURSOR_OID, 10, 0 @@ -277,12 +285,9 @@ bool RecursorSNMPAgent::sendCustomTrap([[maybe_unused]] const std::string& reaso #ifdef HAVE_NET_SNMP netsnmp_variable_list* varList = nullptr; - snmp_varlist_add_variable(&varList, - snmpTrapOID.data(), - snmpTrapOID.size(), - ASN_OBJECT_ID, - customTrapOID.data(), - customTrapOID.size() * sizeof(oid)); + addSNMPTrapOID(&varList, + customTrapOID.data(), + customTrapOID.size() * sizeof(oid)); snmp_varlist_add_variable(&varList, trapReasonOID.data(), diff --git a/pdns/snmp-agent.cc b/pdns/snmp-agent.cc index a335f31d0c..0e7ca82d65 100644 --- a/pdns/snmp-agent.cc +++ b/pdns/snmp-agent.cc @@ -9,6 +9,14 @@ #ifdef HAVE_NET_SNMP +#include +#include +#include +#include +#include +#include +#undef INET6 /* SRSLY? */ + #ifndef HAVE_SNMP_SELECT_INFO2 /* that's terrible, because it means we are going to have trouble with large FD numbers at some point.. */ @@ -25,7 +33,7 @@ # include #endif -const std::array SNMPAgent::snmpTrapOID = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; +static const std::array s_snmpTrapOID = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; int SNMPAgent::setCounter64Value(netsnmp_request_info* request, uint64_t value) @@ -40,6 +48,16 @@ int SNMPAgent::setCounter64Value(netsnmp_request_info* request, return SNMP_ERR_NOERROR; } +void SNMPAgent::addSNMPTrapOID(netsnmp_variable_list** varList, const void* value, size_t len) +{ + snmp_varlist_add_variable(varList, + s_snmpTrapOID.data(), + s_snmpTrapOID.size(), + ASN_OBJECT_ID, + value, + len); +} + bool SNMPAgent::sendTrap(pdns::channel::Sender& sender, netsnmp_variable_list* varList) { diff --git a/pdns/snmp-agent.hh b/pdns/snmp-agent.hh index c75db08616..06989afc21 100644 --- a/pdns/snmp-agent.hh +++ b/pdns/snmp-agent.hh @@ -5,19 +5,12 @@ #include #include -#ifdef HAVE_NET_SNMP -#include -#include -#include -#include -#include -#include -#undef INET6 /* SRSLY? */ -#endif /* HAVE_NET_SNMP */ - #include "mplexer.hh" #include "channel.hh" +typedef struct netsnmp_request_info_s netsnmp_request_info; +typedef struct variable_list netsnmp_variable_list; + class SNMPAgent { public: @@ -40,8 +33,7 @@ public: #endif /* HAVE_NET_SNMP */ protected: #ifdef HAVE_NET_SNMP - /* OID for snmpTrapOID.0 */ - static const std::array snmpTrapOID; + static void addSNMPTrapOID(netsnmp_variable_list** varList, const void* value, size_t len); static bool sendTrap(pdns::channel::Sender& sender, netsnmp_variable_list* varList); -- 2.47.2