On Thu, Jan 31, 2008 at 05:27:49AM +0000, Charlie Allom wrote:
> Hi. ProFTPd seems to be kicking me off when I create directories with a
> mirror -R. in 3.5.x this was fine - lftp reconnected.
>
> With 3.6.x - lftp just hangs.
Please test attached patch.
--
Alexander.
Index: ftpclass.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/ftpclass.cc,v
retrieving revision 1.436
diff -u -p -r1.436 ftpclass.cc
--- ftpclass.cc 23 Jan 2008 13:16:53 -0000 1.436
+++ ftpclass.cc 31 Jan 2008 07:39:21 -0000
@@ -328,6 +328,9 @@ bool Ftp::Transient5XX(int act)
// 226 Transfer complete.
void Ftp::TransferCheck(int act)
{
+ if(state==WAITING_150_STATE)
+ conn->received_150=true;
+
if(act==225 || act==226) // data connection is still open or ABOR worked.
{
copy_done=true;
@@ -2111,13 +2114,14 @@ int Ftp::Do()
pre_waiting_150:
state=WAITING_150_STATE;
+ waiting_150_timer.Reset();
m=MOVED;
case WAITING_150_STATE:
m|=FlushSendQueue();
m|=ReceiveResp();
if(state!=WAITING_150_STATE || Error())
return MOVED;
- if(!conn->received_150)
+ if(!conn->received_150 && !expect->IsEmpty() &&
!waiting_150_timer.Stopped())
goto usual_return;
// now init data connection properly and start data exchange
@@ -4245,6 +4249,7 @@ void Ftp::ResetLocationData()
Reconfig();
state=INITIAL_STATE;
stat_timer.SetResource("ftp:stat-interval",hostname);
+ waiting_150_timer.SetResource("ftp:waiting-150-timeout",hostname);
}
bool Ftp::AnonymousQuietMode()
Index: ftpclass.h
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/ftpclass.h,v
retrieving revision 1.152
diff -u -p -r1.152 ftpclass.h
--- ftpclass.h 18 Oct 2007 13:27:16 -0000 1.152
+++ ftpclass.h 31 Jan 2008 07:21:25 -0000
@@ -295,6 +295,7 @@ private:
Timer retry_timer;
Timer stat_timer; // timer for sending periodic STAT commands.
+ Timer waiting_150_timer; // limit time to wait for 150 reply.
void DataAbort();
void DataClose();
Index: resource.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/resource.cc,v
retrieving revision 1.148
diff -u -p -r1.148 resource.cc
--- resource.cc 21 Jan 2008 14:07:02 -0000 1.148
+++ resource.cc 31 Jan 2008 07:24:51 -0000
@@ -223,6 +223,7 @@ static ResType lftp_vars[] = {
{"ftp:verify-address", "no", ResMgr::BoolValidate,0},
{"ftp:verify-port", "no", ResMgr::BoolValidate,0},
{"ftp:web-mode", "off", ResMgr::BoolValidate,0},
+ {"ftp:waiting-150-timeout", "5", ResMgr::TimeIntervalValidate,0},
#define RETRY_530 \
"too many|overloaded|try (again |back )?later|is restricted to|"\
"maximum number|number of connect|only.*session.*allowed|more
connection|already connected"