[ 
https://issues.apache.org/jira/browse/SSHD-902?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Goldstein Lyor resolved SSHD-902.
---------------------------------
       Resolution: Fixed
    Fix Version/s: 2.0.3

> Local port forwarding: EOF is not handled properly
> --------------------------------------------------
>
>                 Key: SSHD-902
>                 URL: https://issues.apache.org/jira/browse/SSHD-902
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.1.0
>         Environment: OS: both Windows 10 and Red Hat Enterprise Linux Server 
> release 7.4 (Maipo) Linux 4.1.12-124.19.2.el7uek.x86_64 x86_64
> JDK: 1.8.0_201
> SSHD: 2.1.0
>            Reporter: Yumin Sang
>            Assignee: Goldstein Lyor
>            Priority: Critical
>             Fix For: 2.0.3
>
>         Attachments: AbstractServerCloseTestSupport.java, 
> ApacheServerApacheClientTest.java, fixBasedOn2.1.0.zip, packets.PNG
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> Set remote port to a real listening port but is not for DB connection. Start 
> a local port forwarding. Try getting a connection through the established SSH 
> tunnel. This operation is expected to be finished with some error, but it 
> hangs.
> Reproduce steps:
>  # prepare a Linux server and find a listening port, such as 2049, which is 
> not of DB listener.
>  # get attached demo code: ApacheServerApacheClientTest.java and 
> AbstractServerCloseTestSupport.java. They are modified from the ones in 
> mina-sshd-2.1.0\sshd-core\src\test\java\org\apache\sshd\common\forward. 
> Please replace the corresponding ones.
>  # download ojdbc8.jar from 
> [https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html?|https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html]
>  and add it to classpath.
>  # set up a local port forwarding tunnel by Putty or other tools. Set the 
> forwarded local port to 37777, remote server/port to the server/port in step 
> 1.
>  # run  ApacheServerApacheClientTest.java. It finishes with error like 
> java.io.IOException: Got minus one from a read call. This is expected 
> behavior.
>  # change 
> org.apache.sshd.common.forward.AbstractServerCloseTestSupport#testLocalPortForwardOneBuffer:
>  uncomment line "int serverPort = startLocalPF();" and comment line "int 
> serverPort = 37777;"
>  # change 
> org.apache.sshd.common.forward.ApacheServerApacheClientTest#createClient, set 
> username, host and password to the ones in step 1.
>  # run  ApacheServerApacheClientTest.java again and it hangs.
> By capturing loopback packets, it can be found the interactions are same, but 
> SSHD make different process from what Putty does. In attached snapshot, the 
> "nfs" is of port 2049.
> Did a bit digging up, and it seems that EOF is not handled properly. Here is 
> a call stack:
> handleEof:873, AbstractChannel (org.apache.sshd.common.channel)
> channelEof:498, AbstractConnectionService 
> (org.apache.sshd.common.session.helpers)
> process:357, AbstractConnectionService 
> (org.apache.sshd.common.session.helpers)
> doHandleMessage:626, AbstractSession (org.apache.sshd.common.session.helpers)
> handleMessage:559, AbstractSession (org.apache.sshd.common.session.helpers)
> decode:1542, AbstractSession (org.apache.sshd.common.session.helpers)
> messageReceived:520, AbstractSession (org.apache.sshd.common.session.helpers)
> messageReceived:63, AbstractSessionIoHandler 
> (org.apache.sshd.common.session.helpers)
> handleReadCycleCompletion:339, Nio2Session (org.apache.sshd.common.io.nio2)
> onCompleted:318, Nio2Session$1 (org.apache.sshd.common.io.nio2)
> onCompleted:315, Nio2Session$1 (org.apache.sshd.common.io.nio2)
> lambda$completed$0:38, Nio2CompletionHandler (org.apache.sshd.common.io.nio2)
> run:-1, 391147216 
> (org.apache.sshd.common.io.nio2.Nio2CompletionHandler$$Lambda$73)
> doPrivileged:-1, AccessController (java.security)
> completed:37, Nio2CompletionHandler (org.apache.sshd.common.io.nio2)
> invokeUnchecked:126, Invoker (sun.nio.ch)
> run:218, Invoker$2 (sun.nio.ch)
> run:112, AsynchronousChannelGroupImpl$1 (sun.nio.ch)
> runWorker:1149, ThreadPoolExecutor (java.util.concurrent)
> run:624, ThreadPoolExecutor$Worker (java.util.concurrent)
> run:748, Thread (java.lang)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to