diff -cud openssh-3.8p1-orig/auth.c openssh-3.8p1/auth.c
--- openssh-3.8p1-orig/auth.c	Sat Feb 21 17:43:15 2004
+++ openssh-3.8p1/auth.c	Sat Mar 20 21:33:47 2004
@@ -281,6 +281,10 @@
 		if (strcmp(method, "password") != 0)
 			return 1;
 		break;
+	case PERMIT_PUBKEY_ONLY:
+		if (strcmp(method, "publickey") == 0)
+			return 1;
+		break;
 	case PERMIT_FORCED_ONLY:
 		if (forced_command) {
 			logit("Root login accepted for forced command.");
diff -cud openssh-3.8p1-orig/servconf.c openssh-3.8p1/servconf.c
--- openssh-3.8p1-orig/servconf.c	Fri Jan 23 06:03:10 2004
+++ openssh-3.8p1/servconf.c	Sat Mar 20 20:37:24 2004
@@ -577,6 +577,8 @@
 			value = PERMIT_YES;
 		else if (strcmp(arg, "no") == 0)
 			value = PERMIT_NO;
+		else if (strcmp(arg, "pubkey-only") == 0)
+			value = PERMIT_PUBKEY_ONLY;
 		else
 			fatal("%s line %d: Bad yes/"
 			    "without-password/forced-commands-only/no "
diff -cud openssh-3.8p1-orig/servconf.h openssh-3.8p1/servconf.h
--- openssh-3.8p1-orig/servconf.h	Tue Dec 30 19:37:34 2003
+++ openssh-3.8p1/servconf.h	Sat Mar 20 20:34:40 2004
@@ -31,7 +31,7 @@
 #define	PERMIT_FORCED_ONLY	1
 #define	PERMIT_NO_PASSWD	2
 #define	PERMIT_YES		3
-
+#define        PERMIT_PUBKEY_ONLY      4
 
 typedef struct {
 	u_int num_ports;
