diff options
Diffstat (limited to 'authfile.c')
-rw-r--r-- | authfile.c | 92 |
1 files changed, 84 insertions, 8 deletions
diff --git a/authfile.c b/authfile.c index 4368cb941..0a5bae96f 100644 --- a/authfile.c +++ b/authfile.c | |||
@@ -1,21 +1,42 @@ | |||
1 | /* | 1 | /* |
2 | * | ||
3 | * authfile.c | ||
4 | * | ||
5 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 2 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
6 | * | ||
7 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 3 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
8 | * All rights reserved | 4 | * All rights reserved |
9 | * | ||
10 | * Created: Mon Mar 27 03:52:05 1995 ylo | ||
11 | * | ||
12 | * This file contains functions for reading and writing identity files, and | 5 | * This file contains functions for reading and writing identity files, and |
13 | * for reading the passphrase from the user. | 6 | * for reading the passphrase from the user. |
14 | * | 7 | * |
8 | * As far as I am concerned, the code I have written for this software | ||
9 | * can be used freely for any purpose. Any derived versions of this | ||
10 | * software must be clearly marked as such, and if the derived work is | ||
11 | * incompatible with the protocol description in the RFC file, it must be | ||
12 | * called by a name other than "ssh" or "Secure Shell". | ||
13 | * | ||
14 | * | ||
15 | * Copyright (c) 2000 Markus Friedl. All rights reserved. | ||
16 | * | ||
17 | * Redistribution and use in source and binary forms, with or without | ||
18 | * modification, are permitted provided that the following conditions | ||
19 | * are met: | ||
20 | * 1. Redistributions of source code must retain the above copyright | ||
21 | * notice, this list of conditions and the following disclaimer. | ||
22 | * 2. Redistributions in binary form must reproduce the above copyright | ||
23 | * notice, this list of conditions and the following disclaimer in the | ||
24 | * documentation and/or other materials provided with the distribution. | ||
25 | * | ||
26 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | ||
27 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||
28 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
29 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
30 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
31 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
32 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
33 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
34 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
35 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
15 | */ | 36 | */ |
16 | 37 | ||
17 | #include "includes.h" | 38 | #include "includes.h" |
18 | RCSID("$OpenBSD: authfile.c,v 1.17 2000/06/20 01:39:38 markus Exp $"); | 39 | RCSID("$OpenBSD: authfile.c,v 1.19 2000/09/07 20:27:49 deraadt Exp $"); |
19 | 40 | ||
20 | #include <openssl/bn.h> | 41 | #include <openssl/bn.h> |
21 | #include <openssl/dsa.h> | 42 | #include <openssl/dsa.h> |
@@ -262,6 +283,7 @@ load_public_key_rsa(const char *filename, RSA * pub, char **comment_return) | |||
262 | return 1; | 283 | return 1; |
263 | } | 284 | } |
264 | 285 | ||
286 | /* load public key from private-key file */ | ||
265 | int | 287 | int |
266 | load_public_key(const char *filename, Key * key, char **comment_return) | 288 | load_public_key(const char *filename, Key * key, char **comment_return) |
267 | { | 289 | { |
@@ -497,3 +519,57 @@ load_private_key(const char *filename, const char *passphrase, Key *key, | |||
497 | close(fd); | 519 | close(fd); |
498 | return ret; | 520 | return ret; |
499 | } | 521 | } |
522 | |||
523 | int | ||
524 | do_load_public_key(const char *filename, Key *k, char **commentp) | ||
525 | { | ||
526 | FILE *f; | ||
527 | unsigned int bits; | ||
528 | char line[1024]; | ||
529 | char *cp; | ||
530 | |||
531 | f = fopen(filename, "r"); | ||
532 | if (f != NULL) { | ||
533 | while (fgets(line, sizeof(line), f)) { | ||
534 | line[sizeof(line)-1] = '\0'; | ||
535 | cp = line; | ||
536 | switch(*cp){ | ||
537 | case '#': | ||
538 | case '\n': | ||
539 | case '\0': | ||
540 | continue; | ||
541 | } | ||
542 | /* Skip leading whitespace. */ | ||
543 | for (; *cp && (*cp == ' ' || *cp == '\t'); cp++) | ||
544 | ; | ||
545 | if (*cp) { | ||
546 | bits = key_read(k, &cp); | ||
547 | if (bits != 0) { | ||
548 | if (commentp) | ||
549 | *commentp=xstrdup(filename); | ||
550 | fclose(f); | ||
551 | return 1; | ||
552 | } | ||
553 | } | ||
554 | } | ||
555 | fclose(f); | ||
556 | } | ||
557 | return 0; | ||
558 | } | ||
559 | |||
560 | /* load public key from pubkey file */ | ||
561 | int | ||
562 | try_load_public_key(const char *filename, Key *k, char **commentp) | ||
563 | { | ||
564 | char pub[MAXPATHLEN]; | ||
565 | |||
566 | if (do_load_public_key(filename, k, commentp) == 1) | ||
567 | return 1; | ||
568 | if (strlcpy(pub, filename, sizeof pub) >= MAXPATHLEN) | ||
569 | return 0; | ||
570 | if (strlcat(pub, ".pub", sizeof pub) >= MAXPATHLEN) | ||
571 | return 0; | ||
572 | if (do_load_public_key(pub, k, commentp) == 1) | ||
573 | return 1; | ||
574 | return 0; | ||
575 | } | ||