cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: libcurl not sending QUIT to terminate control connection

From: Joe Halpin <j.p.h_at_comcast.net>
Date: Sat, 21 Feb 2004 12:22:51 -0600

Daniel Stenberg wrote:
> On Sat, 7 Feb 2004, Joe Halpin wrote:
>
>>It looks like I can set ctl_valid to FALSE at the beginning of Curl_ftp(),
>>and then set it to TRUE before returning if it gets to the bottom of the
>>function. I've done some tests which have worked so far. Do you see
>>anything wrong with that approach? If not, I'll redo the test cases and send
>>a patch.
>
> Sounds fine to me!

I'm sorry it's taken me so long to get the out. I've been really busy at
work, and I was having some problems with the test cases due to a
hardware problem (my keyboard was sending what I typed instead of what I
wanted :-).

Anyway I'll attach a patch that passes the tests and looks good in
practice. I redid the test cases that were failing before. I used cvs
diff this time, which has preserved the ^M characters after QUIT.
Hopefully it will make it there ok.

Joe

Index: lib/ftp.c
===================================================================
RCS file: /repository/curl/lib/ftp.c,v
retrieving revision 1.226
diff -u -r1.226 ftp.c
--- lib/ftp.c 13 Feb 2004 06:59:49 -0000 1.226
+++ lib/ftp.c 21 Feb 2004 18:19:26 -0000
@@ -2288,11 +2288,15 @@
  * parts etc as a wrapper to the actual DO function (ftp_perform).
  *
  * The input argument is already checked for validity.
+ *
+ * conn->proto.ftp->ctl_valid starts out as FALSE, and gets set to TRUE if we
+ * reach the end of the function.
  */
 CURLcode Curl_ftp(struct connectdata *conn)
 {
   CURLcode retcode=CURLE_OK;
   bool connected=0;
+ conn->proto.ftp->ctl_valid = FALSE;
 
   struct SessionHandle *data = conn->data;
   struct FTP *ftp;
@@ -2386,6 +2390,7 @@
   else
     freedirs(ftp);
 
+ conn->proto.ftp->ctl_valid = TRUE;
   return retcode;
 }
 
@@ -2447,16 +2452,22 @@
  * server before returning. The calling code should then try to close the
  * connection.
  *
+ * This defaults to returning CURLE_OPERATION_TIMEDOUT because I don't know
+ * what the real reason for failure is at this point. The return is ignored at
+ * this point anyway though.
  */
 CURLcode Curl_ftp_quit(struct connectdata *conn)
 {
   ssize_t nread;
   int ftpcode;
- CURLcode ret;
+ CURLcode ret = CURLE_OPERATION_TIMEDOUT;
 
- ret = Curl_ftpsendf(conn, "%s", "QUIT");
- if(CURLE_OK == ret)
- ret = Curl_GetFTPResponse(&nread, conn, &ftpcode);
+ if(TRUE == conn->proto.ftp->ctl_valid)
+ {
+ ret = Curl_ftpsendf(conn, "%s", "QUIT");
+ if(CURLE_OK == ret)
+ ret = Curl_GetFTPResponse(&nread, conn, &ftpcode);
+ }
 
   return ret;
 }
@@ -2472,15 +2483,15 @@
 {
   struct FTP *ftp= conn->proto.ftp;
 
-#if 0
   /* We cannot send quit unconditionally. If this connection is stale or
      bad in any way, sending quit and waiting around here will make the
      disconnect wait in vain and cause more problems than we need to.
-
- Until fixed, we keep this #if 0'ed. To be fixed in 7.11.1. Stay tuned.
+
+ Curl_ftp_quit() will check the state of conn->proto.ftp->ctl_valid. If
+ it's ok it will try to send the QUIT command, otherwise it will just
+ return.
   */
   (void)Curl_ftp_quit(conn); /* ignore errors on the QUIT */
-#endif
 
   /* The FTP session may or may not have been allocated/setup at this point! */
   if(ftp) {
Index: lib/urldata.h
===================================================================
RCS file: /repository/curl/lib/urldata.h,v
retrieving revision 1.194
diff -u -r1.194 urldata.h
--- lib/urldata.h 20 Feb 2004 08:47:23 -0000 1.194
+++ lib/urldata.h 21 Feb 2004 18:19:31 -0000
@@ -258,6 +258,10 @@
   long response_time; /* When no timeout is given, this is the amount of
                          seconds we await for an FTP response. Initialized
                          in Curl_ftp_connect() */
+ bool ctl_valid; /* Tells Curl_ftp_quit() whether or not to do
+ anything. If the connection has timed out or
+ been closed, this should be FALSE when it gets
+ to Curl_ftp_quit() */
 };
 
 /****************************************************************************
Index: tests/data/test100
===================================================================
RCS file: /repository/curl/tests/data/test100,v
retrieving revision 1.3
diff -u -r1.3 test100
--- tests/data/test100 30 Apr 2003 20:25:39 -0000 1.3
+++ tests/data/test100 21 Feb 2004 18:19:31 -0000
@@ -43,5 +43,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test101
===================================================================
RCS file: /repository/curl/tests/data/test101,v
retrieving revision 1.3
diff -u -r1.3 test101
--- tests/data/test101 30 Apr 2003 20:25:39 -0000 1.3
+++ tests/data/test101 21 Feb 2004 18:19:31 -0000
@@ -43,5 +43,6 @@
 PORT 127,0,0,1,243,212
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test102
===================================================================
RCS file: /repository/curl/tests/data/test102,v
retrieving revision 1.3
diff -u -r1.3 test102
--- tests/data/test102 30 Apr 2003 20:25:40 -0000 1.3
+++ tests/data/test102 21 Feb 2004 18:19:31 -0000
@@ -38,5 +38,6 @@
 TYPE I
 SIZE 102
 RETR 102
+QUIT
 </protocol>
 </verify>
Index: tests/data/test103
===================================================================
RCS file: /repository/curl/tests/data/test103,v
retrieving revision 1.5
diff -u -r1.5 test103
--- tests/data/test103 30 Apr 2003 20:25:40 -0000 1.5
+++ tests/data/test103 21 Feb 2004 18:19:31 -0000
@@ -40,5 +40,6 @@
 TYPE I
 SIZE 103
 RETR 103
+QUIT
 </protocol>
 </verify>
Index: tests/data/test104
===================================================================
RCS file: /repository/curl/tests/data/test104,v
retrieving revision 1.4
diff -u -r1.4 test104
--- tests/data/test104 30 Jul 2003 07:52:02 -0000 1.4
+++ tests/data/test104 21 Feb 2004 18:19:31 -0000
@@ -30,5 +30,6 @@
 TYPE I
 SIZE 103
 REST 0
+QUIT
 </protocol>
 </verify>
Index: tests/data/test105
===================================================================
RCS file: /repository/curl/tests/data/test105,v
retrieving revision 1.3
diff -u -r1.3 test105
--- tests/data/test105 30 Apr 2003 20:25:40 -0000 1.3
+++ tests/data/test105 21 Feb 2004 18:19:31 -0000
@@ -38,5 +38,6 @@
 TYPE A
 SIZE 103
 RETR 103
+QUIT
 </protocol>
 </verify>
Index: tests/data/test106
===================================================================
RCS file: /repository/curl/tests/data/test106,v
retrieving revision 1.6
diff -u -r1.6 test106
--- tests/data/test106 28 Jul 2003 09:02:15 -0000 1.6
+++ tests/data/test106 21 Feb 2004 18:19:31 -0000
@@ -35,5 +35,6 @@
 TYPE A
 SIZE 106
 RETR 106
+QUIT
 </protocol>
 </verify>
Index: tests/data/test107
===================================================================
RCS file: /repository/curl/tests/data/test107,v
retrieving revision 1.3
diff -u -r1.3 test107
--- tests/data/test107 30 Apr 2003 20:25:40 -0000 1.3
+++ tests/data/test107 21 Feb 2004 18:19:31 -0000
@@ -37,5 +37,6 @@
 EPSV
 TYPE I
 STOR 107
+QUIT
 </protocol>
 </verify>
Index: tests/data/test108
===================================================================
RCS file: /repository/curl/tests/data/test108,v
retrieving revision 1.4
diff -u -r1.4 test108
--- tests/data/test108 30 Apr 2003 20:25:40 -0000 1.4
+++ tests/data/test108 21 Feb 2004 18:19:31 -0000
@@ -38,6 +38,7 @@
 PORT 127,0,0,1,5,109
 TYPE I
 STOR 108
+QUIT
 </protocol>
 <upload>
 Moooooooooooo
Index: tests/data/test109
===================================================================
RCS file: /repository/curl/tests/data/test109,v
retrieving revision 1.3
diff -u -r1.3 test109
--- tests/data/test109 30 Apr 2003 20:25:40 -0000 1.3
+++ tests/data/test109 21 Feb 2004 18:19:31 -0000
@@ -32,6 +32,7 @@
 EPSV
 TYPE I
 APPE 109
+QUIT
 </protocol>
 <upload>
 Moooooooooooo
Index: tests/data/test110
===================================================================
RCS file: /repository/curl/tests/data/test110,v
retrieving revision 1.3
diff -u -r1.3 test110
--- tests/data/test110 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test110 21 Feb 2004 18:19:31 -0000
@@ -39,5 +39,6 @@
 SIZE 110
 REST 20
 RETR 110
+QUIT
 </protocol>
 </verify>
Index: tests/data/test111
===================================================================
RCS file: /repository/curl/tests/data/test111,v
retrieving revision 1.3
diff -u -r1.3 test111
--- tests/data/test111 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test111 21 Feb 2004 18:19:31 -0000
@@ -32,5 +32,6 @@
 EPSV
 TYPE I
 SIZE 111
+QUIT
 </protocol>
 </verify>
Index: tests/data/test112
===================================================================
RCS file: /repository/curl/tests/data/test112,v
retrieving revision 1.3
diff -u -r1.3 test112
--- tests/data/test112 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test112 21 Feb 2004 18:19:31 -0000
@@ -31,6 +31,7 @@
 EPSV
 TYPE I
 APPE 112
+QUIT
 </protocol>
 <upload>
  gonna upload
Index: tests/data/test115
===================================================================
RCS file: /repository/curl/tests/data/test115,v
retrieving revision 1.3
diff -u -r1.3 test115
--- tests/data/test115 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test115 21 Feb 2004 18:19:31 -0000
@@ -30,5 +30,6 @@
 PWD
 EPSV
 PASV
+QUIT
 </protocol>
 </verify>
Index: tests/data/test116
===================================================================
RCS file: /repository/curl/tests/data/test116,v
retrieving revision 1.3
diff -u -r1.3 test116
--- tests/data/test116 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test116 21 Feb 2004 18:19:31 -0000
@@ -32,5 +32,6 @@
 USER anonymous
 PASS curl_by_daniel_at_haxx.se
 PWD
+QUIT
 </protocol>
 </verify>
Index: tests/data/test117
===================================================================
RCS file: /repository/curl/tests/data/test117,v
retrieving revision 1.3
diff -u -r1.3 test117
--- tests/data/test117 30 Apr 2003 20:25:41 -0000 1.3
+++ tests/data/test117 21 Feb 2004 18:19:31 -0000
@@ -31,5 +31,6 @@
 EPSV
 PASV
 TYPE I
+QUIT
 </protocol>
 </verify>
Index: tests/data/test118
===================================================================
RCS file: /repository/curl/tests/data/test118,v
retrieving revision 1.3
diff -u -r1.3 test118
--- tests/data/test118 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test118 21 Feb 2004 18:19:31 -0000
@@ -33,5 +33,6 @@
 TYPE I
 SIZE 118
 RETR 118
+QUIT
 </protocol>
 </verify>
Index: tests/data/test119
===================================================================
RCS file: /repository/curl/tests/data/test119,v
retrieving revision 1.4
diff -u -r1.4 test119
--- tests/data/test119 30 Apr 2003 20:25:42 -0000 1.4
+++ tests/data/test119 21 Feb 2004 18:19:31 -0000
@@ -35,5 +35,6 @@
 TYPE I
 SIZE 119
 RETR 119
+QUIT
 </protocol>
 </verify>
Index: tests/data/test120
===================================================================
RCS file: /repository/curl/tests/data/test120,v
retrieving revision 1.3
diff -u -r1.3 test120
--- tests/data/test120 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test120 21 Feb 2004 18:19:31 -0000
@@ -38,5 +38,6 @@
 SIZE 120
 RETR 120
 DELE file
+QUIT
 </protocol>
 </verify>
Index: tests/data/test121
===================================================================
RCS file: /repository/curl/tests/data/test121,v
retrieving revision 1.3
diff -u -r1.3 test121
--- tests/data/test121 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test121 21 Feb 2004 18:19:31 -0000
@@ -35,5 +35,6 @@
 SIZE 121
 RETR 121
 DELE after_transfer
+QUIT
 </protocol>
 </verify>
Index: tests/data/test122
===================================================================
RCS file: /repository/curl/tests/data/test122,v
retrieving revision 1.3
diff -u -r1.3 test122
--- tests/data/test122 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test122 21 Feb 2004 18:19:31 -0000
@@ -31,5 +31,6 @@
 PASV
 TYPE I
 SIZE 122
+QUIT
 </protocol>
 </verify>
Index: tests/data/test123
===================================================================
RCS file: /repository/curl/tests/data/test123,v
retrieving revision 1.3
diff -u -r1.3 test123
--- tests/data/test123 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test123 21 Feb 2004 18:19:31 -0000
@@ -26,5 +26,6 @@
 PWD
 EPSV
 TYPE I
+QUIT
 </protocol>
 </verify>
Index: tests/data/test124
===================================================================
RCS file: /repository/curl/tests/data/test124,v
retrieving revision 1.3
diff -u -r1.3 test124
--- tests/data/test124 30 Apr 2003 20:25:42 -0000 1.3
+++ tests/data/test124 21 Feb 2004 18:19:31 -0000
@@ -33,5 +33,6 @@
 TYPE I
 SIZE 124
 RETR 124
+QUIT
 </protocol>
 </verify>
Index: tests/data/test125
===================================================================
RCS file: /repository/curl/tests/data/test125,v
retrieving revision 1.3
diff -u -r1.3 test125
--- tests/data/test125 30 Apr 2003 20:25:45 -0000 1.3
+++ tests/data/test125 21 Feb 2004 18:19:31 -0000
@@ -28,5 +28,6 @@
 PASS curl_by_daniel_at_haxx.se
 PWD
 CWD path
+QUIT
 </protocol>
 </verify>
Index: tests/data/test126
===================================================================
RCS file: /repository/curl/tests/data/test126,v
retrieving revision 1.5
diff -u -r1.5 test126
--- tests/data/test126 30 Apr 2003 20:25:47 -0000 1.5
+++ tests/data/test126 21 Feb 2004 18:19:31 -0000
@@ -33,5 +33,6 @@
 TYPE I
 SIZE 126
 RETR 126
+QUIT
 </protocol>
 </verify>
Index: tests/data/test127
===================================================================
RCS file: /repository/curl/tests/data/test127,v
retrieving revision 1.3
diff -u -r1.3 test127
--- tests/data/test127 30 Apr 2003 20:25:47 -0000 1.3
+++ tests/data/test127 21 Feb 2004 18:19:31 -0000
@@ -31,5 +31,6 @@
 TYPE I
 SIZE 127
 RETR 127
+QUIT
 </protocol>
 </verify>
Index: tests/data/test128
===================================================================
RCS file: /repository/curl/tests/data/test128,v
retrieving revision 1.2
diff -u -r1.2 test128
--- tests/data/test128 30 Apr 2003 20:25:47 -0000 1.2
+++ tests/data/test128 21 Feb 2004 18:19:31 -0000
@@ -33,6 +33,7 @@
 EPSV
 TYPE I
 STOR 128
+QUIT
 </protocol>
 <upload>
 file
Index: tests/data/test130
===================================================================
RCS file: /repository/curl/tests/data/test130,v
retrieving revision 1.3
diff -u -r1.3 test130
--- tests/data/test130 12 Jun 2003 16:38:15 -0000 1.3
+++ tests/data/test130 21 Feb 2004 18:19:31 -0000
@@ -51,5 +51,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test131
===================================================================
RCS file: /repository/curl/tests/data/test131,v
retrieving revision 1.3
diff -u -r1.3 test131
--- tests/data/test131 12 Jun 2003 16:38:15 -0000 1.3
+++ tests/data/test131 21 Feb 2004 18:19:31 -0000
@@ -51,5 +51,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test132
===================================================================
RCS file: /repository/curl/tests/data/test132,v
retrieving revision 1.3
diff -u -r1.3 test132
--- tests/data/test132 12 Jun 2003 16:38:15 -0000 1.3
+++ tests/data/test132 21 Feb 2004 18:19:31 -0000
@@ -51,5 +51,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test133
===================================================================
RCS file: /repository/curl/tests/data/test133,v
retrieving revision 1.3
diff -u -r1.3 test133
--- tests/data/test133 12 Jun 2003 16:38:15 -0000 1.3
+++ tests/data/test133 21 Feb 2004 18:19:31 -0000
@@ -51,5 +51,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test134
===================================================================
RCS file: /repository/curl/tests/data/test134,v
retrieving revision 1.3
diff -u -r1.3 test134
--- tests/data/test134 12 Jun 2003 16:38:16 -0000 1.3
+++ tests/data/test134 21 Feb 2004 18:19:31 -0000
@@ -51,5 +51,6 @@
 EPSV
 TYPE A
 LIST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test135
===================================================================
RCS file: /repository/curl/tests/data/test135,v
retrieving revision 1.2
diff -u -r1.2 test135
--- tests/data/test135 30 Apr 2003 20:25:48 -0000 1.2
+++ tests/data/test135 21 Feb 2004 18:19:31 -0000
@@ -38,5 +38,6 @@
 SIZE 135
 REST 4
 RETR 135
+QUIT
 </protocol>
 </verify>
Index: tests/data/test136
===================================================================
RCS file: /repository/curl/tests/data/test136,v
retrieving revision 1.2
diff -u -r1.2 test136
--- tests/data/test136 30 Apr 2003 20:25:48 -0000 1.2
+++ tests/data/test136 21 Feb 2004 18:19:31 -0000
@@ -28,5 +28,6 @@
 TYPE I
 SIZE 136
 RETR 136
+QUIT
 </protocol>
 </verify>
Index: tests/data/test137
===================================================================
RCS file: /repository/curl/tests/data/test137,v
retrieving revision 1.3
diff -u -r1.3 test137
--- tests/data/test137 30 Apr 2003 20:25:48 -0000 1.3
+++ tests/data/test137 21 Feb 2004 18:19:31 -0000
@@ -33,5 +33,6 @@
 TYPE I
 SIZE 137
 RETR 137
+QUIT
 </protocol>
 </verify>
Index: tests/data/test138
===================================================================
RCS file: /repository/curl/tests/data/test138,v
retrieving revision 1.3
diff -u -r1.3 test138
--- tests/data/test138 30 Apr 2003 20:25:48 -0000 1.3
+++ tests/data/test138 21 Feb 2004 18:19:31 -0000
@@ -36,5 +36,6 @@
 TYPE I
 SIZE 138
 RETR 138
+QUIT
 </protocol>
 </verify>
Index: tests/data/test139
===================================================================
RCS file: /repository/curl/tests/data/test139,v
retrieving revision 1.2
diff -u -r1.2 test139
--- tests/data/test139 30 Apr 2003 20:25:48 -0000 1.2
+++ tests/data/test139 21 Feb 2004 18:19:31 -0000
@@ -33,5 +33,6 @@
 TYPE I
 SIZE 139
 RETR 139
+QUIT
 </protocol>
 </verify>
Index: tests/data/test140
===================================================================
RCS file: /repository/curl/tests/data/test140,v
retrieving revision 1.2
diff -u -r1.2 test140
--- tests/data/test140 30 Apr 2003 20:25:48 -0000 1.2
+++ tests/data/test140 21 Feb 2004 18:19:31 -0000
@@ -28,5 +28,6 @@
 PWD
 CWD blalbla
 MDTM 140
+QUIT
 </protocol>
 </verify>
Index: tests/data/test141
===================================================================
RCS file: /repository/curl/tests/data/test141,v
retrieving revision 1.5
diff -u -r1.5 test141
--- tests/data/test141 31 Oct 2003 21:37:03 -0000 1.5
+++ tests/data/test141 21 Feb 2004 18:19:31 -0000
@@ -31,6 +31,7 @@
 TYPE I
 SIZE 141
 REST 0
+QUIT
 </protocol>
 <stdout>
 Last-Modified: Wed, 09 Apr 2003 10:26:59 GMT
Index: tests/data/test143
===================================================================
RCS file: /repository/curl/tests/data/test143,v
retrieving revision 1.1
diff -u -r1.1 test143
--- tests/data/test143 1 May 2003 17:49:00 -0000 1.1
+++ tests/data/test143 21 Feb 2004 18:19:31 -0000
@@ -30,5 +30,6 @@
 TYPE A
 SIZE 143
 RETR 143
+QUIT
 </protocol>
 </verify>
Index: tests/data/test144
===================================================================
RCS file: /repository/curl/tests/data/test144,v
retrieving revision 1.1
diff -u -r1.1 test144
--- tests/data/test144 23 May 2003 11:10:35 -0000 1.1
+++ tests/data/test144 21 Feb 2004 18:19:31 -0000
@@ -35,5 +35,6 @@
 PORT 127,0,0,1,243,212
 TYPE A
 NLST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test145
===================================================================
RCS file: /repository/curl/tests/data/test145,v
retrieving revision 1.1
diff -u -r1.1 test145
--- tests/data/test145 23 May 2003 11:10:35 -0000 1.1
+++ tests/data/test145 21 Feb 2004 18:19:31 -0000
@@ -38,5 +38,6 @@
 PORT 127,0,0,1,243,212
 TYPE A
 NLST
+QUIT
 </protocol>
 </verify>
Index: tests/data/test146
===================================================================
RCS file: /repository/curl/tests/data/test146,v
retrieving revision 1.1
diff -u -r1.1 test146
--- tests/data/test146 5 Aug 2003 12:59:23 -0000 1.1
+++ tests/data/test146 21 Feb 2004 18:19:31 -0000
@@ -42,5 +42,6 @@
 TYPE I
 SIZE 146
 RETR 146
+QUIT
 </protocol>
 </verify>
Index: tests/data/test147
===================================================================
RCS file: /repository/curl/tests/data/test147,v
retrieving revision 1.1
diff -u -r1.1 test147
--- tests/data/test147 8 Aug 2003 10:23:46 -0000 1.1
+++ tests/data/test147 21 Feb 2004 18:19:31 -0000
@@ -44,5 +44,6 @@
 TYPE I
 SIZE 147
 RETR 147
+QUIT
 </protocol>
 </verify>
Index: tests/data/test148
===================================================================
RCS file: /repository/curl/tests/data/test148,v
retrieving revision 1.1
diff -u -r1.1 test148
--- tests/data/test148 8 Aug 2003 10:32:08 -0000 1.1
+++ tests/data/test148 21 Feb 2004 18:19:31 -0000
@@ -37,5 +37,6 @@
 PWD
 CWD attempt
 MKD attempt
+QUIT
 </protocol>
 </verify>
Index: tests/data/test149
===================================================================
RCS file: /repository/curl/tests/data/test149,v
retrieving revision 1.2
diff -u -r1.2 test149
--- tests/data/test149 19 Aug 2003 23:37:40 -0000 1.2
+++ tests/data/test149 21 Feb 2004 18:19:31 -0000
@@ -39,6 +39,7 @@
 EPSV
 TYPE I
 STOR 148
+QUIT
 </protocol>
 <file name="log/upload148">
 send away this contents
Received on 2004-02-21