mirror of
https://github.com/containers/podman.git
synced 2025-12-15 03:18:45 +08:00
Vendor in containers/buildah 1.16.1
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
1526
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
Normal file
1526
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
79
vendor/github.com/containers/buildah/copier/syscall_unix.go
generated
vendored
Normal file
79
vendor/github.com/containers/buildah/copier/syscall_unix.go
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
// +build !windows
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
var canChroot = true
|
||||
|
||||
func chroot(root string) (bool, error) {
|
||||
if canChroot {
|
||||
if err := os.Chdir(root); err != nil {
|
||||
return false, fmt.Errorf("error changing to intended-new-root directory %q: %v", root, err)
|
||||
}
|
||||
if err := unix.Chroot(root); err != nil {
|
||||
return false, fmt.Errorf("error chrooting to directory %q: %v", root, err)
|
||||
}
|
||||
if err := os.Chdir(string(os.PathSeparator)); err != nil {
|
||||
return false, fmt.Errorf("error changing to just-became-root directory %q: %v", root, err)
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func chrMode(mode os.FileMode) uint32 {
|
||||
return uint32(unix.S_IFCHR | mode)
|
||||
}
|
||||
|
||||
func blkMode(mode os.FileMode) uint32 {
|
||||
return uint32(unix.S_IFBLK | mode)
|
||||
}
|
||||
|
||||
func mkdev(major, minor uint32) uint64 {
|
||||
return unix.Mkdev(major, minor)
|
||||
}
|
||||
|
||||
func mkfifo(path string, mode uint32) error {
|
||||
return unix.Mkfifo(path, mode)
|
||||
}
|
||||
|
||||
func mknod(path string, mode uint32, dev int) error {
|
||||
return unix.Mknod(path, mode, dev)
|
||||
}
|
||||
|
||||
func chmod(path string, mode os.FileMode) error {
|
||||
return os.Chmod(path, mode)
|
||||
}
|
||||
|
||||
func chown(path string, uid, gid int) error {
|
||||
return os.Chown(path, uid, gid)
|
||||
}
|
||||
|
||||
func lchown(path string, uid, gid int) error {
|
||||
return os.Lchown(path, uid, gid)
|
||||
}
|
||||
|
||||
func lutimes(isSymlink bool, path string, atime, mtime time.Time) error {
|
||||
if atime.IsZero() || mtime.IsZero() {
|
||||
now := time.Now()
|
||||
if atime.IsZero() {
|
||||
atime = now
|
||||
}
|
||||
if mtime.IsZero() {
|
||||
mtime = now
|
||||
}
|
||||
}
|
||||
return unix.Lutimes(path, []unix.Timeval{unix.NsecToTimeval(atime.UnixNano()), unix.NsecToTimeval(mtime.UnixNano())})
|
||||
}
|
||||
|
||||
const (
|
||||
testModeMask = int64(os.ModePerm)
|
||||
testIgnoreSymlinkDates = false
|
||||
)
|
||||
83
vendor/github.com/containers/buildah/copier/syscall_windows.go
generated
vendored
Normal file
83
vendor/github.com/containers/buildah/copier/syscall_windows.go
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
// +build windows
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
var canChroot = false
|
||||
|
||||
func chroot(path string) (bool, error) {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func chrMode(mode os.FileMode) uint32 {
|
||||
return windows.S_IFCHR | uint32(mode)
|
||||
}
|
||||
|
||||
func blkMode(mode os.FileMode) uint32 {
|
||||
return windows.S_IFBLK | uint32(mode)
|
||||
}
|
||||
|
||||
func mkdev(major, minor uint32) uint64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func mkfifo(path string, mode uint32) error {
|
||||
return syscall.ENOSYS
|
||||
}
|
||||
|
||||
func mknod(path string, mode uint32, dev int) error {
|
||||
return syscall.ENOSYS
|
||||
}
|
||||
|
||||
func chmod(path string, mode os.FileMode) error {
|
||||
err := os.Chmod(path, mode)
|
||||
if err != nil && errors.Is(err, syscall.EWINDOWS) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func chown(path string, uid, gid int) error {
|
||||
err := os.Chown(path, uid, gid)
|
||||
if err != nil && errors.Is(err, syscall.EWINDOWS) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func lchown(path string, uid, gid int) error {
|
||||
err := os.Lchown(path, uid, gid)
|
||||
if err != nil && errors.Is(err, syscall.EWINDOWS) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func lutimes(isSymlink bool, path string, atime, mtime time.Time) error {
|
||||
if isSymlink {
|
||||
return nil
|
||||
}
|
||||
if atime.IsZero() || mtime.IsZero() {
|
||||
now := time.Now()
|
||||
if atime.IsZero() {
|
||||
atime = now
|
||||
}
|
||||
if mtime.IsZero() {
|
||||
mtime = now
|
||||
}
|
||||
}
|
||||
return windows.UtimesNano(path, []windows.Timespec{windows.NsecToTimespec(atime.UnixNano()), windows.NsecToTimespec(mtime.UnixNano())})
|
||||
}
|
||||
|
||||
const (
|
||||
testModeMask = int64(0600)
|
||||
testIgnoreSymlinkDates = true
|
||||
)
|
||||
11
vendor/github.com/containers/buildah/copier/unwrap_112.go
generated
vendored
Normal file
11
vendor/github.com/containers/buildah/copier/unwrap_112.go
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
// +build !go113
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func unwrapError(err error) error {
|
||||
return errors.Cause(err)
|
||||
}
|
||||
18
vendor/github.com/containers/buildah/copier/unwrap_113.go
generated
vendored
Normal file
18
vendor/github.com/containers/buildah/copier/unwrap_113.go
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
// +build go113
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
stderror "errors"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func unwrapError(err error) error {
|
||||
e := errors.Cause(err)
|
||||
for e != nil {
|
||||
err = e
|
||||
e = errors.Unwrap(err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
92
vendor/github.com/containers/buildah/copier/xattrs.go
generated
vendored
Normal file
92
vendor/github.com/containers/buildah/copier/xattrs.go
generated
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
// +build linux netbsd freebsd darwin
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
const (
|
||||
xattrsSupported = true
|
||||
)
|
||||
|
||||
var (
|
||||
relevantAttributes = []string{"security.capability", "security.ima", "user.*"} // the attributes that we preserve - we discard others
|
||||
)
|
||||
|
||||
// isRelevantXattr checks if "attribute" matches one of the attribute patterns
|
||||
// listed in the "relevantAttributes" list.
|
||||
func isRelevantXattr(attribute string) bool {
|
||||
for _, relevant := range relevantAttributes {
|
||||
matched, err := filepath.Match(relevant, attribute)
|
||||
if err != nil || !matched {
|
||||
continue
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Lgetxattrs returns a map of the relevant extended attributes set on the given file.
|
||||
func Lgetxattrs(path string) (map[string]string, error) {
|
||||
maxSize := 64 * 1024 * 1024
|
||||
listSize := 64 * 1024
|
||||
var list []byte
|
||||
for listSize < maxSize {
|
||||
list = make([]byte, listSize)
|
||||
size, err := unix.Llistxattr(path, list)
|
||||
if err != nil {
|
||||
if unwrapError(err) == syscall.ERANGE {
|
||||
listSize *= 2
|
||||
continue
|
||||
}
|
||||
return nil, errors.Wrapf(err, "error listing extended attributes of %q", path)
|
||||
}
|
||||
list = list[:size]
|
||||
break
|
||||
}
|
||||
if listSize >= maxSize {
|
||||
return nil, errors.Errorf("unable to read list of attributes for %q: size would have been too big", path)
|
||||
}
|
||||
m := make(map[string]string)
|
||||
for _, attribute := range strings.Split(string(list), string('\000')) {
|
||||
if isRelevantXattr(attribute) {
|
||||
attributeSize := 64 * 1024
|
||||
var attributeValue []byte
|
||||
for attributeSize < maxSize {
|
||||
attributeValue = make([]byte, attributeSize)
|
||||
size, err := unix.Lgetxattr(path, attribute, attributeValue)
|
||||
if err != nil {
|
||||
if unwrapError(err) == syscall.ERANGE {
|
||||
attributeSize *= 2
|
||||
continue
|
||||
}
|
||||
return nil, errors.Wrapf(err, "error getting value of extended attribute %q on %q", attribute, path)
|
||||
}
|
||||
m[attribute] = string(attributeValue[:size])
|
||||
break
|
||||
}
|
||||
if attributeSize >= maxSize {
|
||||
return nil, errors.Errorf("unable to read attribute %q of %q: size would have been too big", attribute, path)
|
||||
}
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// Lsetxattrs sets the relevant members of the specified extended attributes on the given file.
|
||||
func Lsetxattrs(path string, xattrs map[string]string) error {
|
||||
for attribute, value := range xattrs {
|
||||
if isRelevantXattr(attribute) {
|
||||
if err := unix.Lsetxattr(path, attribute, []byte(value), 0); err != nil {
|
||||
return errors.Wrapf(err, "error setting value of extended attribute %q on %q", attribute, path)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
15
vendor/github.com/containers/buildah/copier/xattrs_unsupported.go
generated
vendored
Normal file
15
vendor/github.com/containers/buildah/copier/xattrs_unsupported.go
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
// +build !linux,!netbsd,!freebsd,!darwin
|
||||
|
||||
package copier
|
||||
|
||||
const (
|
||||
xattrsSupported = false
|
||||
)
|
||||
|
||||
func Lgetxattrs(path string) (map[string]string, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func Lsetxattrs(path string, xattrs map[string]string) error {
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user