varnishd

The code required to allow VCL to read `obj.status`, which had accidentally been left out, has now been added.

Varnish will now always include a `Connection:` header in its reply to the client, to avoid possible misunderstandings.

A bug that triggered an assertion failure when generating synthetic error documents has been corrected.

A new VCL function, `purge_url`, provides the same functionality as the `url.purge` management command.

Previously, Varnish assumed that the response body should be sent only if the request method was `GET`. This was a problem for custom request methods (such as `PURGE`), so the logic has been changed to always send the response body except in the specific case of a `HEAD` request.

Changes to run-time parameters are now correctly propagated to the child process.

Due to the way run-time parameters are initialized at startup, `varnishd` previously required the `nobody` user and the `nogroup` group to exist even if a different user and group were specified on the command line. This has been corrected.

Under certain conditions, the VCL compiler would carry on after a syntax error instead of exiting after reporting the error. This has been corrected.

The manner in which the hash string is assembled has been modified to reduce memory usage and memory-to-memory copying.

Before calling `vcl_miss`, Varnish assembles a tentative request object for the backend request which will usually follow. This object would be leaked if `vcl_miss` returned anything else than `fetch`. This has been corrected.

The code necessary to handle an `error` return from `vcl_fetch` and `vcl_deliver` had inadvertantly been left out. This has been corrected.

Varnish no longer prints a spurious "child died" message (the result of reaping the compiler process) after compiling a new VCL configuration.

Under some circumstances, due to an error in the workspace management code, Varnish would lose the "tail" of a request, i.e. the part of the request that has been received from the client but not yet processed. The most obvious symptom of this was that POST requests would work with some browsers but not others, depending on details of the browser's HTTP implementation. This has been corrected.

On some platforms, due to incorrect assumptions in the CLI code, the management process would crash while processing commands received over the management port. This has been corrected.

Build system

The top-level Makefile will now honor `$DESTDIR` when creating the state directory.

The Debian and RedHat packages are now split into three (main / lib / devel) as is customary.

A number of compile-time and run-time portability issues have been addressed.

The `autogen.sh` script had workarounds for problems with the GNU autotools on FreeBSD; these are no longer needed and have been removed.

The `libcompat` library has been renamed to `libvarnishcompat` and is now dynamic rather than static. This simplifies the build process and resolves an issue with the Mac OS X linker.