diff --git a/idtools/idtools.go b/idtools/idtools.go index 6a2b606..f667140 100644 --- a/idtools/idtools.go +++ b/idtools/idtools.go @@ -7,8 +7,6 @@ import ( "sort" "strconv" "strings" - - "github.com/docker/docker/pkg/system" ) // IDMap contains a single entry for user namespace range remapping. An array @@ -49,23 +47,6 @@ func MkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int) error { return mkdirAs(path, mode, ownerUID, ownerGID, false) } -func mkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int, mkAll bool) error { - if mkAll { - if err := system.MkdirAll(path, mode); err != nil && !os.IsExist(err) { - return err - } - } else { - if err := os.Mkdir(path, mode); err != nil && !os.IsExist(err) { - return err - } - } - // even if it existed, we will chown to change ownership as requested - if err := os.Chown(path, ownerUID, ownerGID); err != nil { - return err - } - return nil -} - // GetRootUIDGID retrieves the remapped root uid/gid pair from the set of maps. // If the maps are empty, then the root uid/gid will default to "real" 0/0 func GetRootUIDGID(uidMap, gidMap []IDMap) (int, int, error) { diff --git a/idtools/usergroupadd_linux.go b/idtools/usergroupadd_linux.go index c1eedff..c65fc33 100644 --- a/idtools/usergroupadd_linux.go +++ b/idtools/usergroupadd_linux.go @@ -2,10 +2,13 @@ package idtools import ( "fmt" + "os" "os/exec" "path/filepath" "strings" "syscall" + + "github.com/docker/docker/pkg/system" ) // add a user and/or group to Linux /etc/passwd, /etc/group using standard @@ -153,3 +156,20 @@ func findUnused(file string, id int) (int, error) { } } } + +func mkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int, mkAll bool) error { + if mkAll { + if err := system.MkdirAll(path, mode); err != nil && !os.IsExist(err) { + return err + } + } else { + if err := os.Mkdir(path, mode); err != nil && !os.IsExist(err) { + return err + } + } + // even if it existed, we will chown to change ownership as requested + if err := os.Chown(path, ownerUID, ownerGID); err != nil { + return err + } + return nil +} diff --git a/idtools/usergroupadd_unsupported.go b/idtools/usergroupadd_unsupported.go index d98b354..2ec21fd 100644 --- a/idtools/usergroupadd_unsupported.go +++ b/idtools/usergroupadd_unsupported.go @@ -2,7 +2,12 @@ package idtools -import "fmt" +import ( + "fmt" + "os" + + "github.com/docker/docker/pkg/system" +) // AddNamespaceRangesUser takes a name and finds an unused uid, gid pair // and calls the appropriate helper function to add the group and then @@ -10,3 +15,12 @@ import "fmt" func AddNamespaceRangesUser(name string) (int, int, error) { return -1, -1, fmt.Errorf("No support for adding users or groups on this OS") } + +// Platforms such as Windows do not support the UID/GID concept. So make this +// just a wrapper around system.MkdirAll. +func mkdirAs(path string, mode os.FileMode, ownerUID, ownerGID int, mkAll bool) error { + if err := system.MkdirAll(path, mode); err != nil && !os.IsExist(err) { + return err + } + return nil +}