[squid-dev] [PATCH] Invalid FTP connection handling on blocked content
Christos Tsantilas
christos at chtsanti.net
Tue Dec 29 16:31:12 UTC 2015
Problem description
--------------------
FTP client gets stuck after the following chain of events:
* Client requests a file that will be blocked by ICAP.
* Squid starts downloading the file from the FTP server and sends "150
Opening..." to the FTP client.
* Squid aborts the data connection with the FTP server as soon as the
ICAP service blocks it.
* Squid sends "451 Forbidden" to the FTP client.
* The FTP server sends "500 OOPS: setsockopt: linger" to Squid.
* Squid terminates the control connection to the FTP server.
* Squid establishes a new control connection to the FTP server but
does not authenticate itself.
* Further commands from the FTP client do not work any more.
The above and many similar problems exist because Squid handles FTP
client-to-squid and squid-to-FTP server data connections independently
from each other. In many cases, one connection does not get notified
about the problems with the other connection.
Tech details
------------
This patch:
- Add Ftp::MasterState::userDataDone to record received the FTP
client final response status code to sent (or to be send) to the client.
- The Ftp::MasterState::waitForOriginData flag to hold status of the
squid-to-server side. If the squid-to-server side is not finishes yet
this is true.
- Send a control reply to the FTP client only after the data
transferred on both server and client sides.
- Split Client::abortTransaction to Client::abortOnData and to
Client::abortAll()
- Implement the Ftp::Relay::abortOnData() and Ftp::Relay::Abort()
(i.e., StoreEntry abort handler) to avoid closing the control connection
when the data connection is closed unexpectedly.
This is a Measurement Factory project.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Invalid-FTP-connection-handling-on-blocked-content-t10.patch
Type: text/x-patch
Size: 52089 bytes
Desc: not available
URL: <http://lists.squid-cache.org/pipermail/squid-dev/attachments/20151229/0d8f9a29/attachment-0001.bin>
More information about the squid-dev
mailing list