From bc8e867dfb080fd691f66341189d8d3469b9f10e Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 19 Aug 2020 14:40:58 +0000 Subject: [PATCH] use exec for lokinet-vpn --- daemon/lokinet-vpn.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/daemon/lokinet-vpn.cpp b/daemon/lokinet-vpn.cpp index 1834ad83b..e25439ef7 100644 --- a/daemon/lokinet-vpn.cpp +++ b/daemon/lokinet-vpn.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #ifdef _WIN32 // add the unholy windows headers for iphlpapi @@ -275,7 +276,35 @@ void Execute(std::string cmd) { std::cout << cmd << std::endl; - system(cmd.c_str()); + std::vector parts_str; + std::vector parts_raw; + std::stringstream in(cmd); + for(std::string part; std::getline(in, part, ' '); ) + { + if(part.empty()) + continue; + parts_str.push_back(part); + } + for(const auto & part : parts_str) + { + parts_raw.push_back(part.c_str()); + } + parts_raw.push_back(nullptr); + const auto pid = fork(); + if(pid == -1) + { + throw std::runtime_error("failed to fork"); + } + else if(pid == 0) + { + char * const * args = (char * const *) &parts_raw[1]; + exit(execv(parts_raw[0], args)); + } + else + { + waitpid(pid, 0, 0); + } + } void