• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

PowerDNS / pdns / 25593053054

09 May 2026 05:35AM UTC coverage: 71.093% (+10.2%) from 60.856%
25593053054

Pull #17310

github

web-flow
build(deps): bump mistune from 3.2.0 to 3.2.1 in /pdns/recursordist/docs

Bumps [mistune](https://github.com/lepture/mistune) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/lepture/mistune/releases)
- [Changelog](https://github.com/lepture/mistune/blob/main/docs/changes.rst)
- [Commits](https://github.com/lepture/mistune/compare/v3.2.0...v3.2.1)

---
updated-dependencies:
- dependency-name: mistune
  dependency-version: 3.2.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Pull Request #17310: build(deps): bump mistune from 3.2.0 to 3.2.1 in /pdns/recursordist/docs

46069 of 80916 branches covered (56.93%)

Branch coverage included in aggregate %.

132158 of 169780 relevant lines covered (77.84%)

10941800.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.01
/pdns/lua-base4.cc
1
#include "config.h"
2
#include <cassert>
3
#include <fstream>
4
#include <unordered_set>
5
#include <unordered_map>
6
#include <typeinfo>
7
#include <sys/stat.h>
8
#include "logger.hh"
9
#include "logging.hh"
10
#include "iputils.hh"
11
#include "dnsname.hh"
12
#include "dnsparser.hh"
13
#include "dnspacket.hh"
14
#include "namespaces.hh"
15
#include "ednssubnet.hh"
16
#include "lua-base4.hh"
17
#include "ext/luawrapper/include/LuaContext.hpp"
18
#include "dns_random.hh"
19

20
void BaseLua4::loadFile(const std::string& fname, bool doPostLoad)
21
{
1,170✔
22
  std::ifstream ifs(fname);
1,170✔
23
  if (!ifs) {
1,170!
24
    auto ret = errno;
×
25
    auto msg = stringerror(ret);
×
26
    SLOG(g_log << Logger::Error << "Unable to read configuration file from '" << fname << "': " << msg << endl,
×
27
         g_slog->withName("lua")->error(Logr::Error, msg, "Unable to read configuration file", "file", Logging::Loggable(fname)));
×
28
    throw std::runtime_error(msg);
×
29
  }
×
30
  loadStream(ifs, doPostLoad);
1,170✔
31
};
1,170✔
32

33
void BaseLua4::loadString(const std::string &script) {
4✔
34
  std::istringstream iss(script);
4✔
35
  loadStream(iss, true);
4✔
36
};
4✔
37

38
void BaseLua4::includePath(const std::string& directory) {
×
39
  std::vector<std::string> vec;
×
40
  const std::string& suffix = "lua";
×
41
  auto directoryError = pdns::visit_directory(directory, [this, &directory, &suffix, &vec]([[maybe_unused]] ino_t inodeNumber, const std::string_view& name) {
×
42
    (void)this;
×
43
    if (boost::starts_with(name, ".")) {
×
44
      return true; // skip any dots
×
45
    }
×
46
    if (boost::ends_with(name, suffix)) {
×
47
      // build name
48
      string fullName = directory + "/" + std::string(name);
×
49
      // ensure it's readable file
50
      struct stat statInfo
×
51
      {
×
52
      };
×
53
      if (stat(fullName.c_str(), &statInfo) != 0 || !S_ISREG(statInfo.st_mode)) {
×
54
        string msg = fullName + " is not a regular file";
×
55
        SLOG(g_log << Logger::Error << msg << std::endl,
×
56
             g_slog->withName("lua")->info(Logr::Error, "include file is not a regular file", "file", Logging::Loggable(fullName)));
×
57
        throw PDNSException(std::move(msg));
×
58
      }
×
59
      vec.emplace_back(fullName);
×
60
    }
×
61
    return true;
×
62
  });
×
63

64
  if (directoryError) {
×
65
    int err = errno;
×
66
    string msg = directory + " is not accessible: " + stringerror(err);
×
67
    SLOG(g_log << Logger::Error << msg << std::endl,
×
68
         g_slog->withName("lua")->error(Logr::Error, err, "Error trying to walk directory", "directory", Logging::Loggable(directory)));
×
69
    throw PDNSException(std::move(msg));
×
70
  }
×
71

72
  std::sort(vec.begin(), vec.end(), CIStringComparePOSIX());
×
73

74
  for(const auto& file: vec) {
×
75
    loadFile(file, false);
×
76
  }
×
77
};
×
78

79
//  By default no features
80
void BaseLua4::getFeatures(Features &) { }
1,270✔
81

82
void BaseLua4::prepareContext() {
1,538✔
83
  d_lw = std::make_unique<LuaContext>();
1,538✔
84

85
  // lua features available
86
  Features features;
1,538✔
87
  getFeatures(features);
1,538✔
88
  d_lw->writeVariable("pdns_features", features);
1,538✔
89

90
  // dnsheader
91
  d_lw->registerFunction<int(dnsheader::*)()>("getID", [](dnsheader& dh) { return ntohs(dh.id); });
1,538✔
92
  d_lw->registerFunction<bool(dnsheader::*)()>("getCD", [](dnsheader& dh) { return dh.cd; });
1,538✔
93
  d_lw->registerFunction<bool(dnsheader::*)()>("getTC", [](dnsheader& dh) { return dh.tc; });
1,538✔
94
  d_lw->registerFunction<bool(dnsheader::*)()>("getRA", [](dnsheader& dh) { return dh.ra; });
1,538✔
95
  d_lw->registerFunction<bool(dnsheader::*)()>("getAD", [](dnsheader& dh) { return dh.ad; });
1,538✔
96
  d_lw->registerFunction<bool(dnsheader::*)()>("getAA", [](dnsheader& dh) { return dh.aa; });
1,538✔
97
  d_lw->registerFunction<bool(dnsheader::*)()>("getRD", [](dnsheader& dh) { return dh.rd; });
1,538✔
98
  d_lw->registerFunction<int(dnsheader::*)()>("getRCODE", [](dnsheader& dh) { return dh.rcode; });
1,538✔
99
  d_lw->registerFunction<int(dnsheader::*)()>("getOPCODE", [](dnsheader& dh) { return dh.opcode; });
1,538✔
100
  d_lw->registerFunction<int(dnsheader::*)()>("getQDCOUNT", [](dnsheader& dh) { return ntohs(dh.qdcount); });
1,538✔
101
  d_lw->registerFunction<int(dnsheader::*)()>("getANCOUNT", [](dnsheader& dh) { return ntohs(dh.ancount); });
1,538✔
102
  d_lw->registerFunction<int(dnsheader::*)()>("getNSCOUNT", [](dnsheader& dh) { return ntohs(dh.nscount); });
1,538✔
103
  d_lw->registerFunction<int(dnsheader::*)()>("getARCOUNT", [](dnsheader& dh) { return ntohs(dh.arcount); });
1,538✔
104

105
  // DNSName
106
  d_lw->writeFunction("newDN", [](const std::string& dom){ return DNSName(dom); });
195,885✔
107
  d_lw->registerFunction("__lt", &DNSName::operator<);
1,538✔
108
  d_lw->registerFunction<bool(DNSName::*)(const DNSName&)>("canonCompare", [](const DNSName& name, const DNSName& rhs) { return name.canonCompare(rhs); });
2,006✔
109
  d_lw->registerFunction<DNSName(DNSName::*)(const DNSName&)>("makeRelative", [](const DNSName& name, const DNSName& zone) { return name.makeRelative(zone); });
1,598✔
110
  d_lw->registerFunction<bool(DNSName::*)(const DNSName&)>("isPartOf", [](const DNSName& name, const DNSName& rhs) { return name.isPartOf(rhs); });
1,720✔
111
  d_lw->registerFunction("getRawLabels", &DNSName::getRawLabels);
1,538✔
112
  d_lw->registerFunction<unsigned int(DNSName::*)()>("countLabels", [](const DNSName& name) { return name.countLabels(); });
1,538✔
113
  d_lw->registerFunction<size_t(DNSName::*)()>("wireLength", [](const DNSName& name) { return name.wirelength(); });
1,538✔
114
  d_lw->registerFunction<size_t(DNSName::*)()>("wirelength", [](const DNSName& name) { return name.wirelength(); });
1,538✔
115
  d_lw->registerFunction<bool(DNSName::*)(const std::string&)>("equal", [](const DNSName& lhs, const std::string& rhs) { return lhs==DNSName(rhs); });
1,538✔
116
  d_lw->registerEqFunction(&DNSName::operator==);
1,538✔
117
  d_lw->registerToStringFunction<string(DNSName::*)()>([](const DNSName&dn ) { return dn.toString(); });
1,538✔
118
  d_lw->registerFunction<string(DNSName::*)()>("toString", [](const DNSName&dn ) { return dn.toString(); });
1,538✔
119
  d_lw->registerFunction<string(DNSName::*)()>("toStringNoDot", [](const DNSName&dn ) { return dn.toStringNoDot(); });
1,538✔
120
  d_lw->registerFunction<bool(DNSName::*)()>("chopOff", [](DNSName&dn ) { return dn.chopOff(); });
1,538✔
121

122
  // DNSResourceRecord
123
  d_lw->writeFunction("newDRR", [](const DNSName& qname, const string& qtype, const unsigned int ttl, const string& content, boost::optional<int> domain_id, boost::optional<int> auth){
1,538✔
124
    auto drr = DNSResourceRecord();
×
125
    drr.qname = qname;
×
126
    drr.qtype = qtype;
×
127
    drr.ttl = ttl;
×
128
    drr.setContent(content);
×
129
    if (domain_id)
×
130
      drr.domain_id = *domain_id;
×
131
    if (auth)
×
132
      drr.auth = *auth;
×
133
     return drr;
×
134
  });
×
135
  d_lw->registerEqFunction(&DNSResourceRecord::operator==);
1,538✔
136
  d_lw->registerFunction("__lt", &DNSResourceRecord::operator<);
1,538✔
137
  d_lw->registerToStringFunction<string(DNSResourceRecord::*)()>([](const DNSResourceRecord& rec) { return rec.getZoneRepresentation(); });
1,538✔
138
  d_lw->registerFunction<string(DNSResourceRecord::*)()>("toString", [](const DNSResourceRecord& rec) { return rec.getZoneRepresentation();} );
1,538✔
139
  d_lw->registerFunction<DNSName(DNSResourceRecord::*)()>("qname", [](DNSResourceRecord& rec) { return rec.qname; });
1,538✔
140
  d_lw->registerFunction<DNSName(DNSResourceRecord::*)()>("wildcardName", [](DNSResourceRecord& rec) { return rec.wildcardname; });
1,538✔
141
  d_lw->registerFunction<string(DNSResourceRecord::*)()>("content", [](DNSResourceRecord& rec) { return rec.content; });
1,538✔
142
  d_lw->registerFunction<time_t(DNSResourceRecord::*)()>("lastModified", [](DNSResourceRecord& rec) { return rec.last_modified; });
1,538✔
143
  d_lw->registerFunction<uint32_t(DNSResourceRecord::*)()>("ttl", [](DNSResourceRecord& rec) { return rec.ttl; });
1,538✔
144
  d_lw->registerFunction<uint32_t(DNSResourceRecord::*)()>("signttl", [](DNSResourceRecord& rec) { return rec.signttl; });
1,538✔
145
  d_lw->registerFunction<int(DNSResourceRecord::*)()>("domainId", [](DNSResourceRecord& rec) { return rec.domain_id; });
1,538✔
146
  d_lw->registerFunction<uint16_t(DNSResourceRecord::*)()>("qtype", [](DNSResourceRecord& rec) { return rec.qtype.getCode(); });
1,538✔
147
  d_lw->registerFunction<uint16_t(DNSResourceRecord::*)()>("qclass", [](DNSResourceRecord& rec) { return rec.qclass; });
1,538✔
148
  d_lw->registerFunction<uint8_t(DNSResourceRecord::*)()>("scopeMask", [](DNSResourceRecord& rec) { return rec.scopeMask; });
1,538✔
149
  d_lw->registerFunction<bool(DNSResourceRecord::*)()>("auth", [](DNSResourceRecord& rec) { return rec.auth; });
1,538✔
150
  d_lw->registerFunction<bool(DNSResourceRecord::*)()>("disabled", [](DNSResourceRecord& rec) { return rec.disabled; });
1,538✔
151

152
  // ComboAddress
153
  d_lw->registerFunction<bool(ComboAddress::*)()>("isIPv4", [](const ComboAddress& addr) { return addr.sin4.sin_family == AF_INET; });
1,538✔
154
  d_lw->registerFunction<bool(ComboAddress::*)()>("isIPv6", [](const ComboAddress& addr) { return addr.sin4.sin_family == AF_INET6; });
1,538✔
155
  d_lw->registerFunction<uint16_t(ComboAddress::*)()>("getPort", [](const ComboAddress& addr) { return ntohs(addr.sin4.sin_port); } );
1,538✔
156
  d_lw->registerFunction<bool(ComboAddress::*)()>("isMappedIPv4", [](const ComboAddress& addr) { return addr.isMappedIPv4(); });
1,538✔
157
  d_lw->registerFunction<ComboAddress(ComboAddress::*)()>("mapToIPv4", [](const ComboAddress& addr) { return addr.mapToIPv4(); });
1,538✔
158
  d_lw->registerFunction<void(ComboAddress::*)(unsigned int)>("truncate", [](ComboAddress& addr, unsigned int bits) { addr.truncate(bits); });
1,538✔
159
  d_lw->registerFunction<string(ComboAddress::*)()>("toString", [](const ComboAddress& addr) { return addr.toString(); });
1,538✔
160
  d_lw->registerToStringFunction<string(ComboAddress::*)()>([](const ComboAddress& addr) { return addr.toString(); });
195,374✔
161
  d_lw->registerFunction<string(ComboAddress::*)()>("toStringWithPort", [](const ComboAddress& addr) { return addr.toStringWithPort(); });
1,538✔
162
  d_lw->registerFunction<string(ComboAddress::*)()>("getRaw", [](const ComboAddress& addr) { return addr.toByteString(); });
1,538✔
163

164
  d_lw->writeFunction("newCA", [](const std::string& a) { return ComboAddress(a); });
1,538✔
165
  d_lw->writeFunction("newCAFromRaw", [](const std::string& raw, boost::optional<uint16_t> port) {
1,538✔
166
                                        if (raw.size() == 4) {
×
167
                                          struct sockaddr_in sin4;
×
168
                                          memset(&sin4, 0, sizeof(sin4));
×
169
                                          sin4.sin_family = AF_INET;
×
170
                                          memcpy(&sin4.sin_addr.s_addr, raw.c_str(), raw.size());
×
171
                                          if (port) {
×
172
                                            sin4.sin_port = htons(*port);
×
173
                                          }
×
174
                                          return ComboAddress(&sin4);
×
175
                                        }
×
176
                                        else if (raw.size() == 16) {
×
177
                                          struct sockaddr_in6 sin6;
×
178
                                          memset(&sin6, 0, sizeof(sin6));
×
179
                                          sin6.sin6_family = AF_INET6;
×
180
                                          memcpy(&sin6.sin6_addr.s6_addr, raw.c_str(), raw.size());
×
181
                                          if (port) {
×
182
                                            sin6.sin6_port = htons(*port);
×
183
                                          }
×
184
                                          return ComboAddress(&sin6);
×
185
                                        }
×
186
                                        return ComboAddress();
×
187
                                      });
×
188
  typedef std::unordered_set<ComboAddress,ComboAddress::addressOnlyHash,ComboAddress::addressOnlyEqual> cas_t;
1,538✔
189
  d_lw->registerFunction<bool(ComboAddress::*)(const ComboAddress&)>("equal", [](const ComboAddress& lhs, const ComboAddress& rhs) { return ComboAddress::addressOnlyEqual()(lhs, rhs); });
1,538✔
190

191
  // cas_t
192
  d_lw->writeFunction("newCAS", []{ return cas_t(); });
1,538✔
193
  d_lw->registerFunction<void(cas_t::*)(boost::variant<string,ComboAddress, vector<pair<unsigned int,string> > >)>("add",
1,538✔
194
    [](cas_t& cas, const boost::variant<string,ComboAddress,vector<pair<unsigned int,string> > >& in)
1,538✔
195
    {
1,538✔
196
      try {
×
197
      if(auto s = boost::get<string>(&in)) {
×
198
        cas.insert(ComboAddress(*s));
×
199
      }
×
200
      else if(auto v = boost::get<vector<pair<unsigned int, string> > >(&in)) {
×
201
        for(const auto& str : *v)
×
202
          cas.insert(ComboAddress(str.second));
×
203
      }
×
204
      else
×
205
        cas.insert(boost::get<ComboAddress>(in));
×
206
      }
×
207
      catch(std::exception& e) {
×
208
        SLOG(g_log <<Logger::Error<<e.what()<<endl,
×
209
             g_slog->withName("lua")->error(Logr::Error, e.what(), "Exception in newCAS", "exception", Logging::Loggable("std::exception")));
×
210
      }
×
211
    });
×
212
  d_lw->registerFunction<bool(cas_t::*)(const ComboAddress&)>("check",[](const cas_t& cas, const ComboAddress&ca) { return cas.count(ca)>0; });
1,538✔
213

214
  // QType
215
  d_lw->writeFunction("newQType", [](const string& s) { QType q; q = s; return q; });
1,630✔
216
  d_lw->registerFunction("getCode", &QType::getCode);
1,538✔
217
  d_lw->registerFunction("getName", &QType::toString);
1,538✔
218
  d_lw->registerEqFunction<bool(QType::*)(const QType&)>([](const QType& a, const QType& b){ return a == b;}); // operator overloading confuses LuaContext
1,538✔
219
  d_lw->registerToStringFunction(&QType::toString);
1,538✔
220

221
  // Netmask
222
  d_lw->writeFunction("newNetmask", [](const string& s) { return Netmask(s); });
1,538✔
223
  d_lw->registerFunction<ComboAddress(Netmask::*)()>("getNetwork", [](const Netmask& nm) { return nm.getNetwork(); } ); // const reference makes this necessary
1,538✔
224
  d_lw->registerFunction<ComboAddress(Netmask::*)()>("getMaskedNetwork", [](const Netmask& nm) { return nm.getMaskedNetwork(); } );
1,538✔
225
  d_lw->registerFunction("isIpv4", &Netmask::isIPv4);
1,538✔
226
  d_lw->registerFunction("isIPv4", &Netmask::isIPv4);
1,538✔
227
  d_lw->registerFunction("isIpv6", &Netmask::isIPv6);
1,538✔
228
  d_lw->registerFunction("isIPv6", &Netmask::isIPv6);
1,538✔
229
  d_lw->registerFunction("getBits", &Netmask::getBits);
1,538✔
230
  d_lw->registerFunction("toString", &Netmask::toString);
1,538✔
231
  d_lw->registerFunction("empty", &Netmask::empty);
1,538✔
232
  d_lw->registerFunction("match", (bool (Netmask::*)(const string&) const)&Netmask::match);
1,538✔
233
  d_lw->registerEqFunction(&Netmask::operator==);
1,538✔
234
  d_lw->registerToStringFunction(&Netmask::toString);
1,538✔
235

236
  // NetmaskGroup
237
  d_lw->writeFunction("newNMG", [](boost::optional<vector<pair<unsigned int, std::string>>> masks) {
1,538✔
238
    auto nmg = NetmaskGroup();
14✔
239

240
    if (masks) {
14!
241
      for(const auto& mask: *masks) {
×
242
        nmg.addMask(mask.second);
×
243
      }
×
244
    }
×
245

246
    return nmg;
14✔
247
  });
14✔
248
  // d_lw->writeFunction("newNMG", []() { return NetmaskGroup(); });
249
  d_lw->registerFunction<void(NetmaskGroup::*)(const std::string&mask)>("addMask", [](NetmaskGroup&nmg, const std::string& mask) { nmg.addMask(mask); });
1,538✔
250
  d_lw->registerFunction<void(NetmaskGroup::*)(const vector<pair<unsigned int, std::string>>&)>("addMasks", [](NetmaskGroup&nmg, const vector<pair<unsigned int, std::string>>& masks) { for(const auto& mask: masks) { nmg.addMask(mask.second); } });
1,538!
251
  d_lw->registerFunction("match", (bool (NetmaskGroup::*)(const ComboAddress&) const)&NetmaskGroup::match);
1,538✔
252

253
  // DNSRecord
254
  d_lw->writeFunction("newDR", [](const DNSName& name, const std::string& type, unsigned int ttl, const std::string& content, int place) { QType qtype; qtype = type; auto dr = DNSRecord(); dr.d_name = name; dr.d_type = qtype.getCode(); dr.d_ttl = ttl; dr.setContent(shared_ptr<DNSRecordContent>(DNSRecordContent::make(dr.d_type, QClass::IN, content))); dr.d_place = static_cast<DNSResourceRecord::Place>(place); return dr; });
1,538✔
255
  d_lw->registerMember("name", &DNSRecord::d_name);
1,538✔
256
  d_lw->registerMember("type", &DNSRecord::d_type);
1,538✔
257
  d_lw->registerMember("ttl", &DNSRecord::d_ttl);
1,538✔
258
  d_lw->registerMember("place", &DNSRecord::d_place);
1,538✔
259
  d_lw->registerFunction<string(DNSRecord::*)()>("getContent", [](const DNSRecord& dr) { return dr.getContent()->getZoneRepresentation(); });
1,538✔
260
  d_lw->registerFunction<boost::optional<ComboAddress>(DNSRecord::*)()>("getCA", [](const DNSRecord& dr) {
1,538✔
261
      boost::optional<ComboAddress> ret;
×
262

263
      if(auto arec = getRR<ARecordContent>(dr))
×
264
        ret=arec->getCA(53);
×
265
      else if(auto aaaarec = getRR<AAAARecordContent>(dr))
×
266
        ret=aaaarec->getCA(53);
×
267
      return ret;
×
268
    });
×
269
  d_lw->registerFunction<void (DNSRecord::*)(const std::string&)>("changeContent", [](DNSRecord& dr, const std::string& newContent) { dr.setContent(shared_ptr<DNSRecordContent>(DNSRecordContent::make(dr.d_type, 1, newContent))); });
1,538✔
270

271
  // pdnslog
272
#if defined(PDNS_AUTH)
948✔
273
  d_lw->writeFunction("pdnslog", [](const std::string& msg, boost::optional<int> loglevel) {
948✔
274
    if (g_slogStructured) {
×
275
      auto log = g_slog->withName("lua");
276
      log->info(static_cast<Logr::Priority>(loglevel.get_value_or(Logr::Warning)), msg);
277
    }
278
    else {
279
      g_log << (Logger::Urgency)loglevel.get_value_or(Logger::Warning)<<msg<<endl;
280
    }
281
  });
282
#elif defined(RECURSOR)
283
  d_lw->writeFunction("pdnslog", [](const std::string& msg, boost::optional<int> loglevel, boost::optional<std::map<std::string, std::string>> values) {
48✔
284
    auto log = g_slog->withName("lua");
48✔
285
    if (values) {
48!
286
      for (const auto& [key, value] : *values) {
×
287
        log = log->withValues(key, Logging::Loggable(value));
288
      }
289
    }
290
    log->info(static_cast<Logr::Priority>(loglevel.get_value_or(Logr::Warning)), msg);
48✔
291
  });
48✔
292
#else /* DNSDIST */
293
  d_lw->writeFunction("pdnslog", [](const std::string& msg, boost::optional<int> loglevel) {
294
    g_log << (Logger::Urgency)loglevel.get_value_or(Logger::Warning)<<msg<<endl;
295
  });
296
#endif
297

298
  d_lw->writeFunction("pdnsrandom", [](boost::optional<uint32_t> maximum) {
1,538✔
299
    return maximum ? dns_random(*maximum) : dns_random_uint32();
4!
300
  });
4✔
301

302
  // certain constants
303

304
  vector<pair<string, int> > rcodes = {{"NOERROR",  RCode::NoError  },
1,538✔
305
                                       {"FORMERR",  RCode::FormErr  },
1,538✔
306
                                       {"SERVFAIL", RCode::ServFail },
1,538✔
307
                                       {"NXDOMAIN", RCode::NXDomain },
1,538✔
308
                                       {"NOTIMP",   RCode::NotImp   },
1,538✔
309
                                       {"REFUSED",  RCode::Refused  },
1,538✔
310
                                       {"YXDOMAIN", RCode::YXDomain },
1,538✔
311
                                       {"YXRRSET",  RCode::YXRRSet  },
1,538✔
312
                                       {"NXRRSET",  RCode::NXRRSet  },
1,538✔
313
                                       {"NOTAUTH",  RCode::NotAuth  },
1,538✔
314
                                       {"NOTZONE",  RCode::NotZone  },
1,538✔
315
                                       {"DROP",    -2               }}; // To give backport-incompatibility warning
1,538✔
316
  for(const auto& rcode : rcodes)
1,538✔
317
    d_pd.push_back({rcode.first, rcode.second});
18,434✔
318

319
  d_pd.push_back({"place", in_t{
1,538✔
320
    {"QUESTION", 0},
1,538✔
321
    {"ANSWER", 1},
1,538✔
322
    {"AUTHORITY", 2},
1,538✔
323
    {"ADDITIONAL", 3}
1,538✔
324
  }});
1,538✔
325

326
  d_pd.push_back({"loglevels", in_t{
1,538✔
327
        {"Alert", LOG_ALERT},
1,538✔
328
        {"Critical", LOG_CRIT},
1,538✔
329
        {"Debug", LOG_DEBUG},
1,538✔
330
        {"Emergency", LOG_EMERG},
1,538✔
331
        {"Info", LOG_INFO},
1,538✔
332
        {"Notice", LOG_NOTICE},
1,538✔
333
        {"Warning", LOG_WARNING},
1,538✔
334
        {"Error", LOG_ERR}
1,538✔
335
          }});
1,538✔
336

337
  for(const auto& n : QType::names)
1,538✔
338
    d_pd.push_back({n.first, n.second});
104,814✔
339

340
  d_lw->registerMember("tv_sec", &timeval::tv_sec);
1,538✔
341
  d_lw->registerMember("tv_usec", &timeval::tv_usec);
1,538✔
342

343
  postPrepareContext();
1,538✔
344

345
  // so we can let postprepare do changes to this
346
  d_lw->writeVariable("pdns", d_pd);
1,538✔
347
}
1,538✔
348

349
void BaseLua4::loadStream(std::istream &stream, bool doPostLoad) {
1,174✔
350
  d_lw->executeCode(stream);
1,174✔
351

352
  if (doPostLoad) {
1,174!
353
    postLoad();
1,174✔
354
  }
1,174✔
355
}
1,174✔
356

357
BaseLua4::~BaseLua4() = default;
628✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc