From: Remi Gacogne Date: Fri, 3 Jan 2020 17:06:54 +0000 (+0100) Subject: dnsdist: Add direct Lua FFI interface for masking the remote addr X-Git-Tag: auth-4.3.0-beta2~1^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45a661edef3b7db54e103cd13c242623fff5a4e5;p=thirdparty%2Fpdns.git dnsdist: Add direct Lua FFI interface for masking the remote addr --- diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h b/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h index 327da5b498..daf4a50ebd 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h +++ b/pdns/dnsdistdist/dnsdist-lua-ffi-interface.h @@ -42,6 +42,7 @@ typedef struct dnsdist_tag { void dnsdist_ffi_dnsquestion_get_localaddr(const dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize) __attribute__ ((visibility ("default"))); uint16_t dnsdist_ffi_dnsquestion_get_local_port(const dnsdist_ffi_dnsquestion_t* dq) __attribute__ ((visibility ("default"))); void dnsdist_ffi_dnsquestion_get_remoteaddr(const dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize) __attribute__ ((visibility ("default"))); +void dnsdist_ffi_dnsquestion_get_masked_remoteaddr(dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize, uint8_t bits) __attribute__ ((visibility ("default"))); uint16_t dnsdist_ffi_dnsquestion_get_remote_port(const dnsdist_ffi_dnsquestion_t* dq) __attribute__ ((visibility ("default"))); void dnsdist_ffi_dnsquestion_get_qname_raw(const dnsdist_ffi_dnsquestion_t* dq, const char** qname, size_t* qnameSize) __attribute__ ((visibility ("default"))); size_t dnsdist_ffi_dnsquestion_get_qname_hash(const dnsdist_ffi_dnsquestion_t* dq, size_t init); diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi.cc b/pdns/dnsdistdist/dnsdist-lua-ffi.cc index 548357785b..efb7695854 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi.cc +++ b/pdns/dnsdistdist/dnsdist-lua-ffi.cc @@ -55,6 +55,12 @@ void dnsdist_ffi_dnsquestion_get_remoteaddr(const dnsdist_ffi_dnsquestion_t* dq, dnsdist_ffi_comboaddress_to_raw(*dq->dq->remote, addr, addrSize); } +void dnsdist_ffi_dnsquestion_get_masked_remoteaddr(dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize, uint8_t bits) +{ + dq->maskedRemote = Netmask(*dq->dq->remote, bits).getMaskedNetwork(); + dnsdist_ffi_comboaddress_to_raw(dq->maskedRemote, addr, addrSize); +} + uint16_t dnsdist_ffi_dnsquestion_get_local_port(const dnsdist_ffi_dnsquestion_t* dq) { return dq->dq->local->getPort(); diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi.hh b/pdns/dnsdistdist/dnsdist-lua-ffi.hh index 118fd0ce8d..ca3e8d4edb 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi.hh +++ b/pdns/dnsdistdist/dnsdist-lua-ffi.hh @@ -51,6 +51,7 @@ struct dnsdist_ffi_dnsquestion_t std::vector tagsVect; std::unordered_map httpHeaders; std::string trailingData; + ComboAddress maskedRemote; boost::optional result{boost::none}; boost::optional httpPath{boost::none}; boost::optional httpQueryString{boost::none}; diff --git a/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc b/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc index e04168b2e3..4f858d7606 100644 --- a/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc +++ b/pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc @@ -2,7 +2,6 @@ #define BOOST_TEST_DYN_LINK #define BOOST_TEST_NO_MAIN -#include #include #include "dnsdist.hh" @@ -505,6 +504,7 @@ BOOST_AUTO_TEST_CASE(test_lua) { } #ifdef LUAJIT_VERSION + BOOST_AUTO_TEST_CASE(test_lua_ffi_rr) { std::vector names; names.reserve(1000); @@ -726,6 +726,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_chashed) { g_verbose = existingVerboseValue; } + #endif /* LUAJIT_VERSION */ BOOST_AUTO_TEST_SUITE_END()