aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org/eclipse/jgit/transport/OpenSshConfig.java
Commit message (Collapse)AuthorAgeFilesLines
* Decouple JSch from JGit CoreMatthias Sohn2020-06-011-345/+0
| | | | | | | | | | | | | | | | | | | | | | | | Motivation: JSch serves as 'default' implementations of the SSH transport. If a client application does not use it then there is no need to pull in this dependency. Move the classes depending on JSch to an OSGi fragment extending the org.eclipse.jgit bundle and keep them in the same package as before since moving them to another package would break API. Defer moving them to a separate package to the next major release. Add a new feature org.eclipse.jgit.ssh.jsch feature to enable installation. With that users can now decide which of the ssh client integrations (JCraft JSch or Apache Mina SSHD) they want to install. We will remove the JCraft JSch integration in a later step due to the reasons discussed in bug 520927. Bug: 553625 Change-Id: I5979c8a9dbbe878a2e8ac0fbfde7230059d74dc2 Also-by: Michael Dardis <git@md-5.net> Signed-off-by: Michael Dardis <git@md-5.net> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: David Ostrovsky <david@ostrovsky.org>
* Update EDL 1.0 license headers to new short SPDX compliant formatMatthias Sohn2020-01-041-38/+5
| | | | | | | | | | This is the format given by the Eclipse legal doc generator [1]. [1] https://www.eclipse.org/projects/tools/documentation.php?id=technology.jgit Bug: 548298 Change-Id: I8d8cabc998ba1b083e3f0906a8d558d391ffb6c4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Factor out a JSch-independent ssh config parserThomas Wolf2018-11-061-721/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Move the bulk of the basic parsing and host entry handling into a new class OpenSshConfigFile that has no dependencies on any concrete ssh implementation. Make the existing OpenSshConfig use the new parser. Introduce a new class SshConstants collecting all the various ssh- related string literals. Also use TreeMaps with a case-insensitive key comparator instead of converting keys to uppercase. Add a test to verify that keys are matched case-insensitively. Most of the parsing code was simply moved, except that the new parser supports looking up entries given host name, port, and user name, and can thus handle more %-substitutions correctly. This feature is not yet used and cannot be used with JSch since JSch only has a ConfigRepository.getConfig(String) interface. The split is still worth the trouble as it opens the way to using another ssh client altogether. Apache MINA sshd, for instance, resolves host entries giving host name, port, and user name. (Apache MINA has a built-in ssh config handling, but that has problems, too: its pattern matching is case-insensitive, and its merging of host entries if several match is not the same as in OpenSsh. But with this refactoring, it will be possible to plug in OpenSshConfigFile into an Apache MINA sshd client without dragging along JSch.) One test case that doesn't make sense anymore has been removed. It tested that repeatedly querying for a host entry returned the same object. That is no longer true since the caching has been moved to a deeper level. Bug: 520927 Change-Id: I6381d52b29099595e6eaf8b05c786aeeaefbf9cc Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Explicitly specify charset in constructor of InputStreamReaderDavid Pursehouse2018-09-261-1/+4
| | | | | Change-Id: Id43e27c590f41f7435c2ca1d127f27e45745da7f Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* refactor: simplify collection.toArray()Michael Keppler2018-08-231-1/+1
| | | | | | | | | | | On recent VMs, collection.toArray(new T[0]) is faster than collection.toArray(new T[collection.size()]). Since it is also more readable, it should now be the preferred way of collection to array conversion. https://shipilev.net/blog/2016/arrays-wisdom-ancients/ Change-Id: I80388532fb4b2b0663ee1fe8baa94f5df55c8442 Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
* Remove further unnecessary 'final' keywordsHan-Wen Nienhuys2018-05-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove it from * package private functions. * try blocks * for loops this was done with the following python script: $ cat f.py import sys import re import os def replaceFinal(m): return m.group(1) + "(" + m.group(2).replace('final ', '') + ")" methodDecl = re.compile(r"^([\t ]*[a-zA-Z_ ]+)\(([^)]*)\)") def subst(fn): input = open(fn) os.rename(fn, fn + "~") dest = open(fn, 'w') for l in input: l = methodDecl.sub(replaceFinal, l) dest.write(l) dest.close() for root, dirs, files in os.walk(".", topdown=False): for f in files: if not f.endswith('.java'): continue full = os.path.join(root, f) print full subst(full) Change-Id: If533a75a417594fc893e7c669d2c1f0f6caeb7ca Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* Remove 'final' in parameter listsHan-Wen Nienhuys2018-05-151-6/+6
| | | | | Change-Id: Id924f79c8b2c720297ebc49bf9c5d4ddd6d52547 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
* Merge branch 'stable-4.9' into stable-4.10Matthias Sohn2018-01-131-59/+1
|\ | | | | | | | | | | | | * stable-4.9: Revert handling of ssh IdentityFile to pre-4.9 behavior Change-Id: I7cd2f0fe93be5193d6de2a376a023bdece5d84a9
| * Revert handling of ssh IdentityFile to pre-4.9 behaviorThomas Wolf2018-01-121-59/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Jsch caches keys (aka identities) specified in ~/.ssh/config via IndentityFile only for the current Jsch Session. This results in multiple password prompts for successive sessions. Do the handling of IdentityFile exclusively in JGit, as it was before 4.9. JGit uses different Jsch instances per host and caches the IdentityFile there, allowing it to be re-used in different sessions for the same host. * Add comments to explain this. * Move the JschBugFixingConfig from OpenSshConfig to JschConfigSessionFactory to have all these Jsch work-arounds in one place. * Make that config hide the IdentityFile config from Jsch to avoid that Jsch overrides the JGit behavior. Bug: 529173 Change-Id: Ib36c34a2921ba736adeb64de71323c2b91151613 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | Fix javadoc in org.eclipse.jgit transport packageMatthias Sohn2017-12-201-7/+9
|/ | | | Change-Id: Id70e2c27e38bf12f87e66b28fbd0b06908494764 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Yet another work-around for a Jsch bug: timeoutsThomas Wolf2017-11-201-2/+60
| | | | | | | | | | | | | | | | | | | | | Jsch 0.1.54 passes on the values from ~/.ssh/config for "ServerAliveInterval" and "ConnectTimeout" as read from the config file to java.net.Socket.setSoTimeout(). That method expects milliseconds, but the values in the config file are seconds! The missing conversion in Jsch means that the timeout is set way too low, and if the server doesn't respond within that very short time frame, Jsch kills the connection and then throws an exception with a message such as "session is down" or "timeout in waiting for rekeying process". As a work-around, do the conversion to milliseconds in the Jsch-facing Config interface of OpenSshConfig. That way Jsch already gets these values as milliseconds. Bug: 526867 Change-Id: Ibc9b93f7722fffe10f3e770dfe7fdabfb3b97e74 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Ensure that ~ in ssh config is replaced before Jsch sees itThomas Wolf2017-10-181-11/+34
| | | | | | | | | | | | | | | | | | | | | | | | Do tilde replacement for values from the ssh config file that are file names in all cases to make sure that they are already replaced when Jsch tries to get the values. Previously, OpenSshConfig did tilde replacement only for the IdentityFile in the JGit-facing "Host" interface and left the replacement in the Jsch-facing "Config" interface to Jsch. But on Windows the JGit notion of what should be used to replace the tilde differs from Jsch's replacement. Jsch always replaces the tilde by the value of the system property "user.home", whereas JGit also considers some environment variables like %HOME%. This can lead to rather surprising failures as in the case of bug 526175 where %HOME% != user.home. Prior to commit 9d24470 (i.e.,prior to JGit 4.9.0) this problem never occurred because Jsch was completely unaware of the ssh config file and all host and IdentityFile handling happened exclusively in JGit. Bug: 526175 Change-Id: I1511699664ffea07cb58ed751cfdb79b15e3a99e Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Add toString() methods to OpenSshConfig to help debuggingMatthias Sohn2017-08-261-0/+31
| | | | | Change-Id: I81b60a13a97e78d5ccd593ba8e4aa614df19f925 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Do most %-token substitutions in OpenSshConfigThomas Wolf2017-08-261-5/+129
| | | | | | | | | | | | | | | | | | | | Except for %p and %r and partially %C, we can do token substitutions as defined by OpenSSH inside the config file parser. %p and %r can be replaced only if specified in the config; if not, it would be the caller's responsibility to replace them with values obtained from the URI to connect to. Jsch doesn't know about token substitutions at all. By doing the replacements as good as we can in the config file parser, we can make Jsch support most of these tokens. %i is not handled at all as Java has no concept of a "user ID". Includes unit tests. Bug: 496170 Change-Id: If9d324090707de5d50c740b0d4455aefa8db46ee Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* Let Jsch know about ~/.ssh/configThomas Wolf2017-08-261-144/+513
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ensure the Jsch instance used knows about ~/.ssh/config. This enables Jsch to honor more user configurations (see com.jcraft.jsch.Session.applyConfig()), in particular also the UserKnownHostsFile configuration, or additional identities given via multiple IdentityFile entries. Turn JGit's OpenSshConfig into a full parser that can be a Jsch-compliant ConfigRepository. This avoids a few bugs in Jsch's OpenSSHConfig and keeps the JGit-facing interface unchanged. At the same time we can supply a JGit OpenSshConfig instance as a ConfigRepository to Jsch. And since they'll both work from the same object, we can also be sure that the parsing behavior is identical. The parser does not handle the "Match" and "Include" keys, and it doesn't do %-token substitutions (yet). Note that Jsch doesn't handle multi-valued UserKnownHostFile entries as known by modern OpenSSH.[1] [1] http://man.openbsd.org/OpenBSD-current/man5/ssh_config.5 Additional tests for new features are provided in OpenSshConfigTest. Bug: 490939 Change-Id: Ic683bd412fa8c5632142aebba4a07fad4c64c637 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Enable and fix warnings about redundant specification of type argumentsDavid Pursehouse2017-02-201-2/+2
| | | | | | | | | | Since the introduction of generic type parameter inference in Java 7, it's not necessary to explicitly specify the type of generic parameters. Enable the warning in Eclipse, and fix all occurrences. Change-Id: I9158caf1beca5e4980b6240ac401f3868520aad0 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Enable and fix 'Should be tagged with @Override' warningDavid Pursehouse2017-02-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | Set missingOverrideAnnotation=warning in Eclipse compiler preferences which enables the warning: The method <method> of type <type> should be tagged with @Override since it actually overrides a superclass method Justification for this warning is described in: http://stackoverflow.com/a/94411/381622 Enabling this causes in excess of 1000 warnings across the entire code-base. They are very easy to fix automatically with Eclipse's "Quick Fix" tool. Fix all of them except 2 which cause compilation failure when the project is built with mvn; add TODO comments on those for further investigation. Change-Id: I5772061041fd361fe93137fd8b0ad356e748a29c Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Allow retrying connecting SshSession in case of an exceptionStefan Lay2014-06-201-1/+30
| | | | | | | | | | | | | | | | | | Connecting to an SshSession may fail due to different reasons. Jsch for example often throws an com.jcraft.jsch.JschException: verify: false.[1] The issue is still not fixed in JSch 0.1.51. In such a case it is worth retrying to connect. The number of connection attempts can be configured using ssh_config parameter "ConnectionAttempts" [2]. Don't retry if the user canceled authentication. [1] http://sourceforge.net/p/jsch/bugs/58/ [2] http://linux.die.net/man/5/ssh_config Bug: 437656 Change-Id: I6dd2a3786b7d3f15f5a46821d8edac987a57e381 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Mark non-externalizable strings as suchRobin Rosenberg2012-12-271-17/+19
| | | | | | | | | | A few classes such as Constanrs are marked with @SuppressWarnings, as are toString() methods with many liternal, but otherwise $NLS-n$ is used for string containing text that should not be translated. A few literals may fall into the gray zone, but mostly I've tried to only tag the obvious ones. Change-Id: I22e50a77e2bf9e0b842a66bdf674e8fa1692f590
* Add constant for default name for the Git repo configurationTomasz Zarna2012-01-021-1/+2
| | | | Change-Id: I5a6ef686c444fb1e46c9f784bad01165471ef372 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Repository can be configured with FSMarc Strapetz2010-06-041-2/+5
| | | | | | | | | | | | | On Windows, FS_Win32_Cygwin has been used if a Cygwin Git installation is present in the PATH. Assuming that the user works with the Cygwin Git installation may result in unnecessary overhead if he actually does not. Applications built on top of jgit may have more knowledge on the actually used Git client (Cygwin or not) and hence should be able to configure which FS to use accordingly. Change-Id: Ifc4278078b298781d55cf5421e9647a21fa5db24
* Initial JGit contribution to eclipse.orgGit Development Community2009-09-291-0/+400
Per CQ 3448 this is the initial contribution of the JGit project to eclipse.org. It is derived from the historical JGit repository at commit 3a2dd9921c8a08740a9e02c421469e5b1a9e47cb. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>