blob: 6ff59e0604ee95769832df913d11fb96ec79c0b3 [file] [log] [blame]
_ _ ____ _
___| | | | _ \| |
/ __| | | | |_) | |
| (__| |_| | _ <| |___
\___|\___/|_| \_\_____|
Daniel Stenberg (28 May 2008)
- Emil Romanus found a problem and helped me repeat it. It occured when using
the curl_multi_socket() API with HTTP pipelining enabled and could lead to
the pipeline basically stalling for a very long period of time until it took
off again.
- Jeff Weber reported memory leaks with aborted SCP and SFTP transfers and
provided excellent repeat recipes. I fixed the cases I managed to reproduce
but Jeff still got some (SCP) problems even after these fixes:
Daniel Stenberg (26 May 2008)
- Bug report #1973352 ( identified
how the HTTP redirect following code didn't properly follow to a new URL if
the new url was but a query string such as "Location: ?moo=foo". Test case
1031 was added to verify this fix.
- Andreas Faerber and Scott McCreary made (lib)curl build for the Haiku OS.
Yang Tse (26 May 2008)
- David Rosenstrauch reported that header files spnegohelp.h and
openssl/objects.h were needed to compile SPNEGO support.
Daniel Fandrich (22 May 2008)
- Made sure to pass longs in to curl_easy_setopt where necessary in the
example programs and libtest code.
Daniel Stenberg (19 May 2008)
- When trying to repeat a multi interface problem I fell over a few multi
interface problems:
o with pipelining disabled, the state should never be set to WAITDO but
rather go straight to DO
o we had multiple states for which the internal function returned no socket
at all to wait for, with the effect that libcurl calls the socket callback
(when curl_multi_socket() is used) with REMOVE prematurely (as it would be
added again within very shortly)
o when in DO and DOING states, the HTTP and HTTPS protocol handler functions
didn't return that the socket should be waited for writing, but instead it
was treated as if no socket was needing monitoring so again REMOVE was
called prematurely.
Daniel Stenberg (13 May 2008)
- Added test case 556 that uses curl_easy_send() and curl_easy_recv()
Daniel Stenberg (9 May 2008)
- Introducing curl_easy_send() and curl_easy_recv(). They can be used to send
and receive data over a connection previously setup with curl_easy_perform()
and its CURLOPT_CONNECT_ONLY option. The sendrecv.c example was added to
show how they can be used.
Yang Tse (9 May 2008)
- Internal time differences now use monotonic time source if available.
This also implies the removal of the winmm.lib dependency for WIN32.
Daniel Stenberg (9 May 2008)
- Stefan Krause reported a busy-looping case when using the multi interface
and doing CONNECT to a proxy. The app would then busy-loop until the proxy
completed its response.
Michal Marek (9 May 2008)
- Make Curl_write and it's callees accept a const pointer, in preparation
of tetetest's patch for curl_easy_send()
Daniel Stenberg (7 May 2008)
- Liam Healy filed the debian bug report #480044
( identifying a
segfault when using krb5 ftp, but the krb4 code had the same problem.
Yang Tse (7 May 2008)
- Christopher Palow provided the patch (edited by me) that introduces the
use of microsecond resolution keys for internal splay trees.
Daniel Stenberg (4 May 2008)
- Yuriy Sosov pointed out a configure fix for detecting c-ares when that is
built debug-enabled.
Daniel Stenberg (3 May 2008)
- Ben Van Hof filed bug report #1945240: "libcurl sometimes sends body twice
when using CURL_AUTH_ANY" (
The problem was that when libcurl rewound a stream meant for upload when it
would prepare for a second request, it could accidentally continue the
sending of the rewound data on the first request instead of on the second.
Ben also provided test case 1030 that verifies this fix.
Daniel Stenberg (3 May 2008)
- Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY
since libcurl used getprotobyname() and that isn't thread-safe. We now
switched to use IPPROTO_TCP unconditionally, but perhaps the proper fix is
to detect the thread-safe version of the function and use that.
Daniel Stenberg (1 May 2008)
- Bart Whiteley provided a patch that made libcurl work properly when an app
uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket
to a http server.
Daniel Stenberg (29 Apr 2008)
- To make it easier for applications that want lots of magic stuff done on
redirections and thus cannot use CURLOPT_FOLLOWLOCATION easily, we now
introduce the new CURLINFO_REDIRECT_URL option that lets applications
extract the URL libcurl would've redirected to if it had been told to. This
then enables the application to continue to that URL as it thinks is
suitable, without having to re-implement the magic of creating the new URL
from the Location: header etc. Test 1029 verifies it.
Yang Tse (29 Apr 2008)
- Improved easy interface resolving timeout handling in c-ares enabled builds
Daniel Fandrich (28 Apr 2008)
- Added test 1028 to test an HTTP redirect to a FTP URL.
Daniel Stenberg (28 Apr 2008)
- Norbert Frese filed bug report #1951588: "Problem with curlftpfs and
libcurl" ( which seems to be an
identical report to what Denis Golovan reported in The FTP code didn't reset the
user/password pointers properly even though there might've been a new
struct/cconnection getting used.
Daniel Stenberg (26 Apr 2008)
- Reverted back to use automake 1.9.6 in the next release (from automake
1.10.1) since it *still* suffers from Solaris-related bugs. Our previous
automake 1.10 problem was reported in bug #1701360
( and this recent problem was
bug #1944825 ( I have not
personally approached the automake team about either one of these but I
figure we need a Solaris 10 guy to do it!
Yang Tse (25 Apr 2008)
- Added 'timeout' and 'delay' attributes support for the test harness
<command> subsection.
Daniel Fandrich (24 Apr 2008)
- Made --stderr able to redirect all stderr messages.
Yang Tse (23 Apr 2008)
- Improve synchronization between test harness script
and test harness servers to minimize risk of false test failures.
Daniel Fandrich (22 Apr 2008)
- Added support for running on Symbian OS.
Daniel Fandrich (18 Apr 2008)
- Added test cases 1026 and 1027 to do some rudimentary tests on the --manual
and --help options.
Michal Marek (14 Apr 2008)
- allow disabling the typechecker by defining CURL_DISABLE_TYPECHECK, as
discussed in
Daniel Stenberg (14 Apr 2008)
- Stefan Krause reported a case where the OpenSSL handshake phase wasn't
properly acknowledging the timeout values, like if you pulled the network
plug in the midst of it.
- Andre Guibert de Bruet fixed a second case of not checking the malloc()
return code in the Negotiate code.
- Sandor Feldi reported bug #1942022
( pointing out a mistake in the
lib/[68] makefiles' release-ssl-dll target.
- Brock Noland reported that curl behaved differently depending on which order
you used -i and -I.
Daniel Stenberg (12 Apr 2008)
- Andre Guibert de Bruet found and fixed a case where malloc() was called but
was not checked for a NULL return, in the Negotiate code.
Daniel Fandrich (9 Apr 2008)
- Added test cases 1024 & 1025 to test a scenario similar to the one reported
by Ben Combee where libcurl would send the wrong cookie to a redirected
server. libcurl was doing the right thing in these test cases.
Michal Marek (7 Apr 2008)
- Fix the MIT / Heimdal check for good:
Define HAVE_GSSMIT if <gssapi/{gssapi.h,gssapi_generic.h,gssapi_krb5.h}> are
available, otherwise define HAVE_GSSHEIMDAL if <gssapi.h> is available.
Only define GSS_C_NT_HOSTBASED_SERVICE to gss_nt_service_name if
GSS_C_NT_HOSTBASED_SERVICE isn't declared by the gssapi headers. This should
avoid breakage in case we wrongly recognize Heimdal as MIT again.
Daniel Stenberg (5 Apr 2008)
- Alexey Simak fixed curl_easy_reset() to reset the max redirect limit properly
- Based on the Debian bug report #474224 that complained about the FTP error
message when libcurl doesn't get a 220 back immediately on connect, I now
changed it to be more specific on what the problem is. Also worth noticing:
while the bug report contains an example where the response is:
421 There are too many connected users, please try again later
we cannot assume that the error message will always be this readable nor
that it fits within a particular boundary etc.
Daniel Fandrich (3 Apr 2008)
- Added test627 to test SFTP with CURLOPT_NOBODY
Daniel Stenberg (3 Apr 2008)
- Setting CURLOPT_NOBODY to FALSE will now switch the HTTP request method to
GET simply because previously when you set CURLOPT_NOBODY to TRUE first and
then FALSE you'd end up in a broken state where a HTTP request would do a
HEAD by still act a lot like for a GET and hang waiting for the content etc.
- Scott Barrett added support for CURLOPT_NOBODY over SFTP
Daniel Fandrich (3 Apr 2008)
- Made sure that curl_global_init is called in all the multithreaded
example programs.
Michal Marek (31 Mar 2008)
- Removed the generated ca-bundle.h file. The verbatim value of $ca and
$capath is known to configure, so it can be defined in config.h instead.
Daniel Stenberg (31 Mar 2008)
- Added CURLFORM_STREAM as a supported option to curl_formadd() to allow an
application to provide data for a multipart with the read callback. Note
that the size needs to be provided with CURLFORM_CONTENTSLENGTH when the
stream option is used. This feature is verified by the new test case
554. This feature was sponsored by Xponaut.
Daniel Fandrich (30 Mar 2008)
- Changed the makefile so the doc/examples/ programs are never built in a
normal build/install (only with the 'make check' target), so that a
build failure in the examples isn't fatal.
Version 7.18.1 (30 March 2008)
Daniel Stenberg (28 Mar 2008)
- Stephen Collyer pointed out that configure --with-libssh2 without a given
path didn't work properly.
Daniel Stenberg (27 Mar 2008)
- As found out and reported by Dan Petitt, libcurl didn't show progress/call
the progress callback for the first (potentially huge) piece of body data
sent together with the POST request headers in the initial send().
Daniel Stenberg (25 Mar 2008)
- Made setting the CURLOPT_SSL_CTX_FUNCTION option return a failure in case
libcurl wasn't built to use OpenSSL as that is a prerequisite for this
option to function!
Daniel Stenberg (22 Mar 2008)
- Fixed the problem with doing a zero byte SCP transfer, verified with test
case 617 (which was added by Daniel Fandrich 5 Mar 2008).
Daniel Fandrich (20 Mar 2008)
- Fixed a problem where curl-config --protocols could erroneously show LDAPS
support when curl didn't even have regular LDAP support. It looks like
this could happen when the --enable-ldaps configure switch is given but
configure couldn't find the LDAP headers or libraries.
Michal Marek (20 Mar 2008)
- Added --with-ca-path=DIRECTORY configure option to use an openSSL CApath by
default instead of a ca bundle. The configure script will also look for a
ca path if no ca bundle is found and no option given.
- Fixed detection of previously installed curl-ca-bundle.crt
Daniel Fandrich (18 Mar 2008)
- Added test 626 to reproduce an infinite loop when given an invalid
SFTP quote command reported by Vincent Le Normand, and fixed it.
Michal Marek (18 Mar 2008)
- Added curl_easy_getinfo typechecker.
- Added macros for curl_share_setopt and curl_multi_setopt to check at least
the correct number of arguments.
Daniel Fandrich (13 Mar 2008)
- Added tests 622-625 to test SFTP/SCP uploads. Test 625 was an attempt to
reproduce the --ftp-create-dirs problem reported by Brian Ulm, but that
seems to need a call curl_easy_reset() which this test case doesn't do.
Daniel Stenberg (13 Mar 2008)
- Brian Ulm figured out that if you did an SFTP upload with
CURLOPT_FTP_CREATE_MISSING_DIRS to create a directory, and then re-used the
handle and uploaded another file to another directory that needed to be
created, the second upload would fail. Another case of a state variable that
wasn't properly reset between requests.
- I rewrote the 100-continue code to use a single state variable instead of
the previous two ones. I think it made the logic somewhat clearer.
Daniel Stenberg (11 Mar 2008)
- Dmitry Popov filed bug report #1911069
( that identified a race
condition in the name resolver code when the DNS cache is shared between
multiple easy handles, each running in simultaneous threads that could cause
- Added a macro for curl_easy_setopt() that accepts three arguments and simply
does nothing with them, just to make sure libcurl users always use three
arguments to this function. Due to its use of ... for the third argument, it
is otherwise hard to detect abuse.
Michal Marek (11 Mar 2008)
- Added a type checking macro for curl_easy_setopt(), needs gcc-4.3 and only
works in C mode atm ( , )
Daniel Fandrich (10 Mar 2008)
- Added tests 618-621 to test SFTP/SCP transfers of more than one file
(test 620 tests the just-fixed problem reported by Brian Ulm).
Daniel Stenberg (9 Mar 2008)
- Brian Ulm reported a crash when doing a second SFTP transfer on a re-used
easy handle if curl_easy_reset() was used between them. I fixed it and Brian
verified that it cured his problem.
- Brian Ulm reported that if you first tried to download a non-existing SFTP
file and then fetched an existing one and re-used the handle, libcurl would
still report the second one as non-existing as well! I fixed it and Brian
verified that it cured his problem.
Michal Marek (6 Mar 2008)
- Fix the gssapi configure check to detect newer MIT Kerberos (patch by
Michael Calmer)
Yang Tse (6 Mar 2008)
- Fix regression on Curl_socket_ready() and Curl_poll() so that these will
again fail on select/poll errors different than EINTR.
Daniel Fandrich (5 Mar 2008)
- Fixed the test harness so it will write out zero-length data files.
- Added tests 616 and 617 to see how SFTP and SCP cope with zero-length
files, as questioned by Mike Protts. SFTP does for me but SCP doesn't
so test 617 is disabled for now.
Daniel S (4 Mar 2008)
- Mike Protts brought a patch that makes resumed transfers work with SFTP.
Daniel S (1 Mar 2008)
- Anatoli Tubman found and fixed a crash with Negotiate authentication used on
a re-used connection where both requests used Negotiate.
Guenter Knauf (26 Feb 2008)
- Kaspar Brand provided a patch to support server name indication (RFC 4366).
Daniel S (25 Feb 2008)
- Kaspar Brand made GnuTLS-built libcurl properly acknowledge the option that
forces it to prefer SSLv3.
Daniel S (23 Feb 2008)
- Sam Listopad provided a patch in feature-request #1900014 that makes libcurl (built to
use OpenSSL) support a full chain of certificates in a given PKCS12
Daniel S (22 Feb 2008)
- Georg Lippitsch made the src/Makefile.vc6 makefile use the same memory model
options as the lib/Makefile.vc6 already did.
Daniel S (21 Feb 2008)
- Zmey Petroff found a crash when libcurl accessed a NULL pointer, which
happened if you set the connection cache size to 1 and for example failed to
login to an FTP site. Bug report #1896698
Daniel S (20 Feb 2008)
- Fixed test case 405 to not fail when libcurl is built with GnuTLS
- Based on initial work done by Gautam Kachroo to address a bug, we now keep
better control at the exact state of the connection's SSL status so that we
know exactly when it has completed the SSL negotiation or not so that there
won't be accidental re-uses of connections that are wrongly believed to be
in SSL-completed-negotiate state.
- We no longer support setting the CURLOPT_URL option from inside a callback
such as the CURLOPT_SSL_CTX_FUNCTION one treat that as if it was a Location:
following. The patch that introduced this feature was done for 7.11.0, but
this code and functionality has been broken since about 7.15.4 (March 2006)
with the introduction of non-blocking OpenSSL "connects".
It was a hack to begin with and since it doesn't work and hasn't worked
correctly for a long time and nobody has even noticed, I consider it a very
suitable subject for plain removal. And so it was done.
Guenter Knauf (19 Feb 2008)
- We do no longer support SSLv2 by default since it has known flaws.
Kaspar Brand provided a patch for all supported SSL toolkits.
Daniel Fandrich (19 Feb 2008)
- Added test309 to test HTTP redirect to HTTPS URL
Daniel S (18 Feb 2008)
- We're no longer providing a very old ca-bundle in the curl tarball. You can
get a fresh one downloaded and created with 'make ca-bundle' or you can get
one from here => if you want a fresh
new one extracted from Mozilla's recent list of ca certs.
The configure option --with-ca-bundle now lets you specify what file to use
as default ca bundle for your build. If not specified, the configure script
will check a few known standard places for a global ca cert to use.
Daniel S (17 Feb 2008)
- Jerome Muffat-Meridol helped me fix Curl_done() to close the current
connection by force when it was called before the entire request is
completed, simply because we can't know if the connection really can be
re-used safely at that point.
- Based on the same debugging logic, I've also made Curl_http_done() not
return CURLE_GOT_NOTHING if called "prematurely". This should have no real
effect to anything but the code makes more sense like this.
Daniel S (15 Feb 2008)
- Made the gnutls code path not even try to get the server cert if no peer
verification is requested. Previously it would even return failure if gnutls
failed to get the server cert even though no verification was asked for.
Public server showing the problem:
- Fix my Curl_timeleft() leftover mistake in the gnutls code
- Pooyan McSporran found and fixed a flaw where you first would do a normal
http request and then you'd reuse the handle and replace the Accept: header,
as then libcurl would send two Accept: headers!
Daniel S (11 Feb 2008)
- Yang Tse pointed out a few remaining quirks from my timeout refactoring from
Feb 7 that didn't abort properly on timeouts. These are actually old
problems but now they should be fixed.
Yang Tse (10 Feb 2008)
- Bug report #1888932 ( points out
and provides test program that demonstrates that libcurl might not set error
description message for error CURLE_COULDNT_RESOLVE_HOST for Windows threaded
name resolver builds. Fixed now.
Daniel Fandrich (8 Feb 2007)
- Added key words to all SSL-using tests so they can be skipped if necessary.
Removed a few unnecessary requires SSL statements.
Daniel S (8 Feb 2008)
- Mike Hommey filed and fixed bug report #1889856
( When using the gnutls ssl
layer, cleaning-up and reinitializing curl ends up with https requests
failing with "ASN1 parser: Element was not found" errors. Obviously a
regression added in 7.16.3.
Yang Tse (8 Feb 2008)
- Improved test harness SCP/SFTP start up server verification, doing a real
connection to the sftp server, authenticating and running a simple sftp
pwd command using the test harness generated configuration and key files.
Daniel S (8 Feb 2008)
- Günter Knauf added lib/ which gets the Firefox ca bundle and
creates a suitable ca-bundle.crt file in PEM format for use with curl. The
recommended way to run it is to use 'make ca-bundle' in the build tree root.
Daniel Fandrich (7 Feb 2007)
- Added tests 1022 and 1023 to validate output of curl-config --version and
Daniel S (7 Feb 2008)
- Refactored a lot of timeout code into a few functions in an attempt to make
them all use the same (hopefully correct) logic to make it less error-prone
and easier to introduce library-wide where it should be used.
Yang Tse (6 Feb 2008)
- Fix an issue in strdup replacement function when dealing with absolutely
huge strings. Only systems without a standard strdup would be affected.
Daniel S (3 Feb 2008)
- Dmitry Kurochkin cleaned up the pipelining code and removed the need for and
use of the "is_in_pipeline" struct field.
- I wrote up and added the threaded-ssl.c example source code that shows how
to do multi-threaded downloads of HTTPS files with a libcurl that is built
with OpenSSL. It uses pthreads for the threading.
Daniel S (31 Jan 2008)
- Niklas Angebrand made the cookie support in libcurl properly deal with the
"HttpOnly" feature introduced by Microsoft and apparently also supported by
Firefox: . HttpOnly
is now supported when received from servers in HTTP headers, when written to
cookie jars and when read from existing cookie jars.
I modified test case 31 and 46 to also do some basic HttpOnly testing.
- Dmitry Kurochkin moved several struct fields from the connectdata struct to
the SingleRequest one to make pipelining better. It is a bit tricky to keep
them in the right place, to keep things related to the actual request or to
the actual connection in the right place.
Daniel S (29 Jan 2008)
- Dmitry Kurochkin fixed Curl_done() for pipelining, as it could previously
- Michal Marek fixed minor mistake in test case 553 that prevented it from
working on other IP-addresses or port numbers.
Version 7.18.0 (28 January 2008)
Daniel S (27 Jan 2008)
- Dmitry Kurochkin: In "real world" testing I found more bugs in
pipelining. Broken connection is not restored and we get into infinite
loop. It happens because of wrong is_in_pipeline values.
Daniel S (26 Jan 2008)
- Kevin Reed filed bug report #1879375
( which describes how libcurl
got lost in this scenario: proxy tunnel (or HTTPS over proxy), ask to do any
proxy authentication and the proxy replies with an auth (like NTLM) and then
closes the connection after that initial informational response.
libcurl would not properly re-initialize the connection to the proxy and
continue the auth negotiation like supposed. It does now however, as it will
now detect if one or more authentication methods were available and asked
for, and will thus retry the connection and continue from there.
- I made the progress callback get called properly during proxy CONNECT.
Daniel S (23 Jan 2008)
- Igor Franchuk pointed out that CURLOPT_COOKIELIST set to "ALL" leaked
memory, and so did "SESS". Fixed now.
Yang Tse (22 Jan 2008)
- Check poll.h at configuration time, and use it when sys/poll.h unavailable
Daniel S (22 Jan 2008)
- Dmitry Kurochkin removed the cancelled state for pipelining, as we agreed
that it is bad anyway. Starting now, removing a handle that is in used in a
pipeline will break the pipeline - it'll be set back up again but still...
Yang Tse (21 Jan 2008)
- Disable ldap support for cygwin builds, since it breaks whole build process.
Fixing it will affect other platforms, so it is postponed for another release.
Daniel S (18 Jan 2008)
- Lau Hang Kin found and fixed a problem with the multi interface when doing
CONNECT over a proxy. curl_multi_fdset() didn't report back the socket
properly during that state, due to a missing case in the switch in the
multi_getsock() function.
Yang Tse (17 Jan 2008)
- Don't abort tests 518 and 537 when unable to raise the open-file soft limit.
Daniel S (16 Jan 2008)
- Nathan Coulter's patch that makes respect the PATH when figuring
out what valgrind to run.
Yang Tse (16 Jan 2008)
- Improved handling of out of memory in the command line tool that afected
data url encoded HTTP POSTs when reading it from a file.
Daniel S (16 Jan 2008)
- Dmitry Kurochkin worked a lot on improving the HTTP Pipelining support that
previously had a number of flaws, perhaps most notably when an application
fired up N transfers at once as then they wouldn't pipeline at all that
nicely as anyone would think... Test case 530 was also updated to take the
improved functionality into account.
- Calls to Curl_failf() are not supposed to provide a trailing newline as the
function itself adds that. Fixed on 50 or something strings!
Daniel S (15 Jan 2008)
- I made the torture test on test 530 go through. This was actually due to
silly code left from when we switched to let the multi handle "hold" the dns
cache when using the multi interface... Of course this only triggered when a
certain function call returned error at the correct moment.
Daniel S (14 Jan 2008)
- Joe Malicki filed bug report #1871269
( and we could fix his hang-
problem that occurred when doing a large HTTP POST request with the
response-body read from a callback.
Daniel S (12 Jan 2008)
- I re-arranged the curl --help output. All the options are now sorted on
their long option names and all descriptions are one-liners.
- Eric Landes provided the patch (edited by me) that introduces the
--keepalive-time to curl to set the keepalive probe interval. I also took
the opportunity to rename the recently added no-keep-alive option to
no-keepalive to keep a consistent naming and to avoid getting two dashes in
these option names. Eric also provided an update to the man page for the new
Daniel S (11 Jan 2008)
- Daniel Egger made CURLOPT_RANGE work on file:// URLs the very same way it
already worked for FTP:// URLs.
- I made the curl tool switch from using CURLOPT_IOCTLFUNCTION to now use the
spanking new CURLOPT_SEEKFUNCTION simply to take advantage of the improved
performance for the upload resume cases where you want to upload the last
few bytes of a very large file. To implement this decently, I had to switch
the client code for uploading from fopen()/fread() to plain open()/read() so
that we can use lseek() to do >32bit seeks (as fseek() doesn't allow that)
on systems that offer support for that.
Daniel S (10 Jan 2008)
- Michal Marek made curl-config --libs not include /usr/lib64 in the output
(it already before skipped /usr/lib). /usr/lib64 is the default library
directory on many 64bit systems and it's unlikely that anyone would use the
path privately on systems where it's not.
- Georg Lippitsch brought CURLOPT_SEEKFUNCTION and CURLOPT_SEEKDATA to allow
libcurl to seek in a given input stream. This is particularly important when
doing upload resumes when there's already a huge part of the file present
remotely. Before, and still if this callback isn't used, libcurl will read
and through away the entire file up to the point to where the resuming
begins (which of course can be a slow opereration depending on file size,
I/O bandwidth and more). This new function will also be preferred to get
used instead of the CURLOPT_IOCTLFUNCTION for seeking back in a stream when
doing multi-stage HTTP auth with POST/PUT.
- Nikitinskit Dmitriy filed bug report #1868255
( with a patch. It identifies
and fixes a problem with parsing WWW-Authenticate: headers with additional
spaces in the line that the parser wasn't written to deal with.
Daniel S (8 Jan 2008)
- Introducing curl_easy_pause() and new magic return codes for both the read
and the write callbacks that now can make a connection's reading and/or
writing get paused.
Daniel S (6 Jan 2008)
- Jeff Johnson filed bug report #1863171
( where he pointed out that
libcurl's date parser didn't accept a +1300 time zone which actually is used
fairly often (like New Zealand's Dailight Savings Time), so I modified the
parser to now accept up to and including -1400 to +1400.
Daniel S (5 Jan 2008)
- Based on further discussion on curl-library, I reverted yesterday's SOCKS5
code to instead introduce support for a new proxy type called
CURLPROXY_SOCKS5_HOSTNAME that is used to send the host name to the proxy
instead of IP address and there's thus no longer any need for a new
curl_easy_setopt() option.
The default SOCKS5 proxy is again back to sending the IP address to the
proxy. The new curl command line option for enabling sending host name to a
SOCKS5 proxy is now --socks5-hostname.
Daniel S (4 Jan 2008)
- Based on Maxim Perenesenko's patch, we now do SOCKS5 operations and let the
proxy do the host name resolving and only if --socks5ip (or
CURLOPT_SOCKS5_RESOLVE_LOCAL) is used we resolve the host name locally and
pass on the IP address only to the proxy.
Yang Tse (3 Jan 2008)
- Modified test harness to allow SCP, SFTP and SOCKS4 tests to run with
OpenSSH 2.9.9, SunSSH 1.0 or later versions. SOCKS5 tests need OpenSSH
3.7, SunSSH 1.0 or later.
Daniel S (2 Jan 2008)
- I fixed two cases of missing return code checks when handling chunked
decoding where a write error (or abort return from a callback) didn't stop
libcurl's processing.
- I removed the socklen_t use from the public curl/curl.h header and instead
made it an unsigned int. The type was only used in the curl_sockaddr struct
definition (only used by the curl_opensocket_callback). On all platforms I
could find information about, socklen_t is 32 unsigned bits large so I don't
think this will break the API or ABI. The main reason for this change is of
course for all the platforms that don't have a socklen_t definition in their
headers to build fine again. Providing our own configure magic and custom
definition of socklen_t on those systems proved to work but was a lot of
cruft, code and extra magic needed - when this very small change of type
seems harmless and still solves the missing socklen_t problem.
- Richard Atterer brought a patch that added support for SOCKS4a proxies,
which is an inofficial PROXY4 variant that sends the hostname to the proxy
instead of the resolved address (which is already supported by SOCKS5).
--socks4a is the curl command line option for it and CURLOPT_PROXYTYPE can
now be set to CURLPROXY_SOCKS4A as well.
Daniel S (1 Jan 2008)
- Mohun Biswas pointed out that --libcurl generated a source code with an int
function but without a return statement. While fixing that, I also took care
about adding some better comments for the generated code.
Daniel S (27 Dec 2007)
- Dmitry Kurochkin mentioned a flaw
( in detect_proxy() which
failed to set the bits.proxy variable properly when an environment variable
told libcurl to use a http proxy.
Daniel S (26 Dec 2007)
- In an attempt to repeat the problem in bug report #1850730
( I wrote up test case 552. The
test is doing a 70K POST with a read callback and an ioctl callback over a
proxy requiring Digest auth. The test case code is more or less identical to
the test recipe code provided by Spacen Jasset (who submitted the bug
Daniel S (25 Dec 2007)
- Gary Maxwell filed bug report #1856628
( and provided a fix for the
(small) memory leak in the SSL session ID caching code. It happened when a
previous entry in the cache was re-used.
Daniel Fandrich (19 Dec 2007)
- Ensure that nroff doesn't put anything but ASCII characters into the
--manual text.
Yang Tse (18 Dec 2007)
- MSVC 9.0 (VS2008) does not support Windows build targets prior to WinXP,
and makes wrong asumptions of build target when it isn't specified. So,
if no build target has been defined we will target WinXP when building
curl/libcurl with MSVC 9.0 (VS2008).
- ( reported and fixed
a file truncation problem on Windows build targets triggered when retrying
a download with curl.
Daniel S (17 Dec 2007)
- Mateusz Loskot pointed out that MSVC 9.0 (VS2008) has the pollfd struct and
defines in winsock2.h somehow differently than previous versions and that
curl 7.17.1 would fail to compile out of the box.
Daniel S (13 Dec 2007)
- David Wright filed bug report #1849764
( with an included fix. He
identified a problem for re-used connections that previously had sent
Expect: 100-continue and in some situations the subsequent POST (that didn't
use Expect:) still had the internal flag set for its use. David's fix (that
makes the setting of the flag in every single request unconditionally) is
fine and is now used!
Daniel S (12 Dec 2007)
- Gilles Blanc made the curl tool enable SO_KEEPALIVE for the connections and
added the --no-keep-alive option that can disable that on demand.
Daniel S (9 Dec 2007)
- Andrew Moise filed bug report #1847501
( and pointed out a memcpy()
that should be memmove() in the convert_lineends() function.
Daniel S (8 Dec 2007)
- Renamed all internal static functions that had Curl_ prefixes to no longer
have them. The Curl_ prefix is exclusively used for library internal global
symbols. Static functions can be named anything, except for using Curl_ or
curl_ prefixes. This is for consistency and for easier maintainance and
- Cleaned up and reformatted the TODO document to look like the FAQ and
CONTRIBUTE, which makes nicer web pages
- Added test cases 549 and 550 that test CURLOPT_PROXY_TRANSFER_MODE.
- Added keywords on a bunch of test cases
- Fixed an OOM problem in the curl code that would lead to fclose on a bad
handle and crash
Daniel S (5 Dec 2007)
- Spacen Jasset reported a problem with doing POST (with data read with a
callback) over a proxy when NTLM is used as auth with the proxy. The bug
also concerned Digest and was limited to using callback only. Spacen worked
with us to provide a useful patch. I added the test case 547 and 548 to
verify two variations of POST over proxy with NTLM.
Daniel S (3 Dec 2007)
- Ray Pekowski filed bug report #1842029
( in which he identified a
problem with SSL session caching that prevent it from working, and provided
the associated fix!
- Now libcurl (built with OpenSSL) doesn't return error anymore if the remote
SSL-based server doesn't present a certificate when the request is told to
ignore certificate verification anyway.
- Michal Marek introduced CURLOPT_PROXY_TRANSFER_MODE which is used to control
the appending of the "type=" thing on FTP URLs when they are passed to a
HTTP proxy. Some proxies just don't like that appending (which is done
unconditionally in 7.17.1), and some proxies treat binary/ascii transfers
better with the appending done!
Daniel S (29 Nov 2007)
- A bug report on the curl-library list showed a HTTP Digest session going on
with a 700+ letter nonce. Previously libcurl only support 127 letter ones
and now I bumped it to 1023.
- Fixed the resumed FTP upload loop to not require that the read callback
returns a full buffer on each invoke.
Daniel S (25 Nov 2007)
- Added test case 1015 that tests --data-urlencode in multiple ways
- Fixed --data-urlencode for when no @ or = are used
- Extended the user-agent buffer curl uses, since we can hit the 128 byte
border with plenty development libraries used. Like my current set: "curl
7.17.2-CVS (i686-pc-linux-gnu) libcurl/7.17.2-CVS OpenSSL/0.9.8g
zlib/ c-ares/1.5.2-CVS libidn/1.1 libssh2/0.19.0-CVS"
Daniel S (24 Nov 2007)
- Internal rearrangements, so that the previous struct HandleData is no more.
It is now known as SingleRequest and the Curl_transfer_keeper struct within
that was remove entirely. This has the upside that there are less duplicate
struct members that made it hard to see and remember what struct that was
used to store what data. The transfer_keeper thing was once stored on a
per-connection basis and then it made sense to have the duplicate info but
since it was moved to the SessionHandle (in 7.16.0) it just added weirdness.
The SingleRequest struct is used by data that only is valid for this single
Yang Tse (22 Nov 2007)
- Provide a socklen_t definition in curl.h for Win32 API build targets
which don't have one.
Daniel S (22 Nov 2007)
- Alessandro Vesely helped me improve the --data-urlencode's syntax, parser
and documentation.
Daniel S (21 Nov 2007)
- While inspecting the Negotiate code, I noticed how the proxy auth was using
the same state struct as the host auth, so both could never be used at the
same time! I fixed it (without being able to check) to use two separate
structs to allow authentication using Negotiate on host and proxy
Daniel S (20 Nov 2007)
- Emil Romanus pointed out a bug that made an easy handle get the cookie
engine activated when set to use a share (even if the share doesn't share
cookies). I fixed it.
- Fixed a very long-lasting mprintf() bug that occurred when we did "%.*s%s",
since the second %s would then wrongly used the numerical precision argument
instead and crash.
- Introduced --data-urlencode to the curl tool for easier url encoding of the
data sent in a post.
Daniel S (18 Nov 2007)
- Rob Crittenden fixed SSL connections with NSS done with the multi-interface
Daniel S (17 Nov 2007)
- Michal Marek made the test suite remember what test servers that fail to
start so that subsequent tries are simply skipped.
- Andres Garcia made the examples build fine on Windows (mingw + msys) when
the lib was built staticly.
Daniel S (16 Nov 2007)
- Ates Goral identified a problem in http.c:add_buffer_send() when a debug
callback was used, as it could wrongly pass on a bad size for the outgoing
HTTP header. The bad size would be a very large value as it was a wrapped
size_t content. This happened when the whole HTTP request failed to get sent
in one single send.
Daniel S (15 Nov 2007)
- Fixed yet another remaining problem with doing SFTP directory listings on a
re-used persistent connection. Mentioned by Immanuel Gregoire on the mailing
- Michal Marek fixed the test suite to better deal with the case when the HTTP
ipv6 server can't run.
Yang Tse (14 Nov 2007)
- Fix a variable potential wrapping in add_buffer() when using absolutely
huge send buffer sizes.
Daniel S (13 Nov 2007)
- Fixed a remaining problem with doing SFTP directory listings on a re-used
persistent connection. Mentioned by Immanuel Gregoire on the mailing list.
Daniel S (12 Nov 2007)
- Bug report #1830637 (, which was
forwarded from the Gentoo bug tracker by Daniel Black and was originally
submitted by Robin Johnson, pointed out that libcurl would do bad memory
references when it failed and bailed out before the handler thing was
setup. My fix is not done like the provided patch does it, but instead I
make sure that there's never any chance for a NULL pointer in that struct
Yang Tse (10 Nov 2007)
- Vikram Saxena ( pointed out
that the pollfd struct was being multi defined when using VS2008. This is
now fixed in /curl/lib/select.h
Daniel S (8 Nov 2007)
- Bug report #1823487 ( pointed
out that SFTP requests didn't use persistent connections. Neither did SCP
ones. I gave the SSH code a good beating and now both SCP and SFTP should
use persistent connections fine. I also did a bunch of indent changes as
well as a bug fix for the "keyboard interactive" auth.
Dan F (6 Nov 2007)
- Improved telnet support by drastically reducing the number of write
callbacks needed to pass a buffer to the user. Instead one per byte it
is now as little as one per segment.
Yang Tse (6 Nov 2007)
- Bug report #1824894 ( pointed
out a problem in curl.h when building C++ apps with MSVC. To fix it, the
inclusion of header files in curl.h is moved outside of the C++ extern "C"
linkage block.
Daniel S (1 Nov 2007)
- Toby Peterson patched a memory problem in the command line tool that
happened when a user had a home dir as an empty string. curl would then do
free() on a wrong area.
Dan F (1 Nov 2007)
- Fixed curl-config --features to not display libz when it wasn't used
due to a missing header file.
Dan F (31 October 2007)
- Fixed the output of curl-config --protocols which showed SCP and SFTP
always, except when --without-libssh2 was given
- Added test cases 1013 and 1014 to check that curl-config --protocols and
curl-config --features matches the output of curl --version
Dan F (30 October 2007)
- Fixed an OOM problem with file: URLs
- Moved Curl_file_connect into the protocol handler struct
Dan F (29 October 2007)
- Added test case 546 to check that subsequent FTP transfers work after a
failed one using the multi interface
Daniel S (29 October 2007)
- Based on one of those bug reports that are intercepted by a distro's bug
tracker (, I now made
curl-config --features and --protocols show the correct output when built
with NSS.
Version 7.17.1 (29 October 2007)
Dan F (25 October 2007)
- Added the --static-libs option to curl-config
Daniel S (25 October 2007)
- Made libcurl built with NSS possible to ignore the peer verification.
Previously it would fail if the ca bundle wasn't present, even if the code
ignored the verification results.
Patrick M (25 October 2007)
- Fixed test server to allow null bytes in binary posts.
_ Added tests 35, 544 & 545 to check binary data posts, both static (in place)
and dynamic (copied).
Daniel S (25 October 2007)
- Michal Marek fixed the test script to be able to use valgrind even when the
lib is built shared with libtool.
- Fixed a few memory leaks when the same easy handle is re-used to request
URLs with different protocols. FTP and TFTP related leaks. Caught thanks to
Dan F's new test cases.
Dan F (24 October 2007)
- Fixed the test FTP and TFTP servers to support the >10000 test number
- Added test cases 2000 through 2003 which test multiple protocols using the
same easy handle
- Fixed the filecheck: make target to work outside the source tree
Daniel S (24 October 2007)
- Vladimir Lazarenko pointed out that we should do some 'mt' magic when
building with VC8 to get the "manifest" embedded to make fine stand-alone
binaries. The maketgz and the src/Makefile.vc6 files were adjusted
Daniel S (23 October 2007)
- Bug report #1812190 ( points out
that libcurl tried to re-use connections a bit too much when using non-SSL
protocols tunneled over a HTTP proxy.
Daniel S (22 October 2007)
- Michal Marek forwarded the bug report about a HTTP redirect to
FTP that caused memory havoc. His work together with my efforts created two
#1 - FTP::file was moved to struct ftp_conn, because is has to be dealt with
at connection cleanup, at which time the struct HandleData could be
used by another connection.
Also, the unused char *urlpath member is removed from struct FTP.
#2 - provide a Curl_reset_reqproto() function that frees
data->reqdata.proto.* on connection setup if needed (that is if the
SessionHandle was used by a different connection).
A long-term goal is of course to somehow get rid of how the reqdata struct
is used, as it is too error-prone.
- Bug report #1815530 ( points out
that specifying a proxy with a trailing slash didn't work (unless it also
contained a port number).
Patrick M (15 October 2007)
- Fixed the dynamic CURLOPT_POSTFIELDS problem: this option is now static again
and option CURLOPT_COPYPOSTFIELDS has been added to support dynamic mode.
Patrick M (12 October 2007)
- Added per-protocol callback static tables, replacing callback ptr storage
in the connectdata structure by a single handler table ptr.
Dan F (11 October 2007)
- Fixed the -l option of
- Added support for skipping tests based on key words.
Daniel S (9 October 2007)
- Michal Marek removed the no longer existing return codes from the curl.1
man page.
Daniel S (7 October 2007)
- Known bug #47, which confused libcurl if doing NTLM auth over a proxy with
a response that was larger than 16KB is now improved slightly so that now
the restriction at 16KB is for the headers only and it should be a rare
situation where the response-headers exceed 16KB. Thus, I consider #47 fixed
and the header limitation is now known as known bug #48.
Daniel S (5 October 2007)
- Michael Wallner made the CULROPT_COOKIELIST option support a new magic
string: "FLUSH". Using that will cause libcurl to flush its cookies to the
- The new file docs/libcurl/ABI describes how we view ABI breakages, soname
bumps and what the version number's significance to all that is.
Daniel S (4 October 2007)
- I enabled test 1009 and made the --local-port use a wide range to reduce the
risk of failures.
- Kim Rinnewitz reported that --local-port didn't work with TFTP transfers.
This happened because the tftp code always uncondionally did a bind()
without caring if one already had been done and then it failed. I wrote a
test case (1009) to verify this, but it is a bit error-prone since it will
have to pick a fixed local port number and since the tests are run on so
many different hosts in different situations I'll add it in disabled state.
Yang Tse (3 October 2007)
- Fixed issue related with the use of ares_timeout() result.
Daniel S (3 October 2007)
- Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and
CURLOPT_OPENSOCKETDATA to set a callback that allows an application to
replace the socket() call used by libcurl. It basically allows the app to
change address, protocol or whatever of the socket.
- I renamed the CURLE_SSL_PEER_CERTIFICATE error code to
this return code get used by the previous SSH MD5 fingerprint check in case
it fails.
- Based on a patch brought by Johnny Luong, libcurl now offers
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and the curl tool --hostpubmd5. They both
make the SCP or SFTP connection verify the remote host's md5 checksum of the
public key before doing a connect, to reduce the risk of a man-in-the-middle
Daniel S (2 October 2007)
- libcurl now handles chunked-encoded CONNECT responses
Daniel S (1 October 2007)
- Alex Fishman reported a curl_easy_escape() problem that was made the
function do wrong on all input bytes that are >= 0x80 (decimal 128) due to a
signed / unsigned mistake in the code. I fixed it and added test case 543 to
Daniel S (29 September 2007)
- Immanuel Gregoire fixed a problem with persistent transfers over SFTP.
Daniel S (28 September 2007)
- Adapted the c-ares code to the API change c-ares 1.5.0 brings in the
notifier callback(s).
Dan F (26 September 2007)
- Enabled a few more gcc warnings with --enable-debug. Renamed a few
variables to avoid shadowing global declarations.
Daniel S (26 September 2007)
- Philip Langdale provided the new CURLOPT_POST301 option for
curl_easy_setopt() that alters how libcurl functions when following
redirects. It makes libcurl obey the RFC2616 when a 301 response is received
after a non-GET request is made. Default libcurl behaviour is to change
method to GET in the subsequent request (like it does for response code 302
- because that's what many/most browsers do), but with this CURLOPT_POST301
option enabled it will do what the spec says and do the next request using
the same method again. I.e keep POST after 301.
The curl tool got this option as --post301
Test case 1011 and 1012 were added to verify.
- Max Katsev reported that when doing a libcurl FTP request with
CURLOPT_NOBODY enabled but not CURLOPT_HEADER, libcurl wouldn't do TYPE
before it does SIZE which makes it less useful. I walked over the code and
made it do this properly, and added test case 542 to verify it.
Daniel S (24 September 2007)
- Immanuel Gregoire fixed KNOWN_BUGS #44: --ftp-method nocwd did not handle
URLs ending with a slash properly (it should list the contents of that
directory). Test case 351 brought back and also test 1010 was added.
Daniel S (21 September 2007)
- Mark Davies fixed Negotiate authentication over proxy, and also introduced
the --proxy-negotiate command line option to allow a user to explicitly
select it.
Daniel S (19 September 2007)
- Rob Crittenden provided an NSS update with the following highlights:
o It looks for the NSS database first in the environment variable SSL_DIR,
then in /etc/pki/nssdb, then it initializes with no database if neither of
those exist.
o If the NSS PKCS#11 driver is available then PEM files may be
loaded, including the ca-bundle. If it is not available then only
certificates already in the NSS database are used.
o Tries to detect whether a file or nickname is being passed in so the right
thing is done
o Added a bit of code to make the output more like the OpenSSL module,
including displaying the certificate information when connecting in
verbose mode
o Improved handling of certificate errors (expired, untrusted, etc)
The PKCS#11 module is currently only available in Fedora
8/rawhide. Work will be done soon to upstream it. The NSS module will work
with or without it, all that changes is the source of the certificates and
Daniel S (18 September 2007)
- Immanuel Gregoire pointed out that public key SSH auth failed if no
public/private key was specified and there was no HOME environment variable,
and then it didn't continue to try the other auth methods. Now it will
instead try to get the files and id_dsa from the current
directory if none of the two conditions were met.
Dan F (17 September 2007)
- Added hooks to the test suite to make it possible to test a curl running
on a remote host.
- Changed some FTP tests to validate the format of the PORT and EPRT commands
sent by curl, if not the addresses themselves.
Daniel S (15 September 2007)
- Michal Marek made libcurl automatically append ";type=<a|i>" when using HTTP
proxies for FTP urls.
- Günter Knauf fixed LDAP builds in the Windows makefiles and fixed LDAPv3
support on Windows.
Dan F (13 September 2007)
- Added LDAPS, SCP and SFTP to curl-config --protocols. Removed and
fixed some AC_SUBST configure entries.
Version 7.17.0 (13 September 2007)
Daniel S (12 September 2007)
- Bug report #1792649 ( pointed
out a problem with doing an empty upload over FTP on a re-used connection.
I added test case 541 to reproduce it and to verify the fix.
- I noticed while writing test 541 that the FTP code wrongly did a CWD on the
second transfer as it didn't store and remember the "" path from the
previous transfer so it would instead CWD to the entry path as stored. This
worked, but did a superfluous command. Thus, test case 541 now also verifies
this fix.
Dan F (5 September 2007)
- Added test case 1007 to test permission problem when uploading with TFTP
(to validate bug #1790403).
- TFTP now reports the "not defined" TFTP error code 0 as an error,
not success.
Daniel S (5 September 2007)
- Continued the work on a fix for #1779054
( My previous fix from August
24 was not complete (either) but could accidentally "forget" parts of a
server response which led to faulty server response time-out errors.
Dan F (5 September 2007)
- Minix doesn't support getsockopt on UDP sockets or send/recv on TCP
Dan F (31 August 2007)
- Made some of the error strings returned by the *strerror functions more
generic, and more consistent with each other.
- Renamed the curl_ftpssl enum to curl_usessl and its enumerated constants,
creating macros for backward compatibility:
Dan F (30 August 2007)
- Renamed several libcurl error codes and options to make them more general
and allow reuse by multiple protocols. Several unused error codes were
removed. In all cases, macros were added to preserve source (and binary)
compatibility with the old names. These macros are subject to removal at
a future date, but probably not before 2009. An application can be
tested to see if it is using any obsolete code by compiling it with the
CURL_NO_OLDIES macro defined.
The following unused error codes were removed:
The following error codes were renamed:
The following options were renamed:
A few more changes will take place with the next SONAME bump of the
library. These are documented in docs/TODO
- Documented some newer error codes in libcurl-error(3)
- Added more accurate error code returns from SFTP operations. Added test
case 615 to test an SFTP upload failure.
Dan F (28 August 2007)
- Some minor internal type and const changes based on a splint scan.
Daniel S (24 August 2007)
- Bug report #1779054 ( pointed
out that libcurl didn't deal with large responses from server commands, when
the single response was consisting of multiple lines but of a total size of
16KB or more. Dan Fandrich improved the ftp test script and provided test
case 1006 to repeat the problem, and I fixed the code to make sure this new
test case runs fine.
Patrick M (23 August 2007)
- OS/400 port: new files lib/config-os400.h lib/setup-os400.h packages/OS400/*.
See packages/OS400/README.OS400.
Daniel S (23 August 2007)
- Bug report #1779751 ( pointed
out that doing first a file:// upload and then an FTP upload crashed libcurl
or at best caused furious valgrind complaints. Fixed now!
Daniel S (22 August 2007)
- Bug report #1779054 ( pointed
out that libcurl didn't deal with very long (>16K) FTP server response lines
properly. Starting now, libcurl will chop them off (thus the client app will
not get the full line) but survive and deal with them fine otherwise. Test
case 1003 was added to verify this.
Daniel S (20 August 2007)
- Based on a patch by Christian Vogt, the FTP code now sets the upcoming
download transfer size much earlier to be possible to get read with
CURLINFO_CONTENT_LENGTH_DOWNLOAD as soon as possible. This is very much in a
similar spirit to the HTTP size change from August 11 2007.
Daniel S (18 August 2007)
- Robson Braga Araujo filed bug report #1776232
( about libcurl calling
Curl_client_write(), passing on a const string that the caller may not
modify and yet it does (on some platforms).
- Robson Braga Araujo filed bug report #1776235
( about ftp requests with NOBODY
on a directory would do a "SIZE (null)" request. This is now fixed and test
case 1000 was added to verify.
Daniel S (17 August 2007)
- Song Ma provided a patch that cures a problem libcurl has when doing resume
HTTP PUT using Digest authentication. Test case 5320 and 5322 were also
added to verify the functionality.
Daniel S (14 August 2007)
- Andrew Wansink provided an NTLM bugfix: in the case the server sets the flag
NTLMFLAG_NEGOTIATE_UNICODE, we need to filter it off because libcurl doesn't
UNICODE encode the strings it packs into the NTLM authenticate packet.
Daniel S (11 August 2007)
- Allen Pulsifer provided a patch that makes libcurl set the expected download
size earlier when doing HTTP downloads, so that applications and the
progress meter etc know get the info earlier in the flow than before.
- Patrick Monnerat modified the LDAP code and approach in curl. Starting now,
the configure script checks for openldap and friends and we link with those
libs just like we link all other third party libraries, and we no longer
dlopen() those libraries. Our private header file lib/ldap.h was renamed to
lib/curl_ldap.h due to this. I set a tag in CVS (curl-7_17_0-preldapfix)
just before this commit, just in case.
Dan F (8 August 2007)
- Song Ma noted a zlib memory leak in the illegal compressed header
countermeasures code path.
Daniel S (4 August 2007)
- Patrick Monnerat fixed curl_easy_escape() and curlx_strtoll() to work on
non-ASCII systems.
Daniel S (3 August 2007)
- I cut out support for libssh2 versions older than 0.16 to make our code a
lot simpler, and to avoid getting trouble with the LIBSSH2_APINO define
that 1) didn't work properly since it was >32 bits and 2) is removed in
libssh2 0.16...
Daniel S (2 August 2007)
- Scott Cantor filed bug report #1766320
( pointing out that the libcurl
code accessed two curl_easy_setopt() options (CURLOPT_DNS_CACHE_TIMEOUT and
CURLOPT_DNS_USE_GLOBAL_CACHE) as ints even though they're documented to be
passed in as longs, and that makes a difference on 64 bit architectures.
- Dmitriy Sergeyev reported a regression: resumed file:// transfers broke
after 7.16.2. This is much due to the different treatment file:// gets
internally, but now I added test 231 to make it less likely to happen again
without us noticing!
Daniel S (1 August 2007)
- Patrick Monnerat and I modified libcurl so that now it *copies* all strings
passed to it with curl_easy_setopt()! Previously it has always just refered
to the data, forcing the user to keep the data around until libcurl is done
with it. That is now history and libcurl will instead clone the given
strings and keep private copies. This is also part of Patrick Monnerat's
OS/400 port.
Due to this being a somewhat interesting change API wise, I've decided to
bump the version of the upcoming release to 7.17.0. Older applications will
of course not notice this change nor do they have to care, but new
applications can be written to take advantage of this.
- Greg Morse reported a problem with POSTing using ANYAUTH to a server
requiring NTLM, and he provided test code and a test server and we worked
out a bug fix. We failed to count sent body data at times, which then caused
internal confusions when libcurl tried to send the rest of the data in order
to maintain the same connection alive.
Daniel S (31 July 2007)
- Peter O'Gorman pointed out (and fixed) that the non-blocking check in
configure made libcurl use blocking sockets on AIX 4 and 5, while that
wasn't the intention.
Daniel S (29 July 2007)
- Jayesh A Shah filed bug report #1759542
( identifying a rather serious
problem with FTPS: libcurl closed the data connection socket and then later
in the flow it would call the SSL layer to do SSL shutdown which then would
use a socket that had already been closed - so if the application had opened
a new one in the mean time, libcurl could send gibberish that way! I worked
with Greg Zavertnik to properly diagnose and fix this. The fix affects code
for all SSL libraries we support, but it has only been truly verified to
work fine for the OpenSSL version. The others have only been code reviewed.
Daniel S (23 July 2007)
- Implemented the parts of Patrick Monnerat's OS/400 patch that introduces
support for the OS/400 Secure Sockets Layer library.
Dan F (23 July 2007)
- Implemented only the parts of Patrick Monnerat's OS/400 patch that renamed
some few internal identifiers to avoid conflicts, which could be useful on
other platforms.
Daniel S (22 July 2007)
- HTTP Digest bug fix by Chris Flerackers:
- Perfoming a POST request with body
- With authentication (only Digest)
- Re-using a connection
libcurl would send a HTTP POST with an Authorization header but without
body. Our server would return 400 Bad Request in that case (because
authentication passed, but the body was empty).
1) http_digest.c -> Curl_output_digest
- Updates allocptr.userpwd/allocptr.proxyuserpwd *only* if d->nonce is
filled in (and no errors)
- authp->done = TRUE if d->nonce is filled in
2) http.c -> Curl_http
- *Always* uses allocptr.userpwd/allocptr.proxyuserpwd if not NULL
3) http.c -> Curl_http, Curl_http_output_auth
So what happens is that Curl_output_digest cannot yet update the
Authorization header (allocptr.userpwd) which results in authhost->done=0 ->
authhost->multi=1 -> conn->bits.authneg = TRUE. The body is not
added. *However*, allocptr.userpwd is still used when building the request
- Added test case 354 that makes a simple FTP retrieval without password, which
verifies the bug fix in #1757328.
Daniel S (21 July 2007)
- To allow more flexibility in FTP test cases, I've removed the enforced states
from the test server code as they served no real purpose. The test server
is here to serve for the test cases, not to attempt to function as a real
server! While at it, I modified test case 141 to better test and verify
curl -I on a single FTP file.
Daniel S (20 July 2007)
- James Housley fixed the SFTP PWD command to work.
- Ralf S. Engelschall filed bug report #1757328
( and submitted a patch. It
turns out we broke login to FTP servers that don't require (nor understand)
PASS after the USER command. The breakage was done as part of the krb5
commit so a krb-using person needs to verify that the current version now
works or if we need to fix it (in a different way of course).
Dan F (17 July 2007)
- Fixed test cases 613 and 614 by improving the log postprocessor to handle
a new directory listing format that newer libssh2's can provide. This
is probably NOT sufficient to handle all directory listing formats that
server's can provide, and should be revisited.
Daniel S (17 July 2007)
- Daniel Johnson fixed a bug in how libssh2_session_last_error() was used, in
two places.
- Jofell Gallardo posted a libcurl log using FTP that exposed a bug which made
a control connection that was deemed "dead" to yet be re-used in a following
Daniel S (13 July 2007)
- Colin Hogben filed bug report #1750274
( and submitted a patch for the
case where libcurl did a connect attempt to a non-listening port and didn't
provide a human readable error string back.
- Daniel Cater fixes:
1 - made 'make vc8' work on windows.
2 - made libcurl itself built with CURL_NO_OLDIES defined (which doesn't
define the symbols for backwards source compatibility)
3 - updated libcurl-errors.3
Daniel S (12 July 2007)
- Made the krb5 code build with Heimdal's GSSAPI lib.
Dan F (12 July 2007)
- Compile most of the example apps in docs/examples when doing a 'make check'.
Fixed some compile warnings and errors in those examples.
- Removed the example program ftp3rdparty.c since libcurl doesn't support
3rd party FTP transfers any longer.
Daniel S (12 July 2007)
- Shmulik Regev found an (albeit rare) case where the proxy CONNECT operation
could in fact get stuck in an endless loop.
- Made CURLOPT_SSL_VERIFYHOST set to 1 acts as described in the documentation:
fail to connect if there is no Common Name field found in the remote cert.
We should deprecate the support for this set to 1 anyway soon, since the
feature is pointless and most likely never really used by anyone.
Daniel S (11 July 2007)
- Shmulik Regev fixed a bug with transfer-encoding skipping during the 407
error pages for proxy authentication.
- Giancarlo Formicuccia reported and fixed a problem with a closed connection
to a proxy during CONNECT auth negotiation.
Dan F (10 July 2007)
- Fixed a curl memory leak reported by Song Ma with a modified version
of the patch he suggested. Added his test case as test289 to verify.
- Force the time zone to GMT in the cookie tests in case the user is
using one of the so-called 'right' time zones that take into account
leap seconds, which causes the tests to fail (as reported by
Daniel Black in bug report #1745964).
Version 7.16.4 (10 July 2007)
Daniel S (10 July 2007)
- Kees Cook notified us about a security flaw
( in which libcurl failed to
properly reject some outdated or not yet valid server certificates when
built with GnuTLS. Kees also provided the patch.
James H (5 July 2007)
- Gavrie Philipson provided a patch that will use a more specific error
message for an scp:// upload failure. If libssh2 has his matching
patch, then the error message return by the server will be used instead
of a more generic error.
Daniel S (1 July 2007)
- Thomas J. Moore provided a patch that introduces Kerberos5 support in
libcurl. This also makes the options change name to --krb (from --krb4) and
CURLOPT_KRBLEVEL (from CURLOPT_KRB4LEVEL) but the old names are still
- Song Ma helped me verify and extend a fix for doing FTP over a SOCKS4/5
Daniel S (27 June 2007)
- James Housley: Add two new options for the SFTP/SCP/FILE protocols:
premissions for files and directories created on the remote
server. CURLOPT_NEW_FILE_PERMS defaults to 0644 and
- I corrected the 10-at-a-time.c example and applied a patch for it by James
Daniel S (26 June 2007)
- Robert Iakobashvili re-arranged the internal hash code to work with a custom
hash function for different hashes, and also expanded the default size for
the socket hash table used in multi handles to greatly enhance speed when
very many connections are added and the socket API is used.
- James Housley made the CURLOPT_FTPLISTONLY mode work for SFTP directory
listings as well
Daniel S (25 June 2007)
- Adjusted how libcurl treats HTTP 1.1 responses without content-lenth or
chunked encoding (that also lacks "Connection: close"). It now simply
assumes that the connection WILL be closed to signal the end, as that is how
RFC2616 section 4.4 point #5 says we should behave.
Version 7.16.3 (25 June 2007)
Daniel S (23 June 2007)
- As reported by "Tro" in and, libcurl didn't properly do
no-body requests on FTP files on re-used connections properly, or at least
it didn't provide the info back in the header callback properly in the
subsequent requests.
Daniel S (21 June 2007)
- Gerrit Bruchhäuser pointed out a warning that the Intel(R) Thread Checker
tool reports and it was indeed a legitimate one and it is one fixed. It was
a use of a share without doing the proper locking first.
Daniel S (20 June 2007)
- Adam Piggott filed bug report #1740263
( Adam discovered that when
getting a large amount of URLs with curl, they were fetched slower and
slower... which turned out to be because the --libcurl data collecting which
wrongly always was enabled, but no longer is...
Daniel S (18 June 2007)
- Robson Braga Araujo filed bug report #1739100
( that mentioned that libcurl
could not actually list the contents of the root directory of a given FTP
server if the login directory isn't root. I fixed the problem and added
three test cases (one is disabled for now since I identified KNOWN_BUGS #44,
we cannot use --ftp-method nocwd and list ftp directories).
Daniel S (14 June 2007)
- Shmulik Regev:
I've encountered (and hopefully fixed) a problem involving proxy CONNECT
requests and easy handles state management. The problem isn't simple to
reproduce since it depends on socket state. It only manifests itself when
working with non-blocking sockets.
Here is the scenario:
1. in multi_runsingle the easy handle is in the CURLM_STATE_WAITCONNECT and
calls Curl_protocol_connect
2. in Curl_proxyCONNECT, line 1247, if the socket isn't ready the function
returns and conn->bits.tunnel_connecting is TRUE
3. when the call to Curl_protocol_connect returns the protocol_connect flag
is false and the easy state is changed to CURLM_STATE_PROTOCONNECT which
isn't correct if a proxy is used. Rather CURLM_STATE_WAITPROXYCONNECT
should be used.
I discovered this while performing an HTTPS request through a proxy (squid)
on my local network. The problem caused openssl to fail as it read the proxy
response to the CONNECT call ('HTTP/1.0 Established') rather than the SSL
handshake (the exact openssl error was 'wrong ssl version' but this isn't
very important)
- Dave Vasilevsky filed bug report #1736875
( almost simultanouesly as Dan
Fandrich mentioned a related build problem on the libcurl mailing list: Both problems had the same
reason: the definitions of the POLL* defines and the pollfd struct in the
libcurl code was depending on HAVE_POLL instead of HAVE_SYS_POLL_H.
Daniel S (13 June 2007)
- Tom Regner provided a patch and worked together with James Housley, so now
CURLOPT_FTP_CREATE_MISSING_DIRS works for SFTP connections as well as FTP
- Rich Rauenzahn filed bug report #1733119
( and we collaborated on the
fix. The problem is that for 64bit HPUX builds, several socket-related
functions would still assume int (32 bit) arguments and not socklen_t (64
bit) ones.
Daniel S (12 June 2007)
- James Housley brought his revamped SSH code that is state-machine driven to
really take advantage of the now totally non-blocking libssh2 (in CVS).
Dan F (8 June 2007)
- Incorporated Daniel Black's test706 and test707 SOCKS test cases.
- Fixed a few problems when starting the SOCKS server.
- Reverted some recent changes to that weren't compatible with
perl 5.0.
- Fixed the test harness so that it actually kills the ssh being used as
the SOCKS server.
Daniel S (6 June 2007)
- -s/--silent can now be used to toggle off the silence again if used a second
Daniel S (5 June 2007)
- Added Daniel Black's work that adds the first few SOCKS test cases. I also
fixed two minor SOCKS problems to make the test cases run fine.
Daniel S (31 May 2007)
- Feng Tu made (lib)curl support "upload" resuming work for file:// URLs.
Daniel S (30 May 2007)
- I modified the 10-at-a-time.c example to transfer 500 downloads in parallel
with a c-ares enabled build only to find that it crashed miserably, and this
was due to some select()isms left in the code. This was due to API
restrictions in c-ares 1.3.x, but with the upcoming c-ares 1.4.0 this is no
longer the case so now libcurl runs much better with c-ares and the multi
interface with > 1024 file descriptors in use.
Extra note: starting now we require c-ares 1.4.0 for asynchronous name
- Added CURLMOPT_MAXCONNECTS which is a curl_multi_setopt() option for setting
the maximum size of the connection cache maximum size of the multi handle.
Daniel S (27 May 2007)
- When working with a problem Stefan Becker had, I found an off-by-one buffer
overwrite in Curl_select(). While fixing it, I also improved its performance
somewhat by changing calloc to malloc and breaking out of a loop earlier
(when possible).
Daniel S (25 May 2007)
- Rob Crittenden fixed bug #1705802
(, which was filed by Daniel
Black identifying several FTP-SSL test cases fail when we build libcurl with
NSS for TLS/SSL. Listed as #42 in KNOWN_BUGS.
Daniel S (24 May 2007)
- Song Ma filed bug report #1724016
( noticing that downloading
glob-ranges for TFTP was broken in CVS. Fixed now.
- 'mytx' in bug report #1723194 (
pointed out that the warnf() function in the curl tool didn't properly deal
with the cases when excessively long words were used in the string to chop
Daniel S (22 May 2007)
- Andre Guibert de Bruet fixed a memory leak in the function that verifies the
peer's name in the SSL certificate when built for OpenSSL. The leak happens
for libcurls with CURL_DOES_CONVERSIONS enabled that fail to convert the CN
name from UTF8. He also fixed a leak when PKCS #12 parsing failed.
Daniel S (18 May 2007)
- Feng Tu reported that curl -w did wrong on TFTP transfers in bug report
#1715394 (, and the
transfer-related info "variables" were indeed overwritten with zeroes
wrongly and have now been adjusted. The upload size still isn't accurate.
Daniel S (17 May 2007)
- Feng Tu pointed out a division by zero error in the TFTP connect timeout
code for timeouts less than five seconds, and also provided a fix for it.
Bug report #1715392 (
Dan F (16 May 2007)
- Added support for compiling under Minix 3.1.3 using ACK.
Dan F (14 May 2007)
- Added SFTP directory listing test case 613.
- Added support for quote commands before a transfer using SFTP and test
case 614.
- Changed the post-quote commands to occur after the transferred file is
- Allow SFTP quote commands chmod, chown, chgrp to set a value of 0.
Dan F (9 May 2007)
- Kristian Gunstone fixed a problem where overwriting an uploaded file with
sftp didn't truncate it first, which would corrupt the file if the new
file was shorter than the old.
Dan F (8 May 2007)
- Added FTPS test cases 406 and 407
Daniel S (8 May 2007)
because I just made SCP uploads return this value if the file size of
the upload file isn't given with CURLOPT_INFILESIZE*. Docs updated to
reflect this news, and a define for the old name was added to the public
header file.
Daniel S (7 May 2007)
- James Bursa fixed a bug in the multi handle code that made the connection
cache grow a bit too much, beyond the normal 4 * easy_handles.
Daniel S (2 May 2007)
- Anders Gustafsson remarked that requiring CURLOPT_HTTP_VERSION set to 1.0
when CURLOPT_HTTP200ALIASES is used to avoid the problem mentioned below is
not very nice if the client wants to be able to use _either_ a HTTP 1.1
server or one within the aliases list... so starting now, libcurl will
simply consider 200-alias matches the to be HTTP 1.0 compliant.
- Tobias Rundström reported a problem they experienced with xmms2 and recent
libcurls, which turned out to be the 25-nov-2006 change which treats HTTP
responses without Content-Length or chunked encoding as without bodies. We
now added the conditional that the above mentioned response is only without
body if the response is HTTP 1.1.
- Jeff Pohlmeyer improved the hiperfifo.c example to use the
- Set the timeout for easy handles to expire really soon after addition or
when CURLM_CALL_MULTI_PERFORM is returned from curl_multi_socket*/perform,
to make applications using only curl_multi_socket() to properly function
when adding easy handles "on the fly". Bug report and test app provided by
Michael Wallner.
Dan F (30 April 2007)
- Improved the test harness to allow running test servers on other than
the default port numbers, allowing more than one test suite to run
simultaneously on the same host.
Daniel S (28 April 2007)
- Peter O'Gorman fixed libcurl to not init GnuTLS as early as we did before,
since it then inits libgcrypt and libgcrypt is being evil and EXITS the
application if it fails to get a fine random seed. That's really not a nice
thing to do by a library.
- Frank Hempel fixed a curl_easy_duphandle() crash on a handle that had
been removed from a multi handle, and then fixed another flaw that prevented
curl_easy_duphandle() to work even after the first fix - the handle was
still marked as using the multi interface.
Daniel S (26 April 2007)
- Peter O'Gorman found a problem with SCP downloads when the downloaded file
was 16385 bytes (16K+1) and it turned out we didn't properly always "suck
out" all data from libssh2. The effect being that libcurl would hang on the
socket waiting for data when libssh2 had in fact already read it all...
Dan F (25 April 2007)
- Added support in for "!n" test numbers to disable individual
tests. Changed -t to only keep log files around when -k is specified,
to have the same behaviour as without -t.
Daniel S (25 April 2007)
- Sonia Subramanian brought our attention to a problem that happens if you set
the CURLOPT_RESUME_FROM or CURLOPT_RANGE options and an existing connection
in the connection cache is closed to make room for the new one when you call
curl_easy_perform(). It would then wrongly free range-related data in the
connection close funtion.
Yang Tse (25 April 2007)
- Steve Little fixed compilation on VMS 64-bit mode
Daniel S (24 April 2007)
- Robert Iakobashvili made the 'master_buffer' get allocated first once it is
can/will be used as it then makes the common cases save 16KB of data for each
easy handle that isn't used for pipelining.
Dan F (23 April 2007)
- Added <postcheck> support to the test harness.
- Added tests 610-612 to test more SFTP post-quote commands.
Daniel S (22 April 2007)
- Song Ma's warning if -r/--range is given with a "bad" range, also noted in
the man page now.
- Daniel Black filed bug #1705177
( where --without-ssl
--with-gnutl outputs a warning about SSL not being enabled even though GnuTLS
was found and used.
Daniel S (21 April 2007)
- Daniel Black filed bug #1704675
( identifying a double-free
problem in the SSL-dealing layer, telling GnuTLS to free NULL credentials on
closedown after a failure and a bad #ifdef for NSS when closing down SSL.
Yang Tse (20 April 2007)
- Save one call to curlx_tvnow(), which calls gettimeofday(), in each of
Curl_socket_ready(), Curl_poll() and Curl_select() when these are called
with a zero timeout or a timeout value indicating a blocking call should
be performed.
Daniel S (18 April 2007)
- James Housley made SFTP uploads use libssh2's non-blocking API
- Prevent the internal progress meter from updating more frequently than once
per second.
Dan F (17 April 2007)
- Added test cases 296, 297 and 298 to test --ftp-method handling
Daniel S (16 April 2007)
- Robert Iakobashvil added curl_multi_socket_action() to libcurl, which is a
function that deprecates the curl_multi_socket() function. Using the new
function the application tell libcurl what action that was found in the
socket that it passes in. This gives a significant performance boost as it
allows libcurl to avoid a call to poll()/select() for every call to
I added a define in the public curl/multi.h header file that will make your
existing application automatically use curl_multi_socket_action() instead of
curl_multi_socket() when you recompile. But of course you'll get better
performance if you adjust your code manually and actually pass in the
correct action bitmask to this function.
Daniel S (14 April 2007)
- Jay Austin added "DH PARAMETERS" to the stunnel.pem certificate for the test
suite to make stunnel run better in some (most?) environments.
Dan F (13 April 2007)
- Added test cases 294 and 295 to test --ftp-account handling
- Improved handling of out of memory in ftp.
Yang Tse (13 April 2007)
- Fix test case 534 which started to fail 2007-04-13 due to the existance
of a new host on the net with the same silly domain the test was using
for a host which was supposed not to exist.
Daniel S (12 April 2007)
- Song Ma found a memory leak in the if2ip code if you pass in an interface
name longer than the name field of the ifreq struct (typically 6 bytes), as
then it wouldn't close the used dummy socket. Bug #1698974
Version 7.16.2 (11 April 2007)
Yang Tse (10 April 2007)
- Ravi Pratap provided some fixes for HTTP pipelining
- configure script will ignore --enable-sspi option for non-native Windows.
Daniel S (9 April 2007)
- Nick Zitzmann did ssh.c cleanups
Daniel S (3 April 2007)
- Rob Jones fixed better #ifdef'ing for a bunch of #include lines.
Daniel S (2 April 2007)
- Nick Zitzmann made the CURLOPT_POSTQUOTE option work for SFTP as well. The
accepted commands are as follows:
chgrp (gid) (path)
Changes the group ID of the file or directory at (path) to (gid). (gid)
must be a number.
chmod (perms) (path)
Changes the permissions of the file or directory at (path) to
(perms). (perms) must be a number in the format used by the chmod Unix
chown (uid) (path)
Changes the user ID of the file or directory at (path) to (uid). (uid)
must be a number.
ln (source) (dest)
Creates a symbolic link at (dest) that points to the file located at
mkdir (path)
Creates a new directory at (path).
rename (source) (dest)
Moves the file or directory at (source) to (dest).
rm (path)
Deletes the file located at (path).
rmdir (path)
Deletes the directory located at (path). This command will raise an error
if the directory is not empty.
symlink (source) (dest)
Same as ln.
Daniel S (1 April 2007)
- Robert Iakobashvili made curl_multi_remove_handle() a lot faster when many
easy handles are added to a multi handle, by avoiding the looping over all
the handles to find which one to remove.
- Matt Kraai provided a patch that makes curl build on QNX 6 fine again.
Daniel S (31 March 2007)
- Fixed several minor issues detected by the scanner.
- "Pixel" fixed a problem that appeared when you used -f with user+password
embedded in the URL.
Dan F (29 March 2007)
- Don't tear down the ftp connection if the maximum filesize was exceeded
and added tests 290 and 291 to check.
- Added ftps upload and SSL required tests 401 and 402.
- Send an EOF message before closing an SCP channel, as recommended by
RFC4254. Enable libssh2 tracing when ssh debugging is turned on.
Yang Tse (27 March 2007)
- Internal function Curl_select() renamed to Curl_socket_ready()
New Internal wrapper function Curl_select() around select (2), it
uses poll() when a fine poll() is available, so now libcurl can be
built without select() support at all if a fine poll() is available.
Daniel S (25 March 2007)
- Daniel Johnson fixed multi code to traverse the easy handle list properly.
A left-over bug from the February 21 fix.
Dan F (23 March 2007)
- Added --pubkey option to curl and made --key also work for SCP/SFTP,
plus made --pass work on an SSH private key as well.
- Changed the test harness to attempt to gracefully shut down servers
before resorting to the kill -9 hammer.
- Added test harness infrastructure to support scp/sftp tests, using
OpenSSH as the server.
- Fixed a memory leak when specifying a proxy with a file: URL.
Yang Tse (20 March 2007)
- Fixed: When a signal was caught awaiting for an event using Curl_select()
or Curl_poll() with a non-zero timeout both functions would restart the
specified timeout. This could even lead to the extreme case that if a
signal arrived with a frecuency lower to the specified timeout neither
function would ever exit.
Added experimental symbol definition check CURL_ACKNOWLEDGE_EINTR in
Curl_select() and Curl_poll(). When compiled with CURL_ACKNOWLEDGE_EINTR
defined both functions will return as soon as a signal is caught. Use it
at your own risk, all calls to these functions in the library should be
revisited and checked before fully supporting this feature.
Yang Tse (19 March 2007)
- Bryan Henderson fixed the progress function so that it can get called more
frequently allowing same calling frecuency for the client progress callback.
Dan F (15 March 2007)
- Various memory leaks plugged and NULL pointer fixes made in the ssh code.
Daniel (15 March 2007)
- Nick made the curl tool accept globbing ranges that only is one number, i.e
you can now use [1-1] without curl complaining.
Daniel (10 March 2007)
- Eygene Ryabinkin:
The problem is the following: when we're calling Curl_done and it decides to
keep the connection opened ('left intact'), then the caller is not notified
that the connection was done via the NULLifying of the pointer, so some easy
handle is keeping the pointer to this connection.
Later ConnectionExists can select such connection for reuse even if we're
not pipelining: pipeLen is zero, so the (pipeLen > 0 && !canPipeline) is
false and we can reuse this connection for another easy handle. But thus the
connection will be shared between two easy handles if the handle that wants
to take the ownership is not the same as was not notified of the connection
was done in Curl_done. And when some of these easy handles will get their
connection really freed the another one will still keep the pointer.
My fix was rather trivial: I just added the NULLification to the 'else'
branch in the Curl_done. My tests with Git and ElectricFence showed no
problems both for HTTP pulling and cloning. Repository size is about 250 Mb,
so it was a considerable amount of Curl's work.
Dan F (9 March 2007)
- Updated the test harness to add a new "crypto" feature check and updated the
appropriate test case to use it. For now, this is treated the same as the
"SSL" feature because curl doesn't list it separately.
Daniel (9 March 2007)
- Robert Iakobashvili fixed CURLOPT_INTERFACE for IPv6.
- Robert A. Monat improved the maketgz and VC6/8 generating to set the correct
machine type too.
- Justin Fletcher fixed a file descriptor leak in the curl tool when trying to
upload a file it couldn't open. Bug #1676581
Dan F (9 March 2007)
- Updated the test harness to check for protocol support before running each
test, fixing KNOWN_BUGS #11.
Dan F (7 March 2007)
- Reintroduced (after a 3 year hiatus) an FTPS test case (400) into the test
harness. It is very limited as it supports only ftps:// URLs with
--ftp-ssl-control specified, which implicitly encrypts the control
channel but not the data channels. That allows stunnel to be used with
an unmodified ftp server in exactly the same way that the test https
server is set up.
Dan F (7 March 2007)
- Honour --ftp-ssl-control on ftps:// URLs to allow encrypted control and
unencrypted data connections.
Dan F (6 March 2007)
- Fixed a couple of improper pointer uses detected by valgrind in test
cases 181 & 216.
Daniel (2 March 2007)
- Robert A. Monat and Shmulik Regev helped out to fix the new */Makefile.vc8
makefiles that are included in the source release archives, generated from
the Makefile.vc6 files by the maketgz script. I also modified the root
Makefile to have a VC variable that defaults to vc6 but can be overridden to
allow it to be used for vc8 as well. Like this:
nmake VC=vc8 vc
Daniel (27 February 2007)
- Hang Kin Lau found and fixed: When I use libcurl to connect to an https
server through a proxy and have the remote https server port set using the
CURLOPT_PORT option, protocol gets reset to http from https after the first
User defined URL was modified internally by libcurl and subsequent reuse of
the easy handle may lead to connection using a different protocol (if not
originally http).
I found that libcurl hardcoded the protocol to "http" when it tries to
regenerate the URL if CURLOPT_PORT is set. I tried to fix the problem as
follows and it's working fine so far
Daniel (25 February 2007)
- Adam D. Moss made the HTTP CONNECT procedure less blocking when used from
the multi interface. Note that it still does a part of the connection in a
blocking manner.
Daniel (23 February 2007)
- Added warning outputs if the command line uses more than one of the options
-v, --trace and --trace-ascii, since it could really confuse the user.
Clarified this fact in the man page.
Daniel (21 February 2007)
- Ravi Pratap provided work on libcurl making pipelining more robust and
fixing some bugs:
o Don't mix GET and POST requests in a pipeline
o Fix the order in which requests are dispatched from the pipeline
o Fixed several curl bugs with pipelining when the server is returning
chunked encoding:
* Added states to chunked parsing for final CRLF
* Rewind buffer after parsing chunk with data remaining
* Moved chunked header initializing to a spot just before receiving
Daniel (20 February 2007)
- Linus Nielsen Feltzing changed the CURLOPT_FTP_SSL_CCC option to handle
active and passive CCC shutdown and added the --ftp-ssl-ccc-mode command
line option.
Daniel (19 February 2007)
- Ian Turner fixed the libcurl.m4 macro's support for --with-libcurl.
- Shmulik Regev found a memory leak in re-used HTTPS connections, at least
when the multi interface was used.
- Robson Braga Araujo made passive FTP transfers work with SOCKS (both 4 and
Daniel (18 February 2007)
- Jeff Pohlmeyer identified two problems: first a rather obscure problem with
the multi interface and connection re-use that could make a
curl_multi_remove_handle() ruin a pointer in another handle.
The second problem was less of an actual problem but more of minor quirk:
the re-using of connections wasn't properly checking if the connection was
marked for closure.
Daniel (16 February 2007)
- Duncan Mac-Vicar Prett and Michal Marek reported problems with resetting
CURLOPT_RANGE back to no range on an easy handle when using FTP.
Dan F (14 February 2007)
- Fixed curl-config --libs so it doesn't list unnecessary libraries (and
therefore introduce unnecessary dependencies) when it's not needed.
Also, don't bother adding a library path of /usr/lib
Daniel (13 February 2007)
- The default password for anonymous FTP connections is now changed to be
- Robert A. Monat made libcurl build fine with VC2005 - it doesn't have
gmtime_r() like the older VC versions. He also made use of some machine-
specific defines to differentiate the "OS" define.
Daniel (12 February 2007)
- Rob Crittenden added support for NSS (Network Security Service) for the
SSL/TLS layer.
This is the fourth supported library for TLS/SSL that libcurl supports!
- Shmulik Regev fixed so that the final CRLF of HTTP response headers are sent
to the debug callback.
CURLOPT_HTTP_TRANSFER_DECODING that if set to zero will disable libcurl's
internal decoding of content or transfer encoded content. This may be
preferable in cases where you use libcurl for proxy purposes or similar. The
command line tool got a --raw option to disable both at once.
- release tarballs made with maketgz will from now on have a LIBCURL_TIMESTAMP
define set to hold the exact date and time of when the tarball was built, as
a human readable string using the UTC time zone.
- Jeff Pohlmeyer fixed a flaw in curl_multi_add_handle() when adding a handle
that has an easy handle present in the "closure" list pending closure.
Daniel (6 February 2007)
- Regular file downloads wiht SFTP and SCP are now done using the non-blocking
API of libssh2, if the libssh2 headers seem to support them. This will make
SCP and SFTP much more responsive and better libcurl citizens when used with
the multi interface etc.
Daniel (5 February 2007)
- Michael Wallner added support for CURLOPT_TIMEOUT_MS and
CURLOPT_CONNECTTIMEOUT_MS that, as their names suggest, do the timeouts with
millisecond resolution. The only restriction to that is the alarm()
(sometimes) used to abort name resolves as that uses full seconds. I fixed
the FTP response timeout part of the patch.
Internally we now count and keep the timeouts in milliseconds but it also
means we multiply set timeouts with 1000. The effect of this is that no
timeout can be set to more than 2^31 milliseconds (on 32 bit systems), which
equals 24.86 days. We probably couldn't before either since the code did
*1000 on the timeout values on several places already.
Daniel (3 February 2007)
- Yang Tse fixed the cookie expiry date in several test cases that started to
fail since they used "1 feb 2007"...
- Manfred Schwarb reported that socks5 support was broken and help us pinpoint
the problem. The code now tries harder to use httproxy and proxy where
apppropriate, as not all proxies are HTTP...
Version 7.16.1 (29 January 2007)
Daniel (29 January 2007)
- Michael Wallner reported that when doing a CONNECT with a custom User-Agent
header, you got _two_ User-Agent headers in the CONNECT request...! Added
test case 287 to verify the fix.
Daniel (28 January 2007)
- curl_easy_reset() now resets the CA bundle path correctly.
- David McCreedy fixed the Curl command line tool for HTTP on non-ASCII
Daniel (25 January 2007)
- Added the --libcurl [file] option to curl. Append this option to any
ordinary curl command line, and you will get a libcurl-using source code
written to the file that does the equivalent operation of what your command
line operation does!
Dan F (24 January 2007)
- Fixed a dangling pointer problem that prevented the http_proxy environment
variable from being properly used in many cases (and caused test case 63
to fail).
Daniel (23 January 2007)
- David McCreedy did NTLM changes mainly for non-ASCII platforms:
There's a compilation error in http_ntlm.c if USE_NTLM2SESSION is NOT
defined. I noticed this while testing various configurations. Line 867 of
the current http_ntlm.c is a closing bracket for an if/else pair that only
gets compiled in if USE_NTLM2SESSION is defined. But this closing bracket
wasn't in an #ifdef so the code fails to compile unless USE_NTLM2SESSION was
defined. Lines 198 and 140 of my patch wraps that closing bracket in an
I noticed several picky compiler warnings when DEBUG_ME is defined. I've
fixed them with casting. By the way, DEBUG_ME was a huge help in
understanding this code.
Hopefully the last non-ASCII conversion patch for libcurl in a while. I
changed the "NTLMSSP" literal to hex since this signature must always be in
Conversion code was strategically added where necessary. And the
Curl_base64_encode calls were changed so the binary "blobs" http_ntlm.c
creates are NOT translated on non-ASCII platforms.
Dan F (22 January 2007)
- Converted (most of) the test data files into genuine XML. A handful still
are not, due mainly to the lack of support for XML character entities
(e.g. & => &amp; ). This will make it easier to validate test files using
tools like xmllint, as well as to edit and view them using XML tools.
Daniel (16 January 2007)
- Armel Asselin improved libcurl to behave a lot better when an easy handle
doing an FTP transfer is removed from a multi handle before completion. The
fix also fixed the "alive counter" to be correct on "premature removal" for
all protocols.
Dan F (16 January 2007)
- Fixed a small memory leak in tftp uploads discovered by curl's memory leak
detector. Also changed tftp downloads to URL-unescape the downloaded
file name.
Daniel (14 January 2007)
- David McCreedy provided libcurl changes for doing HTTP communication on
non-ASCII platforms. It does add some complexity, most notably with more
#ifdefs, but I want to see this supported added and I can't see how we can
add it without the extra stuff added.
- Setting CURLOPT_COOKIELIST to "ALL" when no cookies at all was present,
libcurl would crash when trying to read a NULL pointer.
Daniel (12 January 2007)
- Toby Peterson found a nasty bug that prevented (lib)curl from properly
downloading (most) things that were larger than 4GB on 32 bit systems. Matt
Witherspoon helped as narrow down the problem.
Daniel (5 January 2007)
- Linus Nielsen Feltzing introduced the --ftp-ssl-ccc command line option to
curl that uses the new CURLOPT_FTP_SSL_CCC option in libcurl. If enabled, it
will make libcurl shutdown SSL/TLS after the authentication is done on a
FTP-SSL operation.
Daniel (4 January 2007)
- David McCreedy made changes to allow base64 encoding/decoding to work on
non-ASCII platforms.
Daniel (3 January 2007)
- Matt Witherspoon fixed the flaw which made libcurl 7.16.0 always store
downloaded data in two buffers, just to be able to deal with a special HTTP
pipelining case. That is now only activated for pipelined transfers. In
Matt's case, it showed as a considerable performance difference,
Daniel (2 January 2007)
- Victor Snezhko helped us fix bug report #1603712
( (known bug #36) --limit-rate
on Windows (since 7.16.0, but that's when they were introduced as previous
to that the limiting logic was made in the application only and not in the
library). It was actually also broken on select()-based systems (as apposed
to poll()) but we haven't had any such reports. We now use select(), Sleep()
or delay() properly to sleep a while without waiting for anything input or
output when the rate limiting is activated with the easy interface.
- Modified to use Libs.private for the libs libcurl itself needs
to get built static. It has been mentioned before and was again brought to
our attention by Nathanael Nerode who filed debian bug report #405226