From dd11ed66640f79143e42d778b58fdd5a61fb5836 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 26 Aug 2015 16:25:45 +0300
Subject: [PATCH] Our pre/postinsts expect $D to be set when running in a
 sysroot and don't expect a chroot. This matches up our system expectations
 with what dpkg does.

Upstream-Status: Inappropriate [OE Specific]

RP 2011/12/07
ALIMON 2016/05/26
ALIMON 2017/02/21
KKang 2019/02/20
---
 src/script.c | 53 +++-------------------------------------------------
 1 file changed, 3 insertions(+), 50 deletions(-)

diff --git a/src/script.c b/src/script.c
index abe65b6f7..621ff9b27 100644
--- a/src/script.c
+++ b/src/script.c
@@ -96,58 +96,11 @@ setexecute(const char *path, struct stat *stab)
 static const char *
 maintscript_pre_exec(struct command *cmd)
 {
-	const char *admindir = dpkg_db_get_dir();
-	const char *changedir;
-	size_t instdirlen = strlen(instdir);
-
-	if (instdirlen > 0 && in_force(FORCE_SCRIPT_CHROOTLESS))
-		changedir = instdir;
-	else
-		changedir = "/";
-
-	if (instdirlen > 0 && !in_force(FORCE_SCRIPT_CHROOTLESS)) {
-		int rc;
-
-		if (strncmp(admindir, instdir, instdirlen) != 0)
-			ohshit(_("admindir must be inside instdir for dpkg to work properly"));
-		if (setenv("DPKG_ADMINDIR", admindir + instdirlen, 1) < 0)
-			ohshite(_("unable to setenv for subprocesses"));
-		if (setenv("DPKG_ROOT", "", 1) < 0)
-			ohshite(_("unable to setenv for subprocesses"));
-
-		rc = chroot(instdir);
-		if (rc && in_force(FORCE_NON_ROOT) && errno == EPERM)
-			ohshit(_("not enough privileges to change root "
-			         "directory with --force-not-root, consider "
-			         "using --force-script-chrootless?"));
-		else if (rc)
-			ohshite(_("failed to chroot to '%.250s'"), instdir);
+	if (*instdir) {
+		setenv("D", instdir, 1);
 	}
-	/* Switch to a known good directory to give the maintainer script
-	 * a saner environment, also needed after the chroot(). */
-	if (chdir(changedir))
-		ohshite(_("failed to chdir to '%.255s'"), changedir);
-	if (debug_has_flag(dbg_scripts)) {
-		struct varbuf args = VARBUF_INIT;
-		const char **argv = cmd->argv;
-
-		while (*++argv) {
-			varbuf_add_char(&args, ' ');
-			varbuf_add_str(&args, *argv);
-		}
-		varbuf_end_str(&args);
-		debug(dbg_scripts, "fork/exec %s (%s )", cmd->filename,
-		      args.buf);
-		varbuf_destroy(&args);
-	}
-	if (instdirlen == 0 || in_force(FORCE_SCRIPT_CHROOTLESS))
-		return cmd->filename;
-
-	if (strlen(cmd->filename) < instdirlen)
-		internerr("maintscript name '%s' length < instdir length %zd",
-		          cmd->filename, instdirlen);
 
-	return cmd->filename + instdirlen;
+	return cmd->filename;
 }
 
 /**
-- 
2.17.1

