Allow sessions with /bin/sh
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).
parent
1cda384e
Please register or sign in to comment