- markus@cvs.openbsd.org 2002/03/16 17:22:09
     [auth-rh-rsa.c auth.h]
     split auth_rhosts_rsa(), ok provos@
diff --git a/auth-rh-rsa.c b/auth-rh-rsa.c
index 397b0a5..2a88e18 100644
--- a/auth-rh-rsa.c
+++ b/auth-rh-rsa.c
@@ -13,7 +13,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: auth-rh-rsa.c,v 1.30 2002/03/14 16:56:33 markus Exp $");
+RCSID("$OpenBSD: auth-rh-rsa.c,v 1.31 2002/03/16 17:22:09 markus Exp $");
 
 #include "packet.h"
 #include "uidswap.h"
@@ -25,37 +25,51 @@
 #include "auth.h"
 #include "canohost.h"
 
+/* import */
+extern ServerOptions options;
+
 /*
  * Tries to authenticate the user using the .rhosts file and the host using
  * its host key.  Returns true if authentication succeeds.
  */
 
 int
-auth_rhosts_rsa(struct passwd *pw, const char *client_user, Key *client_host_key)
+auth_rhosts_rsa_key_allowed(struct passwd *pw, char *cuser, char *chost,
+    Key *client_host_key)
 {
-	extern ServerOptions options;
-	const char *canonical_hostname;
 	HostStatus host_status;
 
-	debug("Trying rhosts with RSA host authentication for client user %.100s", client_user);
-
-	if (pw == NULL || client_host_key == NULL || client_host_key->rsa == NULL)
-		return 0;
-
 	/* Check if we would accept it using rhosts authentication. */
-	if (!auth_rhosts(pw, client_user))
+	if (!auth_rhosts(pw, cuser))
 		return 0;
 
-	canonical_hostname = get_canonical_hostname(
-	    options.verify_reverse_mapping);
-
-	debug("Rhosts RSA authentication: canonical host %.900s", canonical_hostname);
-
 	host_status = check_key_in_hostfiles(pw, client_host_key,
-	    canonical_hostname, _PATH_SSH_SYSTEM_HOSTFILE,
+	    chost, _PATH_SSH_SYSTEM_HOSTFILE,
 	    options.ignore_user_known_hosts ? NULL : _PATH_SSH_USER_HOSTFILE);
 
-	if (host_status != HOST_OK) {
+        return (host_status == HOST_OK);
+}
+
+/*
+ * Tries to authenticate the user using the .rhosts file and the host using
+ * its host key.  Returns true if authentication succeeds.
+ */
+int
+auth_rhosts_rsa(struct passwd *pw, char *cuser, Key *client_host_key)
+{
+	char *chost;
+
+	debug("Trying rhosts with RSA host authentication for client user %.100s",
+	    cuser);
+
+	if (pw == NULL || client_host_key == NULL ||
+	    client_host_key->rsa == NULL)
+		return 0;
+
+	chost = (char *)get_canonical_hostname(options.verify_reverse_mapping);
+	debug("Rhosts RSA authentication: canonical host %.900s", chost);
+
+	if (!auth_rhosts_rsa_key_allowed(pw, cuser, chost, client_host_key)) {
 		debug("Rhosts with RSA host authentication denied: unknown or invalid host key");
 		packet_send_debug("Your host key cannot be verified: unknown or invalid host key.");
 		return 0;
@@ -65,7 +79,7 @@
 	/* Perform the challenge-response dialog with the client for the host key. */
 	if (!auth_rsa_challenge_dialog(client_host_key)) {
 		log("Client on %.800s failed to respond correctly to host authentication.",
-		    canonical_hostname);
+		    chost);
 		return 0;
 	}
 	/*
@@ -74,7 +88,7 @@
 	 */
 
 	verbose("Rhosts with RSA host authentication accepted for %.100s, %.100s on %.700s.",
-	   pw->pw_name, client_user, canonical_hostname);
+	   pw->pw_name, cuser, chost);
 	packet_send_debug("Rhosts with RSA host authentication accepted.");
 	return 1;
 }