]> source.dussan.org Git - jgit.git/commitdiff
[sshd] Log the full KEX negotiation result 23/182223/1
authorThomas Wolf <thomas.wolf@paranor.ch>
Sat, 19 Jun 2021 13:41:37 +0000 (15:41 +0200)
committerThomas Wolf <thomas.wolf@paranor.ch>
Sat, 19 Jun 2021 13:41:37 +0000 (15:41 +0200)
Apache MINA sshd doesn't log all values, but it'd be very helpful to
debug KEX problems.

Change-Id: I5a19023c929f39caccde489d51a6fdca711fe5ff
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitClientSession.java

index 8183a92b9fb3d0d6d079082db95302b364857db7..f9e80121eda7578978510ccf53272f51338fc4f8 100644 (file)
@@ -39,6 +39,7 @@ import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.io.IoWriteFuture;
+import org.apache.sshd.common.kex.KexProposalOption;
 import org.apache.sshd.common.util.Readable;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.eclipse.jgit.errors.InvalidPatternException;
@@ -200,6 +201,24 @@ public class JGitClientSession extends ClientSessionImpl {
                }
        }
 
+       @Override
+       protected Map<KexProposalOption, String> setNegotiationResult(
+                       Map<KexProposalOption, String> guess) {
+               Map<KexProposalOption, String> result = super.setNegotiationResult(
+                               guess);
+               // This should be doable with a SessionListener, too, but I don't see
+               // how to add a listener in time to catch the negotiation end for sure
+               // given that the super-constructor already starts KEX.
+               //
+               // TODO: This override can be removed once we use sshd 2.8.0.
+               if (log.isDebugEnabled()) {
+                       result.forEach((option, value) -> log.debug(
+                                       "setNegotiationResult({}) Kex: {} = {}", this, //$NON-NLS-1$
+                                       option.getDescription(), value));
+               }
+               return result;
+       }
+
        @Override
        protected String resolveAvailableSignaturesProposal(
                        FactoryManager manager) {