From 44e2ee1d05a9d455ae60dd64058b31f006d551b7 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 18:58:08 -0400
Subject: [PATCH] Revise SSH public key integration with AuthenticationManager

---
 src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java b/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
index ce01df7..3baf985 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
@@ -19,6 +19,8 @@
 
 import org.apache.sshd.server.PasswordAuthenticator;
 import org.apache.sshd.server.session.ServerSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.models.UserModel;
@@ -30,6 +32,8 @@
  */
 public class SshPasswordAuthenticator implements PasswordAuthenticator {
 
+	protected final Logger log = LoggerFactory.getLogger(getClass());
+
 	protected final IAuthenticationManager authManager;
 
 	public SshPasswordAuthenticator(IAuthenticationManager authManager) {
@@ -38,13 +42,20 @@
 
 	@Override
 	public boolean authenticate(String username, String password, ServerSession session) {
+		SshSession client = session.getAttribute(SshSession.KEY);
+		if (client.getRemoteUser() != null) {
+			log.info("{} has already authenticated!", username);
+			return true;
+		}
+
 		username = username.toLowerCase(Locale.US);
 		UserModel user = authManager.authenticate(username, password.toCharArray());
 		if (user != null) {
-			SshSession sd = session.getAttribute(SshSession.KEY);
-			sd.authenticationSuccess(username);
+			client.authenticationSuccess(username);
 			return true;
 		}
+
+		log.warn("could not authenticate {} for SSH using the supplied password", username);
 		return false;
 	}
 }

--
Gitblit v1.9.1