Set JSch global config values only if not set already

Bug: 576604
Change-Id: I04415f07bf2023bc8435c097d1d3c65221d563f1
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
(cherry picked from commit f8b0c00e6a)
This commit is contained in:
Thomas Wolf 2021-10-19 09:07:14 +02:00
parent 8e7dfb5e4b
commit 6fe66b7382
1 changed files with 15 additions and 2 deletions

View File

@ -40,6 +40,7 @@
import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.internal.transport.jsch.JSchText;
import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -398,14 +399,26 @@ protected JSch getJSch(OpenSshConfig.Host hc, FS fs) throws JSchException {
*/
protected JSch createDefaultJSch(FS fs) throws JSchException {
final JSch jsch = new JSch();
JSch.setConfig("ssh-rsa", JSch.getConfig("signature.rsa")); //$NON-NLS-1$ //$NON-NLS-2$
JSch.setConfig("ssh-dss", JSch.getConfig("signature.dss")); //$NON-NLS-1$ //$NON-NLS-2$
// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=537790 and
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=576604
copyGlobalConfigIfNotSet("signature.rsa", "ssh-rsa"); //$NON-NLS-1$ //$NON-NLS-2$
copyGlobalConfigIfNotSet("signature.dss", "ssh-dss"); //$NON-NLS-1$ //$NON-NLS-2$
configureJSch(jsch);
knownHosts(jsch, fs);
identities(jsch, fs);
return jsch;
}
private void copyGlobalConfigIfNotSet(String from, String to) {
String toValue = JSch.getConfig(to);
if (StringUtils.isEmptyOrNull(toValue)) {
String fromValue = JSch.getConfig(from);
if (!StringUtils.isEmptyOrNull(fromValue)) {
JSch.setConfig(to, fromValue);
}
}
}
private static void knownHosts(JSch sch, FS fs) throws JSchException {
final File home = fs.userHome();
if (home == null)