Skip to content

Allow sessions with /bin/sh

Adriaan de Groot requested to merge work/adridg/allow-bin-sh into master

The existing code scans through programs to find an acceptable shell to start; _program is the shell that is configured for the session (line 456). The first shell to be found from that list, is assigned to exec and we'll run that shell.

If the shell found wasn't the one configured (e.g. one of the other ones from the list) then a warning is printed, but we carry on. However, if the shell found is the last one in the list (i.e. /bin/sh) then a warning is printed and the shell does not start.

If the configured shell is /bin/sh this obviously breaks down: it is found (as the first one in the list!) but still equals the last one; the warning is printed and nothing runs.

It is unclear why /bin/sh is not allowed as a shell: it exists, it's an executable, and it's an interactive shell.

Curiously, configuring the shell as sh for the session runs /bin/sh in the end, but just tricks the logic here:

  • checkProgram("sh") returns sh as string,
  • so the comparison against /bin/sh fails,
  • and we can run sh .. which is /bin/sh.

There's no good reason to forbid /bin/sh, so change the check to only fail if no shell was found at all (exec stayed empty) or if the found shell behaves weirdly (is not equal to itself).

Merge request reports