Merge pull request #46417 from thaJeztah/idtools_preserve_error

pkg/idtools: remove sync.Once, and include lookup error
This commit is contained in:
Sebastiaan van Stijn 2023-09-06 23:08:43 +02:00 committed by GitHub
commit 075a2d89b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,17 +10,11 @@ import (
"os/exec"
"path/filepath"
"strconv"
"sync"
"syscall"
"github.com/opencontainers/runc/libcontainer/user"
)
var (
entOnce sync.Once
getentCmd string
)
func mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting bool) error {
path, err := filepath.Abs(path)
if err != nil {
@ -161,10 +155,10 @@ func getentGroup(name string) (user.Group, error) {
}
func callGetent(database, key string) (io.Reader, error) {
entOnce.Do(func() { getentCmd, _ = resolveBinary("getent") })
// if no `getent` command on host, can't do anything else
if getentCmd == "" {
return nil, fmt.Errorf("unable to find getent command")
getentCmd, err := resolveBinary("getent")
// if no `getent` command within the execution environment, can't do anything else
if err != nil {
return nil, fmt.Errorf("unable to find getent command: %w", err)
}
command := exec.Command(getentCmd, database, key)
// we run getent within container filesystem, but without /dev so /dev/null is not available for exec to mock stdin