diff options
author | tobias@openbsd.org <tobias@openbsd.org> | 2024-04-30 15:40:43 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2024-05-08 14:57:47 +1000 |
commit | bc5dcb8ab9a4e8af54a724883732af378f42ea78 (patch) | |
tree | a24fcba4944acf4a8f3d4ced20910709a995872e | |
parent | 6a42b70e56bef1aacdcdf06352396e837883e84f (diff) |
upstream: never close stdin
The sanitise_stdfd call makes sure that standard file descriptors are
open (if they were closed, they are connected with /dev/null).
Do not close stdin in any case to prevent error messages when stdin is
read multiple times and to prevent later usage of fd 0 for connections,
e.g.
echo localhost | ssh-keyscan -f - -f -
While at it, make stdin-related error messages nicer.
Authored with Max Kunzelmann <maxdev at posteo dot de>
ok djm
OpenBSD-Commit-ID: 48e9b7938e2fa2f9bd47e6de6df66a31e0b375d3
-rw-r--r-- | ssh-keyscan.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ssh-keyscan.c b/ssh-keyscan.c index f2e6b59e..ac6551ea 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keyscan.c,v 1.155 2024/01/11 01:45:36 djm Exp $ */ +/* $OpenBSD: ssh-keyscan.c,v 1.156 2024/04/30 15:40:43 tobias Exp $ */ /* * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. * @@ -854,7 +854,8 @@ main(int argc, char **argv) if (argv[j] == NULL) fp = stdin; else if ((fp = fopen(argv[j], "r")) == NULL) - fatal("%s: %s: %s", __progname, argv[j], strerror(errno)); + fatal("%s: %s: %s", __progname, + fp == stdin ? "<stdin>" : argv[j], strerror(errno)); while (getline(&line, &linesize, fp) != -1) { /* Chomp off trailing whitespace and comments */ @@ -876,9 +877,11 @@ main(int argc, char **argv) } if (ferror(fp)) - fatal("%s: %s: %s", __progname, argv[j], strerror(errno)); + fatal("%s: %s: %s", __progname, + fp == stdin ? "<stdin>" : argv[j], strerror(errno)); - fclose(fp); + if (fp != stdin) + fclose(fp); } free(line); |