[pacman-dev] [PATCH] Reopen stdin before chrooting
Fixes FS#68630 diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 7b19162c..4fb7fe3c 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -1135,12 +1135,6 @@ int main(int argc, char *argv[]) cleanup(EXIT_FAILURE); } - if(config->sysroot && (chroot(config->sysroot) != 0 || chdir("/") != 0)) { - pm_printf(ALPM_LOG_ERROR, - _("chroot to '%s' failed: (%s)\n"), config->sysroot, strerror(errno)); - cleanup(EXIT_FAILURE); - } - /* we support reading targets from stdin if a cmdline parameter is '-' */ if(alpm_list_find_str(pm_targets, "-")) { if(!isatty(fileno(stdin))) { @@ -1191,6 +1185,12 @@ int main(int argc, char *argv[]) } } + if(config->sysroot && (chroot(config->sysroot) != 0 || chdir("/") != 0)) { + pm_printf(ALPM_LOG_ERROR, + _("chroot to '%s' failed: (%s)\n"), config->sysroot, strerror(errno)); + cleanup(EXIT_FAILURE); + } + pm_printf(ALPM_LOG_DEBUG, "pacman v%s - libalpm v%s\n", PACKAGE_VERSION, alpm_version()); /* parse the config file */ -- 2.30.0
On 1/1/21 4:13 am, morganamilo via pacman-dev wrote:
Fixes FS#68630
Patch is fine, but commit message needed work. I don't think it is the reopening of stdin that is important here. Here is what I edited it to: Read targets from stdin before chrooting Operations involving --sysroot and reading targets from stdin were failing due to attempting to read targets after chrooting. Move the chroot to happen after targets are read. Fixes FS#68630
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 7b19162c..4fb7fe3c 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -1135,12 +1135,6 @@ int main(int argc, char *argv[]) cleanup(EXIT_FAILURE); }
- if(config->sysroot && (chroot(config->sysroot) != 0 || chdir("/") != 0)) { - pm_printf(ALPM_LOG_ERROR, - _("chroot to '%s' failed: (%s)\n"), config->sysroot, strerror(errno)); - cleanup(EXIT_FAILURE); - } - /* we support reading targets from stdin if a cmdline parameter is '-' */ if(alpm_list_find_str(pm_targets, "-")) { if(!isatty(fileno(stdin))) { @@ -1191,6 +1185,12 @@ int main(int argc, char *argv[]) } }
+ if(config->sysroot && (chroot(config->sysroot) != 0 || chdir("/") != 0)) { + pm_printf(ALPM_LOG_ERROR, + _("chroot to '%s' failed: (%s)\n"), config->sysroot, strerror(errno)); + cleanup(EXIT_FAILURE); + } + pm_printf(ALPM_LOG_DEBUG, "pacman v%s - libalpm v%s\n", PACKAGE_VERSION, alpm_version());
/* parse the config file */
participants (2)
-
Allan McRae
-
morganamilo