                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog

Yang Tse (17 Jul 2008)
- RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined
  to the data type pointed by its respective argument and not the pointer type.

Yang Tse (16 Jul 2008)
- Configure process now checks availability of recvfrom() socket function and
  finds out its return type and the types of its arguments. Added definitions
  for non-configure systems config files, and introduced macro sreadfrom which
  will be used on udp sockets as a recvfrom() wrapper.

Yang Tse (15 Jul 2008)
- Added description/comment to include paths used in several Makefile.am files.
  Added automake option nostdinc to test servers makefile and modified libcurl
  external headers include path for libtest programs.

Daniel Fandrich (14 Jul 2008)
- Added test1040 through test1043 to test -C - on HTTP. Test 1041 failed so
  it's added to DISABLED.

Yang Tse (14 Jul 2008)
- HTTP_ONLY definition check in lib/setup.h is now done once that configuration
  file has been included. In this way if symbol is defined in the config file
  it will no longer be ignored.  Removed inclusion of remaining system header
  files from configuration files. Moved _REENTRANT definition up/earlier in
  lib/setup.h

Yang Tse (11 Jul 2008)
- Added missing multiple header inclusion prevention definition for header
  file content_encoding.h

Daniel Fandrich (11 Jul 2008)
- Fixed test 553 to pass the torture test.

Daniel Stenberg (11 Jul 2008)
- Daniel Fandrich found out we didn't pass on the user-agent properly when
  doing "proxy-tunnels" with non-HTTP prototols and that was simply because
  the code assumed the user-agent was only needed for HTTP.

Daniel Fandrich (10 Jul 2008)
- Changed slightly the SFTP quote commands chmod, chown and chgrp to only
  set the attribute that has changed instead of all possible ones. Hopefully,
  this will solve the "Permission denied" problem that Nagarajan Sreenivasan
  reported when setting some modes, but regardless, it saves a protocol
  round trip in the chmod case.

- Added test cases 1038 and 1039 to test Adrian Kreher's report that ftp
  uploads with -C - didn't resume properly, but the tests pass.

Yang Tse (10 Jul 2008)
- Peter Lamberg filed bug report #2015126: "poll gives WSAEINVAL when POLLPRI
  is set in fdset.events" (http://curl.haxx.se/bug/view.cgi?id=2015126) which
  exactly pinpointed the problem only triggered on Windows Vista, provided
  reference to docs and also a fix. There is much work behind Peter Lamberg's
  excellent bug report. Thank You!

Daniel Fandrich (9 Jul 2008)
- Added tests 1036 and 1037 to verify resumed ftp downloads with -C -

Daniel Stenberg (9 Jul 2008)
- Andreas Schuldei improved Phil Blundell's patch for IPv6 using c-ares, and I
  edited it slightly. Now you should be able to use IPv6 addresses fine even
  with libcurl built to use c-ares.

Daniel Fandrich (9 Jul 2008)
- Fixed an OOM handling problem that cause test 11 to fail the torture test.

Daniel Fandrich (8 Jul 2008)
- Fixed test 554 to pass the torture test.

Daniel Fandrich (7 Jul 2008)
- Added test cases 1034 & 1035 to test IDN name conversion failures.

Daniel Stenberg (7 Jul 2008)
- Scott Barrett provided a test case for a segfault in the FTP code and the
  fix for it. It occured when you did a FTP transfer using
  CURLFTPMETHOD_SINGLECWD and then did another one on the same easy handle but
  switched to CURLFTPMETHOD_NOCWD. Due to the "dir depth" variable not being
  cleared properly.  Scott's test case is now known as test 539 and it
  verifies the fix.

Daniel Stenberg (3 Jul 2008)
- Phil Blundell provided a fix for libcurl's treatment of unexpected 1xx
  response codes. Previously libcurl would hang on such occurances. I added
  test case 1033 to verify.

- Introcuding a new timestamp for curl_easy_getinfo():
  CURLINFO_APPCONNECT_TIME. This is set with the "application layer"
  handshake/connection is completed. Which typically is SSL, TLS or SSH and by
  using this you can figure out the application layer's own connect time. You
  can extract the time stamp using curl's -w option and the new variable named
  'time_appconnect'. This feature was sponsored by Lenny Rachitsky at NeuStar.

Daniel Fandrich (2 Jul 2008)
- Support Open Watcom C on Linux (as well as Windows).

Yang Tse (2 Jul 2008)
- The previously committed fix for bug report #1999181 prevented using the
  monotonic clock on any system without an always supported POSIX compliant
  implementation. Now the POSIX compliant configuration check is removed and
  will fallback to gettimeofday when the monotonic clock is unavailable at
  run-time.

- The configure process will now halt when sed, grep, egrep or ar programs
  can not be found among the directories in PATH variable.

Daniel Stenberg (1 Jul 2008)
- Rolland Dudemaine provided fixes to get libcurl to build for the INTEGRITY
  operating system.

Daniel Stenberg (30 Jun 2008)
- Made the internal printf() support %llu properly to print unsigned long longs.

- Stephen Collyer and Tor Arntsen helped identify a flaw in the range code
  which output the range using a signed variable where it should rather use
  unsigned.

Yang Tse (29 Jun 2008)
- John Lightsey filed bug report #1999181: "CLOCK_MONOTONIC always fails on
  some systems" (http://curl.haxx.se/bug/view.cgi?id=1999181). The problem was
  that the configure script did not use the _POSIX_MONOTONIC_CLOCK feature test
  macro when checking monotonic clock availability. This is now fixed and the
  monotonic clock will not be used unless the feature test macro is defined
  with a value greater than zero indicating always supported.

Daniel Fandrich (25 Jun 2008)
- Honour --stderr with the -v option.

- Fixed a file handle leak in the command line client if more than one
  --stderr option was given.

Daniel Stenberg (22 Jun 2008)
- Eduard Bloch filed the debian bug report #487567
  (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=487567) pointing out that
  libcurl used Content-Range: instead of Range when doing a range request with
  --head (CURLOPT_NOBODY). This is now fixed and test case 1032 was added to
  verify.
  
Daniel Fandrich (21 Jun 2008)
- Stopped using ranges in scanf character sequences (e.g. %[a-z]) since that
  is not ANSI C, just a common extension.  This caused problems on
  at least Open Watcom C.

Yang Tse (20 Jun 2008)
- Modified configuration script to actually verify if the compiler is good
  enough at detecting compilation errors or at least it has been properly
  configured to do so. Configuration heavily depends on this capability, so
  if this compiler sanity check fails the configuration process will now fail.

Daniel Stenberg (20 Jun 2008)
- Phil Pellouchoud found a case where libcurl built with NSS failed to
  handshake with a SSLv2 server, and it turned out to be because it didn't
  recognize the cipher named "rc4-md5". In our list that cipher was named
  plainly "rc4". I've now added rc4-md5 to work as an alias as Phil reported
  that it made things work for him again.

- Hans-Jurgen May pointed out that trying SCP or SFTP over a SOCKS proxy
  crashed libcurl. This is now addressed by making sure we use "plain send"
  internally when doing the socks handshake instead of the Curl_write()
  function which is designed to use the "target" protocol. That's then SCP or
  SFTP in this case. I also took the opportunity and cleaned up some ssh-
  related #ifdefs in the code for readability.

Daniel Stenberg (19 Jun 2008)
- Christopher Palow fixed a curl_multi_socket() issue which previously caused
  libcurl to not tell the app properly when a socket was closed (when the name
  resolve done by c-ares is completed) and then immediately re-created and put
  to use again (for the actual connection). Since the closure will make the
  "watch status" get lost in several event-based systems libcurl will need to
  tell the app about this close/re-create case.

- Dengminwen found a bug in the connection re-use function when using the
  multi interface with pipelining enabled as it would wrongly check for,
  detect and close "dead connections" even though that connection was already
  in use!

Daniel Fandrich (18 Jun 2008)
- Added SSH failure test cases 628-632

- Fixed a memory leak in the command-line tool that caused a valgrind error.

Daniel Stenberg (18 Jun 2008)
- Rob Crittenden brought a fix for the NSS layer that makes libcurl no longer
  always fire up a new connection rather than using the existing one when the
  multi interface is used. Original bug report:
  https://bugzilla.redhat.com/show_bug.cgi?id=450140

Yang Tse (18 Jun 2008)
- Internal configure script improvement. No longer break out of shell "for"
  statements from inside AC_FOO_IFELSE macros, otherwise temporary macro files
  are not properly removed.

Daniel Fandrich (12 Jun 2008)
- Fixed curl-config --ca which wasn't being exported by configure.

Daniel Stenberg (11 Jun 2008)
- I did a cleanup of the internal generic SSL layer and how the various SSL
  libraries are supported. Starting now, each underlying SSL library support
  code does a set of defines for the 16 functions the generic layer (sslgen.c)
  uses (all these new function defines use the prefix "curlssl_"). This
  greatly simplified the generic layer in readability by involving much less
  #ifdefs and other preprocessor stuff and should make it easier for people to
  make libcurl work with new SSL libraries.

  Hopefully I can later on document these 16 functions somewhat as well.

  I also made most of the internal SSL-dependent functions (using Curl_ssl_
  prefix) #defined to nothing when no SSL support is requested - previously
  they would unnecessarily call mostly empty functions.

  I've built libcurl with OpenSSL and GnuTLS and without SSL to test this and
  I've also tried building with NSS but the NSS support is a mystery to me and
  I failed to build libcurl with the NSS libraries I have installed. We really
  should A) improve our configure script to detect unsuitable NSS versions
  already at configure time and B) document our requirements better for the
  SSL libraries.

Daniel Stenberg (10 Jun 2008)
- I made the OpenSSL code build again with OpenSSL 0.9.6. The CRLFILE
  functionality killed it due to its unconditional use of
  X509_STORE_set_flags...

Daniel Stenberg (8 Jun 2008)
- Due to the three new libcurl changes and the massive command line option
  change I decided we'll mark it by bumping the next release number to 7.19.0!

- curl the tool now deals with its command line options somewhat differently!
  All boolean options (such as -O, -I, -v etc), both short and long versions,
  now always switch on/enable the option named. Using the same option multiple
  times thus make no difference. To switch off one of those options, you need
  to use the long version of the option and type --no-OPTION. Like to disable
  verbose mode you use --no-verbose!

- Added --remote-name-all to curl, which if used changes the default for all
  given URLs to be dealt with as if -O is used. So if you want to disable that
  for a specific URL after --remote-name-all has been used, you muse use -o -
  or --no-remote-name.

Daniel Stenberg (6 Jun 2008)
- Axel Tillequin and Arnaud Ebalard added support for CURLOPT_ISSUERCERT, for
  OpenSSL, NSS and GnuTLS-built libcurls.

- Axel Tillequin and Arnaud Ebalard added support for CURLOPT_CRLFILE, for
  OpenSSL, NSS and GnuTLS-built libcurls.

- Added CURLINFO_PRIMARY_IP as a new information retrievable with
  curl_easy_getinfo. It returns a pointer to a string with the most recently
  used IP address. Modified test case 500 to also verify this feature. The
  implementing of this feature was sponsored by Lenny Rachitsky at NeuStar.

Version 7.18.2 (4 June 2008)

Daniel Fandrich (3 Jun 2008)
- Fixed a problem where telnet data would be lost if an EWOULDBLOCK
  condition were encountered.

Marty Kuhrt (1 Jun 2008)
- Updated main.c to return CURLE_OK if PARAM_HELP_REQUESTED was returned
  from getparameter instead of CURLE_FAILED_INIT.  No point in returning
  an error if --help or --version were requested.

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:
  http://curl.haxx.se/mail/lib-2008-05/0342.html

Daniel Stenberg (26 May 2008)
- Bug report #1973352 (http://curl.haxx.se/bug/view.cgi?id=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
  (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=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" (http://curl.haxx.se/bug/view.cgi?id=1945240).
  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.
  http://curl.haxx.se/mail/lib-2008-05/0011.html

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" (http://curl.haxx.se/bug/view.cgi?id=1951588) which seems to be an
  identical report to what Denis Golovan reported in
  http://curl.haxx.se/mail/lib-2008-02/0108.html 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
  (http://curl.haxx.se/bug/view.cgi?id=1701360) and this recent problem was
  bug #1944825 (http://curl.haxx.se/bug/view.cgi?id=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 runtests.pl 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 http://curl.haxx.se/mail/lib-2008-04/0291.html

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
  (http://curl.haxx.se/bug/view.cgi?id=1942022) pointing out a mistake in the
  lib/Makefile.vc[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
  (http://curl.haxx.se/bug/view.cgi?id=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
  crashes.

- 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 (http://curl.haxx.se/mail/lib-2008-02/0267.html ,
  http://curl.haxx.se/mail/lib-2008-02/0292.html )

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
  http://curl.haxx.se/bug/feature.cgi?id=1900014 that makes libcurl (built to
  use OpenSSL) support a full chain of certificates in a given PKCS12
  certificate.

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
  (http://curl.haxx.se/bug/view.cgi?id=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 => http://curl.haxx.se/docs/caextract.html 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: https://www.net222.caisse-epargne.fr

- 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 (http://curl.haxx.se/bug/view.cgi?id=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 2008)
- 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
  (http://curl.haxx.se/bug/view.cgi?id=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/mk-ca-bundle.pl 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 2008)
- Added tests 1022 and 1023 to validate output of curl-config --version and
  --vernum

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: http://msdn2.microsoft.com/en-us/library/ms533046.aspx . 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
  crash!

- 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
  (http://curl.haxx.se/bug/view.cgi?id=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 runtests.pl 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
  (http://curl.haxx.se/bug/view.cgi?id=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
  option.

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
  (http://curl.haxx.se/bug/view.cgi?id=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
  (http://curl.haxx.se/bug/view.cgi?id=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.

