mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-10-03 01:15:11 -04:00
Point the go-micro.dev/v4 replace at the latest main-v4 maintenance branch commit in butonic/go-micro (cd412c15) instead of the v4.11.3 tag. The new base is upstream v4.11.1 plus the registry cache node-TTL fixes (upstream #2715, #2736, #2740), the concurrent map access fix (upstream #2794), plus further dependency updates and test fixes on the maintenance branch. The branch also modernizes go-micro's own go.mod (go 1.26, lego, dario.cat/mergo v1, x/deque v2, ...), and MVS pulls the aligned versions into this module: lego v4.35.2 -> lego/v5 v5.5.2, go-jose/go-jose/v4 -> v4.1.5, gofrs/flock -> v0.13.1, mattn/go-isatty -> v0.0.24, go.uber.org/zap -> v1.28.0, x/net -> 0.59.0, miekg/dns -> 1.1.73, moby api/client, ProtonMail/go-crypto -> 1.5.2, klauspost/compress -> 1.20.1, gorilla/handlers -> 1.5.2, gobwas/ws -> 1.4.0, nxadm/tail -> 1.4.11, ... Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package archive
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"strconv"
|
|
|
|
"github.com/moby/go-archive/internal/archiveoptions"
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
// chmodNoSymlinkFallback applies mode without following the final path
|
|
// component on systems without fchmodat2 support.
|
|
//
|
|
// Callers must have already excluded symlink entries.
|
|
func chmodNoSymlinkFallback(parentFD int, base, name string, perm uint32, opts *archiveoptions.Options) error {
|
|
fd, err := unix.Openat(parentFD, base, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)
|
|
if err != nil {
|
|
return &os.PathError{Op: "openat", Path: name, Err: err}
|
|
}
|
|
defer unix.Close(fd)
|
|
|
|
if opts != nil && opts.ProcSelfFD != nil {
|
|
err := unix.Fchmodat(int(opts.ProcSelfFD.Fd()), strconv.Itoa(fd), perm, 0)
|
|
// Keep the os.File alive until fchmodat has finished using its descriptor.
|
|
runtime.KeepAlive(opts.ProcSelfFD)
|
|
if err != nil {
|
|
return &os.PathError{
|
|
Op: "fchmodat",
|
|
Path: name,
|
|
Err: fmt.Errorf("via pre-opened /proc/self/fd/%d: %w", fd, err),
|
|
}
|
|
}
|
|
} else {
|
|
procPath := "/proc/self/fd/" + strconv.Itoa(fd)
|
|
if err := unix.Chmod(procPath, perm); err != nil {
|
|
return &os.PathError{
|
|
Op: "chmod",
|
|
Path: name,
|
|
Err: fmt.Errorf("via %s: %w", procPath, err),
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|