diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2002-12-23 03:00:23 +0100 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2002-12-23 03:00:23 +0100 |
commit | 44adb8fed9214d209eb8d7d47d5adb053c69f190 (patch) | |
tree | 16ca85f439875b40ccd936e4e943817cb901894a /authfile.c | |
parent | - (djm) PERL-free fixpaths from stuge-openssh-unix-dev@cdy.org (diff) | |
download | openssh-44adb8fed9214d209eb8d7d47d5adb053c69f190.tar.xz openssh-44adb8fed9214d209eb8d7d47d5adb053c69f190.zip |
- fgsch@cvs.openbsd.org 2002/11/15 10:03:09
[authfile.c]
lseek(2) may return -1 when getting the public/private key lenght.
Simplify the code and check for errors using fstat(2).
Problem reported by Mauricio Sanchez, markus@ ok.
Diffstat (limited to '')
-rw-r--r-- | authfile.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/authfile.c b/authfile.c index 1fa5d811a..24ae6abd3 100644 --- a/authfile.c +++ b/authfile.c @@ -36,7 +36,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: authfile.c,v 1.50 2002/06/24 14:55:38 markus Exp $"); +RCSID("$OpenBSD: authfile.c,v 1.51 2002/11/15 10:03:09 fgsch Exp $"); #include <openssl/err.h> #include <openssl/evp.h> @@ -232,12 +232,17 @@ key_load_public_rsa1(int fd, const char *filename, char **commentp) { Buffer buffer; Key *pub; + struct stat st; char *cp; int i; off_t len; - len = lseek(fd, (off_t) 0, SEEK_END); - lseek(fd, (off_t) 0, SEEK_SET); + if (fstat(fd, &st) < 0) { + error("fstat for key file %.200s failed: %.100s", + filename, strerror(errno)); + return NULL; + } + len = st.st_size; buffer_init(&buffer); cp = buffer_append_space(&buffer, len); @@ -318,9 +323,15 @@ key_load_private_rsa1(int fd, const char *filename, const char *passphrase, CipherContext ciphercontext; Cipher *cipher; Key *prv = NULL; + struct stat st; - len = lseek(fd, (off_t) 0, SEEK_END); - lseek(fd, (off_t) 0, SEEK_SET); + if (fstat(fd, &st) < 0) { + error("fstat for key file %.200s failed: %.100s", + filename, strerror(errno)); + close(fd); + return NULL; + } + len = st.st_size; buffer_init(&buffer); cp = buffer_append_space(&buffer, len); |