James Moger
2015-11-22 ed552ba47c02779c270ffd62841d6d1048dade70
src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -25,12 +25,12 @@
import java.text.MessageFormat;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.sshd.SshServer;
import org.apache.sshd.common.io.IoServiceFactoryFactory;
import org.apache.sshd.common.io.mina.MinaServiceFactoryFactory;
import org.apache.sshd.common.io.nio2.Nio2ServiceFactoryFactory;
import org.apache.sshd.common.keyprovider.FileKeyPairProvider;
import org.apache.sshd.common.util.SecurityUtils;
import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.auth.CachingPublicKeyAuthenticator;
import org.bouncycastle.openssl.PEMWriter;
import org.eclipse.jgit.internal.JGitText;
import org.slf4j.Logger;
@@ -98,8 +98,8 @@
      hostKeyPairProvider.setFiles(new String [] { rsaKeyStore.getPath(), dsaKeyStore.getPath(), dsaKeyStore.getPath() });
      // Client public key authenticator
      CachingPublicKeyAuthenticator keyAuthenticator =
            new CachingPublicKeyAuthenticator(gitblit.getPublicKeyManager(), gitblit);
      SshKeyAuthenticator keyAuthenticator =
            new SshKeyAuthenticator(gitblit.getPublicKeyManager(), gitblit);
      // Configure the preferred SSHD backend
      String sshBackendStr = settings.getString(Keys.git.sshBackend,
@@ -125,8 +125,11 @@
      sshd.setPort(addr.getPort());
      sshd.setHost(addr.getHostName());
      sshd.setKeyPairProvider(hostKeyPairProvider);
      sshd.setPublickeyAuthenticator(keyAuthenticator);
      sshd.setPublickeyAuthenticator(new CachingPublicKeyAuthenticator(keyAuthenticator));
      sshd.setPasswordAuthenticator(new UsernamePasswordAuthenticator(gitblit));
      if (settings.getBoolean(Keys.git.sshWithKrb5, false)) {
         sshd.setGSSAuthenticator(new SshKrbAuthenticator(settings, gitblit));
      }
      sshd.setSessionFactory(new SshServerSessionFactory());
      sshd.setFileSystemFactory(new DisabledFilesystemFactory());
      sshd.setTcpipForwardingFilter(new NonForwardingFilter());
@@ -143,14 +146,22 @@
   }
   public String formatUrl(String gituser, String servername, String repository) {
      if (sshd.getPort() == DEFAULT_PORT) {
      IStoredSettings settings = gitblit.getSettings();
      int port = sshd.getPort();
      int displayPort = settings.getInteger(Keys.git.sshAdvertisedPort, port);
      String displayServername = settings.getString(Keys.git.sshAdvertisedHost, "");
      if(displayServername.isEmpty()) {
         displayServername = servername;
      }
      if (displayPort == DEFAULT_PORT) {
         // standard port
         return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, servername,
         return MessageFormat.format("ssh://{0}@{1}/{2}", gituser, displayServername,
               repository);
      } else {
         // non-standard port
         return MessageFormat.format("ssh://{0}@{1}:{2,number,0}/{3}",
               gituser, servername, sshd.getPort(), repository);
               gituser, displayServername, displayPort, repository);
      }
   }
@@ -192,7 +203,7 @@
         try {
            ((SshCommandFactory) sshd.getCommandFactory()).stop();
            sshd.stop();
         } catch (InterruptedException e) {
         } catch (IOException e) {
            log.error("SSH Daemon stop interrupted", e);
         }
      }