summaryrefslogtreecommitdiffabout
path: root/src/process.cc
authorMichael Krelin <hacker@klever.net>2006-11-08 14:16:31 (UTC)
committer Michael Krelin <hacker@klever.net>2006-11-08 14:16:31 (UTC)
commit4148b7ad68f2b5bf83d637bdc5ebbb9f0d2aa869 (patch) (unidiff)
tree1816e76710d722b77ac99f8ca8719f0208b31088 /src/process.cc
parentf3915982902595f324ef27dd67589f5e950a046b (diff)
downloaddudki-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
Diffstat (limited to 'src/process.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/process.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/process.cc b/src/process.cc
index 96c874f..6d3b2a2 100644
--- a/src/process.cc
+++ b/src/process.cc
@@ -86,30 +86,32 @@ void process::launch(const string& id,configuration& config) {
86 gid = strtol(group.c_str(),NULL,0); 86 gid = strtol(group.c_str(),NULL,0);
87 if(errno) 87 if(errno)
88 throw runtime_error("Failed to reslove Group value to gid"); 88 throw runtime_error("Failed to reslove Group value to gid");
89 } 89 }
90 } 90 }
91 pid_t p = fork(); 91 pid_t p = fork();
92 if(p<0) 92 if(p<0)
93 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to fork()"); 93 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to fork()");
94 if(!p) { 94 if(!p) {
95 // child 95 // child
96 try { 96 try {
97 setsid(); 97 setsid();
98 if(user.empty()) { 98 if(!group.empty()) {
99 if((getgid()!=gid) && setgid(gid)) 99 if(user.empty()) {
100 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setgid()"); 100 if((getgid()!=gid) && setgid(gid))
101 }else{ 101 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setgid()");
102 if(initgroups(user.c_str(),gid)) 102 }else{
103 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to initgroups()"); 103 if(initgroups(user.c_str(),gid))
104 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to initgroups()");
105 }
104 } 106 }
105 if(!chroot.empty()) { 107 if(!chroot.empty()) {
106 if(::chroot(chroot.c_str())) 108 if(::chroot(chroot.c_str()))
107 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to chroot()"); 109 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to chroot()");
108 } 110 }
109 if(!user.empty()) { 111 if(!user.empty()) {
110 if((getuid()!=uid) && setuid(uid)) 112 if((getuid()!=uid) && setuid(uid))
111 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setuid()"); 113 throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setuid()");
112 } 114 }
113 char *argv[] = { "/bin/sh", "-c", (char*)restart_cmd.c_str(), NULL }; 115 char *argv[] = { "/bin/sh", "-c", (char*)restart_cmd.c_str(), NULL };
114 close(0); close(1); close(2); 116 close(0); close(1); close(2);
115 execv("/bin/sh",argv); 117 execv("/bin/sh",argv);