42 lines
1.0 KiB
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
|
|
}
|