- markus@cvs.openbsd.org 2001/03/26 08:07:09
     [authfile.c authfile.h ssh-add.c ssh-keygen.c ssh.c sshconnect.c
      sshconnect.h sshconnect1.c sshconnect2.c sshd.c]
     simpler key load/save interface, see authfile.h
diff --git a/sshd.c b/sshd.c
index 0ac78cb..67bef9f 100644
--- a/sshd.c
+++ b/sshd.c
@@ -40,7 +40,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sshd.c,v 1.178 2001/03/23 14:28:32 markus Exp $");
+RCSID("$OpenBSD: sshd.c,v 1.179 2001/03/26 08:07:09 markus Exp $");
 
 #include <openssl/dh.h>
 #include <openssl/bn.h>
@@ -454,39 +454,6 @@
 	sensitive_data.ssh1_host_key = NULL;
 	memset(sensitive_data.ssh1_cookie, 0, SSH_SESSION_KEY_LENGTH);
 }
-Key *
-load_private_key_autodetect(const char *filename)
-{
-	struct stat st;
-	int type;
-	Key *public, *private;
-
-	if (stat(filename, &st) < 0) {
-		perror(filename);
-		return NULL;
-	}
-	/*
-	 * try to load the public key. right now this only works for RSA1,
-	 * since SSH2 keys are fully encrypted
-	 */
-	type = KEY_RSA1;
-	public = key_new(type);
-	if (!load_public_key(filename, public, NULL)) {
-		/* ok, so we will assume this is 'some' key */
-		type = KEY_UNSPEC;
-	}
-	key_free(public);
-
-	/* Ok, try key with empty passphrase */
-	private = key_new(type);
-	if (load_private_key(filename, "", private, NULL)) {
-		debug("load_private_key_autodetect: type %d %s",
-		    private->type, key_type(private));
-		return private;
-	}
-	key_free(private);
-	return NULL;
-}
 
 char *
 list_hostkey_types(void)
@@ -579,6 +546,7 @@
 	int listen_sock, maxfd;
 	int startup_p[2];
 	int startups = 0;
+	Key *key;
 	int ret, key_used = 0;
 
 	__progname = get_progname(av[0]);
@@ -716,10 +684,12 @@
 	sensitive_data.have_ssh2_key = 0;
 
 	for(i = 0; i < options.num_host_key_files; i++) {
-		Key *key = load_private_key_autodetect(options.host_key_files[i]);
+		key = key_load_private(options.host_key_files[i], "", NULL);
+		sensitive_data.host_keys[i] = key;
 		if (key == NULL) {
 			error("Could not load host key: %.200s: %.100s",
 			    options.host_key_files[i], strerror(errno));
+			sensitive_data.host_keys[i] = NULL;
 			continue;
 		}
 		switch(key->type){
@@ -732,7 +702,8 @@
 			sensitive_data.have_ssh2_key = 1;
 			break;
 		}
-		sensitive_data.host_keys[i] = key;
+		debug("private host key: #%d type %d %s", i, key->type,
+		    key_type(key));
 	}
 	if ((options.protocol & SSH_PROTO_1) && !sensitive_data.have_ssh1_key) {
 		log("Disabling protocol version 1. Could not load host key");