                                                     -*- coding: utf-8 -*-
Changes with APR-util 1.3.6

  *) Minor build and bug fixes.

Changes with APR-util 1.3.5

  *) SECURITY: CVE-2009-0023 (cve.mitre.org)
     Fix underflow in apr_strmatch_precompile.
     [Matthew Palmer <mpalmer debian.org>]

  *) Fix off by one overflow in apr_brigade_vprintf.
     [C. Michael Pilato <cmpilato collab.net>]

  *) APR_LDAP_SIZELIMIT should prefer LDAP_DEFAULT_LIMIT/-1 when the
     SDK supports it, but in the absence of LDAP_DEFAULT_LIMIT (and
     LDAP_NO_LIMIT/0) it is not safe to use a literal -1.
     PR23356 [Eric Covener]

  *) Clean up ODBC types. Warnings seen when compiling packages for
     Fedora 11. [Bojan Smojver]

  *) Use of my_init() requires my_global.h and my_sys.h. 
     [Bojan Smojver]

  *) Fix apr_memcache_multgetp memory corruption and incorrect error
     handling. PR 46588 [Sami Tolvanen <sami.tolvanen mywot.com>]

  *) Fix memcache memory leak with persistent connections.
     PR 46482 [Sami Tolvanen <sami.tolvanen mywot.com>]

  *) Add Oracle 11 support. [Bojan Smojver]

  *) apr_dbd_freetds: Avoid segfault when process is NULL.
     Do no print diagnostics to stderr. Never allow driver to exit
     process. [Bojan Smojver]

  *) apr_dbd_freetds: The sybdb.h header file might be freetds/sybdb.h
     or sybdb.h. [Graham Leggett]

  *) LDAP detection improvements: --with-ldap now supports library names
     containing non-alphanumeric characters, such as libldap-2.4.so.  New
     option --with-lber can be used to override the default liblber name.
     Fix a problem reporting the lber library from apu-N-config.
     [Jeff Trawick]

  *) Suppress pgsql column-out-of-range warning.
     PR 46012 [Michiel van Loon <michiel van-loon.xs4all.nl>]

  *) Fix a buffer overrun and password matching for SHA passwords.
     PR 45679 [Ben Noordhuis <bnoordhuis gmail.com>]

  *) Introduce DSO handling of the db, gdbm and ndbm drivers, so these are
     loaded as .so's on first demand, unless --disable-util-dso is configured.
     [William Rowe]

  *) Fix a segfault in the DBD testcase when the DBD modules were not present.
     [Graham Leggett]

Changes with APR-util 1.3.4

  *) Fix a memory leak introduced in r683756 and a free call to a non malloced
     pointer in the case that the platform has no threads.
     [Jeff Trawick, Ruediger Pluem]

Changes with APR-util 1.3.3

  *) Add Berkeley DB 4.7 support.
     [Arfrever Frehtes Taifersar Arahesis <arfrever.fta gmail.com>]

  *) PostgreSQL rows (internally) start from zero, not one. Account for it in
     row fetching function. [Bojan Smojver]

  *) Detection of PostgreSQL may fail if LIBS contains all libs returned by
     pg_config. Use it only as the last resort. [Bojan Smojver]

  *) When searching for DSOs, look in apr-util-APU_MAJOR_VERSION subdirectory
     of each component of APR_DSOPATH. PR 45327
     [Joe Orton, William Rowe, Bojan Smojver]

  *) Give MySQL DBD driver reconnect option. PR 45407
     [Bojan Smojver]

Changes with APR-util 1.3.2

  *) Fix parameter parsing error in ODBC DBD driver.  [Tom Donovan]

  *) Older OpenLDAP implementations may have ldap_set_rebind_proc() with two
     args. Provide detection code and alternative implementation.
     [Ruediger Pluem]

  *) Use pool memory when setting DBD driver name into the hash.
     [Bojan Smojver]

Changes with APR-util 1.3.1

  *) Add ODBC DBD Driver.  [Tom Donovan]

  *) Fix build of the FreeTDS and MySQL drivers.  [Bojan Smojver]

  *) Fix build failure for no modules (--disable-dso).  [Jean-Frederic Clere]

  *) Fix win32 build failure for no modules (empty DBD_LIST).  [William Rowe]

Changes with APR-util 1.3.0

  *) apr_reslist: destroy all resources in apr_cleanup (don't give up on error).
     PR 45086 [Nick Kew]

  *) Add apr_brigade_split_ex for reusing existing brigades in situation where
     brigades need to be split often during the lifetime of a pool.
     [Ruediger Pluem]

  *) Amend apr_reslist to expire resources whose idle time exceeds ttl.
     PR 42841 [Tom Donovan, Nick Kew, Ruediger Pluem]

  *) Modularize ldap's stub with the dbd dso modular structure, and teach
     the apu dso's to respect the system specific shared lib path var.
     To link to an application without ldap libs, query 
     `apu-1-config --avoid-ldap --libs` (in addition to the usual linker
     queries for compiling and linking).  [William Rowe]

  *) Support building DBD drivers as DSOs by default; use --disable-util-dso
     flag to configure to use static link.  [Joe Orton, Bojan Smojver]

  *) All DBD drivers now count rows from 1, which affects PostgreSQL and MySQL
     drivers in particular. Using row number zero is an error.
     [Bojan Smojver]

  *) Add support for OpenLDAP's ability to support a directory of
     certificate authorities. [Eric Covener]

  *) Better error detection for bucket allocation failures.
     [Jim Jagielski]

  *) Ensure that the LDAP code can compile cleanly on platforms that do
     not define the LDAP_OPT_REFHOPLIMIT symbol, most specifically Windows.
     [Victor <victorjss@gmail.com>, Graham Leggett]

  *) Fix the setting of LDAP_OPT_SSL on Win2k, which expects a pointer to
     the value LDAP_OPT_ON, and not the value itself. XP works with both.
     [Victor <victorjss@gmail.com>]

  *) Fix a regression in apr_brigade_partition that causes integer overflows
     on systems where apr_off_t > apr_size_t.  [Ruediger Pluem]

  *) Ensure that apr_uri_unparse does not add scheme to URI if
     APR_URI_UNP_OMITSITEPART flag is set. PR 44044
     [Michael Clark <michael metaparadigm.com>]

  *) Add an LDAP rebind implementation so that authentication can be
     carried through referrals. [Paul J. Reder]

  *) Fix the make test target in the spec file. [Graham Leggett]

  *) Introduce apr_dbd_open_ex() [Bojan Smojver]

  *) Make md5 hash files portable between EBCDIC and ASCII platforms  
     [David Jones]

  *) Add limited apr_dbd_freetds driver (MSSQL and Sybase) [Nick Kew]

  *) Commit relicensed apr_dbd_mysql driver to /trunk/  [Nick Kew]

  *) Support BerkeleyDB 4.6.  [Arfrever Frehtes Taifersar Arahesis]

  *) Support Tivoli ITDS LDAP client library.  [Paul Reder]

  *) Portably implement testdate's long-time constants to solve
     compilation faults where #LL isn't valid.  [Curt Arnold]

  *) Use buffered I/O with SDBM.  [Joe Schaefer]

  *) Unify parsing of prepared statements and add binary argument functions
     to DBD [Bojan Smojver with help from many on the APR list]

  *) Rewrite detection of expat in configure to fix build on e.g. biarch
     Linux platforms.  PR 28205.  [Joe Orton]

  *) Add apr_thread_pool implementation.  [Henry Jen <henryjen ztune.net>]

  *) Add support for Berkeley DB 4.5 to the configure scripts.
     [Garrett Rooney]

  *) Allow apr_queue.h to be included before other APR headers.
     PR 40891 [Henry Jen <henryjen ztune.net>]

  *) Fix precedence problem in error checking for sdbm dbm back end.
     PR 40659 [Larry Cipriani <lvc lucent.com>]

  *) Add an apr_reslist_acquired_count, for determining how many outstanding
     resources there are in a reslist.  [Ryan Phillips <ryan trolocsis.com>]

  *) Provide folding in autogenerated .manifest files for Win32 builders
     using VisualStudio 2005  [William Rowe]

  *) Implement DBD transaction modes
     [Bojan Smojver with help from many on the APR list]

  *) Implement prepared statement support in SQLite3 DBD driver
     [Bojan Smojver]

  *) Add get (column) name to apr_dbd API
     [Bojan Smojver <bojan rexursive.com>] and
     [Chris Darroch <chrisd pearsoncmg com>]

  *) Make the DBD autoconf-glue use LDFLAGS instead of LIBS in several
     places, fixing some configure issues on Solaris.
     [Henry Jen <henryjen ztune.net>]

  *) Make apr_dbd.h work as a stand alone header, without needing other
     files to be included before it. [Henry Jen <henryjen ztune.net>]

  *) On platforms that use autoconf stop automatically linking against
     apr-iconv when an apr-iconv source dir is found in ../apr-iconv.
     Instead, add a --with-apr-iconv option to configure that lets you
     specify the relative path to your apr-iconv source directory.
     [Garrett Rooney]

  *) APR_FIND_APU macro now supports customisable detailed checks on
     each installed apr-util. [Justin Erenkrantz, Colm MacCárthaigh]

  *) APR_FIND_APU macro no longer checks /usr/local/apache2/
     [Colm MacCárthaigh]

  *) Add apr_dbd_oracle driver [Nick Kew and Chris Darroch]

Changes with APR-util 1.2.8

  *) Fix incorrect byte order (PR 37342) and incorrect timestamp type
     in the fallback UUID generator used when no external UUID generator
     is detected by APR.
     [Max Bowsher]

Changes with APR-util 1.2.7

  *) Fix apr_dbd_init to be safe to call multiple times
     [Bojan Smojver <bojan rexursive com>, Nick Kew]

  *) Win32 / Netware - add missing apu_version.c for apu_version_string()
     to the Windows and Netware specific builds.  Unix platforms supported
     this API since 0.9.1.  [William Rowe, Brad Nicholes].

Changes with APR-util 1.2.6

  *) Stop trying to link against Berkeley DB by default.  To enable use
     of Berkeley DB users must now explicitly pass --with-berkeley-db to
     configure, since Berkeley DB is released under a viral license that
     requires distribution of source code for any program that uses it.
     [Garrett Rooney]

  *) Stop trying to link against GDBM by default.  To enable use of GDBM
     users must now explicitly pass --with-gdbm to configure, since GDBM
     is licensed under the GPL.
     [Garrett Rooney]

  *) Fix VPATH builds, and symlink builds where apr and apr-util
     reside in parallel as symlinks to directories with more explicit
     names, e.g. apr-1.x and apr-util-1.x.  This solves various breakage
     on Solaris in particular with ./buildconf and ./configure.  Also
     eliminated the nested ../apr-iconv/buildconf, given that apr-util
     didn't bother with ../apr/buildconf, and this was inconsistant.
     [William Rowe]

  *) Fix the escape implementations for the sqlite2 and sqlite3 dbd
     back ends.
     [Ronen Mizrahi <ronen tversity.com>, Garrett Rooney]

  *) Add support for Berkeley DB 4.4 to the configure scripts.
     [Garrett Rooney]

  *) Fix bug in test suite that cause testbuckets to write 8GB file
     on Mac OS X.  [Justin Erenkrantz]

Changes with APR-util 1.2.2

  *) Teach configure how to find the Novell LDAP SDK. [Graham Leggett]
 
  *) Fix usage of ldapssl_init/ldap_sslinit on platforms that support
     these API's including Win32.  Support APR_HAS_LDAP_START_TLS_S
     flag in the Win32 LDAP API, to drop usage of ldap_start_ssl_s
     and ldap_stop_ssl_s on Win32 by default (change the flag in apr_ldap.hw
     to enable if supported on a given OS level). [William Rowe]

Changes with APR-util 1.2.1

  *) Fix apr_rmm_realloc() offset calculation bug.  [Keith Kelleman
     <keith.kelleman oracle.com>]

  *) Add sqlite3 support to APR DBD. [Rick Keiner <rick_keiner yahoo.com>]

  *) Fix build failure with non-threaded APR on AIX.  PR 34655.
     [Ryan Murray <rmurray+apache cyberhqz.com>]

  *) Add sqlite2 support to APR DBD. [Ryan Phillips <ryan trolocsis.com>]

  *) Introduction of APR DBD layer.  [Nick Kew]

Changes with APR-util 1.1.2

  *) Fix libaprutil.rc for Win32 builds [William Rowe, Justin Erenkrantz]

Changes with APR-util 1.1.1

  *) Fix memory leak in buckets when using APR_POOL_DEBUG mode. [Joe Schaefer]

  *) find_apu.m4: Try installed APR-util before bundled copy if --with-apr-util
     not passed to configure.  [Justin Erenkrantz] 

Changes with APR-util 1.1.0

  *) LDAP: Move all certificate initialisation, and the creation of SSL
     and TLS connections into the apr_ldap_set_option() API. Add support
     for client certificates. [Graham Leggett]
 
  *) Emit the run-time link path option in apu-config after installation
     if the user is linking with libtool.  [Justin Erenkrantz]

  *) Port testmd4 and testmd5 to the new test suite. [Thom May]

  *) Allow passing NULL inbuf/inbytes_left parameters to
     apr_xlate_conv_buffer(), required to correctly terminate the
     output buffer for some stateful character set encodings.
     [Joe Orton]

  *) Link libaprutil against the libraries on which it depends.
     PR 11122.  [Joe Orton]

  *) Add apr_brigade_insert_file() function, to safely insert a file
     into a brigade, regardless of size.  [Joe Orton]

Changes with APR-util 1.0.2

  *) Teach apr_ldap_init() how to handle STARTTLS in addition to the existing
     SSL support. Add apr_ldap_option API. [Graham Leggett]

  *) Rework the LDAP toolkit detection to be more accurate than "OpenLDAP
     detected regardless", while remaining backwards compatible with v1.0.
     [Graham Leggett]

  *) Added the apr_ldap_ssl_add_cert() API to allow multiple certificates
     to be stored and used when establishing an SSL connection to different
     LDAP servers. [Brad Nicholes]

  *) Fix the detection of ldap.h on Solaris - it needs lber.h to be
     defined first. [Graham Leggett]

  *) Add a build script to create a solaris package. [Graham Leggett]

Changes with APR-util 1.0.1

  *) Add support for Berkeley DB 4.3.  [Jani Averbach <jaa jaa.iki.fi>]

  *) SECURITY: CAN-2004-0786 (cve.mitre.org)
     Fix input validation in apr_uri_parse() to avoid passing negative
     length to memcpy for malformed IPv6 literal addresses.
     [Joe Orton]

Changes with APR-util 1.0

  *) Only install apu-$MAJOR-config and add appropriate detection code to
     find_apu.m4 (APU_FIND_APU).  [Max Bowsher <maxb ukf.net>]

  *) Overhaul support for LDAP URL parsing. Instead of using incompatible
     URL parsers and memory that needs freeing, apr-util provides a parser
     which parses the URL and allocates memory from a pool. [Graham Leggett]

  *) Remove support for LDAP v2.0 SDK toolkits. This will be added
     back properly later assuming there is demand for it. In the mean
     time, please use an LDAP v3.0 SDK toolkit. [Graham Leggett]

  *) Add an apr_ldap_err_t structure to handle the return of LDAP
     specific error codes. [Graham Leggett, Brad Nicholes]

  *) Add APR functions to do the job of ldap_init(), hiding toolkit
     specific SSL/TLS handling. Code derived from httpd util_ldap.
     [Graham Leggett]

  *) Add an RPM spec file derived from Fedora Core.
     [Graham Leggett, Joe Orton]

  *) The whole codebase was relicensed and is now available under
     the Apache License, Version 2.0 (http://www.apache.org/licenses).
     [Apache Software Foundation]

  *) A new function, apr_reslist_invalidate, was added so that invalid
     resources can be removed from a reslist instead of being returned
     to the reslist in a broken state.  [Nick Kew <nick webthing.com>]

  *) Switch to a single, top-level make. [Greg Stein]

  *) Add timeout feature to apr_reslist_acquire().  
     [Mladen Turk <mturk apache.org>]

  *) Pass error codes returned from constructors all the way back to
     the reslist consumer. Also fix a minor reslist memory leak that could
     happen when a constructor returns an error code.  PR 23492.
     [Snke Tesch <st@kino-fahrplan.de>, Aaron Bannert]

  *) The following header files have been removed:

     apu_compat.h

Changes with APR-util 0.9.5

  *) Fix corrupt output from the apr_xlate_* interfaces on AIX 4.x.
     [Joe Orton]

  *) Change the order in which ldap.h and lber.h are defined, to fix
     a compile bug in Solaris v2.8 which requires lber.h then ldap.h.
     PR 27379.  [Andrew Connors <andy.connors idea.com>]
 
  *) Restore support for SHA1 passwords in apr_validate_password.
     PR 17343.  [Paul Querna <chip force-elite.com>]

  *) Fix DESTDIR install for bundled expat library.  PR 14076
     [David S. Madole <david madole.net>]

  *) Fix occasional crash in apr_rmm_realloc().  PR 22915.
     [Jay Shrauner <shrauner inktomi.com>]

  *) Fix apr_dbm_exists() for sdbm when sizeof(int) != sizeof(size_t). 
     [Joe Orton]

  *) The whole codebase was relicensed and is now available under
     the Apache License, Version 2.0 (http://www.apache.org/licenses).
     [Apache Software Foundation]

  *) Fix xlate.c compile failure on AIX 5.2.  PR 25701.  [Jeff Trawick]

  *) Fixed a bug in apr_rmm that would cause it to mishandle blocks of
     a size close to the one requested from the allocator.
     [Kevin Wang <xwang_tech yahoo.com>]

Changes with APR-util 0.9.4

  *) Changed apr_bucket_alloc_create() so that it uses the allocator
     from the pool that was passed in rather than creating its own.
     Also, the bucket_allocator is now allocated from the apr_allocator_t
     rather than using apr_palloc().  Added apr_bucket_alloc_create_ex()
     which takes an apr_allocator_t* directly rather than an apr_pool_t*.
     [Cliff Woolley, Jean-Jacques Clar]

  *) Added debugging consistency checks to the buckets code.  Add
     -DAPR_BUCKET_DEBUG to the build flags to enable.
     [Cliff Woolley]

  *) Make the version of the db library APU built against visible.
     [Thom May]

  *) Fix a problem with VPATH builds copying the APR rules.mk into the
     source directory rather than the build directory.  [Justin Erenkrantz]

  *) SECURITY [httpd incident CAN-2003-0189] Address a thread safety
     issue with apr_password_validate() on AIX, Linux, Mac OS X, and
     possibly other platforms.  [Jeff Trawick, Justin Erenkrantz]

  *) Fix a problem with LDAP configuration which caused subsequent
     configure tests to fail since LIBS contained LDAP libraries for
     subsequent tests but LDFLAGS no longer included the path to such 
     LDAP libraries.  [Jeff Trawick]

  *) Fix a problem preventing the use of the bundled Expat when APR-util
     is built stand-alone.  [Jeff Trawick]

  *) Use the same compiler and preprocessor for the APR-util config tests
     which were used by APR.  The user can override this via CC and CPP.
     This was done all along for the actual build, but not necessarily
     for the config tests.  [Jeff Trawick]

  *) Fix apr_uuid_parse() on EBCDIC machines.  [Jeff Trawick]

  *) Fix alignment problem when allocating memory using apr_rmm. The problem
     showed up while trying to write a double in the memory allocated.
     [Madhusudan Mathihalli]

Changes with APR-util 0.9.3

  *) Allow apr_date_parse_rfc to parse 'Sun, 06-Nov-1994 08:49:37 GMT' as a
     valid date.  [Dmitri Tikhonov <dmitri@netilla.com>]

  *) Fix error in apu-config when symlinks are involved.
     [Garrett Rooney <rooneg@electricjellyfish.net>]

Changes with APR-util 0.9.2

  *) Fix the APR_BUCKET_IS_foo() macros so they parenthesize their parameter.
     This fixes compile problems with some types of parameters.
     [Jim Carlson <jcarlson@jnous.com>]

  *) Queue overwrite, we now return the item pushed, not a reference to it. 
     [Paul Marquis <PMarquis@pobox.com, Jacob Lewallen <jlwalle@cs.ucr.edu>]

  *) Remove include/apr_ldap.h on distclean.  PR 15592.  [Justin Erenkrantz]

  *) Fix race conditions in apr_queue.
     [Jacob Lewallen <jlwalle@cs.ucr.edu>]

  *) Stop buildconf copying rules.mk, copy it at configure time. 
     [Thom May]

  *) Make buildconf copy rules.mk as well. 
     [Garrett Rooney <rooneg@electricjellyfish.net>]

  *) Add --includedir flag to apu-config.  [Justin Erenkrantz]

  *) Fix brokenness in sdbm when sizeof(int) != sizeof(size_t)
     (e.g., 64-bit AIX, 64-bit Solaris).  PR 14861.  [Jeff Trawick]

  *) Have buildconf copy required files from apr so that apr-util can build
     on its own.  [Craig Rodrigues <rodrigc@attbi.com>]

  *) Detect OpenLDAP when used with Solaris 9. PR 13427.
     [Gary Algier <gaa@ulticom.com>]

  *) Detect Berkeley DB 4.1 when compiled with --with-uniquenames
     [Thom May]

  *) Allow apu-config to work in symlinked install directories when
     'realpath' is available.  [Justin Erenkrantz]

  *) Fix bug in apr_strmatch when used with case-insensitive patterns.
     [Justin Erenkrantz]

  *) Allow apr_queue to have greater than int number of elements.
     [Justin Erenkrantz]

  *) Detect Berkeley DB 4.0 compiled with --with-uniquenames.
     [Philip Martin <philip@codematters.co.uk>]

  *) Allocate brigades from a bucket allocator rather than a pool. [Brian Pane]

  *) Update with the latest APR renames [Thom May]

  *) Update doxygen tags.  [Justin Erenkrantz]

  *) Add apr_ldap.hw for Windows build.
     [Andre Schild <A.Schild@aarboard.ch>]

  *) Add IPv6 literal address support to apr_uri_parse(), apr_uri_unparse(), 
     and apr_uri_parse_hostinfo().  PR 11887  [Jeff Trawick]

  *) Add apr_brigade_writev()  [Brian Pane]

  *) Add support for Berkeley DB 4.1.  [Justin Erenkrantz]

  *) Add --bindir option to apu-config.  [Justin Erenkrantz]

Changes with APR-util 0.9.1

  *) Add versioning infrastructure.
     [Justin Erenkrantz]

  *) Running "make check" in the toplevel directory or the test/ directory
     will build and run all test programs.  [Aaron Bannert]

  *) Bug #9789 : NDBM support 
     [Toomas Soome <tsoome@muhv.pri.ee>, Ian Holsman]

  *) Added a Thread safe FIFO bounded buffer (apr_queue) [Ian Holsman]

  *) Changed file_bucket_setaside() to use apr_file_setaside() instead
     of turning the file bucket into an mmap bucket.  [Brian Pane]

  *) Install libaprutil support libraries before installing libaprutil
     itself, since on some platforms libaprutil is relinked during
     make install and the support libraries need to exist already.
     [Jeff Trawick]

  *) Added a Resource List API for threadsafe access to persistent
     and dynamically created user-defined resources.  [Aaron Bannert]

  *) Adopted apr-util/xlate from apr/i18n for inclusion of apr-iconv
     as required by missing libiconv.  [William Rowe]

  *) Adopted apr-util/crypto/ uuid and md5 from apr.  [William Rowe]

  *) Look for expat in lib64 directories.  [Peter Poeml <poeml@suse.de>]

  *) Faster implementation of apr_brigade_puts()  [Brian Pane]

  *) Fixed a segfault in apr_date_parse_rfc() for some date formats
     where it was trying to overlay a potentially static input
     string even though it didn't really need to.
     [Cliff Woolley, Doug MacEachern]

  *) Ensure that apu-config does not print libtool libraries when
     using --libs.  [Justin Erenkrantz]

  *) Added apr_bucket_file_enable_mmap() function to the bucket
     API to let an application control whether a file bucket may
     be turned into an mmap bucket upon read.  (The default remains
     to do the mmap, but this function lets the app prevent the
     mmap in contexts where mmap would be a bad idea.  Examples
     include multiprocessors where mmap doesn't scale well and
     NFS-mounted filesystems where a bus error can result if
     a memory-mapped file is removed or truncated.) [Brian Pane]

  *) Added string-matching API (apr_strmatch.h)  [Brian Pane]

  *) Rearrange INCLUDES so that APRUTIL_PRIV_INCLUDES is always
     first.  [Garrett Rooney <rooneg@electricjellyfish.net>]

  *) Add --old-expat option to apu-config to allow users of apr-util to
     determine what expat it should expect to be installed.  If the
     flag is set to yes, it should include xmlparse.h.  If it is set to
     no, it should include expat.h.  [Justin Erenkrantz]

  *) Fix exporting of includes in apu-config.  [Justin Erenkrantz]

  *) Change bucket brigades API to allow a "bucket allocator" to be
     passed in at certain points.  This allows us to implement freelists
     so that we can stop using malloc/free so frequently.
     [Cliff Woolley, Brian Pane]

  *) add apr_rmm_realloc() function
     [Madhusudan Mathihalli <madhusudan_mathihalli@hp.com>]

  *) renames: apr_ansi_time_to_apr_time becomes apr_time_ansi_put
     ap_exploded_time_t becomes apr_time_exp_t
     [Thom May <thom@planetarytramp.net>]

  *) Add detection support for FreeBSD's expat and expat2 ports.
     [Justin Erenkrantz]

  *) Deprecate check_brigade_flush(), which had several nasty bugs, and
     which was causing apr_brigade_write()'s logic to be less than obvious.
     Everything is now done in a slightly rearranged apr_brigade_write().
     [Cliff Woolley]

  *) Don't add /usr/include to the INCLUDES variable on expat's account.
     [Joe Orton <joe@manyfish.co.uk>]

  *) Remove the autoconf 2.5x cache directory in buildconf.
     [Joe Orton <joe@manyfish.co.uk>]

  *) BerkleyDB should NULL out the key if it is @EOF in vt_db_nextkey
     [Ian Holsman]

  *) Add ability to natively fetch and split brigades based on LF lines.
     [Justin Erenkrantz]

  *) add --with-berkeley-db=DIR & --with-gdbm  configure flags
     [Ian Holsman/Justin Erenkrantz]

  *) Fix expat detection to recognize installed versions.
     [Eric Gillespie, Jr. <epg@pretzelnet.org>]

  *) Add find_apu.m4 to allow third-party programs that use APR-util
     to have a standard m4 macro for detection.  [Justin Erenkrantz]

  *) Add apu-config - a shell script to allow third-party programs
     easy access to APR configuration parameters.  [Justin Erenkrantz]

  *) Add GMT offset calculation to apr_date_parse_rfc().  
     [Justin Erenkrantz]

  *) Introduce the apr_rmm api, to allow relocatable memory management
     of address-independent data stores, such as shared memory.
     [William Rowe]

  *) Rework and fix VPATH-build support.  [Justin Erenkrantz]

  *) Add support for Berkeley DB4.  [Justin Erenkrantz]

  *) Improve testdbm help.  [Justin Erenkrantz]

  *) Improve autoconf detection of DBMs.  [Justin Erenkrantz]

  *) BerkeleyDBM v2 now checks minor level for cursor ops [Ian Holsman]

  *) Reading a file bucket bigger than APR_MMAP_LIMIT (4MB) now yields
     a string of 4MB mmap buckets, rather than a string of 8KB heap buckets
     plus a 4MB mmap bucket.  To accomodate this, the mmap bucket destroy
     function explicitly deletes the apr_mmap_t after last reference
     to avoid having too much of a large file mapped at once if possible.
     [Cliff Woolley]

  *) Multi-DBM support (via apr_dbm_open_ex).  [Ian Holsman]

  *) Use apr_mmap_dup in mmap_setaside().  [Brian Pane <bpane@pacbell.net>]

  *) Dropped the "w" parameter from apr_bucket_heap_create() and
     apr_bucket_heap_make().  That parameter was originally intended
     to return the amount of data copied into the bucket, but it
     ended up being unnecessary because that amount is invariant from
     the size of the data and is available as b->length in the
     resulting bucket anyway.  [Cliff Woolley]

  *) Fix Makefile conversion for BSD/OS.  [Cliff Woolley]

  *) Use APR_XtOffsetOf instead of offsetof() in the ring macros for
     portability.  [Cliff Woolley]

  *) We now create exports.c and export_vars.h, which in turn create
     exports.c.  From this we generate two more files with different
     purposes: aprutil.exp - list of exported symbols; and exports.lo
     (exports.o) - an object file that can be linked with an executable
     to force resolution of all apr-util symbols.   [Aaron Bannert]

  *) Fix Berkley DBM support [Ian Holsman <ianh@apache.org>]

  *) Fix apr_brigade_vprintf so that it can handle more than
     4k of data at one time.  [Cody Sherr <csherr@covalent.net>]

  *) prefix UNP_* flags with APR_URI_

     rename:
     apr_uri_components                  -> apr_uri_t
     apr_uri_unparse_components          -> apr_uri_unparse
     apr_uri_parse_components            -> apr_uri_parse
     apr_uri_parse_hostinfo_components   -> apr_uri_parse_hostinfo

     s/APU_URI_/APR_URI_/g
     [Perl]

  *) Landed the link-to-LDAP to the build process, and the LDAP v2/v3
     compatibility functions.
     [Dave Carrigan <dave@rudedog.org>, Graham Leggett]

  *) Fix URI unparse function to handle the case where it would place a @
     when both the username and password were present but omitted.
     [Jon Travis <jtravis@covalent.net]

  *) Added apr_xml_parse_file() routine and a testxml program.
     [Ian Holsman <ianh@cnet.com>]

  *) Extend apr_bucket struct to add a pointer to a function used
     to free the bucket. This change enables custom buckets to
     completely specify how they are to be allocated and freed.
     Before this change, custom buckets were required to use the 
     same memory allocation scheme as the standard APR buckets.
     [Saeid Sakhitab, Bill Stoddard, Cliff Woolley, Roy Fielding]

  *) Install Expat when installing APR-util.  [Justin Erenkrantz]

  *) Make APR-util configure script rely on APR.  This removes the locally
     generated copy of libtool and uses the one in APR.  Fix up how we
     call the expat configure script.  Generate config.nice file.
     [Justin Erenkrantz]

  *) The apr_bucket lengths are now consistently apr_size_t, while any
     apr_brigade lengths (short of a read) are consistently apr_off_t.
     This is required for APR_HAS_LARGE_FILES handling.  [William Rowe]

  *) apr_bucket_file_create() and apr_bucket_file_make() now take a pool
     parameter which is the pool into which any needed data structures
     should be created during file_read().  This is used for MMAPing the
     file and reopening the file if the original apr_file_t is in XTHREAD
     mode.  [Cliff Woolley]

  *) apr_brigade_partition() now returns an apr_status_t. [Cliff Woolley]

  *) Add MD4 implementation in crypto.  [Sander Striker, Justin Erenkrantz]

  *) Moved httpd 2.0.18's util_date to apr_date and enhanced its parsing
     capabilities.  [Justin Erenkrantz]

  *) Moved httpd 2.0.18's util_uri to apr_uri and name-protected its
     symbols and functions.  [Justin Erenkrantz, Roy Fielding]

  *) Rename field "private" in struct apr_xml_elem to "priv" for C++
     compatibility.  PR #7727  [Joshua MacDonald <jmacd@cs.berkeley.edu>]

  *) Make APR_IMPLEMENT_EXTERNAL_HOOK_BASE generate a 
     ${namespace}_hook_get_${hookname} function to fetch the
     list of registered hooks [Doug MacEachern]

  *) Allow LTFLAGS to be overridden by the configure command-line
     (default="--silent") and introduce LT_LDFLAGS.  [Roy Fielding]

  *) Add APR_SHARELOCK support to apr_sdbm_open(), locking read operations
     with a shared lock and all write ops with an excl lock.  [Will Rowe]

  *) Namespace protect apr_sdbm, and normalize the return values (including
     the apr_sdbm_fetch, apr_sdbm_firstkey and apr_sdbm_nextkey functions).
     Normalized the get/clear error function names, and stores the actual 
     apr error for apr_sdbm_error_get. [Will Rowe]

  *) Introduce an apr_fileperms_t argument to apr_dbm_open(). [Will Rowe]

  *) Removed apr_bucket_do_create() macro, which was causing warnings
     about unreachable code in some compilers (notably MSVC).  What
     used to be done by this macro is now done inline in the various
     apr_bucket_foo_create() functions.  [Cliff Woolley]

  *) Make clean, distclean, and extraclean consistently according to the
     Gnu makefile guidelines.  [Justin Erenkrantz <jerenkrantz@ebuilt.com>]

  *) Migrate the --disable-libtool changes from APR to APR-util.
     This cleans things up, and allows more flexibility when building
     programs.  [Ryan Bloom]

  *) Allow APR-util to be compiled without libtool.  The default is
     to use libtool, but it can turned off with --disable-libtool
     on the configure command.  [Ryan Bloom]

  *) Repair calling convention for apr_register_optional_fn to
     eliminate GP fault on Win32.  [William Rowe]

  *) Substantial changes to correct linkage and declarations for
     generic hooks on dso architectures.  [Ben Laurie, Will Rowe]

  *) apr_bucket_shared_destroy() now returns a boolean value.
     [Cliff Woolley]

  *) We have to initialize the heap buckets to the correct length.
     we were seeing heap buckets with 17 chars in them reporting
     a length of 9017, because they were initialized to the amount
     of memory allocated, instead of the amount of memory used.
     This was only an issue for heap buckets created by the
     apr_brigade_* functions.   [Ryan Bloom]

  *) apr_bucket_init_types() and apr_bucket_insert_type() have been
     removed... they're not needed anymore. [Cliff Woolley]

  *) The apr_bucket_shared and apr_bucket_simple structures have been
     removed as an API simplification/optimization.  This should be
     transparent outside APR-util except to callers who attempt to
     directly manipulate the buckets' internal structure (which is
     not recommended anyway) and to callers who create their own
     bucket types. [Cliff Woolley]

  *) apr_bucket_simple_split() and apr_bucket_simple_copy() are now
     exported functions, which could be helpful in implementing
     external bucket types. [Cliff Woolley]

  *) The third parameter to apr_bucket_shared_make() is now
     'apr_off_t length' rather than 'apr_off_t end', since the
     end usually had to be computed by the caller and all we
     really want is the length anyway. [Cliff Woolley]

