From: Otto Moerbeek Date: Tue, 6 Sep 2022 14:47:31 +0000 (+0200) Subject: Docs for DNSQuestion::queryTime X-Git-Tag: rec-4.9.0-alpha0~23^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4add4a58be793c79bcc993328b827a4c0f907af4;p=thirdparty%2Fpdns.git Docs for DNSQuestion::queryTime --- diff --git a/pdns/lua-recursor4.cc b/pdns/lua-recursor4.cc index c0ecc8570d..6358c5d84e 100644 --- a/pdns/lua-recursor4.cc +++ b/pdns/lua-recursor4.cc @@ -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& res, int& ret, RecEventTrace& et) const +bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector& 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); diff --git a/pdns/lua-recursor4.hh b/pdns/lua-recursor4.hh index d0a476b9e0..dd1c117559 100644 --- a/pdns/lua-recursor4.hh +++ b/pdns/lua-recursor4.hh @@ -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& res, int& ret, RecEventTrace& et) const; + bool preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector& 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& tags, std::unordered_map& discardedPolicies) const; diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 7eecb655fe..8cc4c8f7e2 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -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)), diff --git a/pdns/recursordist/docs/lua-scripting/dq.rst b/pdns/recursordist/docs/lua-scripting/dq.rst index 5f94cf716a..d5c64afb91 100644 --- a/pdns/recursordist/docs/lua-scripting/dq.rst +++ b/pdns/recursordist/docs/lua-scripting/dq.rst @@ -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]) diff --git a/pdns/recursordist/test-syncres_cc.cc b/pdns/recursordist/test-syncres_cc.cc index a61872c69a..3847c63aaa 100644 --- a/pdns/recursordist/test-syncres_cc.cc +++ b/pdns/recursordist/test-syncres_cc.cc @@ -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& res, int& ret, RecEventTrace& et) const +bool RecursorLua4::preoutquery(const ComboAddress& ns, const ComboAddress& requestor, const DNSName& query, const QType& qtype, bool isTcp, vector& res, int& ret, RecEventTrace& et, const struct timeval& tv) const { return false; } diff --git a/pdns/syncres.cc b/pdns/syncres.cc index c9d3c5fa3f..6181b5b99a 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -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<