| // Chown is only availabe on UNIX platforms so this file has a build |
| func (hw *WorkParameters) Chown() error { |
| chown := func(path string) error { |
| log.Printf("[dryrun] os.Chown(%s, %d, %d)", path, hw.uid, hw.gid) |
| return os.Chown(path, hw.uid, hw.gid) |
| for _, p := range []string{hw.workspace, hw.stdoutLog, hw.stderrLog} { |
| // TODO(rjkroege): Ensure that the nodemanager can read log entries. |
| if err := chown(p); err != nil { |
| return fmt.Errorf("os.Chown(%s, %d, %d) failed: %v", p, hw.uid, hw.gid, err) |
| func (hw *WorkParameters) Exec() error { |
| log.Printf("[dryrun] syscall.Setgid(%d)", hw.gid) |
| log.Printf("[dryrun] syscall.Setuid(%d)", hw.uid) |
| if err := syscall.Setgid(hw.gid); err != nil { |
| return fmt.Errorf("syscall.Setgid(%d) failed: %v", hw.gid, err) |
| if err := syscall.Setuid(hw.uid); err != nil { |
| return fmt.Errorf("syscall.Setuid(%d) failed: %v", hw.uid, err) |
| return syscall.Exec(hw.argv0, hw.argv, hw.envv) |