vendor: docker/docker 78e6ffd279b627ebba046b9675ff4849091d9cc3
full diff: aaf470eca7...78e6ffd279
- Add DefaultAddressPools to Info
- Configure shims from runtime config
- pkg/archive: use containerd/sys to detect UserNamespaces
- removes github.com/opencontainers/runc/libcontainer/system dependency
- pkg/archive: Don't use init() to set unpigz path
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
c496fefe4d
commit
52ec986b5a
@ -12,7 +12,7 @@ github.com/creack/pty 3a6a957789163cacdfe0e291617a
|
|||||||
github.com/davecgh/go-spew 8991bc29aa16c548c550c7ff78260e27b9ab7c73 # v1.1.1
|
github.com/davecgh/go-spew 8991bc29aa16c548c550c7ff78260e27b9ab7c73 # v1.1.1
|
||||||
github.com/docker/compose-on-kubernetes 78e6a00beda64ac8ccb9fec787e601fe2ce0d5bb # v0.5.0-alpha1
|
github.com/docker/compose-on-kubernetes 78e6a00beda64ac8ccb9fec787e601fe2ce0d5bb # v0.5.0-alpha1
|
||||||
github.com/docker/distribution 0d3efadf0154c2b8a4e7b6621fff9809655cc580
|
github.com/docker/distribution 0d3efadf0154c2b8a4e7b6621fff9809655cc580
|
||||||
github.com/docker/docker aaf470eca7b588aa19e6681bff8bf08d17be1bf2
|
github.com/docker/docker 78e6ffd279b627ebba046b9675ff4849091d9cc3
|
||||||
github.com/docker/docker-credential-helpers 54f0238b6bf101fc3ad3b34114cb5520beb562f5 # v0.6.3
|
github.com/docker/docker-credential-helpers 54f0238b6bf101fc3ad3b34114cb5520beb562f5 # v0.6.3
|
||||||
github.com/docker/go d30aec9fd63c35133f8f79c3412ad91a3b08be06 # Contains a customized version of canonical/json and is used by Notary. The package is periodically rebased on current Go versions.
|
github.com/docker/go d30aec9fd63c35133f8f79c3412ad91a3b08be06 # Contains a customized version of canonical/json and is used by Notary. The package is periodically rebased on current Go versions.
|
||||||
github.com/docker/go-connections 7395e3f8aa162843a74ed6d48e79627d9792ac55 # v0.4.0
|
github.com/docker/go-connections 7395e3f8aa162843a74ed6d48e79627d9792ac55 # v0.4.0
|
||||||
|
17
vendor/github.com/docker/docker/api/types/types.go
generated
vendored
17
vendor/github.com/docker/docker/api/types/types.go
generated
vendored
@ -211,6 +211,7 @@ type Info struct {
|
|||||||
InitCommit Commit
|
InitCommit Commit
|
||||||
SecurityOptions []string
|
SecurityOptions []string
|
||||||
ProductLicense string `json:",omitempty"`
|
ProductLicense string `json:",omitempty"`
|
||||||
|
DefaultAddressPools []NetworkAddressPool `json:",omitempty"`
|
||||||
Warnings []string
|
Warnings []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,6 +220,12 @@ type KeyValue struct {
|
|||||||
Key, Value string
|
Key, Value string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetworkAddressPool is a temp struct used by Info struct
|
||||||
|
type NetworkAddressPool struct {
|
||||||
|
Base string
|
||||||
|
Size int
|
||||||
|
}
|
||||||
|
|
||||||
// SecurityOpt contains the name and options of a security option
|
// SecurityOpt contains the name and options of a security option
|
||||||
type SecurityOpt struct {
|
type SecurityOpt struct {
|
||||||
Name string
|
Name string
|
||||||
@ -511,6 +518,16 @@ type Checkpoint struct {
|
|||||||
type Runtime struct {
|
type Runtime struct {
|
||||||
Path string `json:"path"`
|
Path string `json:"path"`
|
||||||
Args []string `json:"runtimeArgs,omitempty"`
|
Args []string `json:"runtimeArgs,omitempty"`
|
||||||
|
|
||||||
|
// This is exposed here only for internal use
|
||||||
|
// It is not currently supported to specify custom shim configs
|
||||||
|
Shim *ShimConfig `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ShimConfig is used by runtime to configure containerd shims
|
||||||
|
type ShimConfig struct {
|
||||||
|
Binary string
|
||||||
|
Opts interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DiskUsage contains response of Engine API:
|
// DiskUsage contains response of Engine API:
|
||||||
|
2
vendor/github.com/docker/docker/client/client_unix.go
generated
vendored
2
vendor/github.com/docker/docker/client/client_unix.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// +build linux freebsd openbsd darwin solaris illumos
|
// +build linux freebsd openbsd netbsd darwin solaris illumos dragonfly
|
||||||
|
|
||||||
package client // import "github.com/docker/docker/client"
|
package client // import "github.com/docker/docker/client"
|
||||||
|
|
||||||
|
36
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
36
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
@ -27,17 +27,6 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var unpigzPath string
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
if path, err := exec.LookPath("unpigz"); err != nil {
|
|
||||||
logrus.Debug("unpigz binary not found in PATH, falling back to go gzip library")
|
|
||||||
} else {
|
|
||||||
logrus.Debugf("Using unpigz binary found at path %s", path)
|
|
||||||
unpigzPath = path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type (
|
type (
|
||||||
// Compression is the state represents if compressed or not.
|
// Compression is the state represents if compressed or not.
|
||||||
Compression int
|
Compression int
|
||||||
@ -158,18 +147,29 @@ func xzDecompress(ctx context.Context, archive io.Reader) (io.ReadCloser, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {
|
func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {
|
||||||
if unpigzPath == "" {
|
noPigzEnv := os.Getenv("MOBY_DISABLE_PIGZ")
|
||||||
|
var noPigz bool
|
||||||
|
|
||||||
|
if noPigzEnv != "" {
|
||||||
|
var err error
|
||||||
|
noPigz, err = strconv.ParseBool(noPigzEnv)
|
||||||
|
if err != nil {
|
||||||
|
logrus.WithError(err).Warn("invalid value in MOBY_DISABLE_PIGZ env var")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if noPigz {
|
||||||
|
logrus.Debugf("Use of pigz is disabled due to MOBY_DISABLE_PIGZ=%s", noPigzEnv)
|
||||||
return gzip.NewReader(buf)
|
return gzip.NewReader(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
disablePigzEnv := os.Getenv("MOBY_DISABLE_PIGZ")
|
unpigzPath, err := exec.LookPath("unpigz")
|
||||||
if disablePigzEnv != "" {
|
if err != nil {
|
||||||
if disablePigz, err := strconv.ParseBool(disablePigzEnv); err != nil {
|
logrus.Debugf("unpigz binary not found, falling back to go gzip library")
|
||||||
return nil, err
|
|
||||||
} else if disablePigz {
|
|
||||||
return gzip.NewReader(buf)
|
return gzip.NewReader(buf)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
logrus.Debugf("Using %s to decompress", unpigzPath)
|
||||||
|
|
||||||
return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
|
return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
4
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
@ -10,9 +10,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/containerd/containerd/sys"
|
||||||
"github.com/docker/docker/pkg/idtools"
|
"github.com/docker/docker/pkg/idtools"
|
||||||
"github.com/docker/docker/pkg/system"
|
"github.com/docker/docker/pkg/system"
|
||||||
rsystem "github.com/opencontainers/runc/libcontainer/system"
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ func getFileUIDGID(stat interface{}) (idtools.Identity, error) {
|
|||||||
// handleTarTypeBlockCharFifo is an OS-specific helper function used by
|
// handleTarTypeBlockCharFifo is an OS-specific helper function used by
|
||||||
// createTarFile to handle the following types of header: Block; Char; Fifo
|
// createTarFile to handle the following types of header: Block; Char; Fifo
|
||||||
func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
|
func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
|
||||||
if rsystem.RunningInUserNS() {
|
if sys.RunningInUserNS() {
|
||||||
// cannot create a device if running in user namespace
|
// cannot create a device if running in user namespace
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/docker/docker/vendor.conf
generated
vendored
12
vendor/github.com/docker/docker/vendor.conf
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
|
||||||
github.com/Microsoft/hcsshim 5bc557dd210ff2caf615e6e22d398123de77fc11 # v0.8.9
|
github.com/Microsoft/hcsshim 9dcb42f100215f8d375b4a9265e5bba009217a85 # moby branch
|
||||||
github.com/Microsoft/go-winio 6c72808b55902eae4c5943626030429ff20f3b63 # v0.4.14
|
github.com/Microsoft/go-winio 6c72808b55902eae4c5943626030429ff20f3b63 # v0.4.14
|
||||||
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
|
||||||
github.com/golang/gddo 72a348e765d293ed6d1ded7b699591f14d6cd921
|
github.com/golang/gddo 72a348e765d293ed6d1ded7b699591f14d6cd921
|
||||||
@ -10,7 +10,6 @@ github.com/moby/term 73f35e472e8f0a3f91347164138c
|
|||||||
|
|
||||||
github.com/creack/pty 3a6a957789163cacdfe0e291617a1c8e80612c11 # v1.1.9
|
github.com/creack/pty 3a6a957789163cacdfe0e291617a1c8e80612c11 # v1.1.9
|
||||||
github.com/konsorten/go-windows-terminal-sequences edb144dfd453055e1e49a3d8b410a660b5a87613 # v1.0.3
|
github.com/konsorten/go-windows-terminal-sequences edb144dfd453055e1e49a3d8b410a660b5a87613 # v1.0.3
|
||||||
github.com/mattn/go-shellwords 36a9b3c57cb5caa559ff63fb7e9b585f1c00df75 # v1.0.6
|
|
||||||
github.com/sirupsen/logrus 60c74ad9be0d874af0ab0daef6ab07c5c5911f0d # v1.6.0
|
github.com/sirupsen/logrus 60c74ad9be0d874af0ab0daef6ab07c5c5911f0d # v1.6.0
|
||||||
github.com/tchap/go-patricia a7f0089c6f496e8e70402f61733606daa326cac5 # v2.3.0
|
github.com/tchap/go-patricia a7f0089c6f496e8e70402f61733606daa326cac5 # v2.3.0
|
||||||
golang.org/x/net 0de0cce0169b09b364e001f108dc0399ea8630b3
|
golang.org/x/net 0de0cce0169b09b364e001f108dc0399ea8630b3
|
||||||
@ -18,7 +17,7 @@ golang.org/x/sys 85ca7c5b95cdf1e557abb38a283d
|
|||||||
github.com/docker/go-units 519db1ee28dcc9fd2474ae59fca29a810482bfb1 # v0.4.0
|
github.com/docker/go-units 519db1ee28dcc9fd2474ae59fca29a810482bfb1 # v0.4.0
|
||||||
github.com/docker/go-connections 7395e3f8aa162843a74ed6d48e79627d9792ac55 # v0.4.0
|
github.com/docker/go-connections 7395e3f8aa162843a74ed6d48e79627d9792ac55 # v0.4.0
|
||||||
github.com/moby/sys 6154f11e6840c0d6b0dbb23f4125a6134b3013c9 # mountinfo/v0.1.3
|
github.com/moby/sys 6154f11e6840c0d6b0dbb23f4125a6134b3013c9 # mountinfo/v0.1.3
|
||||||
golang.org/x/text 342b2e1fbaa52c93f31447ad2c6abc048c63e475 # v0.3.2
|
golang.org/x/text 23ae387dee1f90d29a23c0e87ee0b46038fbed0e # v0.3.3
|
||||||
gotest.tools/v3 bb0d8a963040ea5048dcef1a14d8f8b58a33d4b3 # v3.0.2
|
gotest.tools/v3 bb0d8a963040ea5048dcef1a14d8f8b58a33d4b3 # v3.0.2
|
||||||
github.com/google/go-cmp 3af367b6b30c263d47e8895973edcca9a49cf029 # v0.2.0
|
github.com/google/go-cmp 3af367b6b30c263d47e8895973edcca9a49cf029 # v0.2.0
|
||||||
github.com/syndtr/gocapability d98352740cb2c55f81556b63d4a1ec64c5a319c2
|
github.com/syndtr/gocapability d98352740cb2c55f81556b63d4a1ec64c5a319c2
|
||||||
@ -28,7 +27,7 @@ github.com/imdario/mergo 1afb36080aec31e0d1528973ebe6
|
|||||||
golang.org/x/sync cd5d95a43a6e21273425c7ae415d3df9ea832eeb
|
golang.org/x/sync cd5d95a43a6e21273425c7ae415d3df9ea832eeb
|
||||||
|
|
||||||
# buildkit
|
# buildkit
|
||||||
github.com/moby/buildkit ae7ff7174f73bcb4df89b97e1623b3fb0bfb0a0c
|
github.com/moby/buildkit df35e9818d1f9066e616e03f4b8d727c97562e5b
|
||||||
github.com/tonistiigi/fsutil c2c7d7b0e1441705cd802e5699c0a10b1dfe39fd
|
github.com/tonistiigi/fsutil c2c7d7b0e1441705cd802e5699c0a10b1dfe39fd
|
||||||
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746
|
||||||
github.com/opentracing/opentracing-go 1361b9cd60be79c4c3a7fa9841b3c132e40066a7
|
github.com/opentracing/opentracing-go 1361b9cd60be79c4c3a7fa9841b3c132e40066a7
|
||||||
@ -36,11 +35,12 @@ github.com/google/shlex e7afc7fbc51079733e9468cdfd1e
|
|||||||
github.com/opentracing-contrib/go-stdlib b1a47cfbdd7543e70e9ef3e73d0802ad306cc1cc
|
github.com/opentracing-contrib/go-stdlib b1a47cfbdd7543e70e9ef3e73d0802ad306cc1cc
|
||||||
github.com/mitchellh/hashstructure 2bca23e0e452137f789efbc8610126fd8b94f73b
|
github.com/mitchellh/hashstructure 2bca23e0e452137f789efbc8610126fd8b94f73b
|
||||||
github.com/gofrs/flock 392e7fae8f1b0bdbd67dad7237d23f618feb6dbb # v0.7.1
|
github.com/gofrs/flock 392e7fae8f1b0bdbd67dad7237d23f618feb6dbb # v0.7.1
|
||||||
|
github.com/grpc-ecosystem/go-grpc-middleware 3c51f7f332123e8be5a157c0802a228ac85bf9db # v1.2.0
|
||||||
|
|
||||||
# libnetwork
|
# libnetwork
|
||||||
|
|
||||||
# When updating, also update LIBNETWORK_COMMIT in hack/dockerfile/install/proxy.installer accordingly
|
# When updating, also update LIBNETWORK_COMMIT in hack/dockerfile/install/proxy.installer accordingly
|
||||||
github.com/docker/libnetwork 2e24aed516bd5c836e11378bb457dd612aa868ed
|
github.com/docker/libnetwork 9e99af28df21367340c95a3863e31808d689c92a
|
||||||
github.com/docker/go-events e31b211e4f1cd09aa76fe4ac244571fab96ae47f
|
github.com/docker/go-events e31b211e4f1cd09aa76fe4ac244571fab96ae47f
|
||||||
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
|
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
|
||||||
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
|
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
|
||||||
@ -168,7 +168,7 @@ github.com/morikuni/aec 39771216ff4c63d11f5e604076f9
|
|||||||
# metrics
|
# metrics
|
||||||
github.com/docker/go-metrics b619b3592b65de4f087d9f16863a7e6ff905973c # v0.0.1
|
github.com/docker/go-metrics b619b3592b65de4f087d9f16863a7e6ff905973c # v0.0.1
|
||||||
|
|
||||||
github.com/opencontainers/selinux 0d49ba2a6aae052c614dfe5de62a158711a6c461 # v1.5.1
|
github.com/opencontainers/selinux c688bba66d7ecb448819836b96f9c416da8b0746 # v1.5.2
|
||||||
|
|
||||||
|
|
||||||
# archive/tar
|
# archive/tar
|
||||||
|
155
vendor/github.com/opencontainers/runc/libcontainer/system/linux.go
generated
vendored
155
vendor/github.com/opencontainers/runc/libcontainer/system/linux.go
generated
vendored
@ -1,155 +0,0 @@
|
|||||||
// +build linux
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"syscall" // only for exec
|
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/opencontainers/runc/libcontainer/user"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// If arg2 is nonzero, set the "child subreaper" attribute of the
|
|
||||||
// calling process; if arg2 is zero, unset the attribute. When a
|
|
||||||
// process is marked as a child subreaper, all of the children
|
|
||||||
// that it creates, and their descendants, will be marked as
|
|
||||||
// having a subreaper. In effect, a subreaper fulfills the role
|
|
||||||
// of init(1) for its descendant processes. Upon termination of
|
|
||||||
// a process that is orphaned (i.e., its immediate parent has
|
|
||||||
// already terminated) and marked as having a subreaper, the
|
|
||||||
// nearest still living ancestor subreaper will receive a SIGCHLD
|
|
||||||
// signal and be able to wait(2) on the process to discover its
|
|
||||||
// termination status.
|
|
||||||
const PR_SET_CHILD_SUBREAPER = 36
|
|
||||||
|
|
||||||
type ParentDeathSignal int
|
|
||||||
|
|
||||||
func (p ParentDeathSignal) Restore() error {
|
|
||||||
if p == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
current, err := GetParentDeathSignal()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if p == current {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return p.Set()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p ParentDeathSignal) Set() error {
|
|
||||||
return SetParentDeathSignal(uintptr(p))
|
|
||||||
}
|
|
||||||
|
|
||||||
func Execv(cmd string, args []string, env []string) error {
|
|
||||||
name, err := exec.LookPath(cmd)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return syscall.Exec(name, args, env)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Prlimit(pid, resource int, limit unix.Rlimit) error {
|
|
||||||
_, _, err := unix.RawSyscall6(unix.SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(&limit)), uintptr(unsafe.Pointer(&limit)), 0, 0)
|
|
||||||
if err != 0 {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetParentDeathSignal(sig uintptr) error {
|
|
||||||
if err := unix.Prctl(unix.PR_SET_PDEATHSIG, sig, 0, 0, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetParentDeathSignal() (ParentDeathSignal, error) {
|
|
||||||
var sig int
|
|
||||||
if err := unix.Prctl(unix.PR_GET_PDEATHSIG, uintptr(unsafe.Pointer(&sig)), 0, 0, 0); err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
return ParentDeathSignal(sig), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetKeepCaps() error {
|
|
||||||
if err := unix.Prctl(unix.PR_SET_KEEPCAPS, 1, 0, 0, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ClearKeepCaps() error {
|
|
||||||
if err := unix.Prctl(unix.PR_SET_KEEPCAPS, 0, 0, 0, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Setctty() error {
|
|
||||||
if err := unix.IoctlSetInt(0, unix.TIOCSCTTY, 0); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunningInUserNS detects whether we are currently running in a user namespace.
|
|
||||||
// Originally copied from github.com/lxc/lxd/shared/util.go
|
|
||||||
func RunningInUserNS() bool {
|
|
||||||
uidmap, err := user.CurrentProcessUIDMap()
|
|
||||||
if err != nil {
|
|
||||||
// This kernel-provided file only exists if user namespaces are supported
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return UIDMapInUserNS(uidmap)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UIDMapInUserNS(uidmap []user.IDMap) bool {
|
|
||||||
/*
|
|
||||||
* We assume we are in the initial user namespace if we have a full
|
|
||||||
* range - 4294967295 uids starting at uid 0.
|
|
||||||
*/
|
|
||||||
if len(uidmap) == 1 && uidmap[0].ID == 0 && uidmap[0].ParentID == 0 && uidmap[0].Count == 4294967295 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetParentNSeuid returns the euid within the parent user namespace
|
|
||||||
func GetParentNSeuid() int64 {
|
|
||||||
euid := int64(os.Geteuid())
|
|
||||||
uidmap, err := user.CurrentProcessUIDMap()
|
|
||||||
if err != nil {
|
|
||||||
// This kernel-provided file only exists if user namespaces are supported
|
|
||||||
return euid
|
|
||||||
}
|
|
||||||
for _, um := range uidmap {
|
|
||||||
if um.ID <= euid && euid <= um.ID+um.Count-1 {
|
|
||||||
return um.ParentID + euid - um.ID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return euid
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetSubreaper sets the value i as the subreaper setting for the calling process
|
|
||||||
func SetSubreaper(i int) error {
|
|
||||||
return unix.Prctl(PR_SET_CHILD_SUBREAPER, uintptr(i), 0, 0, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetSubreaper returns the subreaper setting for the calling process
|
|
||||||
func GetSubreaper() (int, error) {
|
|
||||||
var i uintptr
|
|
||||||
|
|
||||||
if err := unix.Prctl(unix.PR_GET_CHILD_SUBREAPER, uintptr(unsafe.Pointer(&i)), 0, 0, 0); err != nil {
|
|
||||||
return -1, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return int(i), nil
|
|
||||||
}
|
|
113
vendor/github.com/opencontainers/runc/libcontainer/system/proc.go
generated
vendored
113
vendor/github.com/opencontainers/runc/libcontainer/system/proc.go
generated
vendored
@ -1,113 +0,0 @@
|
|||||||
package system
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"path/filepath"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// State is the status of a process.
|
|
||||||
type State rune
|
|
||||||
|
|
||||||
const ( // Only values for Linux 3.14 and later are listed here
|
|
||||||
Dead State = 'X'
|
|
||||||
DiskSleep State = 'D'
|
|
||||||
Running State = 'R'
|
|
||||||
Sleeping State = 'S'
|
|
||||||
Stopped State = 'T'
|
|
||||||
TracingStop State = 't'
|
|
||||||
Zombie State = 'Z'
|
|
||||||
)
|
|
||||||
|
|
||||||
// String forms of the state from proc(5)'s documentation for
|
|
||||||
// /proc/[pid]/status' "State" field.
|
|
||||||
func (s State) String() string {
|
|
||||||
switch s {
|
|
||||||
case Dead:
|
|
||||||
return "dead"
|
|
||||||
case DiskSleep:
|
|
||||||
return "disk sleep"
|
|
||||||
case Running:
|
|
||||||
return "running"
|
|
||||||
case Sleeping:
|
|
||||||
return "sleeping"
|
|
||||||
case Stopped:
|
|
||||||
return "stopped"
|
|
||||||
case TracingStop:
|
|
||||||
return "tracing stop"
|
|
||||||
case Zombie:
|
|
||||||
return "zombie"
|
|
||||||
default:
|
|
||||||
return fmt.Sprintf("unknown (%c)", s)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stat_t represents the information from /proc/[pid]/stat, as
|
|
||||||
// described in proc(5) with names based on the /proc/[pid]/status
|
|
||||||
// fields.
|
|
||||||
type Stat_t struct {
|
|
||||||
// PID is the process ID.
|
|
||||||
PID uint
|
|
||||||
|
|
||||||
// Name is the command run by the process.
|
|
||||||
Name string
|
|
||||||
|
|
||||||
// State is the state of the process.
|
|
||||||
State State
|
|
||||||
|
|
||||||
// StartTime is the number of clock ticks after system boot (since
|
|
||||||
// Linux 2.6).
|
|
||||||
StartTime uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stat returns a Stat_t instance for the specified process.
|
|
||||||
func Stat(pid int) (stat Stat_t, err error) {
|
|
||||||
bytes, err := ioutil.ReadFile(filepath.Join("/proc", strconv.Itoa(pid), "stat"))
|
|
||||||
if err != nil {
|
|
||||||
return stat, err
|
|
||||||
}
|
|
||||||
return parseStat(string(bytes))
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetProcessStartTime is deprecated. Use Stat(pid) and
|
|
||||||
// Stat_t.StartTime instead.
|
|
||||||
func GetProcessStartTime(pid int) (string, error) {
|
|
||||||
stat, err := Stat(pid)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d", stat.StartTime), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseStat(data string) (stat Stat_t, err error) {
|
|
||||||
// From proc(5), field 2 could contain space and is inside `(` and `)`.
|
|
||||||
// The following is an example:
|
|
||||||
// 89653 (gunicorn: maste) S 89630 89653 89653 0 -1 4194560 29689 28896 0 3 146 32 76 19 20 0 1 0 2971844 52965376 3920 18446744073709551615 1 1 0 0 0 0 0 16781312 137447943 0 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
||||||
i := strings.LastIndex(data, ")")
|
|
||||||
if i <= 2 || i >= len(data)-1 {
|
|
||||||
return stat, fmt.Errorf("invalid stat data: %q", data)
|
|
||||||
}
|
|
||||||
|
|
||||||
parts := strings.SplitN(data[:i], "(", 2)
|
|
||||||
if len(parts) != 2 {
|
|
||||||
return stat, fmt.Errorf("invalid stat data: %q", data)
|
|
||||||
}
|
|
||||||
|
|
||||||
stat.Name = parts[1]
|
|
||||||
_, err = fmt.Sscanf(parts[0], "%d", &stat.PID)
|
|
||||||
if err != nil {
|
|
||||||
return stat, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// parts indexes should be offset by 3 from the field number given
|
|
||||||
// proc(5), because parts is zero-indexed and we've removed fields
|
|
||||||
// one (PID) and two (Name) in the paren-split.
|
|
||||||
parts = strings.Split(data[i+2:], " ")
|
|
||||||
var state int
|
|
||||||
fmt.Sscanf(parts[3-3], "%c", &state)
|
|
||||||
stat.State = State(state)
|
|
||||||
fmt.Sscanf(parts[22-3], "%d", &stat.StartTime)
|
|
||||||
return stat, nil
|
|
||||||
}
|
|
26
vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_32.go
generated
vendored
26
vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_32.go
generated
vendored
@ -1,26 +0,0 @@
|
|||||||
// +build linux
|
|
||||||
// +build 386 arm
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Setuid sets the uid of the calling thread to the specified uid.
|
|
||||||
func Setuid(uid int) (err error) {
|
|
||||||
_, _, e1 := unix.RawSyscall(unix.SYS_SETUID32, uintptr(uid), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setgid sets the gid of the calling thread to the specified gid.
|
|
||||||
func Setgid(gid int) (err error) {
|
|
||||||
_, _, e1 := unix.RawSyscall(unix.SYS_SETGID32, uintptr(gid), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
26
vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go
generated
vendored
26
vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go
generated
vendored
@ -1,26 +0,0 @@
|
|||||||
// +build linux
|
|
||||||
// +build arm64 amd64 mips mipsle mips64 mips64le ppc ppc64 ppc64le riscv64 s390x
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
import (
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Setuid sets the uid of the calling thread to the specified uid.
|
|
||||||
func Setuid(uid int) (err error) {
|
|
||||||
_, _, e1 := unix.RawSyscall(unix.SYS_SETUID, uintptr(uid), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setgid sets the gid of the calling thread to the specified gid.
|
|
||||||
func Setgid(gid int) (err error) {
|
|
||||||
_, _, e1 := unix.RawSyscall(unix.SYS_SETGID, uintptr(gid), 0, 0)
|
|
||||||
if e1 != 0 {
|
|
||||||
err = e1
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
12
vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go
generated
vendored
12
vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go
generated
vendored
@ -1,12 +0,0 @@
|
|||||||
// +build cgo,linux
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <unistd.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
func GetClockTicks() int {
|
|
||||||
return int(C.sysconf(C._SC_CLK_TCK))
|
|
||||||
}
|
|
15
vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go
generated
vendored
15
vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go
generated
vendored
@ -1,15 +0,0 @@
|
|||||||
// +build !cgo windows
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
func GetClockTicks() int {
|
|
||||||
// TODO figure out a better alternative for platforms where we're missing cgo
|
|
||||||
//
|
|
||||||
// TODO Windows. This could be implemented using Win32 QueryPerformanceFrequency().
|
|
||||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx
|
|
||||||
//
|
|
||||||
// An example of its usage can be found here.
|
|
||||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx
|
|
||||||
|
|
||||||
return 100
|
|
||||||
}
|
|
27
vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go
generated
vendored
27
vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go
generated
vendored
@ -1,27 +0,0 @@
|
|||||||
// +build !linux
|
|
||||||
|
|
||||||
package system
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/opencontainers/runc/libcontainer/user"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RunningInUserNS is a stub for non-Linux systems
|
|
||||||
// Always returns false
|
|
||||||
func RunningInUserNS() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// UIDMapInUserNS is a stub for non-Linux systems
|
|
||||||
// Always returns false
|
|
||||||
func UIDMapInUserNS(uidmap []user.IDMap) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetParentNSeuid returns the euid within the parent user namespace
|
|
||||||
// Always returns os.Geteuid on non-linux
|
|
||||||
func GetParentNSeuid() int {
|
|
||||||
return os.Geteuid()
|
|
||||||
}
|
|
35
vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go
generated
vendored
35
vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go
generated
vendored
@ -1,35 +0,0 @@
|
|||||||
package system
|
|
||||||
|
|
||||||
import "golang.org/x/sys/unix"
|
|
||||||
|
|
||||||
// Returns a []byte slice if the xattr is set and nil otherwise
|
|
||||||
// Requires path and its attribute as arguments
|
|
||||||
func Lgetxattr(path string, attr string) ([]byte, error) {
|
|
||||||
var sz int
|
|
||||||
// Start with a 128 length byte array
|
|
||||||
dest := make([]byte, 128)
|
|
||||||
sz, errno := unix.Lgetxattr(path, attr, dest)
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case errno == unix.ENODATA:
|
|
||||||
return nil, errno
|
|
||||||
case errno == unix.ENOTSUP:
|
|
||||||
return nil, errno
|
|
||||||
case errno == unix.ERANGE:
|
|
||||||
// 128 byte array might just not be good enough,
|
|
||||||
// A dummy buffer is used to get the real size
|
|
||||||
// of the xattrs on disk
|
|
||||||
sz, errno = unix.Lgetxattr(path, attr, []byte{})
|
|
||||||
if errno != nil {
|
|
||||||
return nil, errno
|
|
||||||
}
|
|
||||||
dest = make([]byte, sz)
|
|
||||||
sz, errno = unix.Lgetxattr(path, attr, dest)
|
|
||||||
if errno != nil {
|
|
||||||
return nil, errno
|
|
||||||
}
|
|
||||||
case errno != nil:
|
|
||||||
return nil, errno
|
|
||||||
}
|
|
||||||
return dest[:sz], nil
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user