diff --git a/idtools/usergroupadd_linux.go b/idtools/usergroupadd_linux.go index 86d9e21..4a4aaed 100644 --- a/idtools/usergroupadd_linux.go +++ b/idtools/usergroupadd_linux.go @@ -8,6 +8,7 @@ import ( "sort" "strconv" "strings" + "sync" ) // add a user and/or group to Linux /etc/passwd, /etc/group using standard @@ -16,6 +17,7 @@ import ( // useradd -r -s /bin/false var ( + once sync.Once userCommand string cmdTemplates = map[string]string{ @@ -31,15 +33,6 @@ var ( userMod = "usermod" ) -func init() { - // set up which commands are used for adding users/groups dependent on distro - if _, err := resolveBinary("adduser"); err == nil { - userCommand = "adduser" - } else if _, err := resolveBinary("useradd"); err == nil { - userCommand = "useradd" - } -} - func resolveBinary(binname string) (string, error) { binaryPath, err := exec.LookPath(binname) if err != nil { @@ -94,7 +87,14 @@ func AddNamespaceRangesUser(name string) (int, int, error) { } func addUser(userName string) error { - + once.Do(func() { + // set up which commands are used for adding users/groups dependent on distro + if _, err := resolveBinary("adduser"); err == nil { + userCommand = "adduser" + } else if _, err := resolveBinary("useradd"); err == nil { + userCommand = "useradd" + } + }) if userCommand == "" { return fmt.Errorf("Cannot add user; no useradd/adduser binary found") }