lynx/commands.go

42 lines
1.0 KiB
Go

// +build openbsd
package lynx
import (
"fmt"
"os"
"strings"
"golang.org/x/sys/unix"
)
// UnveilCommands takes a slice of commands & unveils them one by one,
// it will return an error if unveil fails at any step. "no such file
// or directory" error is ignored.
func UnveilCommands(commands []string) error {
// Get $PATH & split it in a list.
pathList := strings.Split(os.Getenv("PATH"), ":")
// We work on unveiling each command one by one.
for _, cmd := range commands {
// Unveil this command on every PATH.
for _, path := range pathList {
err := unix.Unveil(fmt.Sprintf("%s/%s",
path, cmd), "rx")
// "no such file or directory" error is
// ignored because binaries are not placed in
// every PATH.
if err != nil && err.Error() != "no such file or directory" {
// Better error message could be
// returned like one that includes the
// path on which unveil failed.
return err
}
}
}
// Returning nil because err can be "no such file or
// directory" which needs to be ignored.
return nil
}