Only use default-shell for popups, return to /bin/sh for run-shell,
authornicm <nicm@openbsd.org>
Mon, 30 Sep 2024 07:54:51 +0000 (07:54 +0000)
committernicm <nicm@openbsd.org>
Mon, 30 Sep 2024 07:54:51 +0000 (07:54 +0000)
if-shell and #() - these have been documented as using /bin/sh for a
long time and scripts rely on it. Pointed out by Gregory Pakosz.

usr.bin/tmux/job.c
usr.bin/tmux/popup.c
usr.bin/tmux/tmux.h

index e92daae..96f92ef 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: job.c,v 1.68 2024/05/15 09:59:12 nicm Exp $ */
+/* $OpenBSD: job.c,v 1.69 2024/09/30 07:54:51 nicm Exp $ */
 
 /*
  * Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -71,9 +71,10 @@ static LIST_HEAD(joblist, job) all_jobs = LIST_HEAD_INITIALIZER(all_jobs);
 
 /* Start a job running. */
 struct job *
-job_run(const char *cmd, int argc, char **argv, struct environ *e, struct session *s,
-    const char *cwd, job_update_cb updatecb, job_complete_cb completecb,
-    job_free_cb freecb, void *data, int flags, int sx, int sy)
+job_run(const char *cmd, int argc, char **argv, struct environ *e,
+    struct session *s, const char *cwd, job_update_cb updatecb,
+    job_complete_cb completecb, job_free_cb freecb, void *data, int flags,
+    int sx, int sy)
 {
        struct job       *job;
        struct environ   *env;
@@ -83,6 +84,7 @@ job_run(const char *cmd, int argc, char **argv, struct environ *e, struct sessio
        sigset_t          set, oldset;
        struct winsize    ws;
        char            **argvp, tty[TTY_NAME_MAX], *argv0;
+       struct options   *oo;
 
        /*
         * Do not set TERM during .tmux.conf (second argument here), it is nice
@@ -93,12 +95,17 @@ job_run(const char *cmd, int argc, char **argv, struct environ *e, struct sessio
        if (e != NULL)
                environ_copy(e, env);
 
-       if (s != NULL)
-               shell = options_get_string(s->options, "default-shell");
-       else
-               shell = options_get_string(global_s_options, "default-shell");
-       if (!checkshell(shell))
+       if (~flags & JOB_DEFAULTSHELL)
                shell = _PATH_BSHELL;
+       else {
+               if (s != NULL)
+                       oo = s->options;
+               else
+                       oo = global_s_options;
+               shell = options_get_string(oo, "default-shell");
+               if (!checkshell(shell))
+                       shell = _PATH_BSHELL;
+       }
        argv0 = shell_argv0(shell, 0);
 
        sigfillset(&set);
index 81d749d..652b582 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: popup.c,v 1.54 2024/08/21 04:17:09 nicm Exp $ */
+/* $OpenBSD: popup.c,v 1.55 2024/09/30 07:54:51 nicm Exp $ */
 
 /*
  * Copyright (c) 2020 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -718,7 +718,7 @@ popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px,
 
        pd->job = job_run(shellcmd, argc, argv, env, s, cwd,
            popup_job_update_cb, popup_job_complete_cb, NULL, pd,
-           JOB_NOWAIT|JOB_PTY|JOB_KEEPWRITE, jx, jy);
+           JOB_NOWAIT|JOB_PTY|JOB_KEEPWRITE|JOB_DEFAULTSHELL, jx, jy);
        pd->ictx = input_init(NULL, job_get_event(pd->job), &pd->palette);
 
        server_client_set_overlay(c, 0, popup_check_cb, popup_mode_cb,
index f6bfb91..731cf75 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.1227 2024/09/16 20:28:22 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1228 2024/09/30 07:54:51 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -2307,6 +2307,7 @@ typedef void (*job_free_cb) (void *);
 #define JOB_NOWAIT 0x1
 #define JOB_KEEPWRITE 0x2
 #define JOB_PTY 0x4
+#define JOB_DEFAULTSHELL 0x8
 struct job     *job_run(const char *, int, char **, struct environ *,
                     struct session *, const char *, job_update_cb,
                     job_complete_cb, job_free_cb, void *, int, int, int);