By default tar strips leading '/'s from file names. However
if we have a symlink inside an archive with link which starts
with '/' then this slash will be removed. [1]

This will result as error "Cannot open:Permission denied" [2]
when tar tries to create the symlink with the invalid target

Steps to reproduce:
    $ mkdir /tmp/foo
    $ cd /tmp/foo
    $ touch file
    $ ln -s /tmp/foo/file link
    $ tar -cf archive.tar link
    $ mkdir /tmp/foo/dest
    $ virt-sandbox -c qemu:///session \
                   -m host-bind:/mnt=/tmp/foo/dest \
                   -- /bin/tar xf /tmp/foo/archive.tar -C /mnt
Error message:
    tar: link: Cannot open: Permission denied
    tar: Exiting with failure status due to previous errors

Append the flag "--absolute-names" to disable strip leading '/'s.
 src/virtBootstrap/ | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/virtBootstrap/ b/src/virtBootstrap/
index 63ef57a..2fe23d9 100644
--- a/src/virtBootstrap/
+++ b/src/virtBootstrap/
@@ -106,7 +106,8 @@ def safe_untar(src, dest):
     # Compression type is auto detected from tar
     # Exclude files under /dev to avoid "Cannot mknod: Operation not permitted"
-    params = ['--', '/bin/tar', 'xf', src, '-C', '/mnt', '--exclude', 'dev/*']
+    params = ['--', '/bin/tar', 'xf', src, '-C', '/mnt', '--exclude', 'dev/*',
+              '--absolute-names']
     execute(virt_sandbox + params)

virt-tools-list mailing list

Reply via email to