Repository: mina-sshd
Updated Branches:
  refs/heads/master 0cb36d988 -> a04eaf4fa


[SSHD-795] IOException (Broken pipe) on a socket local forwarding channel 
causes SSH client-server connection down


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/a04eaf4f
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/a04eaf4f
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/a04eaf4f

Branch: refs/heads/master
Commit: a04eaf4fac94846a6703d1d38f50308381138419
Parents: 09dec8a
Author: Goldstein Lyor <[email protected]>
Authored: Sun Feb 4 16:38:36 2018 +0200
Committer: Goldstein Lyor <[email protected]>
Committed: Wed Feb 7 09:41:25 2018 +0200

----------------------------------------------------------------------
 .../keyverifier/StaticServerKeyVerifier.java      |  1 -
 .../sshd/server/forward/TcpipServerChannel.java   | 18 +++++++++++-------
 2 files changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a04eaf4f/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/StaticServerKeyVerifier.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/StaticServerKeyVerifier.java
 
b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/StaticServerKeyVerifier.java
index 60262bf..55ef4d9 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/StaticServerKeyVerifier.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/client/keyverifier/StaticServerKeyVerifier.java
@@ -66,5 +66,4 @@ public abstract class StaticServerKeyVerifier extends 
AbstractLoggingBean implem
                       remoteAddress, (serverKey == null) ? null : 
serverKey.getAlgorithm(), KeyUtils.getFingerPrint(serverKey));
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/a04eaf4f/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
index 8e1c268..da33d51 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java
@@ -331,24 +331,28 @@ public class TcpipServerChannel extends 
AbstractServerChannel {
     }
 
     protected void handleWriteDataFailure(byte cmd, byte[] data, int off, int 
len, Throwable t) {
-        Session session = getSession();
-        if (log.isDebugEnabled()) {
+        boolean debugEnabled = log.isDebugEnabled();
+        if (debugEnabled) {
             log.debug("handleWriteDataFailure({})[{}] failed ({}) to write 
len={}: {}",
                       this, SshConstants.getCommandMessageName(cmd & 0xFF),
                       t.getClass().getSimpleName(), len, t.getMessage());
         }
 
         if (log.isTraceEnabled()) {
-            log.trace("doWriteData(" + this + ")[" + 
SshConstants.getCommandMessageName(cmd & 0xFF) + "]"
+            log.trace("handleWriteDataFailure(" + this + ")[" + 
SshConstants.getCommandMessageName(cmd & 0xFF) + "]"
                     + " len=" + len + " write failure details", t);
         }
 
         if (ioSession.isOpen()) {
-            session.exceptionCaught(t);
+            // SSHD-795 IOException (Broken pipe) on a socket local forwarding 
channel causes SSH client-server connection down
+            if (debugEnabled) {
+                log.debug("handleWriteDataFailure({})[{}] closing session={}",
+                        this, SshConstants.getCommandMessageName(cmd & 0xFF), 
ioSession);
+            }
+            close(false);
         } else {
-            // In case remote entity has closed the socket (the ioSession), 
data coming from
-            // the SSH channel should be simply discarded
-            if (log.isDebugEnabled()) {
+            // In case remote entity has closed the socket (the ioSession), 
data coming from the SSH channel should be simply discarded
+            if (debugEnabled) {
                 log.debug("Ignoring writeDataFailure {} because ioSession {} 
is already closing ", t, ioSession);
             }
         }

Reply via email to