Loading src/authdb.cpp +54 −1 Changes for src/authdb.cpp: 54 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ #include <json-c/json.h> #ifndef _WIN32 #include <unistd.h> #include <pwd.h> #include <grp.h> #include <sys/stat.h> #endif namespace authdb { AdPlugin *g_AdPlugin = nullptr; Loading Loading @@ -389,7 +396,10 @@ int main(int argc,char *argv[]){ cmdplus::CmdController cmd(cmdplus::CmdController::getInstance()); cmd.registerCmd("config",'c',true,"","Config Path"); cmd.registerCmd("debug",'d',false,"false","Config Path"); cmd.registerCmd("debug",'d',false,"false","Debug Mode"); #ifndef _WIN32 cmd.registerCmd("foreground",'f',false,"false","Run in foreground (disable daemon)"); #endif cmd.parseCmd(argc,argv); Loading @@ -399,6 +409,49 @@ int main(int argc,char *argv[]){ return -1; } #ifndef _WIN32 bool foreground = (cmd.getCmdbyKey("foreground")->getValue() == "true"); if (!foreground) { pid_t pid = fork(); if (pid < 0) { std::cerr << "fork failed" << std::endl; return 1; } if (pid > 0) return 0; if (setsid() < 0) { std::cerr << "setsid failed" << std::endl; return 1; } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); } if (getuid() == 0) { struct passwd *pw = getpwnam("authdb"); if (pw) { if (setgid(pw->pw_gid) != 0) { std::cerr << "setgid failed" << std::endl; return 1; } if (initgroups("authdb", pw->pw_gid) != 0) { std::cerr << "initgroups failed" << std::endl; return 1; } if (setuid(pw->pw_uid) != 0) { std::cerr << "setuid failed" << std::endl; return 1; } } else { std::cerr << "user authdb not found, running as root" << std::endl; } } #endif confplus::Config config(cmd.getCmdbyKey("config")->getValue()); authdb::AuthBackend backend(authdb::AuthBackendType::File, Loading Loading
src/authdb.cpp +54 −1 Changes for src/authdb.cpp: 54 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ #include <json-c/json.h> #ifndef _WIN32 #include <unistd.h> #include <pwd.h> #include <grp.h> #include <sys/stat.h> #endif namespace authdb { AdPlugin *g_AdPlugin = nullptr; Loading Loading @@ -389,7 +396,10 @@ int main(int argc,char *argv[]){ cmdplus::CmdController cmd(cmdplus::CmdController::getInstance()); cmd.registerCmd("config",'c',true,"","Config Path"); cmd.registerCmd("debug",'d',false,"false","Config Path"); cmd.registerCmd("debug",'d',false,"false","Debug Mode"); #ifndef _WIN32 cmd.registerCmd("foreground",'f',false,"false","Run in foreground (disable daemon)"); #endif cmd.parseCmd(argc,argv); Loading @@ -399,6 +409,49 @@ int main(int argc,char *argv[]){ return -1; } #ifndef _WIN32 bool foreground = (cmd.getCmdbyKey("foreground")->getValue() == "true"); if (!foreground) { pid_t pid = fork(); if (pid < 0) { std::cerr << "fork failed" << std::endl; return 1; } if (pid > 0) return 0; if (setsid() < 0) { std::cerr << "setsid failed" << std::endl; return 1; } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); } if (getuid() == 0) { struct passwd *pw = getpwnam("authdb"); if (pw) { if (setgid(pw->pw_gid) != 0) { std::cerr << "setgid failed" << std::endl; return 1; } if (initgroups("authdb", pw->pw_gid) != 0) { std::cerr << "initgroups failed" << std::endl; return 1; } if (setuid(pw->pw_uid) != 0) { std::cerr << "setuid failed" << std::endl; return 1; } } else { std::cerr << "user authdb not found, running as root" << std::endl; } } #endif confplus::Config config(cmd.getCmdbyKey("config")->getValue()); authdb::AuthBackend backend(authdb::AuthBackendType::File, Loading