]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Docs for DNSQuestion::queryTime
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Tue, 6 Sep 2022 14:47:31 +0000 (16:47 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 7 Sep 2022 08:39:53 +0000 (10:39 +0200)
pdns/lua-recursor4.cc
pdns/lua-recursor4.hh
pdns/pdns_recursor.cc
pdns/recursordist/docs/lua-scripting/dq.rst
pdns/recursordist/test-syncres_cc.cc
pdns/syncres.cc

index c0ecc8570d6430ec9877ce87ec45f12573832158..6358c5d84eae95920b77f4ef98859e68c21dd095 100644 (file)
@@ -574,7 +574,7 @@ bool RecursorLua4::postresolve(DNSQuestion& dq, int& ret, RecEventTrace& et) con
   return ok;
 }
 
-bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et) const
+bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et, const struct timeval& tv) const
 {
   if (!d_preoutquery) {
     return false;
@@ -583,7 +583,7 @@ bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& reque
   bool wantsRPZ = false;
   bool logQuery = false;
   bool addPaddingToResponse = false;
-  RecursorLua4::DNSQuestion dq(ns, requestor, query, qtype.getCode(), isTcp, variableAnswer, wantsRPZ, logQuery, addPaddingToResponse);
+  RecursorLua4::DNSQuestion dq(ns, requestor, query, qtype.getCode(), isTcp, variableAnswer, wantsRPZ, logQuery, addPaddingToResponse, tv);
   dq.currentRecords = &res;
   et.add(RecEventTrace::LuaPreOutQuery);
   bool ok = genhook(d_preoutquery, dq, ret);
index d0a476b9e0a845592d7ab1192c79398ab522a289..dd1c117559e635e0a87fd34bc3abd9a91b10b96d 100644 (file)
@@ -82,8 +82,8 @@ public:
   };
   struct DNSQuestion
   {
-    DNSQuestion(const ComboAddress& rem, const ComboAddress& loc, const DNSName& query, uint16_t type, bool tcp, bool& variable_, bool& wantsRPZ_, bool& logResponse_, bool& addPaddingToResponse_) :
-      qname(query), qtype(type), local(loc), remote(rem), isTcp(tcp), variable(variable_), wantsRPZ(wantsRPZ_), logResponse(logResponse_), addPaddingToResponse(addPaddingToResponse_)
+    DNSQuestion(const ComboAddress& rem, const ComboAddress& loc, const DNSName& query, uint16_t type, bool tcp, bool& variable_, bool& wantsRPZ_, bool& logResponse_, bool& addPaddingToResponse_, const struct timeval& queryTime_) :
+      qname(query), qtype(type), local(loc), remote(rem), isTcp(tcp), variable(variable_), wantsRPZ(wantsRPZ_), logResponse(logResponse_), addPaddingToResponse(addPaddingToResponse_), queryTime(queryTime_)
     {
     }
     const DNSName& qname;
@@ -205,7 +205,7 @@ public:
   bool nodata(DNSQuestion& dq, int& ret, RecEventTrace&) const;
   bool postresolve(DNSQuestion& dq, int& ret, RecEventTrace&) const;
 
-  bool preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et) const;
+  bool preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et, const struct timeval& tv) const;
   bool ipfilter(const ComboAddress& remote, const ComboAddress& local, const struct dnsheader&, RecEventTrace&) const;
 
   bool policyHitEventFilter(const ComboAddress& remote, const DNSName& qname, const QType& qtype, bool tcp, DNSFilterEngine::Policy& policy, std::unordered_set<std::string>& tags, std::unordered_map<std::string, bool>& discardedPolicies) const;
index 7eecb655fec235d87afd82063daf5bec0745dea5..8cc4c8f7e2eebe3595e555710edac9083a333f43 100644 (file)
@@ -979,7 +979,7 @@ void startDoResolve(void* p)
     int res = RCode::NoError;
 
     DNSFilterEngine::Policy appliedPolicy;
-    RecursorLua4::DNSQuestion dq(dc->d_source, dc->d_destination, dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_tcp, variableAnswer, wantsRPZ, dc->d_logResponse, addPaddingToResponse);
+    RecursorLua4::DNSQuestion dq(dc->d_source, dc->d_destination, dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_tcp, variableAnswer, wantsRPZ, dc->d_logResponse, addPaddingToResponse, (g_useKernelTimestamp && dc->d_kernelTimestamp.tv_sec != 0) ? dc->d_kernelTimestamp : dc->d_now);
     dq.ednsFlags = &edo.d_extFlags;
     dq.ednsOptions = &ednsOpts;
     dq.tag = dc->d_tag;
@@ -997,12 +997,6 @@ void startDoResolve(void* p)
     dq.extendedErrorExtra = &dc->d_extendedErrorExtra;
     dq.meta = std::move(dc->d_meta);
     dq.fromAuthIP = &sr.d_fromAuthIP;
-    if (g_useKernelTimestamp && dc->d_kernelTimestamp.tv_sec != 0) {
-      dq.queryTime = dc->d_kernelTimestamp;
-    }
-    else {
-      dq.queryTime = dc->d_now;
-    }
 
     sr.d_slog = sr.d_slog->withValues("qname", Logging::Loggable(dc->d_mdp.d_qname),
                                       "qtype", Logging::Loggable(QType(dc->d_mdp.d_qtype)),
index 5f94cf716a34e8fc05f9b607edfded8ed329716f..d5c64afb911fb84c91641fd486d6647e2bc4f3fa 100644 (file)
@@ -223,6 +223,20 @@ The DNSQuestion object contains at least the following fields:
 
       The packet-cache tag set via :func:`gettag`, or 0 if it has not been set.
 
+  .. attribute:: DNSQuestion.queryTime
+
+     .. versionadded:: 4.8.0
+
+     The time the query was received
+
+     .. attribute:: DNSQuestion.queryTime.tv_sec
+
+        The number of seconds since the Unix epoch.
+
+     .. attribute:: DNSQuestion.queryTime.tv_usec
+
+        The number of microseconds.
+
   It also supports the following methods:
 
   .. method:: DNSQuestion:addAnswer(type, content, [ttl, name])
index a61872c69ad35de921bafcb6cdaa56091684f18b..3847c63aaa0489bcf292a4264d662c64ac2074f1 100644 (file)
@@ -41,7 +41,7 @@ void BaseLua4::getFeatures(Features&)
 {
 }
 
-bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et) const
+bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector<DNSRecord>& res, int& ret, RecEventTrace& et, const struct timeval& tv) const
 {
   return false;
 }
index c9d3c5fa3fa03645ac61faffe9368bed6209f0ea..6181b5b99ab52785f3e1ae3aa64dd6f5ef2161fe 100644 (file)
@@ -5093,7 +5093,7 @@ bool SyncRes::doResolveAtThisIP(const std::string& prefix, const DNSName& qname,
   }
 
   int preOutQueryRet = RCode::NoError;
-  if(d_pdl && d_pdl->preoutquery(remoteIP, d_requestor, qname, qtype, doTCP, lwr.d_records, preOutQueryRet, d_eventTrace)) {
+  if(d_pdl && d_pdl->preoutquery(remoteIP, d_requestor, qname, qtype, doTCP, lwr.d_records, preOutQueryRet, d_eventTrace, timeval{0, 0})) {
     LOG(prefix<<qname<<": query handled by Lua"<<endl);
   }
   else {