summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2002-12-23 02:00:23 +0000
committerBen Lindstrom <mouring@eviladmin.org>2002-12-23 02:00:23 +0000
commit44adb8fed9214d209eb8d7d47d5adb053c69f190 (patch)
tree16ca85f439875b40ccd936e4e943817cb901894a
parentab1c12a11c0c05223405a814d39281b5b0b9b712 (diff)
downloadopenssh-git-44adb8fed9214d209eb8d7d47d5adb053c69f190.tar.gz
- 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.
-rw-r--r--ChangeLog11
-rw-r--r--authfile.c21
2 files changed, 26 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 194ecdcb..3eed9b8c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+20021222
+ - (bal) OpenBSD CVS Sync
+ - 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.
+
20021205
- (djm) PERL-free fixpaths from stuge-openssh-unix-dev@cdy.org
@@ -832,4 +841,4 @@
save auth method before monitor_reset_key_state(); bugzilla bug #284;
ok provos@
-$Id: ChangeLog,v 1.2515 2002/12/05 09:59:33 djm Exp $
+$Id: ChangeLog,v 1.2516 2002/12/23 02:00:23 mouring Exp $
diff --git a/authfile.c b/authfile.c
index 1fa5d811..24ae6abd 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);