]> granicus.if.org Git - pdns/commitdiff
Allow for pdns_features to be set for all products.
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 19 Aug 2019 07:47:56 +0000 (09:47 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 19 Aug 2019 08:00:33 +0000 (10:00 +0200)
lua-base4 provides mechanism, derived classes provide content.

pdns/lua-base4.cc
pdns/lua-base4.hh
pdns/lua-recursor4.cc
pdns/lua-recursor4.hh
regression-tests.recursor-dnssec/test_Lua.py

index d643d4a2fe8021bae9969b6db42e4656b01b2725..0b45c86c96fd360d1f2cfc3b8c125b4f93b89825 100644 (file)
@@ -29,6 +29,9 @@ void BaseLua4::loadString(const std::string &script) {
   loadStream(iss);
 };
 
+//  By default no features
+void BaseLua4::getFeatures(Features &) { }
+
 #if !defined(HAVE_LUA)
 
 void BaseLua4::prepareContext() { return; }
@@ -43,13 +46,9 @@ void BaseLua4::prepareContext() {
   d_lw = std::unique_ptr<LuaContext>(new LuaContext);
 
   // lua features available
-  d_lw->writeVariable("pdns_features",
-                      vector<pair<string, boost::variant<string,bool,int,double> > > {
-  // Add key-values pairs below. Make sure you add string values explicity converted to string.
-  // e.g. { "somekey", string("stringvalue") }
-  // Both int and double end up as a lua number type.
-      { "PR8001_devicename", true },
-    });
+  Features features;
+  getFeatures(features);
+  d_lw->writeVariable("pdns_features", features);
   
   // dnsheader
   d_lw->registerFunction<int(dnsheader::*)()>("getID", [](dnsheader& dh) { return ntohs(dh.id); });
index c166e3f56fc1595be43a4b59818ae492d6654f33..79300f778c270b9d64fa2debaef2c6b1dda20c86 100644 (file)
@@ -30,4 +30,6 @@ protected:
   virtual void postLoad() = 0;
   typedef vector<pair<string, int> > in_t;
   vector<pair<string, boost::variant<int, in_t, struct timeval* > > > d_pd;
+  typedef vector<pair<string, boost::variant<string,bool,int,double> > > Features;
+  virtual void getFeatures(Features&);
 };
index 8f918e6c6c9bd48c3efee963ef4a0bbf9a346bd0..9381f96efc660d28cbfe1ae345066a97eaa6ac2c 100644 (file)
@@ -460,6 +460,14 @@ void RecursorLua4::postLoad() {
   d_gettag_ffi = d_lw->readVariable<boost::optional<gettag_ffi_t>>("gettag_ffi").get_value_or(0);
 }
 
+void RecursorLua4::getFeatures(Features & features) {
+  // Add key-values pairs below.
+  // Make sure you add string values explicity converted to string.
+  // e.g. features.push_back(make_pair("somekey", string("stringvalue"));
+  // Both int and double end up as a lua number type.
+   features.push_back(make_pair("PR8001_devicename", true));
+}
+
 void RecursorLua4::maintenance() const
 {
   if (d_maintenance) {
index 12a41b37dda6997219f88d85dd02803c69bc69fd..4515136a4a650aaec0abecd1de75484d384a1671 100644 (file)
@@ -141,6 +141,7 @@ public:
 protected:
   virtual void postPrepareContext() override;
   virtual void postLoad() override;
+  virtual void getFeatures(Features& features) override;
 private:
   typedef std::function<void()> luamaintenance_t;
   luamaintenance_t d_maintenance;
index f31b708b24acb65c4a6da7f51a92a1cc8aed1bb3..a040ffbadd2b66b83f059f4f7bcfc93e6597363e 100644 (file)
@@ -22,7 +22,6 @@ class GettagRecursorTest(RecursorTest):
       local tags = {}
       local data = {}
 
-
       -- make sure we can pass data around to the other hooks
       data['canary'] = 'from-gettag'