X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/41a658f873a36e2f8507a84fb40f0632e2a62b15..8d1cb6da6e21302c654da3f09de3975af7e4a11f:/test/integration/test-failing-maintainer-scripts?ds=sidebyside

diff --git a/test/integration/test-failing-maintainer-scripts b/test/integration/test-failing-maintainer-scripts
index 3dd7d643e..8cf2380ee 100755
--- a/test/integration/test-failing-maintainer-scripts
+++ b/test/integration/test-failing-maintainer-scripts
@@ -1,18 +1,19 @@
 #!/bin/sh
 set -e
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 
 setupenvironment
 configarchitecture 'native'
+configdpkgnoopchroot
 
 # create a bunch of failures
 createfailure() {
 	setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee'
 	BUILDDIR="incoming/failure-$1-1.0"
 	echo '#!/bin/sh
-exit 29' > ${BUILDDIR}/debian/$1
+exit 29' > "${BUILDDIR}/debian/$1"
 	buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
 	rm -rf "$BUILDDIR"
 }
@@ -25,90 +26,45 @@ createfailure 'postrm'
 
 setupaptarchive
 
-# create a library to noop chroot() and rewrite maintainer script executions
-# via execvp() as used by dpkg as we don't want our rootdir to be a fullblown
-# chroot directory dpkg could chroot into to execute the maintainer scripts
-cat << EOF > noopchroot.c
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dlfcn.h>
-
-static char * chrootdir = NULL;
-
-int chroot(const char *path) {
-	printf("WARNING: CHROOTing to %s was ignored!\n", path);
-	free(chrootdir);
-	chrootdir = strdup(path);
-	return 0;
-}
-int execvp(const char *file, char *const argv[]) {
-	static int (*func_execvp) (const char *, char * const []) = NULL;
-	if (func_execvp == NULL)
-		func_execvp = (int (*) (const char *, char * const [])) dlsym(RTLD_NEXT, "execvp");
-	if (chrootdir == NULL || strncmp(file, "/var/lib/dpkg/", strlen("/var/lib/dpkg/")) != 0)
-		return func_execvp(file, argv);
-	printf("REWRITE execvp call %s into %s\n", file, chrootdir);
-	char newfile[strlen(chrootdir) + strlen(file)];
-	strcpy(newfile, chrootdir);
-	strcat(newfile, file);
-	return func_execvp(newfile, argv);
-}
-EOF
-testsuccess gcc -fPIC -shared -o noopchroot.so noopchroot.c -ldl
-
-mkdir -p "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/"
-DPKG="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg"
-echo "#!/bin/sh
-if [ -n \"\$LD_PRELOAD\" ]; then
-	export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}\"
-else
-	export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so\"
-fi
-dpkg \"\$@\"" > $DPKG
-chmod +x $DPKG
-sed -ie "s|^DPKG::options:: \"dpkg\";\$|DPKG::options:: \"$DPKG\";|" aptconfig.conf
-
 # setup some pre- and post- invokes to check the output isn't garbled later
 APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook"
 echo '#!/bin/sh
 echo "$1: START"
 echo "$1: MaiN"
-echo "$1: ENd"' > $APTHOOK
-chmod +x $APTHOOK
+echo "$1: ENd"' > "$APTHOOK"
+chmod +x "$APTHOOK"
 echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\";
 DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks
 
 testmyfailure() {
 	local PROGRESS='rootdir/tmp/progress.log'
-	exec 3> $PROGRESS
+	exec 3> "$PROGRESS"
 	testfailure "$@" -o APT::Status-Fd=3
 	msgtest 'Test for failure message of maintainerscript in' 'console log'
 	local TEST='rootdir/tmp/testfailure.output'
 	if grep -q 'exit status 29' "$TEST"; then
 		msgpass
 	else
-		cat $TEST
+		cat "$TEST"
 		msgfail
 	fi
 	msgtest 'Test for proper execution of invoke scripts in' 'console log'
-	if grep -q '^PRE: START$' $TEST &&
-		grep -q '^PRE: MaiN$' $TEST &&
-		grep -q '^PRE: ENd$' $TEST &&
-		grep -q '^POST: START$' $TEST &&
-		grep -q '^POST: MaiN$' $TEST &&
-		grep -q '^POST: ENd$' $TEST; then
+	if grep -q '^PRE: START$' "$TEST" &&
+		grep -q '^PRE: MaiN$' "$TEST" &&
+		grep -q '^PRE: ENd$' "$TEST" &&
+		grep -q '^POST: START$' "$TEST" &&
+		grep -q '^POST: MaiN$' "$TEST" &&
+		grep -q '^POST: ENd$' "$TEST"; then
 		msgpass
 	else
-		cat $TEST
+		cat "$TEST"
 		msgfail
 	fi
 	msgtest 'Test for failure message of maintainerscript in' 'progress log'
 	if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then
 		msgpass
 	else
-		cat $PROGRESS
+		cat "$PROGRESS"
 		msgfail
 	fi
 	testmarkedauto 'dependee'
@@ -128,5 +84,8 @@ testdpkginstalled failure-postrm
 testmyfailure aptget purge failure-postrm -y
 
 # FIXME: test with output going to a PTY as it usually does
-#cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
-#aptget install failure-preinst -y
+if false; then
+	cp -a rootdir/var/lib/dpkg/status.backup rootdir/var/lib/dpkg/status
+	apt install dependee -y || true
+	apt install failure-postinst -y || true
+fi