From: Nicolas François Date: Mon, 19 Aug 2013 21:26:54 +0000 (+0200) Subject: Check for failure before setting term in RAW mode. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4dd66bddc7f34d14bc6bb09d1c9597b0dab3dd93;p=thirdparty%2Fshadow.git Check for failure before setting term in RAW mode. * src/su.c: Do not set terminal in RAW mode in case of earlier failure. --- diff --git a/ChangeLog b/ChangeLog index 4bbc9b8e0..b149b0e39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * src/su.c: Fail if the process group leader or the controlling terminal cannot be set. + * src/su.c: Do not set terminal in RAW mode in case of earlier + failure. 2013-08-19 Nicolas François diff --git a/src/su.c b/src/su.c index 5c5aec833..122914bda 100644 --- a/src/su.c +++ b/src/su.c @@ -420,7 +420,7 @@ static void handle_session (void) } } - if (have_tty == true) { + if ((0 == caught) && (have_tty == true)) { /* Set RAW mode */ termset_new = termset_save; cfmakeraw (&termset_new); @@ -514,8 +514,6 @@ static void handle_session (void) } } } while (!stop); - } - if (have_tty == true) { close (fd_pts); @@ -523,6 +521,7 @@ static void handle_session (void) if (tcsetattr (STDIN_FILENO, TCSANOW, &termset_save) == -1) fprintf (stderr, _("%s: Cannot reset termios attributes\n"), Prog); } + } if (0 != caught) { (void) fputs ("\n", stderr);