diff options
author | Damien Miller <djm@mindrot.org> | 1999-11-25 11:54:57 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 1999-11-25 11:54:57 +1100 |
commit | 5428f646ad32da88ddd04a8c287d595524674fbf (patch) | |
tree | cc1f1e5d7852e1f44d41077f776abf7dab7ac06d /authfile.c | |
parent | 9072e1889648988da38b7b81bce95291c1dc3a23 (diff) | |
download | openssh-git-5428f646ad32da88ddd04a8c287d595524674fbf.tar.gz |
- More reformatting merged from OpenBSD CVS
- Merged OpenBSD CVS changes:
- [channels.c]
report from mrwizard@psu.edu via djm@ibs.com.au
- [channels.c]
set SO_REUSEADDR and SO_LINGER for forwarded ports.
chip@valinux.com via damien@ibs.com.au
- [nchan.c]
it's not an error() if shutdown_write failes in nchan.
- [readconf.c]
remove dead #ifdef-0-code
- [readconf.c servconf.c]
strcasecmp instead of tolower
- [scp.c]
progress meter overflow fix from damien@ibs.com.au
- [ssh-add.1 ssh-add.c]
SSH_ASKPASS support
- [ssh.1 ssh.c]
postpone fork_after_authentication until command execution,
request/patch from jahakala@cc.jyu.fi via damien@ibs.com.au
plus: use daemon() for backgrounding
Diffstat (limited to 'authfile.c')
-rw-r--r-- | authfile.c | 63 |
1 files changed, 36 insertions, 27 deletions
@@ -15,7 +15,7 @@ */ #include "includes.h" -RCSID("$Id: authfile.c,v 1.4 1999/11/24 13:26:22 damien Exp $"); +RCSID("$Id: authfile.c,v 1.5 1999/11/25 00:54:58 damien Exp $"); #ifdef HAVE_OPENSSL #include <openssl/bn.h> @@ -33,10 +33,12 @@ RCSID("$Id: authfile.c,v 1.4 1999/11/24 13:26:22 damien Exp $"); /* Version identification string for identity files. */ #define AUTHFILE_ID_STRING "SSH PRIVATE KEY FILE FORMAT 1.1\n" -/* Saves the authentication (private) key in a file, encrypting it with - passphrase. The identification of the file (lowest 64 bits of n) - will precede the key to provide identification of the key without - needing a passphrase. */ +/* + * Saves the authentication (private) key in a file, encrypting it with + * passphrase. The identification of the file (lowest 64 bits of n) will + * precede the key to provide identification of the key without needing a + * passphrase. + */ int save_private_key(const char *filename, const char *passphrase, @@ -49,9 +51,10 @@ save_private_key(const char *filename, const char *passphrase, int cipher_type; u_int32_t rand; - /* If the passphrase is empty, use SSH_CIPHER_NONE to ease - converting to another cipher; otherwise use - SSH_AUTHFILE_CIPHER. */ + /* + * If the passphrase is empty, use SSH_CIPHER_NONE to ease converting + * to another cipher; otherwise use SSH_AUTHFILE_CIPHER. + */ if (strcmp(passphrase, "") == 0) cipher_type = SSH_CIPHER_NONE; else @@ -68,9 +71,11 @@ save_private_key(const char *filename, const char *passphrase, buf[3] = buf[1]; buffer_append(&buffer, buf, 4); - /* Store the private key (n and e will not be stored because they - will be stored in plain text, and storing them also in - encrypted format would just give known plaintext). */ + /* + * Store the private key (n and e will not be stored because they + * will be stored in plain text, and storing them also in encrypted + * format would just give known plaintext). + */ buffer_put_bignum(&buffer, key->d); buffer_put_bignum(&buffer, key->iqmp); buffer_put_bignum(&buffer, key->q); /* reverse from SSL p */ @@ -112,11 +117,9 @@ save_private_key(const char *filename, const char *passphrase, memset(buf, 0, sizeof(buf)); buffer_free(&buffer); - /* Write to a file. */ f = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (f < 0) return 0; - if (write(f, buffer_ptr(&encrypted), buffer_len(&encrypted)) != buffer_len(&encrypted)) { debug("Write to key file %.200s failed: %.100s", filename, @@ -131,9 +134,11 @@ save_private_key(const char *filename, const char *passphrase, return 1; } -/* Loads the public part of the key file. Returns 0 if an error - was encountered (the file does not exist or is not readable), and - non-zero otherwise. */ +/* + * Loads the public part of the key file. Returns 0 if an error was + * encountered (the file does not exist or is not readable), and non-zero + * otherwise. + */ int load_public_key(const char *filename, RSA * pub, @@ -144,11 +149,9 @@ load_public_key(const char *filename, RSA * pub, Buffer buffer; char *cp; - /* Read data from the file into the buffer. */ f = open(filename, O_RDONLY); if (f < 0) return 0; - len = lseek(f, (off_t) 0, SEEK_END); lseek(f, (off_t) 0, SEEK_SET); @@ -170,8 +173,10 @@ load_public_key(const char *filename, RSA * pub, buffer_free(&buffer); return 0; } - /* Make sure it begins with the id string. Consume the id string - from the buffer. */ + /* + * Make sure it begins with the id string. Consume the id string + * from the buffer. + */ for (i = 0; i < (unsigned int) strlen(AUTHFILE_ID_STRING) + 1; i++) if (buffer_get_char(&buffer) != (unsigned char) AUTHFILE_ID_STRING[i]) { debug("Bad key file %.200s.", filename); @@ -197,9 +202,12 @@ load_public_key(const char *filename, RSA * pub, return 1; } -/* Loads the private key from the file. Returns 0 if an error is encountered - (file does not exist or is not readable, or passphrase is bad). - This initializes the private key. */ +/* + * Loads the private key from the file. Returns 0 if an error is encountered + * (file does not exist or is not readable, or passphrase is bad). This + * initializes the private key. + * Assumes we are called under uid of the owner of the file. + */ int load_private_key(const char *filename, const char *passphrase, @@ -214,12 +222,11 @@ load_private_key(const char *filename, const char *passphrase, BIGNUM *aux; struct stat st; - /* Read the file into the buffer. */ f = open(filename, O_RDONLY); if (f < 0) return 0; - /* We assume we are called under uid of the owner of the file */ + /* check owner and modes */ if (fstat(f, &st) < 0 || (st.st_uid != 0 && st.st_uid != getuid()) || (st.st_mode & 077) != 0) { @@ -252,8 +259,10 @@ load_private_key(const char *filename, const char *passphrase, buffer_free(&buffer); return 0; } - /* Make sure it begins with the id string. Consume the id string - from the buffer. */ + /* + * Make sure it begins with the id string. Consume the id string + * from the buffer. + */ for (i = 0; i < (unsigned int) strlen(AUTHFILE_ID_STRING) + 1; i++) if (buffer_get_char(&buffer) != (unsigned char) AUTHFILE_ID_STRING[i]) { debug("Bad key file %.200s.", filename); |