podman/pkg/machine/ocipull/policy.go

48 lines
1.3 KiB
Go

package ocipull
import (
"fmt"
"os"
"path/filepath"
)
// DefaultPolicyJSONPath should be overwritten at build time with the real path to the directory where
// the shipped policy.json file is located. This can either be absolute path or a relative path. If it
// is relative it will be resolved relative to the podman binary and NOT the CWD.
//
// use "-X github.com/containers/podman/v5/pkg/machine/ocipull.DefaultPolicyJSONPath=/somepath" in go ldflags to overwrite this
var DefaultPolicyJSONPath = ""
const policyfile = "policy.json"
type defaultPolicyError struct {
errs []error
}
func (e *defaultPolicyError) Error() string {
return fmt.Sprintf("no DefaultPolicyJSONPath defined and no local overwrites found: %q", e.errs)
}
func policyPath() (string, error) {
paths := localPolicyOverwrites()
errs := make([]error, 0, len(paths))
for _, path := range paths {
_, err := os.Stat(path)
if err == nil {
return path, nil
}
errs = append(errs, err)
}
if DefaultPolicyJSONPath != "" {
if filepath.IsAbs(DefaultPolicyJSONPath) {
return filepath.Join(DefaultPolicyJSONPath, policyfile), nil
}
p, err := os.Executable()
if err != nil {
return "", fmt.Errorf("could not resolve relative path to binary: %w", err)
}
return filepath.Join(p, DefaultPolicyJSONPath, policyfile), nil
}
return "", &defaultPolicyError{errs: errs}
}