blob: bd4d5d535389156bc077744627301a65a5c6b940 [file] [log] [blame]
Andrew Geissler517393d2023-01-13 08:55:19 -06001From ff325b35639a797edd92b373fbebf7b8b9f3f0c3 Mon Sep 17 00:00:00 2001
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Wed, 26 Aug 2015 16:25:45 +0300
Brad Bishop96ff1982019-08-19 13:50:42 -04004Subject: [PATCH] Our pre/postinsts expect $D to be set when running in a
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005 sysroot and don't expect a chroot. This matches up our system expectations
6 with what dpkg does.
7
8Upstream-Status: Inappropriate [OE Specific]
9
10RP 2011/12/07
Patrick Williamsc0f7c042017-02-23 20:41:17 -060011ALIMON 2016/05/26
Brad Bishop6e60e8b2018-02-01 10:27:11 -050012ALIMON 2017/02/21
Brad Bishop19323692019-04-05 15:28:33 -040013KKang 2019/02/20
Andrew Geissler517393d2023-01-13 08:55:19 -060014
Patrick Williamsc124f4f2015-09-15 14:41:29 -050015---
Andrew Geissler517393d2023-01-13 08:55:19 -060016 src/main/script.c | 53 +++--------------------------------------------
17 1 file changed, 3 insertions(+), 50 deletions(-)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050018
Andrew Geissler9aee5002022-03-30 16:27:02 +000019diff --git a/src/main/script.c b/src/main/script.c
Andrew Geissler517393d2023-01-13 08:55:19 -060020index ecce4d842..16f4e6ff5 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000021--- a/src/main/script.c
22+++ b/src/main/script.c
Andrew Geissler517393d2023-01-13 08:55:19 -060023@@ -97,58 +97,11 @@ static const char *
Patrick Williamsc0f7c042017-02-23 20:41:17 -060024 maintscript_pre_exec(struct command *cmd)
25 {
Andrew Geissler517393d2023-01-13 08:55:19 -060026 const char *instdir = dpkg_fsys_get_dir();
Patrick Williamsc0f7c042017-02-23 20:41:17 -060027- const char *admindir = dpkg_db_get_dir();
Brad Bishop6e60e8b2018-02-01 10:27:11 -050028- const char *changedir;
29- size_t instdirlen = strlen(instdir);
Andrew Geissler517393d2023-01-13 08:55:19 -060030
Brad Bishop96ff1982019-08-19 13:50:42 -040031- if (instdirlen > 0 && in_force(FORCE_SCRIPT_CHROOTLESS))
Brad Bishop6e60e8b2018-02-01 10:27:11 -050032- changedir = instdir;
33- else
34- changedir = "/";
35-
Brad Bishop96ff1982019-08-19 13:50:42 -040036- if (instdirlen > 0 && !in_force(FORCE_SCRIPT_CHROOTLESS)) {
Brad Bishop19323692019-04-05 15:28:33 -040037- int rc;
38-
Brad Bishop6e60e8b2018-02-01 10:27:11 -050039- if (strncmp(admindir, instdir, instdirlen) != 0)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050040- ohshit(_("admindir must be inside instdir for dpkg to work properly"));
Brad Bishop6e60e8b2018-02-01 10:27:11 -050041- if (setenv("DPKG_ADMINDIR", admindir + instdirlen, 1) < 0)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050042- ohshite(_("unable to setenv for subprocesses"));
Patrick Williamsc0f7c042017-02-23 20:41:17 -060043- if (setenv("DPKG_ROOT", "", 1) < 0)
44- ohshite(_("unable to setenv for subprocesses"));
Patrick Williamsc124f4f2015-09-15 14:41:29 -050045-
Brad Bishop19323692019-04-05 15:28:33 -040046- rc = chroot(instdir);
Brad Bishop96ff1982019-08-19 13:50:42 -040047- if (rc && in_force(FORCE_NON_ROOT) && errno == EPERM)
Brad Bishop19323692019-04-05 15:28:33 -040048- ohshit(_("not enough privileges to change root "
49- "directory with --force-not-root, consider "
50- "using --force-script-chrootless?"));
51- else if (rc)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050052- ohshite(_("failed to chroot to '%.250s'"), instdir);
Andrew Geissler9aee5002022-03-30 16:27:02 +000053- }
Patrick Williamsc124f4f2015-09-15 14:41:29 -050054- /* Switch to a known good directory to give the maintainer script
55- * a saner environment, also needed after the chroot(). */
Patrick Williamsc0f7c042017-02-23 20:41:17 -060056- if (chdir(changedir))
57- ohshite(_("failed to chdir to '%.255s'"), changedir);
Patrick Williamsc124f4f2015-09-15 14:41:29 -050058- if (debug_has_flag(dbg_scripts)) {
59- struct varbuf args = VARBUF_INIT;
60- const char **argv = cmd->argv;
61-
62- while (*++argv) {
63- varbuf_add_char(&args, ' ');
64- varbuf_add_str(&args, *argv);
65- }
66- varbuf_end_str(&args);
67- debug(dbg_scripts, "fork/exec %s (%s )", cmd->filename,
68- args.buf);
69- varbuf_destroy(&args);
Andrew Geissler9aee5002022-03-30 16:27:02 +000070+ if (*instdir) {
71+ setenv("D", instdir, 1);
72 }
Brad Bishop96ff1982019-08-19 13:50:42 -040073- if (instdirlen == 0 || in_force(FORCE_SCRIPT_CHROOTLESS))
Patrick Williamsc124f4f2015-09-15 14:41:29 -050074- return cmd->filename;
75-
Brad Bishop19323692019-04-05 15:28:33 -040076- if (strlen(cmd->filename) < instdirlen)
77- internerr("maintscript name '%s' length < instdir length %zd",
78- cmd->filename, instdirlen);
Andrew Geissler9aee5002022-03-30 16:27:02 +000079-
Brad Bishop6e60e8b2018-02-01 10:27:11 -050080- return cmd->filename + instdirlen;
Patrick Williamsc124f4f2015-09-15 14:41:29 -050081+ return cmd->filename;
82 }
83
84 /**