Fix Daemon start when sshd.listenAddress=off and host key doesn't exist

When a site is initialized with sshd.listenAddress=off, a ssh host key
is not generated. The Daemon startup failed in that case because it
tried to start the SshDaemon and the injection of a KeyPairProvider
failed because the ssh host key didn't exist.

Set the Daemon.sshd option to false also when sshd.listenAddress=off
to ensure the same startup logic as when --disable-sshd option is used.

Change-Id: Ia9a64f77ca4dc977aafa061a9b9a736db947d5df
This commit is contained in:
Sasa Zivkov 2013-11-29 17:21:43 +01:00
parent 33dab6bfce
commit 91205ae876
2 changed files with 11 additions and 1 deletions

View File

@ -50,6 +50,7 @@ import com.google.gerrit.server.config.AuthConfigModule;
import com.google.gerrit.server.config.CanonicalWebUrlModule;
import com.google.gerrit.server.config.CanonicalWebUrlProvider;
import com.google.gerrit.server.config.GerritGlobalModule;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.MasterNodeStartup;
import com.google.gerrit.server.contact.HttpContactStoreConnection;
import com.google.gerrit.server.git.ReceiveCommitsExecutorModule;
@ -65,6 +66,7 @@ import com.google.gerrit.server.schema.DataSourceProvider;
import com.google.gerrit.server.schema.SchemaVersionCheck;
import com.google.gerrit.server.ssh.NoSshKeyCache;
import com.google.gerrit.server.ssh.NoSshModule;
import com.google.gerrit.server.ssh.SshAddressesModule;
import com.google.gerrit.solr.SolrIndexModule;
import com.google.gerrit.sshd.SshHostKeyModule;
import com.google.gerrit.sshd.SshKeyCacheImpl;
@ -74,10 +76,12 @@ import com.google.gerrit.sshd.commands.SlaveCommandModule;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.Provider;
import com.google.inject.Stage;
import org.eclipse.jgit.lib.Config;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -269,6 +273,7 @@ public class Daemon extends SiteProgram {
.setCfgInjector(cfgInjector);
manager.add(dbInjector, cfgInjector, sysInjector);
sshd &= !sshdOff();
if (sshd) {
initSshd();
}
@ -285,6 +290,11 @@ public class Daemon extends SiteProgram {
manager.stop();
}
private boolean sshdOff() {
Config cfg = cfgInjector.getInstance(Key.get(Config.class, GerritServerConfig.class));
return new SshAddressesModule().getListenAddresses(cfg).isEmpty();
}
private String myVersion() {
return com.google.gerrit.common.Version.getVersion();
}

View File

@ -44,7 +44,7 @@ public class SshAddressesModule extends AbstractModule {
@Provides
@Singleton
@SshListenAddresses
List<SocketAddress> getListenAddresses(@GerritServerConfig Config cfg) {
public List<SocketAddress> getListenAddresses(@GerritServerConfig Config cfg) {
List<SocketAddress> listen = Lists.newArrayListWithExpectedSize(2);
String[] want = cfg.getStringList("sshd", null, "listenaddress");
if (want == null || want.length == 0) {