You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ni...@apache.org on 2007/12/20 22:21:47 UTC
svn commit: r606030 - in /httpd/mod_ftp/trunk: CHANGES-FTP
modules/ftp/ftp_commands.c
Author: nikke
Date: Thu Dec 20 13:21:46 2007
New Revision: 606030
URL: http://svn.apache.org/viewvc?rev=606030&view=rev
Log:
Fix the REST command to accept large file sizes allowing restart of transfers
larger than 2GB on largefile enabled systems.
NOTE: Only tested with httpd 2.2.6.
Modified:
httpd/mod_ftp/trunk/CHANGES-FTP
httpd/mod_ftp/trunk/modules/ftp/ftp_commands.c
Modified: httpd/mod_ftp/trunk/CHANGES-FTP
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/CHANGES-FTP?rev=606030&r1=606029&r2=606030&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/CHANGES-FTP (original)
+++ httpd/mod_ftp/trunk/CHANGES-FTP Thu Dec 20 13:21:46 2007
@@ -1,5 +1,9 @@
Changes in 0.9.0: [post submission, prior to first release]
+ *) Fix the REST command to accept large file sizes allowing
+ restart of transfers larger than 2GB on largefile enabled systems.
+ [Niklas Edmundsson]
+
*) configure.apxs; using Makefile.apxs/modules.mk.apxs, now rely
entirely on apxs plus the httpd/build schema for much simplified
out-of-tree builds, with fewer make-related side effects.
Modified: httpd/mod_ftp/trunk/modules/ftp/ftp_commands.c
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/modules/ftp/ftp_commands.c?rev=606030&r1=606029&r2=606030&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/modules/ftp/ftp_commands.c (original)
+++ httpd/mod_ftp/trunk/modules/ftp/ftp_commands.c Thu Dec 20 13:21:46 2007
@@ -2022,33 +2022,18 @@
static int ftp_cmd_rest(request_rec *r, const char *arg)
{
ftp_connection *fc = ftp_get_module_config(r->request_config);
- conn_rec *c = r->connection;
char *endp;
+ apr_status_t rv;
- /* XXX: shortcoming, cannot restart > ~2GB. Must be solved in
- * APR, or we need to use
- * int len;
- * res = sscanf(arg,"%"APR_OFF_T_FMT"%n", &fc->restart_point, &len);
- * end = arg + len;
- * and test that res == 2. Dunno how portable or safe this gross
- * hack would be in real life.
- */
- fc->restart_point = strtol(arg, &endp, 10);
- if (((*arg == '\0') || (*endp != '\0')) || fc->restart_point < 0) {
- fc->response_notes = apr_pstrdup(r->pool, "REST requires a an "
- "integer value greater than zero");
+ rv = apr_strtoff(&(fc->restart_point), arg, &endp, 10);
+ if (rv != APR_SUCCESS || ((*arg == '\0') || (*endp != '\0')) ||
+ fc->restart_point < 0)
+ {
+ fc->response_notes = apr_pstrdup(r->pool, "REST requires a "
+ "non-negative integer value");
return FTP_REPLY_SYNTAX_ERROR;
}
- /* Check overflow condition */
- if (fc->restart_point == LONG_MAX) {
- ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0,
- c->base_server,
- "Client attempted an invalid restart point");
- /* XXX: possible overflow, continue gracefully? Many other FTP
- * client do not check overflow conditions in the REST command.
- */
- }
fc->response_notes = apr_psprintf(r->pool, "Restarting at %" APR_OFF_T_FMT
". Send STORE or RETRIEVE to initiate "
"transfer.", fc->restart_point);