]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: support for tty options in StartProcess
authorKen Rockot <ken@oz.gs>
Mon, 27 Jun 2011 23:07:49 +0000 (19:07 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 27 Jun 2011 23:07:49 +0000 (19:07 -0400)
These are the relevant changes to exec_unix.go now that
mkerrors.sh outputs have been updated.

R=rsc
CC=golang-dev
https://golang.org/cl/4648064

src/pkg/syscall/exec_unix.go

index 4b3cfe47fc9d5cb9a817ad631dbd005e9f158433..46f05efef80e88ea663c4557abb70ad87addc233 100644 (file)
@@ -146,6 +146,14 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
                }
        }
 
+       // Set process group
+       if sys.Setpgid {
+               _, _, err1 = RawSyscall(SYS_SETPGID, 0, 0, 0)
+               if err1 != 0 {
+                       goto childerror
+               }
+       }
+
        // Chroot
        if chroot != nil {
                _, _, err1 = RawSyscall(SYS_CHROOT, uintptr(unsafe.Pointer(chroot)), 0, 0)
@@ -241,6 +249,22 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
                RawSyscall(SYS_CLOSE, uintptr(i), 0, 0)
        }
 
+       // Detach fd 0 from tty
+       if sys.Noctty {
+               _, _, err1 = RawSyscall(SYS_IOCTL, 0, uintptr(TIOCNOTTY), 0)
+               if err1 != 0 {
+                       goto childerror
+               }
+       }
+
+       // Make fd 0 the tty
+       if sys.Setctty {
+               _, _, err1 = RawSyscall(SYS_IOCTL, 0, uintptr(TIOCSCTTY), 0)
+               if err1 != 0 {
+                       goto childerror
+               }
+       }
+
        // Time to exec.
        _, _, err1 = RawSyscall(SYS_EXECVE,
                uintptr(unsafe.Pointer(argv0)),
@@ -260,12 +284,16 @@ childerror:
        panic("unreached")
 }
 
+// Credential holds user and group identities to be assumed
+// by a child process started by StartProcess.
 type Credential struct {
        Uid    uint32   // User ID.
        Gid    uint32   // Group ID.
        Groups []uint32 // Supplementary group IDs.
 }
 
+// ProcAttr holds attributes that will be applied to a new process started
+// by StartProcess.
 type ProcAttr struct {
        Dir   string   // Current working directory.
        Env   []string // Environment.
@@ -278,6 +306,9 @@ type SysProcAttr struct {
        Credential *Credential // Credential.
        Ptrace     bool        // Enable tracing.
        Setsid     bool        // Create session.
+       Setpgid    bool        // Set process group ID to new pid (SYSV setpgrp)
+       Setctty    bool        // Set controlling terminal to fd 0
+       Noctty     bool        // Detach fd 0 from controlling terminal
 }
 
 var zeroProcAttr ProcAttr