]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
src/vipw.c: Restore the original terminal pgrp after editing
authorTodd C. Miller <Todd.Miller@sudo.ws>
Fri, 24 Jan 2025 02:11:09 +0000 (19:11 -0700)
committerAlejandro Colomar <alx@kernel.org>
Sun, 26 Jan 2025 13:59:43 +0000 (14:59 +0100)
This fixes a problem when the shell is not in monitor mode (job control
enabled) which resulted in the terminal pgrp being set to an invalid
value once vipw exited.

Fixes: 7eca1112fbd7 (2019-11-11; "Fix vipw not resuming correctly when suspended")
Closes: <https://github.com/shadow-maint/shadow/issues/1194>
Reported-by: <https://github.com/yonecle>
Tested-by: Alejandro Colomar <alx@kernel.org>
Reviewed-by: Alejandro Colomar <alx@kernel.org>
src/vipw.c

index a855e0d7ffcc46f04024c35bffddbb218e98b24d..dbc87db9aed9e0143880915debc81fc913e6df5a 100644 (file)
@@ -372,8 +372,14 @@ vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void))
                }
        }
 
-       if (orig_pgrp != -1)
+       if (orig_pgrp != -1) {
+                /* Restore terminal pgrp after editing. */
+               if (tcsetpgrp(STDIN_FILENO, orig_pgrp) == -1) {
+                       fprintf(stderr, "%s: %s: %s", Prog,
+                               "tcsetpgrp", strerror(errno));
+               }
                sigprocmask(SIG_SETMASK, &omask, NULL);
+       }
 
        if (-1 == pid) {
                vipwexit (editor, 1, 1);