summaryrefslogtreecommitdiff
path: root/authfile.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2000-09-16 13:29:08 +1100
committerDamien Miller <djm@mindrot.org>2000-09-16 13:29:08 +1100
commite4340be5b3ff16f4d9ba5e3ea7e449dc1b6fa7a8 (patch)
treeaba9e2ae234edeb888b922c6a13b755c1248deea /authfile.c
parentf384c366d33cb435627743f7ea0ed3f966543d40 (diff)
- (djm) Merge OpenBSD changes:
- markus@cvs.openbsd.org 2000/09/05 02:59:57 [session.c] print hostname (not hushlogin) - markus@cvs.openbsd.org 2000/09/05 13:18:48 [authfile.c ssh-add.c] enable ssh-add -d for DSA keys - markus@cvs.openbsd.org 2000/09/05 13:20:49 [sftp-server.c] cleanup - markus@cvs.openbsd.org 2000/09/06 03:46:41 [authfile.h] prototype - deraadt@cvs.openbsd.org 2000/09/07 14:27:56 [ALL] cleanup copyright notices on all files. I have attempted to be accurate with the details. everything is now under Tatu's licence (which I copied from his readme), and/or the core-sdi bsd-ish thing for deattack, or various openbsd developers under a 2-term bsd licence. We're not changing any rules, just being accurate. - markus@cvs.openbsd.org 2000/09/07 14:40:30 [channels.c channels.h clientloop.c serverloop.c ssh.c] cleanup window and packet sizes for ssh2 flow control; ok niels - markus@cvs.openbsd.org 2000/09/07 14:53:00 [scp.c] typo - markus@cvs.openbsd.org 2000/09/07 15:13:37 [auth-options.c auth-options.h auth-rh-rsa.c auth-rsa.c auth.c] [authfile.h canohost.c channels.h compat.c hostfile.h log.c match.h] [pty.c readconf.c] some more Copyright fixes - markus@cvs.openbsd.org 2000/09/08 03:02:51 [README.openssh2] bye bye - deraadt@cvs.openbsd.org 2000/09/11 18:38:33 [LICENCE cipher.c] a few more comments about it being ARC4 not RC4 - markus@cvs.openbsd.org 2000/09/12 14:53:11 [log-client.c log-server.c log.c ssh.1 ssh.c ssh.h sshd.8 sshd.c] multiple debug levels - markus@cvs.openbsd.org 2000/09/14 14:25:15 [clientloop.c] typo - deraadt@cvs.openbsd.org 2000/09/15 01:13:51 [ssh-agent.c] check return value for setenv(3) for failure, and deal appropriately
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}