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/main/script.c | 54 +++--------------------------------------------
 1 file changed, 3 insertions(+), 51 deletions(-)

diff --git a/src/main/script.c b/src/main/script.c
index abe65b6..0edb8f1 100644
--- a/src/main/script.c
+++ b/src/main/script.c
@@ -96,58 +96,10 @@ 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);
-	}
-	/* 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 (*instdir) {
+                setenv("D", instdir, 1);
 	}
-	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.25.1

