bump deps
This commit is contained in:
parent
6941159ac6
commit
82cdcac8bd
10
go.mod
10
go.mod
@ -8,14 +8,14 @@ require (
|
|||||||
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68 // indirect
|
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68 // indirect
|
||||||
github.com/containerd/containerd v1.4.4 // indirect
|
github.com/containerd/containerd v1.4.4 // indirect
|
||||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e // indirect
|
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e // indirect
|
||||||
github.com/docker/cli v20.10.6+incompatible
|
github.com/docker/cli v20.10.7+incompatible
|
||||||
github.com/docker/docker v20.10.6+incompatible
|
github.com/docker/docker v20.10.7+incompatible
|
||||||
github.com/docker/docker-credential-helpers v0.6.3 // indirect
|
github.com/docker/docker-credential-helpers v0.6.3 // indirect
|
||||||
github.com/docker/go-connections v0.4.0
|
github.com/docker/go-connections v0.4.0
|
||||||
github.com/docker/go-metrics v0.0.1 // indirect
|
github.com/docker/go-metrics v0.0.1 // indirect
|
||||||
github.com/docker/go-units v0.4.0
|
github.com/docker/go-units v0.4.0
|
||||||
github.com/fvbommel/sortorder v1.0.2 // indirect
|
github.com/fvbommel/sortorder v1.0.2 // indirect
|
||||||
github.com/go-test/deep v1.0.4
|
github.com/go-test/deep v1.0.7
|
||||||
github.com/heroku/docker-registry-client v0.0.0-20190909225348-afc9e1acc3d5
|
github.com/heroku/docker-registry-client v0.0.0-20190909225348-afc9e1acc3d5
|
||||||
github.com/imdario/mergo v0.3.12
|
github.com/imdario/mergo v0.3.12
|
||||||
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de
|
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de
|
||||||
@ -24,7 +24,7 @@ require (
|
|||||||
github.com/moby/sys/mount v0.2.0 // indirect
|
github.com/moby/sys/mount v0.2.0 // indirect
|
||||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf // indirect
|
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf // indirect
|
||||||
github.com/morikuni/aec v1.0.0 // indirect
|
github.com/morikuni/aec v1.0.0 // indirect
|
||||||
github.com/opencontainers/runc v1.0.0-rc93 // indirect
|
github.com/opencontainers/runc v1.0.1 // indirect
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/sirupsen/logrus v1.8.1
|
github.com/sirupsen/logrus v1.8.1
|
||||||
github.com/spf13/cobra v1.1.3
|
github.com/spf13/cobra v1.1.3
|
||||||
@ -33,7 +33,7 @@ require (
|
|||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||||
github.com/xeipuuv/gojsonschema v1.2.0
|
github.com/xeipuuv/gojsonschema v1.2.0
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 // indirect
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
|
||||||
golang.org/x/text v0.3.6 // indirect
|
golang.org/x/text v0.3.6 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
gotest.tools v2.2.0+incompatible
|
gotest.tools v2.2.0+incompatible
|
||||||
|
38
go.sum
38
go.sum
@ -77,6 +77,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
|
|||||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
github.com/bitly/go-hostpool v0.1.0/go.mod h1:4gOCgp6+NZnVqlKyZ/iBZFTAJKembaVENUpMkpg42fw=
|
github.com/bitly/go-hostpool v0.1.0/go.mod h1:4gOCgp6+NZnVqlKyZ/iBZFTAJKembaVENUpMkpg42fw=
|
||||||
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
|
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
|
||||||
|
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
|
||||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
||||||
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
|
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
@ -88,12 +89,13 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXe
|
|||||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
|
github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
|
||||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||||
github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
|
github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
|
||||||
github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
|
github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
|
||||||
|
github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
||||||
@ -104,7 +106,7 @@ github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1
|
|||||||
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68 h1:hkGVFjz+plgr5UfxZUTPFbUFIF/Km6/s+RVRIRHLrrY=
|
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68 h1:hkGVFjz+plgr5UfxZUTPFbUFIF/Km6/s+RVRIRHLrrY=
|
||||||
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
|
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
|
||||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||||
github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
|
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
|
||||||
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||||
github.com/containerd/containerd v1.4.4 h1:rtRG4N6Ct7GNssATwgpvMGfnjnwfjnu/Zs9W3Ikzq+M=
|
github.com/containerd/containerd v1.4.4 h1:rtRG4N6Ct7GNssATwgpvMGfnjnwfjnu/Zs9W3Ikzq+M=
|
||||||
github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||||
@ -135,13 +137,13 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
|||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||||
github.com/docker/cli v20.10.6+incompatible h1:LAyI6Lnwv+AUjtp2ZyN1lxqXBtkeFUqm4H7CZMWZuP8=
|
github.com/docker/cli v20.10.7+incompatible h1:pv/3NqibQKphWZiAskMzdz8w0PRbtTaEB+f6NwdU7Is=
|
||||||
github.com/docker/cli v20.10.6+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
github.com/docker/cli v20.10.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||||
github.com/docker/distribution v0.0.0-20171011171712-7484e51bf6af/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v0.0.0-20171011171712-7484e51bf6af/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v20.10.6+incompatible h1:oXI3Vas8TI8Eu/EjH4srKHJBVqraSzJybhxY7Om9faQ=
|
github.com/docker/docker v20.10.7+incompatible h1:Z6O9Nhsjv+ayUEeI1IojKbYcsGdgYSNqxe1s2MYzUhQ=
|
||||||
github.com/docker/docker v20.10.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ=
|
github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
@ -173,6 +175,7 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
|
|||||||
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||||
|
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
@ -201,8 +204,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh
|
|||||||
github.com/go-sql-driver/mysql v1.3.0 h1:pgwjLi/dvffoP9aabwkT3AKpXQM93QARkjFhDDqC1UE=
|
github.com/go-sql-driver/mysql v1.3.0 h1:pgwjLi/dvffoP9aabwkT3AKpXQM93QARkjFhDDqC1UE=
|
||||||
github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=
|
github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
|
||||||
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
|
||||||
github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
|
github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
|
||||||
github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
|
github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
|
||||||
github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
|
github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
|
||||||
@ -393,6 +396,7 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
|||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
|
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
@ -439,8 +443,9 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx
|
|||||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||||
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
|
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
|
||||||
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
||||||
github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM=
|
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
|
github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
|
||||||
|
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf h1:Un6PNx5oMK6CCwO3QTUyPiK2mtZnPrpDl5UnZ64eCkw=
|
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf h1:Un6PNx5oMK6CCwO3QTUyPiK2mtZnPrpDl5UnZ64eCkw=
|
||||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@ -478,11 +483,11 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I
|
|||||||
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
|
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
|
||||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc93 h1:x2UMpOOVf3kQ8arv/EsDGwim8PTNqzL1/EYDr/+scOM=
|
github.com/opencontainers/runc v1.0.1 h1:G18PGckGdAm3yVQRWDVQ1rLSLntiniKJ0cNRT2Tm5gs=
|
||||||
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
github.com/opencontainers/runc v1.0.1/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
|
||||||
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
@ -611,7 +616,6 @@ github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOV
|
|||||||
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
|
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
|
||||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||||
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
||||||
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
@ -818,7 +822,6 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -833,9 +836,10 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 h1:RqytpXGR1iVNX7psjB3ff8y7sNFinVFvkx1c8SjBkio=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
|
||||||
|
16
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
16
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
@ -402,10 +402,24 @@ func fillGo18FileTypeBits(mode int64, fi os.FileInfo) int64 {
|
|||||||
// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem
|
// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem
|
||||||
// to a tar header
|
// to a tar header
|
||||||
func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
|
func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
|
||||||
|
const (
|
||||||
|
// Values based on linux/include/uapi/linux/capability.h
|
||||||
|
xattrCapsSz2 = 20
|
||||||
|
versionOffset = 3
|
||||||
|
vfsCapRevision2 = 2
|
||||||
|
vfsCapRevision3 = 3
|
||||||
|
)
|
||||||
capability, _ := system.Lgetxattr(path, "security.capability")
|
capability, _ := system.Lgetxattr(path, "security.capability")
|
||||||
if capability != nil {
|
if capability != nil {
|
||||||
|
length := len(capability)
|
||||||
|
if capability[versionOffset] == vfsCapRevision3 {
|
||||||
|
// Convert VFS_CAP_REVISION_3 to VFS_CAP_REVISION_2 as root UID makes no
|
||||||
|
// sense outside the user namespace the archive is built in.
|
||||||
|
capability[versionOffset] = vfsCapRevision2
|
||||||
|
length = xattrCapsSz2
|
||||||
|
}
|
||||||
hdr.Xattrs = make(map[string]string)
|
hdr.Xattrs = make(map[string]string)
|
||||||
hdr.Xattrs["security.capability"] = string(capability)
|
hdr.Xattrs["security.capability"] = string(capability[:length])
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
6
vendor/github.com/go-test/deep/.travis.yml
generated
vendored
6
vendor/github.com/go-test/deep/.travis.yml
generated
vendored
@ -1,13 +1,13 @@
|
|||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- "1.10"
|
|
||||||
- "1.11"
|
|
||||||
- "1.12"
|
- "1.12"
|
||||||
|
- "1.13"
|
||||||
|
- "1.14"
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- go get github.com/mattn/goveralls
|
- go get github.com/mattn/goveralls
|
||||||
- go get golang.org/x/tools/cover
|
- go get golang.org/x/tools/cover
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- $HOME/gopath/bin/goveralls -service=travis-ci
|
- $HOME/gopath/bin/goveralls -service=travis-ci -package github.com/go-test/deep
|
||||||
|
12
vendor/github.com/go-test/deep/CHANGES.md
generated
vendored
12
vendor/github.com/go-test/deep/CHANGES.md
generated
vendored
@ -1,5 +1,17 @@
|
|||||||
# go-test/deep Changelog
|
# go-test/deep Changelog
|
||||||
|
|
||||||
|
## v1.0.7 released 2020-07-11
|
||||||
|
|
||||||
|
* Fixed issue #39: Confusing diff when comparing distinct types with the same name (PR #44)
|
||||||
|
|
||||||
|
## v1.0.6 released 2020-04-21
|
||||||
|
|
||||||
|
* Added `NilMapsAreEmpty` variable which causes a nil map to equal an empty map (PR #43) (@yalegko)
|
||||||
|
|
||||||
|
## v1.0.5 released 2020-01-16
|
||||||
|
|
||||||
|
* Added `NilSlicesAreEmpty` variable which causes a nil slice to be equal to an empty slice (PR #27) (@Anaminus)
|
||||||
|
|
||||||
## v1.0.4 released 2019-09-15
|
## v1.0.4 released 2019-09-15
|
||||||
|
|
||||||
* Added \`deep:"-"\` structure field tag to ignore field (PR #38) (@flga)
|
* Added \`deep:"-"\` structure field tag to ignore field (PR #38) (@flga)
|
||||||
|
63
vendor/github.com/go-test/deep/deep.go
generated
vendored
63
vendor/github.com/go-test/deep/deep.go
generated
vendored
@ -29,6 +29,12 @@ var (
|
|||||||
// CompareUnexportedFields causes unexported struct fields, like s in
|
// CompareUnexportedFields causes unexported struct fields, like s in
|
||||||
// T{s int}, to be compared when true.
|
// T{s int}, to be compared when true.
|
||||||
CompareUnexportedFields = false
|
CompareUnexportedFields = false
|
||||||
|
|
||||||
|
// NilSlicesAreEmpty causes a nil slice to be equal to an empty slice.
|
||||||
|
NilSlicesAreEmpty = false
|
||||||
|
|
||||||
|
// NilMapsAreEmpty causes a nil map to be equal to an empty map.
|
||||||
|
NilMapsAreEmpty = false
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -106,7 +112,18 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
aType := a.Type()
|
aType := a.Type()
|
||||||
bType := b.Type()
|
bType := b.Type()
|
||||||
if aType != bType {
|
if aType != bType {
|
||||||
c.saveDiff(aType, bType)
|
// Built-in types don't have a name, so don't report [3]int != [2]int as " != "
|
||||||
|
if aType.Name() == "" || aType.Name() != bType.Name() {
|
||||||
|
c.saveDiff(aType, bType)
|
||||||
|
} else {
|
||||||
|
// Type names can be the same, e.g. pkg/v1.Error and pkg/v2.Error
|
||||||
|
// are both exported as pkg, so unless we include the full pkg path
|
||||||
|
// the diff will be "pkg.Error != pkg.Error"
|
||||||
|
// https://github.com/go-test/deep/issues/39
|
||||||
|
aFullType := aType.PkgPath() + "." + aType.Name()
|
||||||
|
bFullType := bType.PkgPath() + "." + bType.Name()
|
||||||
|
c.saveDiff(aFullType, bFullType)
|
||||||
|
}
|
||||||
logError(ErrTypeMismatch)
|
logError(ErrTypeMismatch)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -228,10 +245,20 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if a.IsNil() || b.IsNil() {
|
if a.IsNil() || b.IsNil() {
|
||||||
if a.IsNil() && !b.IsNil() {
|
if NilMapsAreEmpty {
|
||||||
c.saveDiff("<nil map>", b)
|
if a.IsNil() && b.Len() != 0 {
|
||||||
} else if !a.IsNil() && b.IsNil() {
|
c.saveDiff("<nil map>", b)
|
||||||
c.saveDiff(a, "<nil map>")
|
return
|
||||||
|
} else if a.Len() != 0 && b.IsNil() {
|
||||||
|
c.saveDiff(a, "<nil map>")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if a.IsNil() && !b.IsNil() {
|
||||||
|
c.saveDiff("<nil map>", b)
|
||||||
|
} else if !a.IsNil() && b.IsNil() {
|
||||||
|
c.saveDiff(a, "<nil map>")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -241,7 +268,7 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, key := range a.MapKeys() {
|
for _, key := range a.MapKeys() {
|
||||||
c.push(fmt.Sprintf("map[%s]", key))
|
c.push(fmt.Sprintf("map[%v]", key))
|
||||||
|
|
||||||
aVal := a.MapIndex(key)
|
aVal := a.MapIndex(key)
|
||||||
bVal := b.MapIndex(key)
|
bVal := b.MapIndex(key)
|
||||||
@ -263,7 +290,7 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
c.push(fmt.Sprintf("map[%s]", key))
|
c.push(fmt.Sprintf("map[%v]", key))
|
||||||
c.saveDiff("<does not have key>", b.MapIndex(key))
|
c.saveDiff("<does not have key>", b.MapIndex(key))
|
||||||
c.pop()
|
c.pop()
|
||||||
if len(c.diff) >= MaxDiff {
|
if len(c.diff) >= MaxDiff {
|
||||||
@ -281,13 +308,22 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
if a.IsNil() || b.IsNil() {
|
if NilSlicesAreEmpty {
|
||||||
|
if a.IsNil() && b.Len() != 0 {
|
||||||
|
c.saveDiff("<nil slice>", b)
|
||||||
|
return
|
||||||
|
} else if a.Len() != 0 && b.IsNil() {
|
||||||
|
c.saveDiff(a, "<nil slice>")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if a.IsNil() && !b.IsNil() {
|
if a.IsNil() && !b.IsNil() {
|
||||||
c.saveDiff("<nil slice>", b)
|
c.saveDiff("<nil slice>", b)
|
||||||
|
return
|
||||||
} else if !a.IsNil() && b.IsNil() {
|
} else if !a.IsNil() && b.IsNil() {
|
||||||
c.saveDiff(a, "<nil slice>")
|
c.saveDiff(a, "<nil slice>")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aLen := a.Len()
|
aLen := a.Len()
|
||||||
@ -321,8 +357,13 @@ func (c *cmp) equals(a, b reflect.Value, level int) {
|
|||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
case reflect.Float32, reflect.Float64:
|
case reflect.Float32, reflect.Float64:
|
||||||
// Avoid 0.04147685731961082 != 0.041476857319611
|
// Round floats to FloatPrecision decimal places to compare with
|
||||||
// 6 decimal places is close enough
|
// user-defined precision. As is commonly know, floats have "imprecision"
|
||||||
|
// such that 0.1 becomes 0.100000001490116119384765625. This cannot
|
||||||
|
// be avoided; it can only be handled. Issue 30 suggested that floats
|
||||||
|
// be compared using an epsilon: equal = |a-b| < epsilon.
|
||||||
|
// In many cases the result is the same, but I think epsilon is a little
|
||||||
|
// less clear for users to reason about. See issue 30 for details.
|
||||||
aval := fmt.Sprintf(c.floatFormat, a.Float())
|
aval := fmt.Sprintf(c.floatFormat, a.Float())
|
||||||
bval := fmt.Sprintf(c.floatFormat, b.Float())
|
bval := fmt.Sprintf(c.floatFormat, b.Float())
|
||||||
if aval != bval {
|
if aval != bval {
|
||||||
|
2
vendor/github.com/go-test/deep/go.mod
generated
vendored
2
vendor/github.com/go-test/deep/go.mod
generated
vendored
@ -1 +1,3 @@
|
|||||||
module github.com/go-test/deep
|
module github.com/go-test/deep
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
0
vendor/github.com/go-test/deep/go.sum
generated
vendored
Normal file
0
vendor/github.com/go-test/deep/go.sum
generated
vendored
Normal file
33
vendor/github.com/moby/sys/mountinfo/mountinfo.go
generated
vendored
33
vendor/github.com/moby/sys/mountinfo/mountinfo.go
generated
vendored
@ -29,35 +29,38 @@ type Info struct {
|
|||||||
// ID is a unique identifier of the mount (may be reused after umount).
|
// ID is a unique identifier of the mount (may be reused after umount).
|
||||||
ID int
|
ID int
|
||||||
|
|
||||||
// Parent indicates the ID of the mount parent (or of self for the top of the
|
// Parent is the ID of the parent mount (or of self for the root
|
||||||
// mount tree).
|
// of this mount namespace's mount tree).
|
||||||
Parent int
|
Parent int
|
||||||
|
|
||||||
// Major indicates one half of the device ID which identifies the device class.
|
// Major and Minor are the major and the minor components of the Dev
|
||||||
Major int
|
// field of unix.Stat_t structure returned by unix.*Stat calls for
|
||||||
|
// files on this filesystem.
|
||||||
|
Major, Minor int
|
||||||
|
|
||||||
// Minor indicates one half of the device ID which identifies a specific
|
// Root is the pathname of the directory in the filesystem which forms
|
||||||
// instance of device.
|
// the root of this mount.
|
||||||
Minor int
|
|
||||||
|
|
||||||
// Root of the mount within the filesystem.
|
|
||||||
Root string
|
Root string
|
||||||
|
|
||||||
// Mountpoint indicates the mount point relative to the process's root.
|
// Mountpoint is the pathname of the mount point relative to the
|
||||||
|
// process's root directory.
|
||||||
Mountpoint string
|
Mountpoint string
|
||||||
|
|
||||||
// Options represents mount-specific options.
|
// Options is a comma-separated list of mount options.
|
||||||
Options string
|
Options string
|
||||||
|
|
||||||
// Optional represents optional fields.
|
// Optional are zero or more fields of the form "tag[:value]",
|
||||||
|
// separated by a space. Currently, the possible optional fields are
|
||||||
|
// "shared", "master", "propagate_from", and "unbindable". For more
|
||||||
|
// information, see mount_namespaces(7) Linux man page.
|
||||||
Optional string
|
Optional string
|
||||||
|
|
||||||
// FSType indicates the type of filesystem, such as EXT3.
|
// FSType is the filesystem type in the form "type[.subtype]".
|
||||||
FSType string
|
FSType string
|
||||||
|
|
||||||
// Source indicates filesystem specific information or "none".
|
// Source is filesystem-specific information, or "none".
|
||||||
Source string
|
Source string
|
||||||
|
|
||||||
// VFSOptions represents per super block options.
|
// VFSOptions is a comma-separated list of superblock options.
|
||||||
VFSOptions string
|
VFSOptions string
|
||||||
}
|
}
|
||||||
|
11
vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go
generated
vendored
11
vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go
generated
vendored
@ -14,11 +14,16 @@ import "strings"
|
|||||||
// stop: true if parsing should be stopped after the entry.
|
// stop: true if parsing should be stopped after the entry.
|
||||||
type FilterFunc func(*Info) (skip, stop bool)
|
type FilterFunc func(*Info) (skip, stop bool)
|
||||||
|
|
||||||
// PrefixFilter discards all entries whose mount points
|
// PrefixFilter discards all entries whose mount points do not start with, or
|
||||||
// do not start with a specific prefix.
|
// are equal to the path specified in prefix. The prefix path must be absolute,
|
||||||
|
// have all symlinks resolved, and cleaned (i.e. no extra slashes or dots).
|
||||||
|
//
|
||||||
|
// PrefixFilter treats prefix as a path, not a partial prefix, which means that
|
||||||
|
// given "/foo", "/foo/bar" and "/foobar" entries, PrefixFilter("/foo") returns
|
||||||
|
// "/foo" and "/foo/bar", and discards "/foobar".
|
||||||
func PrefixFilter(prefix string) FilterFunc {
|
func PrefixFilter(prefix string) FilterFunc {
|
||||||
return func(m *Info) (bool, bool) {
|
return func(m *Info) (bool, bool) {
|
||||||
skip := !strings.HasPrefix(m.Mountpoint, prefix)
|
skip := !strings.HasPrefix(m.Mountpoint+"/", prefix+"/")
|
||||||
return skip, false
|
return skip, false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
5
vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go
generated
vendored
5
vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go
generated
vendored
@ -12,7 +12,8 @@ import (
|
|||||||
// GetMountsFromReader retrieves a list of mounts from the
|
// GetMountsFromReader retrieves a list of mounts from the
|
||||||
// reader provided, with an optional filter applied (use nil
|
// reader provided, with an optional filter applied (use nil
|
||||||
// for no filter). This can be useful in tests or benchmarks
|
// for no filter). This can be useful in tests or benchmarks
|
||||||
// that provide a fake mountinfo data.
|
// that provide fake mountinfo data, or when a source other
|
||||||
|
// than /proc/self/mountinfo needs to be read from.
|
||||||
//
|
//
|
||||||
// This function is Linux-specific.
|
// This function is Linux-specific.
|
||||||
func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
|
func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
|
||||||
@ -133,8 +134,6 @@ func GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse /proc/self/mountinfo because comparing Dev and ino does not work from
|
|
||||||
// bind mounts
|
|
||||||
func parseMountTable(filter FilterFunc) ([]*Info, error) {
|
func parseMountTable(filter FilterFunc) ([]*Info, error) {
|
||||||
f, err := os.Open("/proc/self/mountinfo")
|
f, err := os.Open("/proc/self/mountinfo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
2
vendor/github.com/opencontainers/runc/libcontainer/user/MAINTAINERS
generated
vendored
2
vendor/github.com/opencontainers/runc/libcontainer/user/MAINTAINERS
generated
vendored
@ -1,2 +0,0 @@
|
|||||||
Tianon Gravi <admwiggin@gmail.com> (@tianon)
|
|
||||||
Aleksa Sarai <cyphar@cyphar.com> (@cyphar)
|
|
41
vendor/github.com/opencontainers/runc/libcontainer/user/lookup.go
generated
vendored
41
vendor/github.com/opencontainers/runc/libcontainer/user/lookup.go
generated
vendored
@ -1,41 +0,0 @@
|
|||||||
package user
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// The current operating system does not provide the required data for user lookups.
|
|
||||||
ErrUnsupported = errors.New("user lookup: operating system does not provide passwd-formatted data")
|
|
||||||
// No matching entries found in file.
|
|
||||||
ErrNoPasswdEntries = errors.New("no matching entries in passwd file")
|
|
||||||
ErrNoGroupEntries = errors.New("no matching entries in group file")
|
|
||||||
)
|
|
||||||
|
|
||||||
// LookupUser looks up a user by their username in /etc/passwd. If the user
|
|
||||||
// cannot be found (or there is no /etc/passwd file on the filesystem), then
|
|
||||||
// LookupUser returns an error.
|
|
||||||
func LookupUser(username string) (User, error) {
|
|
||||||
return lookupUser(username)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupUid looks up a user by their user id in /etc/passwd. If the user cannot
|
|
||||||
// be found (or there is no /etc/passwd file on the filesystem), then LookupId
|
|
||||||
// returns an error.
|
|
||||||
func LookupUid(uid int) (User, error) {
|
|
||||||
return lookupUid(uid)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupGroup looks up a group by its name in /etc/group. If the group cannot
|
|
||||||
// be found (or there is no /etc/group file on the filesystem), then LookupGroup
|
|
||||||
// returns an error.
|
|
||||||
func LookupGroup(groupname string) (Group, error) {
|
|
||||||
return lookupGroup(groupname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LookupGid looks up a group by its group id in /etc/group. If the group cannot
|
|
||||||
// be found (or there is no /etc/group file on the filesystem), then LookupGid
|
|
||||||
// returns an error.
|
|
||||||
func LookupGid(gid int) (Group, error) {
|
|
||||||
return lookupGid(gid)
|
|
||||||
}
|
|
20
vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
generated
vendored
20
vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
generated
vendored
@ -16,13 +16,19 @@ const (
|
|||||||
unixGroupPath = "/etc/group"
|
unixGroupPath = "/etc/group"
|
||||||
)
|
)
|
||||||
|
|
||||||
func lookupUser(username string) (User, error) {
|
// LookupUser looks up a user by their username in /etc/passwd. If the user
|
||||||
|
// cannot be found (or there is no /etc/passwd file on the filesystem), then
|
||||||
|
// LookupUser returns an error.
|
||||||
|
func LookupUser(username string) (User, error) {
|
||||||
return lookupUserFunc(func(u User) bool {
|
return lookupUserFunc(func(u User) bool {
|
||||||
return u.Name == username
|
return u.Name == username
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupUid(uid int) (User, error) {
|
// LookupUid looks up a user by their user id in /etc/passwd. If the user cannot
|
||||||
|
// be found (or there is no /etc/passwd file on the filesystem), then LookupId
|
||||||
|
// returns an error.
|
||||||
|
func LookupUid(uid int) (User, error) {
|
||||||
return lookupUserFunc(func(u User) bool {
|
return lookupUserFunc(func(u User) bool {
|
||||||
return u.Uid == uid
|
return u.Uid == uid
|
||||||
})
|
})
|
||||||
@ -51,13 +57,19 @@ func lookupUserFunc(filter func(u User) bool) (User, error) {
|
|||||||
return users[0], nil
|
return users[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupGroup(groupname string) (Group, error) {
|
// LookupGroup looks up a group by its name in /etc/group. If the group cannot
|
||||||
|
// be found (or there is no /etc/group file on the filesystem), then LookupGroup
|
||||||
|
// returns an error.
|
||||||
|
func LookupGroup(groupname string) (Group, error) {
|
||||||
return lookupGroupFunc(func(g Group) bool {
|
return lookupGroupFunc(func(g Group) bool {
|
||||||
return g.Name == groupname
|
return g.Name == groupname
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupGid(gid int) (Group, error) {
|
// LookupGid looks up a group by its group id in /etc/group. If the group cannot
|
||||||
|
// be found (or there is no /etc/group file on the filesystem), then LookupGid
|
||||||
|
// returns an error.
|
||||||
|
func LookupGid(gid int) (Group, error) {
|
||||||
return lookupGroupFunc(func(g Group) bool {
|
return lookupGroupFunc(func(g Group) bool {
|
||||||
return g.Gid == gid
|
return g.Gid == gid
|
||||||
})
|
})
|
||||||
|
40
vendor/github.com/opencontainers/runc/libcontainer/user/lookup_windows.go
generated
vendored
40
vendor/github.com/opencontainers/runc/libcontainer/user/lookup_windows.go
generated
vendored
@ -1,40 +0,0 @@
|
|||||||
// +build windows
|
|
||||||
|
|
||||||
package user
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os/user"
|
|
||||||
"strconv"
|
|
||||||
)
|
|
||||||
|
|
||||||
func lookupUser(username string) (User, error) {
|
|
||||||
u, err := user.Lookup(username)
|
|
||||||
if err != nil {
|
|
||||||
return User{}, err
|
|
||||||
}
|
|
||||||
return userFromOS(u)
|
|
||||||
}
|
|
||||||
|
|
||||||
func lookupUid(uid int) (User, error) {
|
|
||||||
u, err := user.LookupId(strconv.Itoa(uid))
|
|
||||||
if err != nil {
|
|
||||||
return User{}, err
|
|
||||||
}
|
|
||||||
return userFromOS(u)
|
|
||||||
}
|
|
||||||
|
|
||||||
func lookupGroup(groupname string) (Group, error) {
|
|
||||||
g, err := user.LookupGroup(groupname)
|
|
||||||
if err != nil {
|
|
||||||
return Group{}, err
|
|
||||||
}
|
|
||||||
return groupFromOS(g)
|
|
||||||
}
|
|
||||||
|
|
||||||
func lookupGid(gid int) (Group, error) {
|
|
||||||
g, err := user.LookupGroupId(strconv.Itoa(gid))
|
|
||||||
if err != nil {
|
|
||||||
return Group{}, err
|
|
||||||
}
|
|
||||||
return groupFromOS(g)
|
|
||||||
}
|
|
152
vendor/github.com/opencontainers/runc/libcontainer/user/user.go
generated
vendored
152
vendor/github.com/opencontainers/runc/libcontainer/user/user.go
generated
vendored
@ -2,21 +2,27 @@ package user
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
minId = 0
|
minID = 0
|
||||||
maxId = 1<<31 - 1 //for 32-bit systems compatibility
|
maxID = 1<<31 - 1 // for 32-bit systems compatibility
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrRange = fmt.Errorf("uids and gids must be in range %d-%d", minId, maxId)
|
// ErrNoPasswdEntries is returned if no matching entries were found in /etc/group.
|
||||||
|
ErrNoPasswdEntries = errors.New("no matching entries in passwd file")
|
||||||
|
// ErrNoGroupEntries is returned if no matching entries were found in /etc/passwd.
|
||||||
|
ErrNoGroupEntries = errors.New("no matching entries in group file")
|
||||||
|
// ErrRange is returned if a UID or GID is outside of the valid range.
|
||||||
|
ErrRange = fmt.Errorf("uids and gids must be in range %d-%d", minID, maxID)
|
||||||
)
|
)
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
@ -29,28 +35,6 @@ type User struct {
|
|||||||
Shell string
|
Shell string
|
||||||
}
|
}
|
||||||
|
|
||||||
// userFromOS converts an os/user.(*User) to local User
|
|
||||||
//
|
|
||||||
// (This does not include Pass, Shell or Gecos)
|
|
||||||
func userFromOS(u *user.User) (User, error) {
|
|
||||||
newUser := User{
|
|
||||||
Name: u.Username,
|
|
||||||
Home: u.HomeDir,
|
|
||||||
}
|
|
||||||
id, err := strconv.Atoi(u.Uid)
|
|
||||||
if err != nil {
|
|
||||||
return newUser, err
|
|
||||||
}
|
|
||||||
newUser.Uid = id
|
|
||||||
|
|
||||||
id, err = strconv.Atoi(u.Gid)
|
|
||||||
if err != nil {
|
|
||||||
return newUser, err
|
|
||||||
}
|
|
||||||
newUser.Gid = id
|
|
||||||
return newUser, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type Group struct {
|
type Group struct {
|
||||||
Name string
|
Name string
|
||||||
Pass string
|
Pass string
|
||||||
@ -58,23 +42,6 @@ type Group struct {
|
|||||||
List []string
|
List []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// groupFromOS converts an os/user.(*Group) to local Group
|
|
||||||
//
|
|
||||||
// (This does not include Pass or List)
|
|
||||||
func groupFromOS(g *user.Group) (Group, error) {
|
|
||||||
newGroup := Group{
|
|
||||||
Name: g.Name,
|
|
||||||
}
|
|
||||||
|
|
||||||
id, err := strconv.Atoi(g.Gid)
|
|
||||||
if err != nil {
|
|
||||||
return newGroup, err
|
|
||||||
}
|
|
||||||
newGroup.Gid = id
|
|
||||||
|
|
||||||
return newGroup, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SubID represents an entry in /etc/sub{u,g}id
|
// SubID represents an entry in /etc/sub{u,g}id
|
||||||
type SubID struct {
|
type SubID struct {
|
||||||
Name string
|
Name string
|
||||||
@ -89,11 +56,11 @@ type IDMap struct {
|
|||||||
Count int64
|
Count int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseLine(line string, v ...interface{}) {
|
func parseLine(line []byte, v ...interface{}) {
|
||||||
parseParts(strings.Split(line, ":"), v...)
|
parseParts(bytes.Split(line, []byte(":")), v...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseParts(parts []string, v ...interface{}) {
|
func parseParts(parts [][]byte, v ...interface{}) {
|
||||||
if len(parts) == 0 {
|
if len(parts) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -109,16 +76,16 @@ func parseParts(parts []string, v ...interface{}) {
|
|||||||
// This is legit.
|
// This is legit.
|
||||||
switch e := v[i].(type) {
|
switch e := v[i].(type) {
|
||||||
case *string:
|
case *string:
|
||||||
*e = p
|
*e = string(p)
|
||||||
case *int:
|
case *int:
|
||||||
// "numbers", with conversion errors ignored because of some misbehaving configuration files.
|
// "numbers", with conversion errors ignored because of some misbehaving configuration files.
|
||||||
*e, _ = strconv.Atoi(p)
|
*e, _ = strconv.Atoi(string(p))
|
||||||
case *int64:
|
case *int64:
|
||||||
*e, _ = strconv.ParseInt(p, 10, 64)
|
*e, _ = strconv.ParseInt(string(p), 10, 64)
|
||||||
case *[]string:
|
case *[]string:
|
||||||
// Comma-separated lists.
|
// Comma-separated lists.
|
||||||
if p != "" {
|
if len(p) != 0 {
|
||||||
*e = strings.Split(p, ",")
|
*e = strings.Split(string(p), ",")
|
||||||
} else {
|
} else {
|
||||||
*e = []string{}
|
*e = []string{}
|
||||||
}
|
}
|
||||||
@ -162,8 +129,8 @@ func ParsePasswdFilter(r io.Reader, filter func(User) bool) ([]User, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
line := strings.TrimSpace(s.Text())
|
line := bytes.TrimSpace(s.Bytes())
|
||||||
if line == "" {
|
if len(line) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,15 +180,53 @@ func ParseGroupFilter(r io.Reader, filter func(Group) bool) ([]Group, error) {
|
|||||||
if r == nil {
|
if r == nil {
|
||||||
return nil, fmt.Errorf("nil source for group-formatted data")
|
return nil, fmt.Errorf("nil source for group-formatted data")
|
||||||
}
|
}
|
||||||
|
rd := bufio.NewReader(r)
|
||||||
|
out := []Group{}
|
||||||
|
|
||||||
var (
|
// Read the file line-by-line.
|
||||||
s = bufio.NewScanner(r)
|
for {
|
||||||
out = []Group{}
|
var (
|
||||||
)
|
isPrefix bool
|
||||||
|
wholeLine []byte
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
for s.Scan() {
|
// Read the next line. We do so in chunks (as much as reader's
|
||||||
text := s.Text()
|
// buffer is able to keep), check if we read enough columns
|
||||||
if text == "" {
|
// already on each step and store final result in wholeLine.
|
||||||
|
for {
|
||||||
|
var line []byte
|
||||||
|
line, isPrefix, err = rd.ReadLine()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
// We should return no error if EOF is reached
|
||||||
|
// without a match.
|
||||||
|
if err == io.EOF { //nolint:errorlint // comparison with io.EOF is legit, https://github.com/polyfloyd/go-errorlint/pull/12
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple common case: line is short enough to fit in a
|
||||||
|
// single reader's buffer.
|
||||||
|
if !isPrefix && len(wholeLine) == 0 {
|
||||||
|
wholeLine = line
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
wholeLine = append(wholeLine, line...)
|
||||||
|
|
||||||
|
// Check if we read the whole line already.
|
||||||
|
if !isPrefix {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// There's no spec for /etc/passwd or /etc/group, but we try to follow
|
||||||
|
// the same rules as the glibc parser, which allows comments and blank
|
||||||
|
// space at the beginning of a line.
|
||||||
|
wholeLine = bytes.TrimSpace(wholeLine)
|
||||||
|
if len(wholeLine) == 0 || wholeLine[0] == '#' {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,17 +236,12 @@ func ParseGroupFilter(r io.Reader, filter func(Group) bool) ([]Group, error) {
|
|||||||
// root:x:0:root
|
// root:x:0:root
|
||||||
// adm:x:4:root,adm,daemon
|
// adm:x:4:root,adm,daemon
|
||||||
p := Group{}
|
p := Group{}
|
||||||
parseLine(text, &p.Name, &p.Pass, &p.Gid, &p.List)
|
parseLine(wholeLine, &p.Name, &p.Pass, &p.Gid, &p.List)
|
||||||
|
|
||||||
if filter == nil || filter(p) {
|
if filter == nil || filter(p) {
|
||||||
out = append(out, p)
|
out = append(out, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := s.Err(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return out, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ExecUser struct {
|
type ExecUser struct {
|
||||||
@ -312,7 +312,7 @@ func GetExecUser(userSpec string, defaults *ExecUser, passwd, group io.Reader) (
|
|||||||
|
|
||||||
// Allow for userArg to have either "user" syntax, or optionally "user:group" syntax
|
// Allow for userArg to have either "user" syntax, or optionally "user:group" syntax
|
||||||
var userArg, groupArg string
|
var userArg, groupArg string
|
||||||
parseLine(userSpec, &userArg, &groupArg)
|
parseLine([]byte(userSpec), &userArg, &groupArg)
|
||||||
|
|
||||||
// Convert userArg and groupArg to be numeric, so we don't have to execute
|
// Convert userArg and groupArg to be numeric, so we don't have to execute
|
||||||
// Atoi *twice* for each iteration over lines.
|
// Atoi *twice* for each iteration over lines.
|
||||||
@ -360,7 +360,7 @@ func GetExecUser(userSpec string, defaults *ExecUser, passwd, group io.Reader) (
|
|||||||
user.Uid = uidArg
|
user.Uid = uidArg
|
||||||
|
|
||||||
// Must be inside valid uid range.
|
// Must be inside valid uid range.
|
||||||
if user.Uid < minId || user.Uid > maxId {
|
if user.Uid < minID || user.Uid > maxID {
|
||||||
return nil, ErrRange
|
return nil, ErrRange
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +409,7 @@ func GetExecUser(userSpec string, defaults *ExecUser, passwd, group io.Reader) (
|
|||||||
user.Gid = gidArg
|
user.Gid = gidArg
|
||||||
|
|
||||||
// Must be inside valid gid range.
|
// Must be inside valid gid range.
|
||||||
if user.Gid < minId || user.Gid > maxId {
|
if user.Gid < minID || user.Gid > maxID {
|
||||||
return nil, ErrRange
|
return nil, ErrRange
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,7 +433,7 @@ func GetExecUser(userSpec string, defaults *ExecUser, passwd, group io.Reader) (
|
|||||||
// or the given group data is nil, the id will be returned as-is
|
// or the given group data is nil, the id will be returned as-is
|
||||||
// provided it is in the legal range.
|
// provided it is in the legal range.
|
||||||
func GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, error) {
|
func GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, error) {
|
||||||
var groups = []Group{}
|
groups := []Group{}
|
||||||
if group != nil {
|
if group != nil {
|
||||||
var err error
|
var err error
|
||||||
groups, err = ParseGroupFilter(group, func(g Group) bool {
|
groups, err = ParseGroupFilter(group, func(g Group) bool {
|
||||||
@ -471,7 +471,7 @@ func GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, err
|
|||||||
return nil, fmt.Errorf("Unable to find group %s", ag)
|
return nil, fmt.Errorf("Unable to find group %s", ag)
|
||||||
}
|
}
|
||||||
// Ensure gid is inside gid range.
|
// Ensure gid is inside gid range.
|
||||||
if gid < minId || gid > maxId {
|
if gid < minID || gid > maxID {
|
||||||
return nil, ErrRange
|
return nil, ErrRange
|
||||||
}
|
}
|
||||||
gidMap[int(gid)] = struct{}{}
|
gidMap[int(gid)] = struct{}{}
|
||||||
@ -530,8 +530,8 @@ func ParseSubIDFilter(r io.Reader, filter func(SubID) bool) ([]SubID, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
line := strings.TrimSpace(s.Text())
|
line := bytes.TrimSpace(s.Bytes())
|
||||||
if line == "" {
|
if len(line) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,14 +583,14 @@ func ParseIDMapFilter(r io.Reader, filter func(IDMap) bool) ([]IDMap, error) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
line := strings.TrimSpace(s.Text())
|
line := bytes.TrimSpace(s.Bytes())
|
||||||
if line == "" {
|
if len(line) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// see: man 7 user_namespaces
|
// see: man 7 user_namespaces
|
||||||
p := IDMap{}
|
p := IDMap{}
|
||||||
parseParts(strings.Fields(line), &p.ID, &p.ParentID, &p.Count)
|
parseParts(bytes.Fields(line), &p.ID, &p.ParentID, &p.Count)
|
||||||
|
|
||||||
if filter == nil || filter(p) {
|
if filter == nil || filter(p) {
|
||||||
out = append(out, p)
|
out = append(out, p)
|
||||||
|
42
vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go
generated
vendored
Normal file
42
vendor/github.com/opencontainers/runc/libcontainer/user/user_fuzzer.go
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// +build gofuzz
|
||||||
|
|
||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IsDivisbleBy(n int, divisibleby int) bool {
|
||||||
|
return (n % divisibleby) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func FuzzUser(data []byte) int {
|
||||||
|
if len(data) == 0 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if !IsDivisbleBy(len(data), 5) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var divided [][]byte
|
||||||
|
|
||||||
|
chunkSize := len(data) / 5
|
||||||
|
|
||||||
|
for i := 0; i < len(data); i += chunkSize {
|
||||||
|
end := i + chunkSize
|
||||||
|
|
||||||
|
divided = append(divided, data[i:end])
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = ParsePasswdFilter(strings.NewReader(string(divided[0])), nil)
|
||||||
|
|
||||||
|
var passwd, group io.Reader
|
||||||
|
|
||||||
|
group = strings.NewReader(string(divided[1]))
|
||||||
|
_, _ = GetAdditionalGroups([]string{string(divided[2])}, group)
|
||||||
|
|
||||||
|
passwd = strings.NewReader(string(divided[3]))
|
||||||
|
_, _ = GetExecUser(string(divided[4]), nil, passwd, group)
|
||||||
|
return 1
|
||||||
|
}
|
2
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
2
vendor/golang.org/x/sys/unix/ztypes_linux.go
generated
vendored
@ -1773,6 +1773,8 @@ const (
|
|||||||
NFPROTO_NUMPROTO = 0xd
|
NFPROTO_NUMPROTO = 0xd
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const SO_ORIGINAL_DST = 0x50
|
||||||
|
|
||||||
type Nfgenmsg struct {
|
type Nfgenmsg struct {
|
||||||
Nfgen_family uint8
|
Nfgen_family uint8
|
||||||
Version uint8
|
Version uint8
|
||||||
|
2
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
2
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
@ -680,7 +680,7 @@ const (
|
|||||||
WTD_CHOICE_CERT = 5
|
WTD_CHOICE_CERT = 5
|
||||||
|
|
||||||
WTD_STATEACTION_IGNORE = 0x00000000
|
WTD_STATEACTION_IGNORE = 0x00000000
|
||||||
WTD_STATEACTION_VERIFY = 0x00000010
|
WTD_STATEACTION_VERIFY = 0x00000001
|
||||||
WTD_STATEACTION_CLOSE = 0x00000002
|
WTD_STATEACTION_CLOSE = 0x00000002
|
||||||
WTD_STATEACTION_AUTO_CACHE = 0x00000003
|
WTD_STATEACTION_AUTO_CACHE = 0x00000003
|
||||||
WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
|
WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
|
||||||
|
12
vendor/modules.txt
vendored
12
vendor/modules.txt
vendored
@ -44,7 +44,7 @@ github.com/containerd/containerd/sys
|
|||||||
## explicit
|
## explicit
|
||||||
# github.com/davecgh/go-spew v1.1.1
|
# github.com/davecgh/go-spew v1.1.1
|
||||||
github.com/davecgh/go-spew/spew
|
github.com/davecgh/go-spew/spew
|
||||||
# github.com/docker/cli v20.10.6+incompatible
|
# github.com/docker/cli v20.10.7+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/cli/cli/command
|
github.com/docker/cli/cli/command
|
||||||
github.com/docker/cli/cli/config
|
github.com/docker/cli/cli/config
|
||||||
@ -84,7 +84,7 @@ github.com/docker/distribution/registry/client/transport
|
|||||||
github.com/docker/distribution/registry/storage/cache
|
github.com/docker/distribution/registry/storage/cache
|
||||||
github.com/docker/distribution/registry/storage/cache/memory
|
github.com/docker/distribution/registry/storage/cache/memory
|
||||||
github.com/docker/distribution/uuid
|
github.com/docker/distribution/uuid
|
||||||
# github.com/docker/docker v20.10.6+incompatible
|
# github.com/docker/docker v20.10.7+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/docker/api
|
github.com/docker/docker/api
|
||||||
github.com/docker/docker/api/types
|
github.com/docker/docker/api/types
|
||||||
@ -142,7 +142,7 @@ github.com/fsnotify/fsnotify
|
|||||||
github.com/fvbommel/sortorder
|
github.com/fvbommel/sortorder
|
||||||
# github.com/go-logr/logr v0.4.0
|
# github.com/go-logr/logr v0.4.0
|
||||||
github.com/go-logr/logr
|
github.com/go-logr/logr
|
||||||
# github.com/go-test/deep v1.0.4
|
# github.com/go-test/deep v1.0.7
|
||||||
## explicit
|
## explicit
|
||||||
github.com/go-test/deep
|
github.com/go-test/deep
|
||||||
# github.com/gogo/protobuf v1.3.2
|
# github.com/gogo/protobuf v1.3.2
|
||||||
@ -211,7 +211,7 @@ github.com/mitchellh/reflectwalk
|
|||||||
# github.com/moby/sys/mount v0.2.0
|
# github.com/moby/sys/mount v0.2.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/moby/sys/mount
|
github.com/moby/sys/mount
|
||||||
# github.com/moby/sys/mountinfo v0.4.0
|
# github.com/moby/sys/mountinfo v0.4.1
|
||||||
github.com/moby/sys/mountinfo
|
github.com/moby/sys/mountinfo
|
||||||
# github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf
|
# github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf
|
||||||
## explicit
|
## explicit
|
||||||
@ -229,7 +229,7 @@ github.com/opencontainers/go-digest
|
|||||||
# github.com/opencontainers/image-spec v1.0.1
|
# github.com/opencontainers/image-spec v1.0.1
|
||||||
github.com/opencontainers/image-spec/specs-go
|
github.com/opencontainers/image-spec/specs-go
|
||||||
github.com/opencontainers/image-spec/specs-go/v1
|
github.com/opencontainers/image-spec/specs-go/v1
|
||||||
# github.com/opencontainers/runc v1.0.0-rc93
|
# github.com/opencontainers/runc v1.0.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/opencontainers/runc/libcontainer/user
|
github.com/opencontainers/runc/libcontainer/user
|
||||||
# github.com/pelletier/go-toml v1.9.3
|
# github.com/pelletier/go-toml v1.9.3
|
||||||
@ -324,7 +324,7 @@ golang.org/x/oauth2/internal
|
|||||||
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
# golang.org/x/sys v0.0.0-20210616094352-59db8d763f22
|
# golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
|
Loading…
Reference in New Issue
Block a user