From ad280e1b56b6c6632b2fae5288f6441c343d0185 Mon Sep 17 00:00:00 2001 From: Allan McRae Date: Sun, 20 Jan 2013 10:32:11 +1000 Subject: [PATCH] Revert execvp and related commits This reverts commit 4a8c2852a887d2b1aaa43be3071ab586eb24b9e3. This reverts commit 993700bc6b12cd291544d2a22845f480e8a7925e. This reverts commit bb4d2b72c1d35ab9d65d632be0dcaf00cfa7d600. This reverts commit 60b192e3836a150eb6950ce52241efebbee00f11. Signed-off-by: Allan McRae --- Makefile.am | 1 - configure.ac | 6 +++--- lib/libalpm/util.c | 17 ++++++++++------- test/pacman/pactest.py | 5 ----- test/pacman/pmenv.py | 2 +- test/pacman/pmtest.py | 21 ++------------------- 6 files changed, 16 insertions(+), 36 deletions(-) diff --git a/Makefile.am b/Makefile.am index cd69b6e7..b05feb68 100644 --- a/Makefile.am +++ b/Makefile.am @@ -28,7 +28,6 @@ check-local: test-pacman test-pacsort test-vercmp test-parseopts test-pacman: test/pacman src/pacman LC_ALL=C $(PYTHON) $(top_srcdir)/test/pacman/pactest.py --debug=1 \ --test $(top_srcdir)/test/pacman/tests/*.py \ - --scriptlet-shell $(SCRIPTLET_SHELL) \ -p $(top_builddir)/src/pacman/pacman test-pacsort: test/util src/util diff --git a/configure.ac b/configure.ac index e89d4fce..aa3305db 100644 --- a/configure.ac +++ b/configure.ac @@ -105,8 +105,8 @@ AC_ARG_WITH(debug-suffix, # Help line for changing shell used to run install scriptlets AC_ARG_WITH(scriptlet-shell, AS_HELP_STRING([--with-scriptlet-shell=shell], - [set the shell used to run install scriptlets]), - [SCRIPTLET_SHELL=$withval], [SCRIPTLET_SHELL=sh]) + [set the full path to the shell used to run install scriptlets]), + [SCRIPTLET_SHELL=$withval], [SCRIPTLET_SHELL=/bin/sh]) # Help line for using OpenSSL AC_ARG_WITH(openssl, @@ -455,7 +455,7 @@ AC_SUBST(DEBUGSUFFIX) AC_DEFINE_UNQUOTED([DEBUGSUFFIX], "$DEBUGSUFFIX", [The suffix for debugging symbol packages used by makepkg]) # Set shell used by install scriptlets AC_SUBST(SCRIPTLET_SHELL) -AC_DEFINE_UNQUOTED([SCRIPTLET_SHELL], "$SCRIPTLET_SHELL", [The shell used to run install scriptlets]) +AC_DEFINE_UNQUOTED([SCRIPTLET_SHELL], "$SCRIPTLET_SHELL", [The full path of the shell used to run install scriptlets]) # Configuration files AC_CONFIG_FILES([ diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index fd1d7868..c88326f2 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -549,9 +549,9 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[]) exit(1); } umask(0022); - execvp(cmd, argv); - /* execvp only returns if there was an error */ - fprintf(stderr, _("call to execvp failed (%s)\n"), strerror(errno)); + execv(cmd, argv); + /* execv only returns if there was an error */ + fprintf(stderr, _("call to execv failed (%s)\n"), strerror(errno)); exit(1); } else { /* this code runs for the parent only (wait on the child) */ @@ -621,10 +621,13 @@ int _alpm_ldconfig(alpm_handle_t *handle) snprintf(line, PATH_MAX, "%setc/ld.so.conf", handle->root); if(access(line, F_OK) == 0) { - char arg0[32]; - char *argv[] = { arg0, NULL }; - strcpy(arg0, "ldconfig"); - return _alpm_run_chroot(handle, "ldconfig", argv); + snprintf(line, PATH_MAX, "%ssbin/ldconfig", handle->root); + if(access(line, X_OK) == 0) { + char arg0[32]; + char *argv[] = { arg0, NULL }; + strcpy(arg0, "ldconfig"); + return _alpm_run_chroot(handle, "/sbin/ldconfig", argv); + } } return 0; diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py index 42c6a825..2fb64edc 100755 --- a/test/pacman/pactest.py +++ b/test/pacman/pactest.py @@ -3,7 +3,6 @@ # pactest : run automated testing on the pacman binary # # Copyright (c) 2006 by Aurelien Foret -# Copyright (c) 2006-2013 Pacman Development Team # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -82,9 +81,6 @@ def create_parser(): parser.add_option("--manual-confirm", action = "store_true", dest = "manualconfirm", default = False, help = "do not use --noconfirm for pacman calls") - parser.add_option("--scriptlet-shell", type = "string", - dest = "scriptletshell", default = "sh", - help = "specify shell used for install scriptlets") return parser @@ -103,7 +99,6 @@ def create_parser(): env.pacman["gdb"] = opts.gdb env.pacman["valgrind"] = opts.valgrind env.pacman["manual-confirm"] = opts.manualconfirm - env.pacman["scriptlet-shell"] = opts.scriptletshell if opts.testcases is None or len(opts.testcases) == 0: print "no tests defined, nothing to do" diff --git a/test/pacman/pmenv.py b/test/pacman/pmenv.py index 04948c12..0e455cee 100644 --- a/test/pacman/pmenv.py +++ b/test/pacman/pmenv.py @@ -66,7 +66,7 @@ def run(self): print t.description print "----------"*8 - t.generate(self.pacman) + t.generate() t.run(self.pacman) diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 5503559f..00a0b96e 100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -1,7 +1,6 @@ #! /usr/bin/python2 # # Copyright (c) 2006 by Aurelien Foret -# Copyright (c) 2006-2012 Pacman Development Team # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -103,18 +102,7 @@ def load(self): else: raise IOError("file %s does not exist!" % self.name) - def resolve_binary(self, binary): - if os.path.isabs(binary): - return binary - - for path in os.environ["PATH"].split(':'): - resolved = os.path.join(path, binary) - if os.path.exists(resolved): - return resolved - - return binary - - def generate(self, pacman): + def generate(self): print "==> Generating test environment" # Cleanup leftover files from a previous test session @@ -132,18 +120,13 @@ def generate(self, pacman): etcdir = os.path.join(self.root, os.path.dirname(util.PACCONF)) bindir = os.path.join(self.root, "bin") sbindir = os.path.join(self.root, "sbin") - scriptlet_shell = self.resolve_binary(pacman["scriptlet-shell"]) - shelldir = os.path.join(self.root, os.path.dirname(scriptlet_shell)[1:]) - sys_dirs = [dbdir, cachedir, syncdir, tmpdir, logdir, etcdir, bindir, - sbindir, shelldir] + sys_dirs = [dbdir, cachedir, syncdir, tmpdir, logdir, etcdir, bindir, sbindir] for sys_dir in sys_dirs: if not os.path.isdir(sys_dir): vprint("\t%s" % sys_dir[len(self.root)+1:]) os.makedirs(sys_dir, 0755) # Only the dynamically linked binary is needed for fakechroot shutil.copy("/bin/sh", bindir) - if scriptlet_shell != "/bin/sh": - shutil.copy("/bin/sh", os.path.join(self.root, scriptlet_shell[1:])) shutil.copy(os.path.join(util.SELFPATH, "ldconfig.stub"), os.path.join(sbindir, "ldconfig")) ld_so_conf = open(os.path.join(etcdir, "ld.so.conf"), "w")