-rw-r--r-- | src/process.cc | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/process.cc b/src/process.cc index 96c874f..6d3b2a2 100644 --- a/src/process.cc +++ b/src/process.cc @@ -86,31 +86,33 @@ void process::launch(const string& id,configuration& config) { gid = strtol(group.c_str(),NULL,0); if(errno) throw runtime_error("Failed to reslove Group value to gid"); } } pid_t p = fork(); if(p<0) throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to fork()"); if(!p) { // child try { setsid(); + if(!group.empty()) { if(user.empty()) { if((getgid()!=gid) && setgid(gid)) throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setgid()"); }else{ if(initgroups(user.c_str(),gid)) throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to initgroups()"); } + } if(!chroot.empty()) { if(::chroot(chroot.c_str())) throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to chroot()"); } if(!user.empty()) { if((getuid()!=uid) && setuid(uid)) throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setuid()"); } char *argv[] = { "/bin/sh", "-c", (char*)restart_cmd.c_str(), NULL }; close(0); close(1); close(2); execv("/bin/sh",argv); }catch(exception& e) { |