]> granicus.if.org Git - pdns/commitdiff
pdnsutil: refactor loadModules()
authorCharles-Henri Bruyand <charles-henri.bruyand@open-xchange.com>
Thu, 10 May 2018 13:20:54 +0000 (15:20 +0200)
committerCharles-Henri Bruyand <charles-henri.bruyand@open-xchange.com>
Thu, 10 May 2018 13:20:54 +0000 (15:20 +0200)
pdns/pdnsutil.cc
pdns/receiver.cc
pdns/ueberbackend.cc
pdns/ueberbackend.hh

index d617105403bc32ecbc29a52abefab00db9fb29ff..d536b4cedf0250874c0b3fc8d4222b3da9a86c0d 100644 (file)
@@ -58,32 +58,6 @@ string humanTime(time_t t)
   return ret;
 }
 
-static void loadModules()
-{
-  if(!::arg()["load-modules"].empty()) {
-    vector<string>modules;
-
-    stringtok(modules,::arg()["load-modules"],", ");
-
-    for(vector<string>::const_iterator i=modules.begin();i!=modules.end();++i) {
-      bool res;
-      const string &module=*i;
-
-      if(module.find(".")==string::npos)
-        res=UeberBackend::loadmodule(::arg()["module-dir"]+"/lib"+module+"backend.so");
-      else if(module[0]=='/' || (module[0]=='.' && module[1]=='/') || (module[0]=='.' && module[1]=='.'))    // absolute or current path
-        res=UeberBackend::loadmodule(module);
-      else
-        res=UeberBackend::loadmodule(::arg()["module-dir"]+"/"+module);
-
-      if(res==false) {
-        g_log<<Logger::Error<<"Receiver unable to load module "<<module<<endl;
-        exit(1);
-      }
-    }
-  }
-}
-
 void loadMainConfig(const std::string& configdir)
 {
   ::arg().set("config-dir","Location of configuration directory (pdns.conf)")=configdir;
@@ -125,7 +99,14 @@ void loadMainConfig(const std::string& configdir)
   ::arg().set("rng", "Specify random number generator to use. Valid values are auto,sodium,openssl,getrandom,arc4random,urandom.")="auto";
   ::arg().laxFile(configname.c_str());
 
-  loadModules();
+  if(!::arg()["load-modules"].empty()) {
+    vector<string> modules;
+
+    stringtok(modules,::arg()["load-modules"], ", ");
+    if (!UeberBackend::loadModules(modules, ::arg()["module-dir"])) {
+      exit(1);
+    }
+  }
 
   g_log.toConsole(Logger::Error);   // so we print any errors
   BackendMakers().launch(::arg()["launch"]); // vrooooom!
index ac27940c80085b7d492138091ccf99402ac470e6..d62e0f1df693d23331e16a0412a691d08585865c 100644 (file)
@@ -361,32 +361,6 @@ static void UNIX_declareArguments()
   ::arg().set("daemon","Operate as a daemon")="no";
 }
 
-static void loadModules()
-{
-  if(!::arg()["load-modules"].empty()) { 
-    vector<string>modules;
-    
-    stringtok(modules,::arg()["load-modules"],", ");
-    
-    for(vector<string>::const_iterator i=modules.begin();i!=modules.end();++i) {
-      bool res;
-      const string &module=*i;
-      
-      if(module.find(".")==string::npos)
-        res=UeberBackend::loadmodule(::arg()["module-dir"]+"/lib"+module+"backend.so");
-      else if(module[0]=='/' || (module[0]=='.' && module[1]=='/') || (module[0]=='.' && module[1]=='.'))    // absolute or current path
-        res=UeberBackend::loadmodule(module);
-      else
-        res=UeberBackend::loadmodule(::arg()["module-dir"]+"/"+module);
-      
-      if(res==false) {
-        g_log<<Logger::Error<<"Receiver unable to load module "<<module<<endl;
-        exit(1);
-      }
-    }
-  }
-}
-
 #ifdef __GLIBC__
 #include <execinfo.h>
 static void tbhandler(int num)
@@ -506,7 +480,15 @@ int main(int argc, char **argv)
     /* setup rng */
     dns_random_init();
 
-    loadModules();
+    if(!::arg()["load-modules"].empty()) {
+      vector<string> modules;
+
+      stringtok(modules,::arg()["load-modules"], ", ");
+      if (!UeberBackend::loadModules(modules, ::arg()["module-dir"])) {
+        exit(1);
+      }
+    }
+
     BackendMakers().launch(::arg()["launch"]); // vrooooom!
 
     if(!::arg().getCommands().empty()) {
index bfb5605db2c644a28544b88124d8561251c87f1a..18633914d2c75629eac0c010b03dd4947276cb8a 100644 (file)
@@ -72,6 +72,26 @@ bool UeberBackend::loadmodule(const string &name)
   return true;
 }
 
+bool UeberBackend::loadModules(const vector<string>& modules, const string& path)
+{
+  for (const auto& module: modules) {
+    bool res;
+    if (module.find(".")==string::npos) {
+      res = UeberBackend::loadmodule(path+"/lib"+module+"backend.so");
+    } else if (module[0]=='/' || (module[0]=='.' && module[1]=='/') || (module[0]=='.' && module[1]=='.')) {
+      // absolute or current path
+      res = UeberBackend::loadmodule(module);
+    } else {
+      res = UeberBackend::loadmodule(path+"/"+module);
+    }
+
+    if (res == false) {
+      return false;
+    }
+  }
+  return true;
+}
+
 void UeberBackend::go(void)
 {
   pthread_mutex_lock(&d_mut);
index 811152b765d3d746114f30c7e1c8fdb84e6cb70a..f044f9cae4651750657c36be3bb6fd0351d198e3 100644 (file)
@@ -61,6 +61,7 @@ public:
   static pthread_mutex_t instances_lock;
 
   static bool loadmodule(const string &name);
+  static bool loadModules(const vector<string>& modules, const string& path);
 
   static void go(void);