[PATCH 4/6] rpmostreepayload: Avoid shutil.copytree in favor of cp -r to fix symlinks

Radek Vykydal rvykydal at redhat.com
Mon Jun 1 15:47:42 UTC 2015


From: Colin Walters <walters at verbum.org>

shutil.copytree() follows symlinks by default which I didn't realize,
and this actively breaks things as grubenv is a symlink.

Since we're shelling out to 'cp' in a case above, might as well do it
here.

This also means that if we hit e.g. ENOSPC we'll enter the error
handling codepath instead of an uncaught traceback.

(Yes, this code is crappy, should probably live in bootloader.py,
 except I'm going through gyrations here to avoid requiring
 any changes in how mainline bootloaders work)

Resolves: rhbz#1199127
atomic-rhel-7.1 dist-git patch:
0031-rpmostreepayload-Avoid-shutil.copytree-in-favor-of-c.patch
---
 pyanaconda/packaging/rpmostreepayload.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pyanaconda/packaging/rpmostreepayload.py b/pyanaconda/packaging/rpmostreepayload.py
index 47b7b8e..3eeb2b1 100644
--- a/pyanaconda/packaging/rpmostreepayload.py
+++ b/pyanaconda/packaging/rpmostreepayload.py
@@ -118,7 +118,7 @@ class RPMOSTreePayload(ArchivePayload):
                     self._safeExecWithRedirect('cp', ['-r', '-p', sub_srcpath, sub_destpath])
             else:
                 log.info("Copying bootloader data: " + fname)
-                shutil.copytree(srcpath, destpath)
+                self._safeExecWithRedirect('cp', ['-r', '-p', srcpath, destpath])
 
     def install(self):
         mainctx = GLib.MainContext.new()
-- 
1.9.3



More information about the anaconda-patches mailing list