Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 May 2000 21:18:12 -0500 (EST)
From:      ajk@iu.edu
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/19251: [PATCH] pam_ssh broken by OpenSSH DSA changes
Message-ID:  <200005270218.VAA01234@verbal.uits.iupui.edu>

next in thread | raw e-mail | index | archive | help

>Number:         19251
>Category:       bin
>Synopsis:       [PATCH] pam_ssh broken by OpenSSH DSA changes
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 13 14:30:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Andrew J. Korty
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
Office of the VP for Information Technology, Indiana University
>Environment:

FreeBSD verbal.uits.iupui.edu 5.0-CURRENT FreeBSD 5.0-CURRENT #2:
Fri May 26 15:11:58 EST 2000
ajk@verbal.uits.iupui.edu:/usr/src/sys/compile/KUJAN  i386

>Description:

Newly DSA support added to OpenSSH causes pam_ssh to compile
incorrectly, which in turn causes PAM applications that use it to
SEGV.

>How-To-Repeat:

Try to use any PAM-aware application in conjunction with pam_ssh.

>Fix:

Apply the following hastily-written patch, hastily:

Index: pam_ssh.c
===================================================================
RCS file: /var/cvs/src/crypto/openssh/pam_ssh/pam_ssh.c,v
retrieving revision 1.6
diff -u -r1.6 pam_ssh.c
--- pam_ssh.c	2000/05/26 01:58:49	1.6
+++ pam_ssh.c	2000/05/27 02:09:29
@@ -45,10 +45,14 @@
 #include <security/pam_modules.h>
 #include <security/pam_mod_misc.h>
 
+#include <openssl/dsa.h>
+#include <openssl/rsa.h>
+
 #include "includes.h"
-#include "rsa.h"
 #include "ssh.h"
+#include "key.h"
 #include "authfd.h"
+#include "authfile.h"
 
 #define	MODULE_NAME	"pam_ssh"
 #define	NEED_PASSPHRASE	"Need passphrase for %s (%s).\nEnter passphrase: "
@@ -56,10 +60,10 @@
 
 
 void
-rsa_cleanup(pam_handle_t *pamh, void *data, int error_status)
+key_cleanup(pam_handle_t *pamh, void *data, int error_status)
 {
 	if (data)
-		RSA_free(data);
+		key_free(data);
 }
 
 
@@ -205,11 +209,11 @@
 	char		*comment_priv;		/* on private key */
 	char		*comment_pub;		/* on public key */
 	char		*identity;		/* user's identity file */
-	RSA		*key;			/* user's private key */
+	Key		*key;			/* user's private key */
 	int		 options;		/* module options */
 	const char	*pass;			/* passphrase */
 	char		*prompt;		/* passphrase prompt */
-	RSA		*public_key;		/* user's public key */
+	Key		*public_key;		/* user's public key */
 	const PASSWD	*pwent;			/* user's passwd entry */
 	PASSWD		*pwent_keep;		/* our own copy */
 	int		 retval;		/* from calls */
@@ -235,8 +239,8 @@
 	 * Fail unless we can load the public key.  Change to the
 	 * owner's UID to appease load_public_key().
 	 */
-	key = RSA_new();
-	public_key = RSA_new();
+	key = key_new(KEY_RSA);
+	public_key = key_new(KEY_RSA);
 	saved_uid = getuid();
 	(void)setreuid(pwent->pw_uid, saved_uid);
 	retval = load_public_key(identity, public_key, &comment_pub);
@@ -245,7 +249,7 @@
 		free(identity);
 		return PAM_AUTH_ERR;
 	}
-	RSA_free(public_key);
+	key_free(public_key);
 	/* build the passphrase prompt */
 	retval = asprintf(&prompt, NEED_PASSPHRASE, identity, comment_pub);
 	free(comment_pub);
@@ -276,8 +280,8 @@
 	 * phase.
 	 */
 	if ((retval = pam_set_data(pamh, "ssh_private_key", key,
-	    rsa_cleanup)) != PAM_SUCCESS) {
-		RSA_free(key);
+	    key_cleanup)) != PAM_SUCCESS) {
+		key_free(key);
 		free(comment_priv);
 		return retval;
 	}
@@ -329,7 +333,7 @@
 	char		*env_end;		/* end of env */
 	char		*env_file;		/* to store env */
 	FILE		*env_fp;		/* env_file handle */
-	RSA		*key;			/* user's private key */
+	Key		*key;			/* user's private key */
 	FILE		*pipe;			/* ssh-agent handle */
 	const PASSWD	*pwent;			/* user's passwd entry */
 	int		 retval;		/* from calls */
@@ -439,7 +443,7 @@
 		env_destroy(ssh_env);
 		return PAM_SESSION_ERR;
 	}
-	retval = ssh_add_identity(ac, key, comment);
+	retval = ssh_add_identity(ac, key->rsa, comment);
 	ssh_close_authentication_connection(ac);
 	env_swap(ssh_env, 0);
 	return retval ? PAM_SUCCESS : PAM_SESSION_ERR;

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200005270218.VAA01234>