1
- All the quote options (CURLOPT_QUOTE, CURLOPT_POSTQUOTE and
2
CURLOPT_PREQUOTE) now accept a preceeding asterisk before the command to
3
send when using FTP, as a sign that libcurl shall simply ignore the response
4
from the server instead of treating it as an error. Not treating a 400+ FTP
5
response code as an error means that failed commands will not abort the
6
chain of commands, nor will they cause the connection to get disconnected.
10
- Added CURLOPT_SSH_KNOWNHOSTS, CURLOPT_SSH_KEYFUNCTION, CURLOPT_SSH_KEYDATA.
11
They introduce known_host support for SSH keys to libcurl. See docs for
12
details. Note that this feature depends on a new enough libssh2 version, to
13
be supported in libssh2 1.2 and later (or current git repo at this time).
17
- David Kierznowski notified us about a security flaw
18
(http://curl.haxx.se/docs/adv_20090303.html also known as CVE-2009-0037) in
19
which previous libcurl versions (by design) can be tricked to access an
20
arbitrary local/different file instead of a remote one when
21
CURLOPT_FOLLOWLOCATION is enabled. This flaw is now fixed in this release
22
together this the addition of two new setopt options for controlling this
25
o CURLOPT_REDIR_PROTOCOLS controls what protocols libcurl is allowed to
26
follow to when CURLOPT_FOLLOWLOCATION is enabled. By default, this option
27
excludes the FILE and SCP protocols and thus you nee to explicitly allow
28
them in your app if you really want that behavior.
30
o CURLOPT_PROTOCOLS controls what protocol(s) libcurl is allowed to fetch
31
using the primary URL option. This is useful if you want to allow a user or
32
other outsiders control what URL to pass to libcurl and yet not allow all
33
protocols libcurl may have been built to support.
37
- After a bug reported by James Cheng I've made curl_easy_getinfo() for
38
CURLINFO_CONTENT_LENGTH_DOWNLOAD and CURLINFO_CONTENT_LENGTH_UPLOAD return
39
-1 if the sizes aren't know. Previously these returned 0, make it impossible
40
to detect the difference between actually zero and unknown.
44
- FTP downloads (i.e.: RETR) ending with code 550 now return error
45
CURLE_REMOTE_FILE_NOT_FOUND instead of CURLE_FTP_COULDNT_RETR_FILE.
49
- CURLOPT_FTP_CREATE_MISSING_DIRS can now be set to 2 in addition to 1 for
50
plain FTP connections, and it will then allow MKD to fail once and retry the
51
CWD afterwards. This is especially useful if you're doing many simultanoes
52
connections against the same server and they all have this option enabled,
53
as then CWD may first fail but then another connection does MKD before this
54
connection and thus MKD fails but trying CWD works! The numbers can
55
(should?) now be set with the convenience enums now called
56
CURLFTP_CREATE_DIR and CURLFTP_CREATE_DIR_RETRY.
58
Tests has proven that if you're making an application that uploads a set of
59
files to an ftp server, you will get a noticable gain in speed if you're
60
using multiple connections and this option will be then be very useful.
64
- CURLINFO_CONDITION_UNMET was added to allow an application to get to know if
65
the condition in the previous request was unmet. This is typically a time
66
condition set with CURLOPT_TIMECONDITION and was previously not possible to
67
reliably figure out. From bug report #2565128
68
(http://curl.haxx.se/bug/view.cgi?id=2565128) filed by Jocelyn Jaubert.
72
- Markus Moeller introduced tw onew options to libcurl:
73
CURLOPT_SOCKS5_GSSAPI_SERVICE and CURLOPT_SOCKS5_GSSAPI_NEC to allow libcurl
74
to do GSS-style authentication with SOCKS5 proxies. The curl tool got the
75
options called --socks5-gssapi-service and --socks5-gssapi-nec to enable
80
- Chad Monroe provided the new CURLOPT_TFTP_BLKSIZE option that allows an app
81
to set desired block size to use for TFTP transfers instead of the default
86
- Internet Explorer had a broken HTTP digest authentication before v7 and
87
there are servers "out there" that relies on the client doing this broken
88
Digest authentication. Apache even comes with an option to work with such
91
The difference is only for URLs that contain a query-part (a '?'-letter and
92
text to the right of it).
94
libcurl now supports this quirk, and you enable it by setting the
95
CURLAUTH_DIGEST_IE bit in the bitmask you pass to the CURLOPT_HTTPAUTH or
96
CURLOPT_PROXYAUTH options. They are thus individually controlled to server
101
- Igor Novoseltsev added CURLOPT_PROXYUSER and CURLOPT_PROXYPASSWORD that then
102
make CURLOPT_PROXYUSERPWD sort of deprecated. The primary motive for adding
103
these new options is that they have no problems with the colon separator
104
that the CURLOPT_PROXYUSERPWD option does.
108
- Igor Novoseltsev brought a patch that introduced two new options to
109
curl_easy_setopt: CURLOPT_USERNAME and CURLOPT_PASSWORD that sort of
110
deprecates the good old CURLOPT_USERPWD since they allow applications to set
111
the user name and password independently and perhaps more importantly allow
112
both to contain colon(s) which CURLOPT_USERPWD doesn't fully support.
116
- The libcurl FTP code now returns CURLE_REMOTE_FILE_NOT_FOUND error when SIZE
117
gets a 550 response back for the cases where a download (or NOBODY) is
118
wanted. It still allows a 550 as response if the SIZE is used as part of an
119
upload process (like if resuming an upload is requested and the file isn't
120
there before the upload). I also modified the FTP test server and a few test
121
cases accordingly to match this modified behavior.
125
- Martin Drasar provided the CURLOPT_POSTREDIR patch. It renames
126
CURLOPT_POST301 (but adds a define for backwards compatibility for you who
127
don't define CURL_NO_OLDIES). This option allows you to now also change the
128
libcurl behavior for a HTTP response 302 after a POST to not use GET in the
129
subsequent request (when CURLOPT_FOLLOWLOCATION is enabled). I edited the
130
patch somewhat before commit. The curl tool got a matching --post302
131
option. Test case 1076 was added to verify this.
135
- Introducing CURLOPT_CERTINFO and the corresponding CURLINFO_CERTINFO. By
136
enabling this feature with CURLOPT_CERTINFO for a request using SSL (HTTPS
137
or FTPS), libcurl will gather lots of server certificate info and that info
138
can then get extracted by a client after the request has completed with
139
curl_easy_getinfo()'s CURLINFO_CERTINFO option. Linus Nielsen Feltzing
140
helped me test and smoothen out this feature.
142
Unfortunately, this feature currently only works with libcurl built to use
145
This feature was sponsored by networking4all.com - thanks!