42 lines
1 KiB
Go
42 lines
1 KiB
Go
// +build !windows
|
|
|
|
package executor
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"syscall"
|
|
)
|
|
|
|
// SetUID changes the Uid for this command (must be set before starting)
|
|
func (c *cmd) SetUID(userid string) error {
|
|
uid, err := strconv.ParseUint(userid, 10, 32)
|
|
if err != nil {
|
|
return fmt.Errorf("Unable to convert userid to uint32: %s", err)
|
|
}
|
|
if c.SysProcAttr == nil {
|
|
c.SysProcAttr = &syscall.SysProcAttr{}
|
|
}
|
|
if c.SysProcAttr.Credential == nil {
|
|
c.SysProcAttr.Credential = &syscall.Credential{}
|
|
}
|
|
c.SysProcAttr.Credential.Uid = uint32(uid)
|
|
return nil
|
|
}
|
|
|
|
// SetGID changes the Gid for this command (must be set before starting)
|
|
func (c *cmd) SetGID(groupid string) error {
|
|
gid, err := strconv.ParseUint(groupid, 10, 32)
|
|
if err != nil {
|
|
return fmt.Errorf("Unable to convert groupid to uint32: %s", err)
|
|
}
|
|
if c.SysProcAttr == nil {
|
|
c.SysProcAttr = &syscall.SysProcAttr{}
|
|
}
|
|
if c.SysProcAttr.Credential == nil {
|
|
c.SysProcAttr.Credential = &syscall.Credential{}
|
|
}
|
|
c.SysProcAttr.Credential.Uid = uint32(gid)
|
|
return nil
|
|
}
|