diff --git a/0001-curl-7.21.2-0c8e5f7.patch b/0001-curl-7.21.2-0c8e5f7.patch new file mode 100644 index 0000000..ec59ed4 --- /dev/null +++ b/0001-curl-7.21.2-0c8e5f7.patch @@ -0,0 +1,115 @@ + CHANGES | 10 ++++++++++ + lib/ftp.c | 7 ++++++- + tests/data/test1036 | 1 + + tests/data/test1057 | 1 + + tests/data/test110 | 1 + + tests/data/test122 | 1 + + tests/data/test135 | 1 + + 7 files changed, 21 insertions(+), 1 deletions(-) + +diff --git a/CHANGES b/CHANGES +index c06d213..90ef831 100644 +--- a/CHANGES ++++ b/CHANGES +@@ -6,6 +6,16 @@ + + Changelog + ++Kamil Dudka (29 Oct 2010) ++- ftp: prevent server from hanging on closed data connection ++ ++ Some FTP servers (e.g. Pure-ftpd) end up hanging if we close the data ++ connection before transferring all the requested data. If we send ABOR ++ in that case, it prevents the server from hanging. ++ ++ Bug: https://bugzilla.redhat.com/643656 ++ Reported by: Pasi Karkkainen, Patrick Monnerat ++ + Version 7.21.2 (12 Oct 2010) + + Daniel Stenberg (12 Oct 2010) +diff --git a/lib/ftp.c b/lib/ftp.c +index 60d9517..b11be35 100644 +--- a/lib/ftp.c ++++ b/lib/ftp.c +@@ -3083,6 +3083,11 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status, + #endif + + if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) { ++ if(!result && ftpc->dont_check) ++ /* prevent some FTP servers (namely Pure-ftpd) from hanging if we close ++ * the data channel before transferring all data */ ++ result = Curl_pp_sendf(&ftpc->pp, "ABOR"); ++ + if(conn->ssl[SECONDARYSOCKET].use) { + /* The secondary socket is using SSL so we must close down that part + first before we close the socket for real */ +@@ -3097,7 +3102,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status, + } + } + +- if((ftp->transfer == FTPTRANSFER_BODY) && ftpc->ctl_valid && ++ if(!result && (ftp->transfer == FTPTRANSFER_BODY) && ftpc->ctl_valid && + pp->pending_resp && !premature) { + /* + * Let's see what the server says about the transfer we just performed, +diff --git a/tests/data/test1036 b/tests/data/test1036 +index b8ebc4f..a31cb45 100644 +--- a/tests/data/test1036 ++++ b/tests/data/test1036 +@@ -50,6 +50,7 @@ TYPE I + SIZE 1036 + REST 20 + RETR 1036 ++ABOR + QUIT + + +diff --git a/tests/data/test1057 b/tests/data/test1057 +index cfb88f2..b4ef20c 100644 +--- a/tests/data/test1057 ++++ b/tests/data/test1057 +@@ -45,6 +45,7 @@ TYPE I + SIZE 1057 + REST 52 + RETR 1057 ++ABOR + QUIT + + +diff --git a/tests/data/test110 b/tests/data/test110 +index b63ba8a..4a094e7 100644 +--- a/tests/data/test110 ++++ b/tests/data/test110 +@@ -46,6 +46,7 @@ TYPE I + SIZE 110 + REST 20 + RETR 110 ++ABOR + QUIT + + +diff --git a/tests/data/test122 b/tests/data/test122 +index fb1dd05..ac60672 100644 +--- a/tests/data/test122 ++++ b/tests/data/test122 +@@ -39,6 +39,7 @@ EPSV + PASV + TYPE I + SIZE 122 ++ABOR + QUIT + + +diff --git a/tests/data/test135 b/tests/data/test135 +index a051dba..10eb0ea 100644 +--- a/tests/data/test135 ++++ b/tests/data/test135 +@@ -47,6 +47,7 @@ TYPE I + SIZE 135 + REST 4 + RETR 135 ++ABOR + QUIT + + diff --git a/curl.spec b/curl.spec index 512a5f1..62e2d1a 100644 --- a/curl.spec +++ b/curl.spec @@ -1,13 +1,16 @@ Summary: A utility for getting files from remote servers (FTP, HTTP, and others) Name: curl Version: 7.21.2 -Release: 2%{?dist} +Release: 3%{?dist} License: MIT Group: Applications/Internet Source: http://curl.haxx.se/download/%{name}-%{version}.tar.lzma Source2: curlbuild.h Source3: hide_selinux.c +# ftp: prevent server from hanging on closed data connection (#643656) +Patch1: 0001-curl-7.21.2-0c8e5f7.patch + # patch making libcurl multilib ready Patch101: 0101-curl-7.21.1-multilib.patch @@ -103,6 +106,9 @@ for f in CHANGES README; do mv -f ${f}.utf8 ${f} done +# upstream patches (already applied) +%patch1 -p1 + # Fedora patches %patch101 -p1 %patch102 -p1 @@ -223,6 +229,9 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/libcurl.m4 %changelog +* Fri Oct 29 2010 Kamil Dudka 7.21.2-3 +- prevent FTP server from hanging on closed data connection (#643656) + * Thu Oct 14 2010 Paul Howarth 7.21.2-2 - enforce versioned libssh2 dependency for libcurl (#642796)