Skip to content

Commit

Permalink
Fix transferring data using tar
Browse files Browse the repository at this point in the history
Instead of relying on the remote server to create tar files
with the right account IDs (which the remote server doesn't
even know, when the client and server run under different accounts),
have the remote client ignore the account IDs when unpacking.

Then just hard-code 0 in the remote server, so that the remote
server's account identity does not leak in the tar file contents.

Compare containers/image#1627 .

[NO NEW TESTS NEEDED] : #18563
suggests that existing tests already cover these code paths / properties.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
  • Loading branch information
mtrmac committed Nov 28, 2023
1 parent 443e779 commit 4314b1c
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 6 deletions.
6 changes: 1 addition & 5 deletions pkg/api/handlers/libpod/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
"github.com/containers/podman/v4/pkg/domain/infra/abi"
domainUtils "github.com/containers/podman/v4/pkg/domain/utils"
"github.com/containers/podman/v4/pkg/errorhandling"
"github.com/containers/podman/v4/pkg/rootless"
"github.com/containers/podman/v4/pkg/util"
utils2 "github.com/containers/podman/v4/utils"
"github.com/containers/storage"
Expand Down Expand Up @@ -330,10 +329,7 @@ func ExportImages(w http.ResponseWriter, r *http.Request) {
}

tarOptions := &archive.TarOptions{
ChownOpts: &idtools.IDPair{
UID: rootless.GetRootlessUID(),
GID: rootless.GetRootlessGID(),
},
ChownOpts: &idtools.IDPair{UID: 0, GID: 0},
}
tar, err := chrootarchive.Tar(output, tarOptions, output)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/domain/infra/tunnel/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ func (ir *ImageEngine) Save(ctx context.Context, nameOrID string, tags []string,
return err
}

return archive.Untar(f, opts.Output, nil)
return archive.Untar(f, opts.Output, &archive.TarOptions{NoLchown: true})
}

func (ir *ImageEngine) Search(ctx context.Context, term string, opts entities.ImageSearchOptions) ([]entities.ImageSearchReport, error) {
Expand Down

0 comments on commit 4314b1c

Please sign in to comment.