about summary refs log tree commit diff
path: root/src/libstd/sys/unix/process
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/sys/unix/process')
-rw-r--r--src/libstd/sys/unix/process/process_unix.rs28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/libstd/sys/unix/process/process_unix.rs b/src/libstd/sys/unix/process/process_unix.rs
index ae24021fb6c..870db820027 100644
--- a/src/libstd/sys/unix/process/process_unix.rs
+++ b/src/libstd/sys/unix/process/process_unix.rs
@@ -160,20 +160,22 @@ impl Command {
             t!(cvt_r(|| libc::dup2(fd, libc::STDERR_FILENO)));
         }
 
-        if let Some(u) = self.get_gid() {
-            t!(cvt(libc::setgid(u as gid_t)));
-        }
-        if let Some(u) = self.get_uid() {
-            // When dropping privileges from root, the `setgroups` call
-            // will remove any extraneous groups. If we don't call this,
-            // then even though our uid has dropped, we may still have
-            // groups that enable us to do super-user things. This will
-            // fail if we aren't root, so don't bother checking the
-            // return value, this is just done as an optimistic
-            // privilege dropping function.
-            let _ = libc::setgroups(0, ptr::null());
+        if cfg!(not(any(target_os = "l4re"))) {
+            if let Some(u) = self.get_gid() {
+                t!(cvt(libc::setgid(u as gid_t)));
+            }
+            if let Some(u) = self.get_uid() {
+                // When dropping privileges from root, the `setgroups` call
+                // will remove any extraneous groups. If we don't call this,
+                // then even though our uid has dropped, we may still have
+                // groups that enable us to do super-user things. This will
+                // fail if we aren't root, so don't bother checking the
+                // return value, this is just done as an optimistic
+                // privilege dropping function.
+                let _ = libc::setgroups(0, ptr::null());
 
-            t!(cvt(libc::setuid(u as uid_t)));
+                t!(cvt(libc::setuid(u as uid_t)));
+            }
         }
         if let Some(ref cwd) = *self.get_cwd() {
             t!(cvt(libc::chdir(cwd.as_ptr())));