]> andersk Git - openssh.git/commitdiff
- deraadt@cvs.openbsd.org 2001/02/21 09:05:54
authormouring <mouring>
Mon, 5 Mar 2001 04:59:27 +0000 (04:59 +0000)
committermouring <mouring>
Mon, 5 Mar 2001 04:59:27 +0000 (04:59 +0000)
     [authfile.c]
     improve fd handling

ChangeLog
authfile.c

index 0d8bcc55ca086512c261619bdaa810adc1fb752f..0e919a00179441642e433a0df55334d8f546c8f7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,9 @@
    - deraadt@cvs.openbsd.org 2001/02/21 07:37:04
      [ssh-keyscan.c]
      inline -> __inline__, and some indent
+   - deraadt@cvs.openbsd.org 2001/02/21 09:05:54
+     [authfile.c]
+     improve fd handling
 
 20010304
  - (bal) Remove make-ssh-known-hosts.1 since it's no longer valid.
index aa898c7259d21119af129d8ff9223dcf25c67cd8..9f03d5137e333107e008d2e8f90e1b451a625ac8 100644 (file)
@@ -36,7 +36,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: authfile.c,v 1.27 2001/02/08 19:30:51 itojun Exp $");
+RCSID("$OpenBSD: authfile.c,v 1.28 2001/02/21 09:05:54 deraadt Exp $");
 
 #include <openssl/err.h>
 #include <openssl/evp.h>
@@ -336,12 +336,12 @@ load_private_key_rsa1(int fd, const char *filename,
                close(fd);
                return 0;
        }
-       close(fd);
 
        /* Check that it is at least big enough to contain the ID string. */
        if (len < sizeof(authfile_id_string)) {
                debug3("Bad RSA1 key file %.200s.", filename);
                buffer_free(&buffer);
+               close(fd);
                return 0;
        }
        /*
@@ -352,8 +352,10 @@ load_private_key_rsa1(int fd, const char *filename,
                if (buffer_get_char(&buffer) != authfile_id_string[i]) {
                        debug3("Bad RSA1 key file %.200s.", filename);
                        buffer_free(&buffer);
+                       close(fd);
                        return 0;
                }
+
        /* Read cipher type. */
        cipher_type = buffer_get_char(&buffer);
        (void) buffer_get_int(&buffer); /* Reserved data. */
@@ -403,6 +405,7 @@ fail:
                prv->e = NULL;
                if (comment_return)
                        xfree(*comment_return);
+               close(fd);
                return 0;
        }
        /* Read the rest of the private key. */
@@ -431,7 +434,7 @@ fail:
        BN_CTX_free(ctx);
 
        buffer_free(&decrypted);
-
+       close(fd);
        return 1;
 }
 
@@ -446,6 +449,7 @@ load_private_key_ssh2(int fd, const char *passphrase, Key *k, char **comment_ret
        fp = fdopen(fd, "r");
        if (fp == NULL) {
                error("fdopen failed");
+               close(fd);
                return 0;
        }
        pk = PEM_read_PrivateKey(fp, NULL, NULL, (char *)passphrase);
@@ -515,7 +519,7 @@ load_private_key(const char *filename, const char *passphrase, Key *key,
                error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
                error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
                error("Bad ownership or mode(0%3.3o) for '%s'.",
-                     st.st_mode & 0777, filename);
+                   st.st_mode & 0777, filename);
                error("It is recommended that your private key files are NOT accessible by others.");
                return 0;
        }
@@ -530,16 +534,19 @@ load_private_key(const char *filename, const char *passphrase, Key *key,
                        key->rsa->n = NULL;
                }
                ret = load_private_key_rsa1(fd, filename, passphrase,
-                    key->rsa, comment_return);
+                   key->rsa, comment_return);          /* closes fd */
+
                break;
        case KEY_DSA:
        case KEY_RSA:
        case KEY_UNSPEC:
-               ret = load_private_key_ssh2(fd, passphrase, key, comment_return);
+               ret = load_private_key_ssh2(fd, passphrase, key,
+                   comment_return);                    /* closes fd */
+               break;
        default:
+               close(fd);
                break;
        }
-       close(fd);
        return ret;
 }
 
This page took 0.105335 seconds and 5 git commands to generate.