CARVIEW |
Navigation Menu
-
-
Notifications
You must be signed in to change notification settings - Fork 673

Description
FTP OS: irrelevant
FTP Server: irrelevant
FTP Proxy: CCProxy 8.0 (and likely others)
Computer OS: Windows 10 20H2
FluentFTP Version: 34.0
There appear to be two general issues with the UserAtHost proxy.
CCProxy and probably other proxies provide a status 220 banner on connect. With the current UserAtHost proxy implementation it is impossible to connect in such a case, because the Execute("USER " + userName);
during Authenticate
will run into the StaleDataCheck
, which closes the stream, causing another failing Connect()
attempt and the whole thing continues failing recursively.
Inserting a GetReply()
during the proxy handshake solves the issue (as in the custom Blue Coat solution for #246), but I think calling base.Handshake()
should be the preferred way for FTP proxies to override that method anyway, no? I am not sure though whether all FTP proxies provide a banner, or if a direct or indirect call to GetReply()
during the handshake might actually lead to a potential hang if they do not.
The second issue is that the current method of replacing Credentials.UserName
with User@Host information is not guarded, which leads to User@Host@Host@Host... if Handshake
is called repeatedly as in the scenario above.
I'm happy to provide a PR for these issues, if there is some consensus on how to approach the first issue. If proxies exist with or without banner, perhaps a check of whether the stream has data before calling GetReply()
is an option, or a version of that function that times out instead of blocking when no data is available?
Logs :
# Connect()
# Connect()
Status: Connecting to 192.168.40.9:2121
Status: Connecting to 192.168.40.9:2121
Status: There is stale data on the socket, maybe our connection timed out or you did not call GetReply(). Re-connecting...
Status: There is stale data on the socket, maybe our connection timed out or you did not call GetReply(). Re-connecting...
Status: The stale data was: 220-CCProxy FTP Service(Unregistered)
220-you need to input userid@site as login name.
220 Example: user anonymous@ftp.netscape.com
Status: The stale data was: 220-CCProxy FTP Service(Unregistered)
220-you need to input userid@site as login name.
220 Example: user anonymous@ftp.netscape.com
Status: Disposing FtpSocketStream...
Status: Disposing FtpSocketStream...
# Connect()
# Connect()
Status: Connecting to 192.168.40.9:2121
Status: Connecting to 192.168.40.9:2121
Status: There is stale data on the socket, maybe our connection timed out or you did not call GetReply(). Re-connecting...
Status: There is stale data on the socket, maybe our connection timed out or you did not call GetReply(). Re-connecting...
Status: The stale data was: 220-CCProxy FTP Service(Unregistered)
220-you need to input userid@site as login name.
220 Example: user anonymous@ftp.netscape.com
Status: The stale data was: 220-CCProxy FTP Service(Unregistered)
220-you need to input userid@site as login name.
220 Example: user anonymous@ftp.netscape.com
Status: Disposing FtpSocketStream...
Status: Disposing FtpSocketStream...
[continues ad infinitum]