]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
Check dup2 return values.
authorNicolas François <nicolas.francois@centraliens.net>
Mon, 19 Aug 2013 20:53:47 +0000 (22:53 +0200)
committerNicolas François <nicolas.francois@centraliens.net>
Mon, 19 Aug 2013 20:53:47 +0000 (22:53 +0200)
* src/su.c: Check dup2 return values.

ChangeLog
src/su.c

index 10deaa909e064b1ebde7089e018661e8936eac5b..df00cfdc8a46ef80cd5af135f318ef57789c7e8e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-08-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Check dup2 return values.
+
 2013-08-15  Wolfgang Zarre  <lkdev@essax.com>
 
        * src/su.c: Create a pseudo TTY to avoid character injection from
index d2fb8c85b4330ad27d7bfa1e4d5eda3d63038723..67ba1bcb7bdad1a6bccae3571bb1351284f86dae 100644 (file)
--- a/src/su.c
+++ b/src/su.c
@@ -351,9 +351,14 @@ static void handle_session (void)
                        if (winsz_set == true && ioctl (fd_pts, TIOCSWINSZ, &winsz) == -1)
                                fprintf (stderr, _("%s: Cannot set window size of session %d\n"), Prog, errno);
 
-                       dup2 (fd_pts, STDIN_FILENO);
-                       dup2 (fd_pts, STDOUT_FILENO);
-                       dup2 (fd_pts, STDERR_FILENO);
+                       if (   (dup2 (fd_pts, STDIN_FILENO) == -1)
+                           || (dup2 (fd_pts, STDOUT_FILENO) == -1)
+                           || (dup2 (fd_pts, STDERR_FILENO) == -1)) {
+                               fprintf (stderr,
+                                        _("%s: Cannot prepare new terminal\n"),
+                                        Prog);
+                               exit (1);
+                       }
 
                        if (STDIN_FILENO != fd_pts && STDOUT_FILENO != fd_pts
                                        && STDERR_FILENO != fd_pts)