From c45a83883625ea5226bace08e72f45782e31c29f Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Thu, 9 May 2024 12:09:55 +0200 Subject: add linuxnamespaces.tarinfo.XAttrTarFile This is a mixin subclass for TarFile that enables it to restore and apply linux extended attributes as PAX headers in the SCHILY.xattr.* format. As a consequence, this enables us to process tar archives containing file system capabilities. --- examples/chroottar.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'examples/chroottar.py') diff --git a/examples/chroottar.py b/examples/chroottar.py index f43add4..30017e5 100755 --- a/examples/chroottar.py +++ b/examples/chroottar.py @@ -20,6 +20,12 @@ import linuxnamespaces import linuxnamespaces.tarutils +class TarFile( + linuxnamespaces.tarutils.ZstdTarFile, linuxnamespaces.tarutils.XAttrTarFile +): + pass + + def main() -> None: parser = argparse.ArgumentParser() parser.add_argument( @@ -49,9 +55,7 @@ def main() -> None: parentsock.close() # Once we drop privileges via setreuid and friends, we may become # unable to open basetar or to chdir to tdir, so do those early. - with linuxnamespaces.tarutils.ZstdTarFile.open( - args.basetar, "r:*" - ) as tarf: + with TarFile.open(args.basetar, "r:*") as tarf: os.chdir(tdir) linuxnamespaces.unshare( linuxnamespaces.CloneFlags.NEWUSER @@ -112,9 +116,7 @@ def main() -> None: if args.save and ret == 0: tmptar = f"{args.basetar}.new" try: - with linuxnamespaces.tarutils.ZstdTarFile.open( - tmptar, "x:" + comptype - ) as tout: + with TarFile.open(tmptar, "x:" + comptype) as tout: tout.add(tdir, ".") os.rename(tmptar, args.basetar) except: -- cgit v1.2.3