]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
install/dracut-install.c: Ensure deps are resolved when handling scripts
authorColin Guthrie <colin@mageia.org>
Tue, 14 Aug 2012 21:09:39 +0000 (22:09 +0100)
committerHarald Hoyer <harald@redhat.com>
Tue, 21 Aug 2012 16:46:20 +0000 (18:46 +0200)
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

index e79065dde83dca808f9b8e4ae27c6ab15a3c46a7..9a244baacf0c9f198cf1040568659698089eda87 100644 (file)
@@ -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 */