]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add lua binding for setting trailing data
authorRichard Gibson <richard.gibson@gmail.com>
Thu, 30 Aug 2018 20:39:19 +0000 (16:39 -0400)
committerRichard Gibson <richard.gibson@gmail.com>
Tue, 16 Oct 2018 21:46:27 +0000 (17:46 -0400)
pdns/dnsdist-lua-bindings-dnsquestion.cc

index ebc93901b0edec2bc2baf82fbd0929a5995d6c65..8bad1fa3525cd7b368f881763a654a56f1bc1462 100644 (file)
@@ -69,6 +69,21 @@ void setupLuaBindingsDNSQuestion()
       vector<uint8_t> tail(message + length, message + dq.len);
       return tail;
     });
+  g_lua.registerFunction<bool(DNSQuestion::*)(vector<pair<int, uint8_t>>)>("setTrailingData", [](DNSQuestion& dq, const vector<pair<int, uint8_t>>&data) {
+      uint8_t* message = reinterpret_cast<uint8_t*>(dq.dh);
+      const uint16_t length = getDNSPacketLength(reinterpret_cast<const char*>(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<void(DNSQuestion::*)(std::string)>("sendTrap", [](const DNSQuestion& dq, boost::optional<std::string> reason) {
 #ifdef HAVE_NET_SNMP