summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2014-03-16 22:55:30 +0100
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:08 -0400
commit5d58a05a9843ec90d06ca42061ff638418f73687 (patch)
tree1d6e8b7cdd2d5f24659cb1f0766719a3ba62a79a /src/main/java
parent75ebd391b88884581b1139c87c98bb687941a8fe (diff)
downloadgitblit-5d58a05a9843ec90d06ca42061ff638418f73687.tar.gz
gitblit-5d58a05a9843ec90d06ca42061ff638418f73687.zip
Add SSH daemon test
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/gitblit/transport/ssh/CachingPublicKeyAuthenticator.java2
-rw-r--r--src/main/java/com/gitblit/transport/ssh/SshDaemon.java49
-rw-r--r--src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java2
3 files changed, 49 insertions, 4 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/CachingPublicKeyAuthenticator.java b/src/main/java/com/gitblit/transport/ssh/CachingPublicKeyAuthenticator.java
index ee1de591..7d6066c7 100644
--- a/src/main/java/com/gitblit/transport/ssh/CachingPublicKeyAuthenticator.java
+++ b/src/main/java/com/gitblit/transport/ssh/CachingPublicKeyAuthenticator.java
@@ -73,7 +73,7 @@ public class CachingPublicKeyAuthenticator implements PublickeyAuthenticator,
return result;
}
- private boolean doAuthenticate(String username, PublicKey suppliedKey,
+ protected boolean doAuthenticate(String username, PublicKey suppliedKey,
ServerSession session) {
SshDaemonClient client = session.getAttribute(SshDaemonClient.KEY);
Preconditions.checkState(client.getUser() == null);
diff --git a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
index c954b347..40a310e7 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
+import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IGitblit;
import com.gitblit.utils.IdGenerator;
import com.gitblit.utils.StringUtils;
@@ -104,8 +105,8 @@ public class SshDaemon {
addr = new InetSocketAddress(bindInterface, port);
}
- CachingPublicKeyAuthenticator keyAuthenticator =
- new CachingPublicKeyAuthenticator(keyManager, gitblit);
+ CachingPublicKeyAuthenticator keyAuthenticator =
+ getPublicKeyAuthenticator(keyManager, gitblit);
sshd = SshServer.setUpDefaultServer();
sshd.setPort(addr.getPort());
@@ -122,6 +123,27 @@ public class SshDaemon {
run = new AtomicBoolean(false);
}
+ private CachingPublicKeyAuthenticator getPublicKeyAuthenticator(
+ IKeyManager keyManager, IGitblit gitblit) {
+ IStoredSettings settings = gitblit.getSettings();
+ String clazz = settings.getString(Keys.git.sshPublicKeyAuthenticator,
+ CachingPublicKeyAuthenticator.class.getName());
+ if (StringUtils.isEmpty(clazz)) {
+ clazz = CachingPublicKeyAuthenticator.class.getName();
+ }
+ try {
+ Class<CachingPublicKeyAuthenticator> authClass =
+ (Class<CachingPublicKeyAuthenticator>) Class.forName(clazz);
+ return authClass.getConstructor(
+ new Class[] { IKeyManager.class,
+ IAuthenticationManager.class }).newInstance(
+ keyManager, gitblit);
+ } catch (Exception e) {
+ log.error("failed to create ssh auth manager " + clazz, e);
+ }
+ return null;
+ }
+
public String formatUrl(String gituser, String servername, String repository) {
if (sshd.getPort() == DEFAULT_PORT) {
// standard port
@@ -200,6 +222,29 @@ public class SshDaemon {
return keyManager;
}
+ @SuppressWarnings("unchecked")
+ protected IKeyManager getKeyAuthenticator() {
+ IKeyManager keyManager = null;
+ IStoredSettings settings = gitblit.getSettings();
+ String clazz = settings.getString(Keys.git.sshKeysManager, FileKeyManager.class.getName());
+ if (StringUtils.isEmpty(clazz)) {
+ clazz = FileKeyManager.class.getName();
+ }
+ try {
+ Class<? extends IKeyManager> managerClass = (Class<? extends IKeyManager>) Class.forName(clazz);
+ keyManager = injector.get(managerClass).start();
+ if (keyManager.isReady()) {
+ log.info("{} is ready.", keyManager);
+ } else {
+ log.warn("{} is disabled.", keyManager);
+ }
+ } catch (Exception e) {
+ log.error("failed to create ssh key manager " + clazz, e);
+ keyManager = injector.get(NullKeyManager.class).start();
+ }
+ return keyManager;
+ }
+
/**
* A nested Dagger graph is used for constructor dependency injection of
* complex classes.
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
index 3c041af6..8e13be03 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -79,7 +79,7 @@ public class DispatchCommand extends BaseCommand {
CommandMetaData.class.getName()));
}
CommandMetaData meta = cmd.getAnnotation(CommandMetaData.class);
- if (meta.admin() && user.canAdmin()) {
+ if (meta.admin() && user != null && user.canAdmin()) {
log.debug(MessageFormat.format("excluding admin command {0} for {1}", meta.name(), user.username));
return;
}