-rw-r--r-- | src/process.cc | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/process.cc b/src/process.cc index fda35e8..bfab311 100644 --- a/src/process.cc +++ b/src/process.cc | |||
@@ -60,3 +60,4 @@ void process::check(const string& id,configuration& config) { | |||
60 | void process::launch(const string& id,configuration& config) { | 60 | void process::launch(const string& id,configuration& config) { |
61 | uid_t uid = 0; | 61 | uid_t uid = (uid_t)-1; |
62 | gid_t gid = (gid_t)-1; | ||
62 | if(!user.empty()) { | 63 | if(!user.empty()) { |
@@ -65,2 +66,3 @@ void process::launch(const string& id,configuration& config) { | |||
65 | uid = ptmp->pw_uid; | 66 | uid = ptmp->pw_uid; |
67 | gid = ptmp->pw_gid; | ||
66 | }else{ | 68 | }else{ |
@@ -72,3 +74,2 @@ void process::launch(const string& id,configuration& config) { | |||
72 | } | 74 | } |
73 | gid_t gid = 0; | ||
74 | if(!group.empty()) { | 75 | if(!group.empty()) { |
@@ -91,2 +92,9 @@ void process::launch(const string& id,configuration& config) { | |||
91 | setsid(); | 92 | setsid(); |
93 | if(user.empty()) { | ||
94 | if((getgid()!=gid) && setgid(gid)) | ||
95 | throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setgid()"); | ||
96 | }else{ | ||
97 | if(initgroups(user.c_str(),gid)) | ||
98 | throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to initgroups()"); | ||
99 | } | ||
92 | if(!chroot.empty()) { | 100 | if(!chroot.empty()) { |
@@ -95,7 +103,2 @@ void process::launch(const string& id,configuration& config) { | |||
95 | } | 103 | } |
96 | if(!group.empty()) { | ||
97 | // TODO: initgroups()? | ||
98 | if((getgid()!=gid) && setgid(gid)) | ||
99 | throw runtime_error(string(__PRETTY_FUNCTION__)+": failed to setgid()"); | ||
100 | } | ||
101 | if(!user.empty()) { | 104 | if(!user.empty()) { |