Blob Blame History Raw
From 68318328f1fc394ac043b939425715ba78dc6f57 Mon Sep 17 00:00:00 2001
From: Colin Guthrie <colin@mageia.org>
Date: Tue, 14 Aug 2012 22:09:39 +0100
Subject: [PATCH] install/dracut-install.c: Ensure deps are resolved when
 handling scripts

If we are doing lazy dep solving and happen to process a script with a
shebang on e.g. /bin/bash before we encounter the actual binary itself
we effectively ignore the fact that we've been asked to resolve the deps
and put the item in the 'seen' hashmap. Thus when we later really do try
and resolve deps, we short circuit and don't do anything.

Example test case:

$ cd
$ mkdir -p foo/bin
$ cp /bin/bash foo/bin
$ echo '#!/bin/bash' >foo/bin/script
$ dracut-install -D $HOME/foo -R $HOME/foo/bin/script $HOME/foo/bin/bash
---
 install/dracut-install.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/install/dracut-install.c b/install/dracut-install.c
index e79065d..9a244ba 100644
--- a/install/dracut-install.c
+++ b/install/dracut-install.c
@@ -392,10 +392,15 @@ static int dracut_install(const char *src, const char *dst, bool isdir, bool res
         }
 
         if (ret == 0) {
-                log_debug("'%s' already exists", fulldstpath);
+                if (resolvedeps) {
+                        log_debug("'%s' already exists, but checking for any deps", fulldstpath);
+                        ret = resolve_deps(src);
+                } else
+                        log_debug("'%s' already exists", fulldstpath);
+
                 free(fulldstpath);
                 /* dst does already exist */
-                return 0;
+                return ret;
         }
 
         /* check destination directory */