31 lines
761 B
Go
31 lines
761 B
Go
package sandbox
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"os"
|
|
)
|
|
|
|
// NativeCommand encodes a native sandbox helper invocation.
|
|
func NativeCommand(cfg *Config, originalCmd []string, cwd string, env map[string]string) ([]string, error) {
|
|
envCopy := make(map[string]string, len(env))
|
|
for k, v := range env {
|
|
envCopy[k] = v
|
|
}
|
|
data, err := json.Marshal(helperPolicy{Config: *cfg, CWD: cwd, Env: envCopy, Command: originalCmd})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
exe, err := os.Executable()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{exe, "sandbox-exec", base64.RawStdEncoding.EncodeToString(data)}, nil
|
|
}
|
|
|
|
// pathExists checks if a file or directory exists
|
|
func pathExists(path string) bool {
|
|
_, err := os.Stat(path)
|
|
return err == nil
|
|
}
|