- From: Renate Bahnemann <renate@micromuse.com>
- Date: Mon, 11 Aug 2003 12:08:43 +0100
- To: www-lib@w3.org
- Message-ID: <3F37793B.7D115187@micromuse.com>
Hi I am new to libwww but have managed to integrate libwww into our application to retrieve small ASCII files transparently from either an ftp or webserver. However, I've hit a snag and would like to propose a small patch that gets around the problem. Problem occurs for the following: ftp://<host>:<port>/<top-dir>/<invalid-dir>/<filename> returns an empty directory listing, I expected "404 Not Found" error. By comparison the following scenario's produce: ftp://<host>:<port>/<top-dir>/<valid-dir> returns "404 Not Found" ftp://<host>:<port>/<top-dir>/<valid-dir>/ returns directory listing ftp://<host>:<port>/<top-dir>/<invalid-dir> return "404 Not Found" I am wondering whether the current behaviour of the library conforms to paragraph 3.2.2 of RFC 1738. Here is a portion of the trace of the communication between the client and the server: IN is the client OUT is the server .... OUT 230 Guest login ok, access restrictions apply. IN TYPE I OUT 200 Type set to I. IN PORT 192,168,35,47,153,217 OUT 200 PORT command successful. IN RETR /pub/nonsuch/anyfile OUT 550 /pub/nonsuch/anyfile: No such file or directory. IN CWD / OUT 250 CWD command successful. IN CWD pub OUT 250 CWD command successful. IN CWD nonsuch OUT 550 nonsuch: No such file or directory. IN SYST OUT 215 UNIX Type: L8 Version: SUNOS IN LIST anyfile OUT 150 Binary data connection for /bin/ls (192.168.35.47,39385) (0 bytes). OUT 226 Binary Transfer complete. Stepping through the code I found the code that causes this to be in HTFTP.c(v1.109): 1568: else if (!FTP_DIR(data) && !data->stream_error) { 1569: FTPListType(data, ctrl->server); If I delete the above lines, I get the results that I expect and am wondering whether the changes that were applied to CVS versions 1.95 and 1.104 have not made this code redundant. I am attaching a patch that shows my changes. Patch tests OK with: patch HTFTP.c HTFTP.patch (My platform is Solaris 5.7. Also the application defaults to FTP_DEFAULT_TRANSFER_MODE (i.e. 'I')) Is my 'fix' valid or am I misunderstanding something and making a mistake in my application? Regards Renate
*** HTFTP.c.orig Fri Aug 8 19:35:58 2003 --- HTFTP.c Fri Aug 8 19:29:57 2003 *************** *** 1563,1575 **** ctrl->state = FTP_SUCCESS; else if (status == HT_OK) ctrl->state = FTP_NEED_DCON; ! else if (HTRequest_method(request) == METHOD_PUT) ctrl->state = FTP_ERROR; - else if (!FTP_DIR(data) && !data->stream_error) { - FTPListType(data, ctrl->server); - ctrl->state = FTP_NEED_SERVER; /* Try a dir instead? */ - } else - ctrl->state = FTP_ERROR; break; case FTP_NEED_SERVER: --- 1563,1570 ---- ctrl->state = FTP_SUCCESS; else if (status == HT_OK) ctrl->state = FTP_NEED_DCON; ! else ctrl->state = FTP_ERROR; break; case FTP_NEED_SERVER:
Received on Monday, 11 August 2003 07:10:21 UTC