mirror of
https://github.com/containers/podman.git
synced 2025-06-24 03:08:13 +08:00
Merge pull request #17528 from flouthoc/volume-security-patch
volume,container: `chroot` to source before exporting content
This commit is contained in:
@ -34,7 +34,7 @@ import (
|
|||||||
"github.com/containers/podman/v4/pkg/systemd/notifyproxy"
|
"github.com/containers/podman/v4/pkg/systemd/notifyproxy"
|
||||||
"github.com/containers/podman/v4/pkg/util"
|
"github.com/containers/podman/v4/pkg/util"
|
||||||
"github.com/containers/storage"
|
"github.com/containers/storage"
|
||||||
"github.com/containers/storage/pkg/archive"
|
"github.com/containers/storage/pkg/chrootarchive"
|
||||||
"github.com/containers/storage/pkg/idmap"
|
"github.com/containers/storage/pkg/idmap"
|
||||||
"github.com/containers/storage/pkg/idtools"
|
"github.com/containers/storage/pkg/idtools"
|
||||||
"github.com/containers/storage/pkg/lockfile"
|
"github.com/containers/storage/pkg/lockfile"
|
||||||
@ -761,7 +761,7 @@ func (c *Container) export(out io.Writer) error {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
input, err := archive.Tar(mountPoint, archive.Uncompressed)
|
input, err := chrootarchive.Tar(mountPoint, nil, mountPoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("reading container directory %q: %w", c.ID(), err)
|
return fmt.Errorf("reading container directory %q: %w", c.ID(), err)
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
"github.com/containers/common/pkg/cgroups"
|
"github.com/containers/common/pkg/cgroups"
|
||||||
"github.com/containers/storage/pkg/archive"
|
"github.com/containers/storage/pkg/archive"
|
||||||
|
"github.com/containers/storage/pkg/chrootarchive"
|
||||||
"github.com/godbus/dbus/v5"
|
"github.com/godbus/dbus/v5"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@ -63,7 +64,7 @@ func CreateTarFromSrc(source string, dest string) error {
|
|||||||
return fmt.Errorf("could not create tarball file '%s': %w", dest, err)
|
return fmt.Errorf("could not create tarball file '%s': %w", dest, err)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
return TarToFilesystem(source, file)
|
return TarChrootToFilesystem(source, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TarToFilesystem creates a tarball from source and writes to an os.file
|
// TarToFilesystem creates a tarball from source and writes to an os.file
|
||||||
@ -87,6 +88,28 @@ func Tar(source string) (io.ReadCloser, error) {
|
|||||||
return archive.Tar(source, archive.Uncompressed)
|
return archive.Tar(source, archive.Uncompressed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TarChrootToFilesystem creates a tarball from source and writes to an os.file
|
||||||
|
// provided while chrooted to the source.
|
||||||
|
func TarChrootToFilesystem(source string, tarball *os.File) error {
|
||||||
|
tb, err := TarWithChroot(source)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = io.Copy(tarball, tb)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
logrus.Debugf("wrote tarball file %s", tarball.Name())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TarWithChroot creates a tarball from source and returns a readcloser of it
|
||||||
|
// while chrooted to the source.
|
||||||
|
func TarWithChroot(source string) (io.ReadCloser, error) {
|
||||||
|
logrus.Debugf("creating tarball of %s", source)
|
||||||
|
return chrootarchive.Tar(source, nil, source)
|
||||||
|
}
|
||||||
|
|
||||||
// RemoveScientificNotationFromFloat returns a float without any
|
// RemoveScientificNotationFromFloat returns a float without any
|
||||||
// scientific notation if the number has any.
|
// scientific notation if the number has any.
|
||||||
// golang does not handle conversion of float64s that have scientific
|
// golang does not handle conversion of float64s that have scientific
|
||||||
|
Reference in New Issue
Block a user