summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org/eclipse/jgit
diff options
context:
space:
mode:
authorThomas Wolf <thomas.wolf@paranor.ch>2018-02-14 13:39:28 +0100
committerThomas Wolf <thomas.wolf@paranor.ch>2018-02-14 13:39:28 +0100
commit185e53bce447f75c09c1102c5e803a88009bcd74 (patch)
tree59c835e3ac141eb9a580c1bceae5e8870128dcf4 /org.eclipse.jgit.test/tst/org/eclipse/jgit
parent891103609d2259e89191b72cebd503eb900e6c7e (diff)
downloadjgit-185e53bce447f75c09c1102c5e803a88009bcd74.tar.gz
jgit-185e53bce447f75c09c1102c5e803a88009bcd74.zip
Fix ssh host name handling for Jsch
If we give Jsch access to the ssh config file, we must _not_ resolve the host name from the alias. Instead we must give the alias (i.e., the host name as is in the URI) to Jsch, so that it finds the same ssh config entry. Otherwise if the hostname in the URI, which is taken as an alias in ssh config ("Host" line), is unequal to the "Hostname" line, and there happens to be another ssh config entry with that translated host name as alias, Jsch will pick up that second entry, and we end up with a strange mixture of both. Add tests for this case. Bug: 531118 Change-Id: I249d8c073b0190ed110a69dca5b9be2a749822c3 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/JschConfigSessionFactoryTest.java69
1 files changed, 68 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/JschConfigSessionFactoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/JschConfigSessionFactoryTest.java
index acbc833437..1e65a20d7f 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/JschConfigSessionFactoryTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/JschConfigSessionFactoryTest.java
@@ -185,6 +185,74 @@ public class JschConfigSessionFactoryTest {
assertEquals(TimeUnit.SECONDS.toMillis(10), session.getTimeout());
}
+ @Test
+ public void testAliasCaseDifferenceUpcase() throws Exception {
+ tmpConfigFile = createConfig("Host Bitbucket.org",
+ "Hostname bitbucket.org", "User foo", "Port 29418",
+ "ConnectTimeout 10", //
+ "Host bitbucket.org", "Hostname bitbucket.org", "User bar",
+ "Port 22", "ConnectTimeout 5");
+ tmpConfig = new OpenSshConfig(tmpConfigFile.getParentFile(),
+ tmpConfigFile);
+ factory.setConfig(tmpConfig);
+ Session session = createSession("ssh://Bitbucket.org/something");
+ assertEquals("bitbucket.org", session.getHost());
+ assertEquals("foo", session.getUserName());
+ assertEquals(29418, session.getPort());
+ assertEquals(TimeUnit.SECONDS.toMillis(10), session.getTimeout());
+ }
+
+ @Test
+ public void testAliasCaseDifferenceLowcase() throws Exception {
+ tmpConfigFile = createConfig("Host Bitbucket.org",
+ "Hostname bitbucket.org", "User foo", "Port 29418",
+ "ConnectTimeout 10", //
+ "Host bitbucket.org", "Hostname bitbucket.org", "User bar",
+ "Port 22", "ConnectTimeout 5");
+ tmpConfig = new OpenSshConfig(tmpConfigFile.getParentFile(),
+ tmpConfigFile);
+ factory.setConfig(tmpConfig);
+ Session session = createSession("ssh://bitbucket.org/something");
+ assertEquals("bitbucket.org", session.getHost());
+ assertEquals("bar", session.getUserName());
+ assertEquals(22, session.getPort());
+ assertEquals(TimeUnit.SECONDS.toMillis(5), session.getTimeout());
+ }
+
+ @Test
+ public void testAliasCaseDifferenceUpcaseInverted() throws Exception {
+ tmpConfigFile = createConfig("Host bitbucket.org",
+ "Hostname bitbucket.org", "User bar", "Port 22",
+ "ConnectTimeout 5", //
+ "Host Bitbucket.org", "Hostname bitbucket.org", "User foo",
+ "Port 29418", "ConnectTimeout 10");
+ tmpConfig = new OpenSshConfig(tmpConfigFile.getParentFile(),
+ tmpConfigFile);
+ factory.setConfig(tmpConfig);
+ Session session = createSession("ssh://Bitbucket.org/something");
+ assertEquals("bitbucket.org", session.getHost());
+ assertEquals("foo", session.getUserName());
+ assertEquals(29418, session.getPort());
+ assertEquals(TimeUnit.SECONDS.toMillis(10), session.getTimeout());
+ }
+
+ @Test
+ public void testAliasCaseDifferenceLowcaseInverted() throws Exception {
+ tmpConfigFile = createConfig("Host bitbucket.org",
+ "Hostname bitbucket.org", "User bar", "Port 22",
+ "ConnectTimeout 5", //
+ "Host Bitbucket.org", "Hostname bitbucket.org", "User foo",
+ "Port 29418", "ConnectTimeout 10");
+ tmpConfig = new OpenSshConfig(tmpConfigFile.getParentFile(),
+ tmpConfigFile);
+ factory.setConfig(tmpConfig);
+ Session session = createSession("ssh://bitbucket.org/something");
+ assertEquals("bitbucket.org", session.getHost());
+ assertEquals("bar", session.getUserName());
+ assertEquals(22, session.getPort());
+ assertEquals(TimeUnit.SECONDS.toMillis(5), session.getTimeout());
+ }
+
private File createConfig(String... lines) throws Exception {
File f = File.createTempFile("jsch", "test");
Files.write(f.toPath(), Arrays.asList(lines));
@@ -203,7 +271,6 @@ public class JschConfigSessionFactoryTest {
String password = uri.getPass();
int port = uri.getPort();
OpenSshConfig.Host hostConfig = tmpConfig.lookup(host);
- host = hostConfig.getHostName();
if (port <= 0) {
port = hostConfig.getPort();
}