author | Michael Krelin <hacker@klever.net> | 2006-11-08 14:16:31 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2006-11-08 14:16:31 (UTC) |
commit | 4148b7ad68f2b5bf83d637bdc5ebbb9f0d2aa869 (patch) (side-by-side diff) | |
tree | 1816e76710d722b77ac99f8ca8719f0208b31088 /src/process.cc | |
parent | f3915982902595f324ef27dd67589f5e950a046b (diff) | |
download | dudki-4148b7ad68f2b5bf83d637bdc5ebbb9f0d2aa869.zip dudki-4148b7ad68f2b5bf83d637bdc5ebbb9f0d2aa869.tar.gz dudki-4148b7ad68f2b5bf83d637bdc5ebbb9f0d2aa869.tar.bz2 |
fixed a bug for setting up unspecified group,
bumped version and years, added NEWS item
-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 @@ -82,39 +82,41 @@ void process::launch(const string& id,configuration& config) { if(gtmp) { gid = gtmp->gr_gid; }else{ errno = 0; 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) { syslog(LOG_ERR,"Error trying to launch process '%s': %s",id.c_str(),e.what()); } _exit(-1); } |