From 2d578407eda1fc1ad88e296db4fc2fcf9342d89d Mon Sep 17 00:00:00 2001 From: Vincent Mihalkovic Date: Mon, 31 Mar 2025 13:48:47 +0200 Subject: [PATCH] Fix 'stty -echo' in scripts Resolves: RHEL-83043 --- ksh-1.0.11-stty-noecho.patch | 77 ++++++++++++++++++++++++++++++++++++ ksh.spec | 9 ++++- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 ksh-1.0.11-stty-noecho.patch diff --git a/ksh-1.0.11-stty-noecho.patch b/ksh-1.0.11-stty-noecho.patch new file mode 100644 index 0000000..2fe543e --- /dev/null +++ b/ksh-1.0.11-stty-noecho.patch @@ -0,0 +1,77 @@ +From 4350174a5d4acabf78f97b28c6d0ae68ec703e78 Mon Sep 17 00:00:00 2001 +From: Martijn Dekker +Date: Sun, 30 Mar 2025 00:14:35 +0000 +Subject: [PATCH] Fix 'stty -echo' in scripts (re: 41ebb55a) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Vincent Mihalkovič (@vmihalko) reports: +> In ksh versions later than v1.0.0-beta.1, setting stty -echo in a +> script no longer works as expected. This issue did not occur in +> earlier versions. +> +> I performed a git bisect between the last known good tag (reboot) +> and the first known bad tag (v1.0.0-beta.1). The regression was +> introduced in commit 41ebb55a. +> +> Reproducer: +> read a +> stty -echo +> read b +> +> Expected Behavior: +> • Input for a should be visible. +> • Input for b should not be echoed to the terminal. +> +> Actual Behavior: +> • Input for a is visible as expected. +> • Input for b is also visible, despite stty -echo being set. + +Analysis: + +The problem was that the tty_set(-1, 0, NULL) call below, which +invalidates saved terminal attributes, was no longer being executed +when running a script (note that job.jobcontrol is 0/false for +scripts). See edit.c for the tty_set function and what it does. + +src/cmd/ksh93/sh/jobs.c +1423: else if(job.jobcontrol) +1424: { +1425: if(pw->p_pid == tcgetpgrp(JOBTTY)) +1426: { +...skipped for brevity... +1430: } +1431: tty_set(-1, 0, NULL); +1432: } + +So, after running an external command such as stty, terminal +attributes that should have been invalidated were restored upon the +next 'read'. This was undoing the effect of the stty command. + +src/cmd/ksh93/sh/jobs.c: job_wait(): +- Move the test for job.jobcontrol so that saved terminal + attributes are again invalidated after running an external + command when job control for interactive shells is not active. + +Resolves: https://github.com/ksh93/ksh/issues/836 +--- + src/cmd/ksh93/sh/jobs.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/cmd/ksh93/sh/jobs.c b/src/cmd/ksh93/sh/jobs.c +index c65bc6e66094..513afb5582ab 100644 +--- a/src/cmd/ksh93/sh/jobs.c ++++ b/src/cmd/ksh93/sh/jobs.c +@@ -1420,9 +1420,9 @@ int job_wait(pid_t pid) + kill(sh.current_pid,SIGTSTP); + } + } +- else if(job.jobcontrol) ++ else + { +- if(pw->p_pid == tcgetpgrp(JOBTTY)) ++ if(job.jobcontrol && pw->p_pid == tcgetpgrp(JOBTTY)) + { + if(pw->p_pgrp==0) + pw->p_pgrp = pw->p_pid; diff --git a/ksh.spec b/ksh.spec index 4d1755b..3431b9f 100644 --- a/ksh.spec +++ b/ksh.spec @@ -4,7 +4,7 @@ URL: http://www.kornshell.com/ License: EPL-1.0 Epoch: 3 Version: 1.0.6 -Release: 8%{?dist} +Release: 9%{?dist} Source0: https://github.com/ksh93/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz Source1: kshcomp.conf Source2: kshrc.rhs @@ -42,6 +42,9 @@ Patch8: ksh-1.0.10-pjob.patch #upstream commit: https://github.com/ksh93/ksh/commit/5e3a169785139809f1f733314f5660769c86d10c (test fix) Patch9: ksh-1.0.9-no-TERM-env-segfault.patch +# upstream commit: https://github.com/ksh93/ksh/commit/4350174a5d4acabf78f97b28c6d0ae68ec703e78 +Patch10: ksh-1.0.11-stty-noecho.patch + Conflicts: pdksh Requires: coreutils, diffutils BuildRequires: gcc @@ -163,6 +166,10 @@ fi %config(noreplace) %{_sysconfdir}/binfmt.d/kshcomp.conf %changelog +* Mon Mar 31 2025 Vincent Mihalkovic - 3:1.0.6-9 +- Fix 'stty -echo' in scripts + Resolves: RHEL-83043 + * Sat Mar 29 2025 Vincent Mihalkovic - 3:1.0.6-8 - Fix segfault on starting ksh with no TERM env var Resolves: RHEL-83283