From d4168b30a1f0fc5e19c50728731dfd4a1d84ce36 Mon Sep 17 00:00:00 2001 From: Charles-Henri Bruyand Date: Thu, 10 May 2018 15:20:54 +0200 Subject: [PATCH] pdnsutil: refactor loadModules() --- pdns/pdnsutil.cc | 35 ++++++++--------------------------- pdns/receiver.cc | 36 +++++++++--------------------------- pdns/ueberbackend.cc | 20 ++++++++++++++++++++ pdns/ueberbackend.hh | 1 + 4 files changed, 38 insertions(+), 54 deletions(-) diff --git a/pdns/pdnsutil.cc b/pdns/pdnsutil.cc index d617105403..d536b4cedf 100644 --- a/pdns/pdnsutil.cc +++ b/pdns/pdnsutil.cc @@ -58,32 +58,6 @@ string humanTime(time_t t) return ret; } -static void loadModules() -{ - if(!::arg()["load-modules"].empty()) { - vectormodules; - - stringtok(modules,::arg()["load-modules"],", "); - - for(vector::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< 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! diff --git a/pdns/receiver.cc b/pdns/receiver.cc index ac27940c80..d62e0f1df6 100644 --- a/pdns/receiver.cc +++ b/pdns/receiver.cc @@ -361,32 +361,6 @@ static void UNIX_declareArguments() ::arg().set("daemon","Operate as a daemon")="no"; } -static void loadModules() -{ - if(!::arg()["load-modules"].empty()) { - vectormodules; - - stringtok(modules,::arg()["load-modules"],", "); - - for(vector::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< 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 modules; + + stringtok(modules,::arg()["load-modules"], ", "); + if (!UeberBackend::loadModules(modules, ::arg()["module-dir"])) { + exit(1); + } + } + BackendMakers().launch(::arg()["launch"]); // vrooooom! if(!::arg().getCommands().empty()) { diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index bfb5605db2..18633914d2 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -72,6 +72,26 @@ bool UeberBackend::loadmodule(const string &name) return true; } +bool UeberBackend::loadModules(const vector& 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); diff --git a/pdns/ueberbackend.hh b/pdns/ueberbackend.hh index 811152b765..f044f9cae4 100644 --- a/pdns/ueberbackend.hh +++ b/pdns/ueberbackend.hh @@ -61,6 +61,7 @@ public: static pthread_mutex_t instances_lock; static bool loadmodule(const string &name); + static bool loadModules(const vector& modules, const string& path); static void go(void); -- 2.47.2