DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10747>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10747 ftp SIZE command and 'smart' ftp servers results in wrong Content-Length value Summary: ftp SIZE command and 'smart' ftp servers results in wrong Content-Length value Product: Apache httpd-1.3 Version: 1.3.26 Platform: PC OS/Version: Linux Status: NEW Severity: Major Priority: Other Component: mod_proxy AssignedTo: [email protected] ReportedBy: [EMAIL PROTECTED] mod_proxy issues the SIZE command for ftp transfers to determine the size of the object to be transferred and sends this as the Content-Length to the client. Unfortunately 'smart' ftp servers use the current transfer type to determine the file size. In case of the default type which is ASCII after login these servers include a LF to CRLF conversion in the length calculation. The result is a hanging transfer as the amount of bytes advertised in the Content-Length header is larger than the amount of bytes delivered by the ftp server. Example with a command line ftp client: $ runsocks ftp ftp.hu-berlin.de Connected to vinus.rz.hu-berlin.de. 220-=========================================================================== 220- Welcome to the Humboldt-University of Berlin 220- ftp.hu-berlin.de 220-=========================================================================== 220- 220 ftp.hu-berlin.de FTP server ready. Name (ftp.hu-berlin.de:ast): ftp 331 Guest login ok, send your complete e-mail address as password. Password: 230- 230-All logins and traffic are logged and analysed, if you 230-do not accept this policy, do not log in! 230- 230-hello user at p5084739E.dip.t-dialin.net 230-local time is Fri Jul 12 17:52:31 2002 230-session number 95 in this class 230-current session limit 120 230- 230-contact: [EMAIL PROTECTED] 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> quote SIZE /pub/www/opera/linux/602/final/en/qt_shared/opera-6.02-20020701.2-shared-qt.i386.tar.bz2 213 2824953 ftp> bin 200 Type set to I. ftp> quote SIZE /pub/www/opera/linux/602/final/en/qt_shared/opera-6.02-20020701.2-shared-qt.i386.tar.bz2 213 2814231 ftp> bye 221-You have transferred 0 bytes in 0 files. 221-Total traffic for this session was 1057 bytes in 0 transfers. 221-Thank you for using the FTP service on ftp.hu-berlin.de. 221 Goodbye. $ Thus mod_proxy must set the transfer type prior to issuing of the SIZE command to assert, that the SIZE command returns the proper object size. The following one line patch asserts this: --- proxy_ftp.c.orig Fri Jul 12 18:19:04 2002 +++ proxy_ftp.c Fri Jul 12 18:22:50 2002 @@ -1072,6 +1072,7 @@ get_dirlisting = 1; } else { + ftp_set_TYPE(r, ctrl, xfer_type); ap_bvputs(ctrl, "SIZE ", path, CRLF, NULL); ap_bflush(ctrl); ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: SIZE %s", path); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
