commit:     116ca8fd5af908edad85095916585576aa19ec5f
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Tue Nov  2 04:13:53 2021 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Tue Nov  2 04:13:53 2021 +0000
URL:        https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=116ca8fd

sandbox: add backwards compat interface hack

Portage runs commands through sandbox like:
  $ sandbox "/usr/lib/portage/python3.9/ebuild.sh unpack"

That means we can't break the CLI without breaking portage and forcing
everyone to upgrade together.  That'll be pretty disruptive for people,
so add a hack to detect this situation: if a single argument is passed
on the CLI, and it doesn't appear to be a file, then fallback to running
it through the shell.  This keeps portage working while allowing the new
interface style to launch.  If/when we can update portage to always use
the -c option, maybe we can drop this in the future.  Or not ... it's
not exactly the worst hack for users.

Bug: https://bugs.gentoo.org/265907
Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

 src/sandbox.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/sandbox.c b/src/sandbox.c
index 2d03dd4..ed0c7f6 100644
--- a/src/sandbox.c
+++ b/src/sandbox.c
@@ -260,6 +260,15 @@ int main(int argc, char **argv)
                goto oom_error;
 
        /* Setup bash argv */
+       if (!opt_use_bash && argc == 2) {
+               /* Backwards compatibility hack: if there's only one argument, 
and it
+                * appears to be a shell command (not an absolute path to a 
program),
+                * then fallback to running through the shell.
+                */
+               if (access(argv[1], X_OK))
+                       opt_use_bash = true;
+       }
+
        if (opt_use_bash || argc == 1) {
                str_list_add_item_copy(argv_bash, "/bin/bash", oom_error);
                str_list_add_item_copy(argv_bash, "-rcfile", oom_error);

Reply via email to