|
|
@@ -59,6 +59,7 @@ import java.util.List; |
|
|
|
import java.util.Locale; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
import org.eclipse.jgit.errors.InvalidPatternException; |
|
|
|
import org.eclipse.jgit.fnmatch.FileNameMatcher; |
|
|
@@ -961,7 +962,7 @@ public class OpenSshConfig implements ConfigRepository { |
|
|
|
|
|
|
|
/** |
|
|
|
* Retrieves the full {@link com.jcraft.jsch.ConfigRepository.Config Config} |
|
|
|
* for the given host name. |
|
|
|
* for the given host name. Should be called only by Jsch and tests. |
|
|
|
* |
|
|
|
* @param hostName |
|
|
|
* to get the config for |
|
|
@@ -971,7 +972,7 @@ public class OpenSshConfig implements ConfigRepository { |
|
|
|
@Override |
|
|
|
public Config getConfig(String hostName) { |
|
|
|
Host host = lookup(hostName); |
|
|
|
return host.getConfig(); |
|
|
|
return new JschBugFixingConfig(host.getConfig()); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@@ -980,4 +981,61 @@ public class OpenSshConfig implements ConfigRepository { |
|
|
|
return "OpenSshConfig [home=" + home + ", configFile=" + configFile |
|
|
|
+ ", lastModified=" + lastModified + ", state=" + state + "]"; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* A {@link com.jcraft.jsch.ConfigRepository.Config} that transforms some |
|
|
|
* values from the config file into the format Jsch 0.1.54 expects. This is |
|
|
|
* a work-around for bugs in Jsch. |
|
|
|
*/ |
|
|
|
private static class JschBugFixingConfig implements Config { |
|
|
|
|
|
|
|
private final Config real; |
|
|
|
|
|
|
|
public JschBugFixingConfig(Config delegate) { |
|
|
|
real = delegate; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getHostname() { |
|
|
|
return real.getHostname(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getUser() { |
|
|
|
return real.getUser(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public int getPort() { |
|
|
|
return real.getPort(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String getValue(String key) { |
|
|
|
String result = real.getValue(key); |
|
|
|
if (result != null) { |
|
|
|
String k = key.toUpperCase(Locale.ROOT); |
|
|
|
if ("SERVERALIVEINTERVAL".equals(k) //$NON-NLS-1$ |
|
|
|
|| "CONNECTTIMEOUT".equals(k)) { //$NON-NLS-1$ |
|
|
|
// These values are in seconds. Jsch 0.1.54 passes them on |
|
|
|
// as is to java.net.Socket.setSoTimeout(), which expects |
|
|
|
// milliseconds. So convert here to milliseconds... |
|
|
|
try { |
|
|
|
int timeout = Integer.parseInt(result); |
|
|
|
result = Long |
|
|
|
.toString(TimeUnit.SECONDS.toMillis(timeout)); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
// Ignore |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String[] getValues(String key) { |
|
|
|
return real.getValues(key); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |