Skip to content

Commit

Permalink
archive: store the override xattr with the inode type
Browse files Browse the repository at this point in the history
Fixes: #2174

Signed-off-by: Giuseppe Scrivano <[email protected]>
  • Loading branch information
giuseppe committed Dec 2, 2024
1 parent 0f96835 commit 18c73a2
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions pkg/archive/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,17 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, L
mask = *forceMask
}

switch hdr.Typeflag {
typeFlag := hdr.Typeflag

if forceMask != nil {
// If we have a forceMask, force the real type to either be a directory,
// or a regular file.
if typeFlag != tar.TypeDir {
typeFlag = tar.TypeReg
}
}

switch typeFlag {
case tar.TypeDir:
// Create directory unless it exists as a directory already.
// In that case we just want to merge the two
Expand Down Expand Up @@ -730,8 +740,10 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, L

if forceMask != nil && (hdr.Typeflag != tar.TypeSymlink || runtime.GOOS == "darwin") {
value := idtools.Stat{
IDs: idtools.IDPair{UID: hdr.Uid, GID: hdr.Gid},
Mode: hdrInfo.Mode() & 0o7777,
IDs: idtools.IDPair{UID: hdr.Uid, GID: hdr.Gid},
Mode: hdrInfo.Mode(),
Major: int(hdr.Devmajor),
Minor: int(hdr.Devminor),
}
if err := idtools.SetContainersOverrideXattr(path, value); err != nil {
return err
Expand Down Expand Up @@ -1149,11 +1161,11 @@ loop:
}

if options.ForceMask != nil {
value := idtools.Stat{Mode: 0o755}
value := idtools.Stat{Mode: os.ModeDir | os.FileMode(0o755)}
if rootHdr != nil {
value.IDs.UID = rootHdr.Uid
value.IDs.GID = rootHdr.Gid
value.Mode = os.FileMode(rootHdr.Mode)
value.Mode = os.ModeDir | os.FileMode(rootHdr.Mode)
}
if err := idtools.SetContainersOverrideXattr(dest, value); err != nil {
return err
Expand Down

0 comments on commit 18c73a2

Please sign in to comment.