summaryrefslogtreecommitdiff
path: root/authfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'authfile.c')
-rw-r--r--authfile.c92
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"
18RCSID("$OpenBSD: authfile.c,v 1.17 2000/06/20 01:39:38 markus Exp $"); 39RCSID("$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 */
265int 287int
266load_public_key(const char *filename, Key * key, char **comment_return) 288load_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
523int
524do_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 */
561int
562try_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}