diff options
author | krw@openbsd.org <krw@openbsd.org> | 2016-04-02 16:37:42 +0200 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2016-04-08 06:12:18 +0200 |
commit | 574def0eb493cd6efeffd4ff2e9257abcffee0c8 (patch) | |
tree | bbb66ad781b86ca0c02b38e19564fe17e5e23e2d /misc.c | |
parent | Tidy up openssl header test. (diff) | |
download | openssh-574def0eb493cd6efeffd4ff2e9257abcffee0c8.tar.xz openssh-574def0eb493cd6efeffd4ff2e9257abcffee0c8.zip |
upstream commit
Another use for fcntl() and thus of the superfluous 3rd
parameter is when sanitising standard fd's before calling daemon().
Use a tweaked version of the ssh(1) function in all three places
found using fcntl() this way.
ok jca@ beck@
Upstream-ID: f16811ffa19a1c5f4ef383c5f0fecb843c84e218
Diffstat (limited to 'misc.c')
-rw-r--r-- | misc.c | 26 |
1 files changed, 13 insertions, 13 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.102 2016/03/02 22:42:40 dtucker Exp $ */ +/* $OpenBSD: misc.c,v 1.103 2016/04/02 14:37:42 krw Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005,2006 Damien Miller. All rights reserved. @@ -84,9 +84,9 @@ set_nonblock(int fd) { int val; - val = fcntl(fd, F_GETFL, 0); + val = fcntl(fd, F_GETFL); if (val < 0) { - error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno)); + error("fcntl(%d, F_GETFL): %s", fd, strerror(errno)); return (-1); } if (val & O_NONBLOCK) { @@ -108,9 +108,9 @@ unset_nonblock(int fd) { int val; - val = fcntl(fd, F_GETFL, 0); + val = fcntl(fd, F_GETFL); if (val < 0) { - error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno)); + error("fcntl(%d, F_GETFL): %s", fd, strerror(errno)); return (-1); } if (!(val & O_NONBLOCK)) { @@ -729,16 +729,16 @@ sanitise_stdfd(void) strerror(errno)); exit(1); } - while (++dupfd <= 2) { - /* Only clobber closed fds */ - if (fcntl(dupfd, F_GETFL, 0) >= 0) - continue; - if (dup2(nullfd, dupfd) == -1) { - fprintf(stderr, "dup2: %s\n", strerror(errno)); - exit(1); + while (++dupfd <= STDERR_FILENO) { + /* Only populate closed fds. */ + if (fcntl(dupfd, F_GETFL) == -1 && errno == EBADF) { + if (dup2(nullfd, dupfd) == -1) { + fprintf(stderr, "dup2: %s\n", strerror(errno)); + exit(1); + } } } - if (nullfd > 2) + if (nullfd > STDERR_FILENO) close(nullfd); } |