Daniel (17 October)
+- Dominick Meglio implemented CURLOPT_MAXFILESIZE and --max-filesize.
+
- Made libcurl show verbose info about what auth type and user name that is
being sent in its HTTP request-headers.
This release includes the following changes:
+ o CURLOPT_MAXFILESIZE was added, and --max-filesize.
o CURLOPT_PASSWDFUNCTION and CURLOPT_PASSWDDATA are no longer supported.
o IPv6 is now supported on Windows builds too
o CURLOPT_IPRESOLVE lets you select pure IPv6 or IPv4 resolved addresses
>4GB all over. Bug reports (and source reviews) show that it doesn't
currently work.
- * CURLOPT_MAXFILESIZE. Prevent downloads that are larger than the specified
- size. CURLE_FILESIZE_EXCEEDED would then be returned. Gautam Mani
- requested. That is, the download should not even begin but be aborted
- immediately.
-
LIBCURL - multi interface
* Add curl_multi_timeout() to make libcurl's ares-functionality better.
.\" nroff -man curl.1
.\" Written by Daniel Stenberg
.\"
-.TH curl 1 "23 Sep 2003" "Curl 7.10.8" "Curl Manual"
+.TH curl 1 "17 Oct 2003" "Curl 7.10.8" "Curl Manual"
.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
authentication).
If this option is used twice, the second will again disable location following.
+.IP "--max-filesize <bytes>"
+Specify the maximum size (in bytes) of a file to download. If the file
+requested is larger than this value, the transfer will not start and curl will
+return with exit code 63.
+
+NOTE: The file size is not always known prior to download, and for such files
+this option has no effect even if the file transfer ends up being larger than
+this given limit. This concerns both FTP and HTTP transfers.
.IP "-m/--max-time <seconds>"
Maximum time in seconds that you allow the whole operation to take. This is
useful for preventing your batch jobs from hanging for hours due to slow
Problem with the CA cert (path? permission?)
.IP 61
Unrecognized transfer encoding
+.IP 62
+Invalid LDAP URL
+.IP 63
+Maximum file size exceeded
.IP XX
There will appear more error codes here in future releases. The existing ones
are meant to never change.
.B CURLOPT_UPLOAD
A non-zero parameter tells the library to prepare for an upload. The
CURLOPT_READDATA and CURLOPT_INFILESIZE are also interesting for uploads.
+.TP
+.B CURLOPT_MAXFILESIZE
+Pass a long as parameter. This allows you to specify the maximum size (in
+bytes) of a file to download. If the file requested is larger than this value,
+the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.
+
+NOTE: The file size is not always known prior to download, and for such files
+this option has no effect even if the file transfer ends up being larger than
+this given limit. This concerns both FTP and HTTP transfers.
.PP
.SH CONNECTION OPTIONS
.TP 0.4i
CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */
CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */
CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */
+ CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */
CURL_LAST /* never use! */
} CURLcode;
affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
CINIT(IPRESOLVE, LONG, 113),
+ /* Set this option to limit the size of a file that will be downloaded from
+ an HTTP or FTP server. */
+ CINIT(MAXFILESIZE, LONG, 114),
+
CURLOPT_LASTENTRY /* the last unused */
} CURLoption;
downloads and when talking to servers that don't give away the size
in the RETR response line. */
result = ftp_getsize(conn, ftp->file, &foundsize);
- if(CURLE_OK == result)
+ if(CURLE_OK == result) {
+ if (data->set.max_filesize && foundsize > data->set.max_filesize) {
+ failf(data, "Maximum file size exceeded");
+ return CURLE_FILESIZE_EXCEEDED;
+ }
downloadsize = foundsize;
+ }
if(conn->resume_from) {
/* check for Content-Length: header lines to get size */
if (checkprefix("Content-Length:", k->p) &&
sscanf (k->p+15, " %ld", &k->contentlength)) {
+ if (data->set.max_filesize && k->contentlength >
+ data->set.max_filesize) {
+ failf(data, "Maximum file size exceeded");
+ return CURLE_FILESIZE_EXCEEDED;
+ }
conn->size = k->contentlength;
Curl_pgrsSetDownloadSize(data, k->contentlength);
}
data->set.http200aliases = va_arg(param, struct curl_slist *);
break;
+ case CURLOPT_MAXFILESIZE:
+ /*
+ * Set the maximum size of a file to download.
+ */
+ data->set.max_filesize = va_arg(param, long);
+ break;
+
default:
/* unknown tag and its companion, just ignore: */
return CURLE_FAILED_INIT; /* correct this */
struct curl_slist *http200aliases; /* linked list of aliases for http200 */
int ip_version;
+
+ long max_filesize; /* Maximum file size to download */
/* Here follows boolean settings that define how to behave during
this session. They are STATIC, set by libcurl users or at least initially
" following locations, even when hostname changed",
" -m/--max-time <seconds> Maximum time allowed for the transfer",
" --max-redirs <num> Set maximum number of redirections allowed (H)",
+ " --max-filesize <bytes> Set the maximum file size to download (H/F)",
" -M/--manual Display huge help text",
" -n/--netrc Must read .netrc for user name and password",
" --netrc-optional Use either .netrc or URL; overrides -n",
long timeout;
long connecttimeout;
long maxredirs;
+ long max_filesize;
char *headerfile;
char *ftpport;
char *iface;
{"*v", "stderr", TRUE},
{"*w", "interface", TRUE},
{"*x", "krb4", TRUE},
+ {"*y", "max-filesize", TRUE},
{"0", "http1.0", FALSE},
{"1", "tlsv1", FALSE},
{"2", "sslv2", FALSE},
/* krb4 level string */
GetStr(&config->krb4level, nextarg);
break;
+ case 'y': /* --max-filesize */
+ config->max_filesize = atoi(nextarg);
+ break;
default: /* the URL! */
{
if(config->proxyntlm)
curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
+ /* new in curl 7.10.8 */
+ if (config->max_filesize)
+ curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, config->max_filesize);
+
res = curl_easy_perform(curl);
if((config->progressmode == CURL_PROGRESS_BAR) &&