Signed-off-by: Jonathan Conder <[email protected]>
---
 lib/libalpm/trans.c |    3 ++-
 lib/libalpm/util.c  |    9 +++++----
 lib/libalpm/util.h  |    2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)

The _alpm_log line below (around 467,7) won't be as detailed as it was before,
can anyone suggest a solution for this?

diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 49fc0f6..79d2614 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -344,6 +344,7 @@ int _alpm_runscriptlet(const char *root, const char 
*installfn,
        char scriptfn[PATH_MAX];
        char cmdline[PATH_MAX];
        char tmpdir[PATH_MAX];
+       char *argv[] = { "sh", "-c", cmdline, NULL };
        char *scriptpath;
        int clean_tmpdir = 0;
        int retval = 0;
@@ -401,7 +402,7 @@ int _alpm_runscriptlet(const char *root, const char 
*installfn,
                                scriptpath, script, ver);
        }
 
-       retval = _alpm_run_chroot(root, cmdline);
+       retval = _alpm_run_chroot(root, "/bin/sh", argv);
 
 cleanup:
        if(clean_tmpdir && _alpm_rmrf(tmpdir)) {
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 4f7888d..f2c80f2 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -444,7 +444,7 @@ int _alpm_logaction(int usesyslog, FILE *f, const char 
*fmt, va_list args)
        return(ret);
 }
 
-int _alpm_run_chroot(const char *root, const char *cmd)
+int _alpm_run_chroot(const char *root, const char *path, char *const argv[])
 {
        char cwd[PATH_MAX];
        pid_t pid;
@@ -467,7 +467,7 @@ int _alpm_run_chroot(const char *root, const char *cmd)
                goto cleanup;
        }
 
-       _alpm_log(PM_LOG_DEBUG, "executing \"%s\" under chroot \"%s\"\n", cmd, 
root);
+       _alpm_log(PM_LOG_DEBUG, "executing \"%s\" under chroot \"%s\"\n", path, 
root);
 
        /* Flush open fds before fork() to avoid cloning buffers */
        fflush(NULL);
@@ -505,7 +505,7 @@ int _alpm_run_chroot(const char *root, const char *cmd)
                        exit(1);
                }
                umask(0022);
-               execl("/bin/sh", "sh", "-c", cmd, (char *) NULL);
+               execv(path, argv);
                fprintf(stderr, _("call to execl failed (%s)\n"), 
strerror(errno));
                exit(1);
        } else {
@@ -570,7 +570,8 @@ int _alpm_ldconfig(const char *root)
        if(access(line, F_OK) == 0) {
                snprintf(line, PATH_MAX, "%ssbin/ldconfig", root);
                if(access(line, X_OK) == 0) {
-                       _alpm_run_chroot(root, "/sbin/ldconfig");
+                       char *argv[] = { "ldconfig", NULL };
+                       _alpm_run_chroot(root, "/sbin/ldconfig", argv);
                }
        }
 
diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h
index 8a3154a..35c4d28 100644
--- a/lib/libalpm/util.h
+++ b/lib/libalpm/util.h
@@ -68,7 +68,7 @@ int _alpm_unpack_single(const char *archive, const char 
*prefix, const char *fn)
 int _alpm_unpack(const char *archive, const char *prefix, alpm_list_t *list, 
int breakfirst);
 int _alpm_rmrf(const char *path);
 int _alpm_logaction(int usesyslog, FILE *f, const char *fmt, va_list args);
-int _alpm_run_chroot(const char *root, const char *cmd);
+int _alpm_run_chroot(const char *root, const char *path, char *const argv[]);
 int _alpm_ldconfig(const char *root);
 int _alpm_str_cmp(const void *s1, const void *s2);
 char *_alpm_filecache_find(const char *filename);
-- 
1.7.1



Reply via email to