httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From orlikow...@apache.org
Subject cvs commit: httpd-proxy/module-2.0 proxy_ftp.c
Date Fri, 29 Jun 2001 22:22:23 GMT
orlikowski    01/06/29 15:22:22

  Modified:    module-2.0 proxy_ftp.c
  Log:
  Fix the code, to properly handle the case of the user aborting the connection
  or the connection being broken.
  
  Revision  Changes    Path
  1.70      +17 -36    httpd-proxy/module-2.0/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /home/cvs/httpd-proxy/module-2.0/proxy_ftp.c,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- proxy_ftp.c	2001/06/29 00:12:08	1.69
  +++ proxy_ftp.c	2001/06/29 22:22:19	1.70
  @@ -552,7 +552,7 @@
       char *user = NULL;
   /*    char *account = NULL; how to supply an account in a URL? */
       const char *password = NULL;
  -    int i, j, len, rc;
  +    int i = 0, j, len, rc;
       int one = 1;
       char *size = NULL;
       apr_size_t readbytes = -1;
  @@ -1264,7 +1264,7 @@
       /* set request; "path" holds last path component */
       len = decodeenc(path);
   
  -    /* TM - if len == 0 then it must be a directory (you can't RETR nothing) */
  +    /* TM - if len == 0 then it must be a directory (you can't RETR anything) */
   
       if (len == 0) {
   	parms = "d";
  @@ -1588,43 +1588,24 @@
   		ap_pass_brigade(r->output_filters, bb);
   		break;
   	    }
  -	    ap_pass_brigade(r->output_filters, bb);
  +	    if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS) {
  +		/* Ack! Phbtt! Die! User aborted! */
  +		apr_brigade_cleanup(bb);
  +		break;
  +	    }
   	    apr_brigade_cleanup(bb);
   	}
  -	ap_flush_conn(remote);
  -	apr_socket_close(remote->client_socket);
  -	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  -		     "proxy: FTP: Closing Data connection.");
  -	rc = ftp_getrc_msg(origin, cbb, buffer, sizeof(buffer));
  -	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  -		     "proxy: FTP: %d %s", rc, buffer);
  -	apr_brigade_cleanup(bb);
  -	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  -		     "proxy: FTP: end body send");
       }
  -    else {
  -
  -	/* abort the transfer */
  -	buf = apr_pstrcat(p, "ABOR", CRLF, NULL);
  -	e = apr_bucket_pool_create(buf, strlen(buf), p);
  -	APR_BRIGADE_INSERT_TAIL(bb, e);
  -	e = apr_bucket_flush_create();
  -	APR_BRIGADE_INSERT_TAIL(bb, e);
  -	ap_pass_brigade(origin->output_filters, bb);
  -	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  -				 "proxy: FTP: ABOR");
  -	/* responses: 225, 226, 421, 500, 501, 502 */
  -	/*   225 Data connection open; no transfer in progress. */
  -	/*   226 Closing data connection. */
  -	/*   421 Service not available, closing control connection. */
  -	/*   500 Syntax error, command unrecognized. */
  -	/*   501 Syntax error in parameters or arguments. */
  -	/*   502 Command not implemented. */
  -	rc = ftp_getrc_msg(origin, cbb, buffer, sizeof(buffer));
  -	ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  -		     "proxy: FTP: %d %s", rc, buffer);
  -    }
  -
  +    ap_flush_conn(remote);
  +    apr_socket_close(remote->client_socket);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  +		 "proxy: FTP: Closing Data connection.");
  +    rc = ftp_getrc_msg(origin, cbb, buffer, sizeof(buffer));
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  +		 "proxy: FTP: %d %s", rc, buffer);
  +    apr_brigade_cleanup(bb);
  +    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
  +		 "proxy: FTP: end body send");
   
       /*
        * VII: Clean Up
  
  
  

Mime
View raw message