From: Richard Gibson Date: Thu, 30 Aug 2018 20:39:19 +0000 (-0400) Subject: dnsdist: Add lua binding for setting trailing data X-Git-Tag: rec-4.2.0-alpha1~16^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ca2f50e0facdb2025449e08de84432f3f094c35;p=thirdparty%2Fpdns.git dnsdist: Add lua binding for setting trailing data --- diff --git a/pdns/dnsdist-lua-bindings-dnsquestion.cc b/pdns/dnsdist-lua-bindings-dnsquestion.cc index ebc93901b0..8bad1fa352 100644 --- a/pdns/dnsdist-lua-bindings-dnsquestion.cc +++ b/pdns/dnsdist-lua-bindings-dnsquestion.cc @@ -69,6 +69,21 @@ void setupLuaBindingsDNSQuestion() vector tail(message + length, message + dq.len); return tail; }); + g_lua.registerFunction>)>("setTrailingData", [](DNSQuestion& dq, const vector>&data) { + uint8_t* message = reinterpret_cast(dq.dh); + const uint16_t length = getDNSPacketLength(reinterpret_cast(message), dq.len); + if(length + data.size() > dq.size) { + return false; + } + + /* Copy data from the Lua array, whose first index is 1 instead of 0. */ + dq.len = length + data.size(); + uint8_t* tail = message + length - 1; + for(const auto& pair : data) { + *(tail + pair.first) = pair.second; + } + return true; + }); g_lua.registerFunction("sendTrap", [](const DNSQuestion& dq, boost::optional reason) { #ifdef HAVE_NET_SNMP