Forum OpenACS Development: ANNOUNCE: NaviServer 4.99.11 available
I am pleased to announce the availability of NaviServer 4.99.11 (see [1] and [2]). NaviServer 4.99.11 was tested with OpenACS 5.9.0. See below for the changes between NaviServer 4.99.10 and 4.99.11.
all the best
-gustaf neumann
[1] https://sourceforge.net/projects/naviserver/
[2]
https://bitbucket.org/naviserver/naviserver/
======================================= NaviServer 4.99.11, released 2016-05-01 ======================================= Changes relative to 4.99.10 156 files changed, 8613 insertions(+), 3142 deletions(-) New Features: * IPv6 support: NaviServer works now with IPv6 and IPv4 addresses. It is e.g. possible to use "::" as address (to denote the unspecified address, roughly similar to 0.0.0.0 in IPv4) to accept any IPv6 or IPv4 address, when the OS supports IPv4-mapped addresses, or one can use arbitrary addresses. Note, that one can as well load the driver for a server multiple times, once with an IPv6 and once with an IPv4 address. Adding this feature required changes in the drivers, since earlier versions had IPv4 structures compiled in. As a consequence, also drivers for additional protocols have to be adjusted (for this release, the IPv6-adjusted modules are all modules of the naviserver core, plus nsssl, nsudp, nssmtpd, nsdns) * Added HTTP/1.1 pipelining support: Pipelining is a (not so often used) feature of HTTP/1.1 where multiple requests are sent on a persistent connection without waiting for the results of the first request. Recently more (esp. mobile) clients started to use pipelining. Previous versions of NaviServer handled just the first request of the pipeline and swallowed (ignored) later requests of the pipeline. * Added support for HTML5 file attribute "multiple": HTML5 allows for uploading multiple files under the same INPUT name. Previous version of NaviServer just accepted the first file with the given name. * Reduced memory consumption: - Improved support from upload handling of large input. When uploads larger than "maxupload" is spooled to a file, the results are available via [ns_conn contentfile] rather than [ns_conn content]. There might be many places in application programs, where this distinction might be relevant. The new version gets now form content via [ns_getform] from both sources, fixes potential encoding problems. Similarly, the new function [ns_getcontent] returns the unparsed content either binary or encoded as file or as string. These new features makes it easer to use upload spooling to avoid memory bloats. - Furthermore, (spooled) files can be sent from disk to some http server via ns_http (or ns_ssl) without the need to load the content first to memory by using the new parameter body_file) * Improved crypto-support: the new version supports SHA2 hash codes (command ns_sha2) and keyed message authentications based on SHA2 (command ns_hmac_sha2). The new version uses the C implementation of the crypto functions by Olivier Gay <olivier.gay@a3.epfl.ch>. * Reduced memory consumption: avoid memory bloat on uploads and in HTTP client operations with large contents (esp. useful for contents >1GB). ns_getform an the new ns_getcontent work now on spooled and in-memory content in a uniform manner. * Improved debugging support: new severity "Debug(request)" can be used follow life-time of a request (useful especially for inspecting concurrency of long-running requests). Bug Fixes: - Fixed potential lockup, when bind operation fails, e.g. when server is already running (old bug) - Keep query parameter after directory induced redirect in fastpath (bug report of David Osborne in the NaviServer list) - Don't swallow erroneous HTTP requests: previously, error replies generated from the driver (e.g. 400 invalid request) were not logged at all (neither in the access.log or in the error.log). This is due to the nature, how the nslog modules works. Now such conditions are reported in the error.log. - Make HTTP-request line parser more precise. Previously many invalid requests were treated as HTTP/0.9 requests leading to strange error messages. - Provide more (and more detailed) error messages to ease debugging. - Improve validity of HTML error messages generated by NaviServer - Resurrect handling of non-HTTP drivers (based on drvPtr->requestProc) such as nssmtpd. - apply url-encoded form parsing only when content is www-form-urlencoded. Previously, it was attempted on every content which might lead to unexpected results. Documentation improvements: - Align style and logo of default web server configuration with style of man pages - Improved validity of HTML man pages - Fixed documentation bug on ns_cookie - Improved documentation of configure parameters - various more man pages updated Tcl API Changes: - new function: [ns_info ipv6] obtains information whether the binary supports IPv6 or not - As a consequence of "multiple file" support (see above) the following functions return for the specified name potentially a list of values [ns_conn fileoffset $name] [ns_conn filelength $name] [ns_conn fileheaders $name] and the ns_set returned by [ns_getform] will contain multiple entries for the file (and $name.tmpfile and $name.content-type). - new commands: * ns_sha2 ?-length ...? data * ns_hmac_sha2 ?-length ...? key message * ns_getcontent (obtain body of request either from memory of from spoolfile without memory bloat on huge files) - new option "-body_file" for ns_http and ns_ssl. By using this parameter one can send huge files without memory bloat (i.e. loading the full file into memory). The function is more or less the counterpart to the spoolfile for uploads when the content is larger than maxupload. - ns_getform processes content from [ns_conn content] or [ns_conn contentfile] (whatever is available). - interface change: * old interface of ns_sendmail based on positional arguments is deprecated * new interface of ns_sendmail is ns_sendmail ?-to ...? ?-from ...? ?-subject ...? ?-body ...? \ ?-headers ...? ?-bcc ...? ?-cc ...? C API Changes: - New functions: * Ns_HttpParseHost(): parses host and port number from a string. Reason: IPv4 address conventions use simply a colon for separating host and port, but IPv6 address contain as well various colons. The new function supports IP-literal notation according to RFC 3986 section 3.2.2 (IP address between square brackets), which has to be used as well for IPv6. * Similarly, the new function Ns_HttpLocationString() to unifies now generation of host and location strings * New IP version agnostic functions for manipulating sockets, addresses and ports: Ns_LogSockaddr(), Ns_SockaddrGetPort(), Ns_SockaddrGetSockLen(), Ns_SockaddrMask(), Ns_SockaddrMaskBits(), Ns_SockaddrSetPort(), Ns_SockaddrSameIP(), ns_inet_ntop(), ns_inet_pton() * New function Ns_ConnReturnInvalidMethod() to report that the provided method is invalid (was returning "not found" before) * New function Ns_DStringAppendPrintable() to append a string which might contain non-printable characters in a printable fashion to a DString (useful for e.g. debugging) * Ns_Stat() is the former function FastStat() from fastpath made reusable in other modules. - Changed C-API functions (incompatible with earlier versions): * The following function accept now generic (version agnostic) sockaddr: Ns_BindSock(), Ns_ConnSetPeer(), Ns_GetSockAddr(), Ns_SockBind(), Ns_SockBindUdp() * Ns_CtxString() renamed to Ns_HexString() to make its intention more clear and added a parameter to control lower and upper case Configuration Changes: * New configure flag --disable-ipv6 to build NaviServer just with IPv4 support, even when IPv6 support is available. * Updated sample config files for IPv6 * Added makefile target: "lldb-sample" lets one running nsd with the sample config file "nsd-config.tcl" under lldb Command Line Changes: * Extended prebind options to work with IPv6 addresses Code Changes: * All built-in MIME types are updated and completed with the IANA media type definitions. Warning: This change might return now different results from ns_guesstype unless the mime type is specified in the config file. * Improve reusability: The new version exports the low-level I/O functions of nssock to make it reusable in other driver modules. The following functions are now exported to a library: Ns_DriverSockAccept(), Ns_DriverSockRecv(), Ns_DriverSockSend(), Ns_DriverSockClose() * Code cleanup: - used clean approach to obtain hex string from function pointer - use boolean types on more occasions - use more often typedef-ed function definitions - make NS_TCL_SET_STATIC and NS_TCL_SET_DYNAMIC an enum (Ns_TclSetType), since the values are mutual exclusive * Regression tests - extended test (we have now 1084 test cases) - remove deprecated calls in regression test
Posted by
Benjamin Brink
on 06/01/16 01:57 AM
Hi,
Regarding: "for this release, the IPv6-adjusted modules are all modules of the naviserver core, plus nsssl, nsudp, nssmtpd, nsdns"
Does this mean that nsssl is already installed with naviserver, so that one does not need to install nsssl separately (for either ipv6 or ipv4)?
Posted by
Benjamin Brink
on 06/01/16 02:32 AM
Nevermind. It doesn't.
Posted by
Gustaf Neumann
on 06/01/16 08:02 AM
The (extra) modules have to installed separately as always, these are included in the naviserver-$VERSION-modules.tar.gz on sourceforge [1]. For NaviServer version 4.99.11, this file is naviserver-4.99.11-modules.tar.gz. There are no separate modules for IPv4 and IPv6 (like there are no separate versions of NaviServer for IPv4 and IPv6).
all the best
-gn
[1] https://sourceforge.net/projects/naviserver/files/naviserver/
Posted by
Benjamin Brink
on 06/01/16 09:17 AM
Thank you for the clarifications, Gustaf.