diff options
author | David Ostrovsky <david@ostrovsky.org> | 2014-03-16 22:55:30 +0100 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 18:58:08 -0400 |
commit | 5d58a05a9843ec90d06ca42061ff638418f73687 (patch) | |
tree | 1d6e8b7cdd2d5f24659cb1f0766719a3ba62a79a /src/main/java | |
parent | 75ebd391b88884581b1139c87c98bb687941a8fe (diff) | |
download | gitblit-5d58a05a9843ec90d06ca42061ff638418f73687.tar.gz gitblit-5d58a05a9843ec90d06ca42061ff638418f73687.zip |
Add SSH daemon test
Diffstat (limited to 'src/main/java')
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; } |