• Announcement: NaviServer 5.0.0 Release

    From neumann@neumann@wu-wien.ac.at (gustafn) to comp.lang.tcl on Sat Jul 12 13:10:46 2025
    From Newsgroup: comp.lang.tcl

    Dear all,

    We are glad to announce the final release of NaviServer 5.0.0, marking
    the most significant update in the projectrCOs history with over 70,000
    lines of changes. This release delivers robust security enhancements, modernized infrastructure, and improved scalability. Key highlights
    include:

    Security by Default: HTTP client requests now validate server
    certificates automatically, with configurable trust exceptions and a
    bundled CA root store. A new pluggable authorization framework (ns_auth) enables scriptable request- and user-level access control.
    Modernized Core: Unix domain socket support, case-insensitive
    ns_set, Argon2 password hashing, and streamlined configuration via
    environment variables (ideal for containers). The reverse proxy is now
    built into the core, with new forward proxy capabilities.

    Enhanced Observability and Scalability: Improved logging (dynamic
    paths, rotation, and new "Security" severity), detailed connection
    diagnostics (ns_conn urldict, ns_connchan debug), runtime introspection (ns_http keepalives, ns_info buildinfo), persistent client connections,
    and streaming HTTP client processing.

    Backward Compatibility & Future-Readiness
    While introducing cutting-edge features, NaviServer 5.0.0 maintains
    strong backward compatibility, with deprecated APIs clearly documented
    and modern replacements provided (e.g., ns_urlencode raA
    ns_percentencode). The release introduces/extends over 50 Tcl commands
    and subcommands. The upgrade to MPL 1.2 and Tcl 9 support ensures
    long-term sustainability. Over 20 community-contributed modules (like
    nsdbpg, nssmtpd) have been updated in lockstep.

    The following people contributed to this release:

    Alexander Danilov, Andrew Piskorski, Antonio Pisano, Brendan Graves,
    Brian Fenton, Danilo Raynor, David F, David Osborne, Filip Minic, Georg
    Lehner, Gustaf Neumann, Hector Romojaro, Joe Oldak, Oleg Oleinick,
    Priyank Jalu, Thomas Renner, Zoran Vasiljevic

    Resources:

    Source as tar file: https://sourceforge.net/projects/naviserver/files/naviserver/5.0.0/
    GitHub repository: https://github.com/naviserver-project/naviserver Documentation: https://github.com/naviserver-project/naviserver

    This release is a major leap forward in security, flexibility, and maintainability. See below for the detailed changes: Upgrade today!

    The NaviServer Team

    =======================================
    NaviServer 5.0.0, released 2025-07-08
    =======================================

    520 files changed, 78805 insertions(+), 32992 deletions(-)

    New Features:
    -------------

    Security Enhancements

    rCo Security by Default when NaviServer is used as an HTTP client
    (ns_http and ns_connchan)
    All HTTP client requests now validate the peer server certificate by default.
    rua Introduced the -insecure flag to bypass validation in trusted scenarios.
    rua Bundled a ca-bundle.crt with well-known root certificates for out-of-the-box verification support.

    rua Fine-Grained Validation Management:
    ru- Configure validation exceptions in the httpclient section to
    allow specific
    certificate issues (e.g., self-signed certs) for defined IP
    ranges.
    ru- Define a directory for storing rejected certificates, enabling
    later review,
    manual trust decisions, or audit trails.
    ru- For details, consult the admin-config manual.

    rCo Certificate Management
    Added new commands:
    rua ns_certctl list rCo List loaded certificates.
    rua ns_certctl reload rCo Reload certificates at runtime.

    rCo Pluggable Authorization Framework
    rua Introduced flexible, scriptable request- and user-level
    authorization:
    rua Supports multiple authorization handlers ("authorities") with
    ordered evaluation.
    rua Handlers can return continuation codes (TCL_OK, TCL_BREAK,
    TCL_RETURN)
    to control the authorization chain.
    rua New Tcl commands:
    ru- ns_auth request rCo Evaluate configured request-level auth
    handlers.
    ru- ns_auth user rCo Evaluate user-level authorization logic.

    rCo Improved Reverse Proxy Trust Management
    rua Define trusted upstream proxies via CIDR ranges.
    rua Configurable handling of X-Forwarded-For chains, including:
    ru- Skipping non-routable addresses.
    ru- Alternative resolution strategies.
    rua Improves accuracy and security of client IP logging (e.g., in access.log).
    rua For implementation details, see commit ab23158ece.

    rCo Argon2 Password Hashing New command: ns_crypto::argon2
    Provides support for modern, secure password hashing.

    User Interface and HTML Improvements

    rCo Modernized Default Start Page
    rua Redesigned layout with responsive and accessible design.
    rua Added modal dialog for password updates.
    rua Improved security guidance for publicly exposed installations.
    rua Installer now fetches resources from GitHub (previously
    Bitbucket).
    rCo Dark Mode Support
    rua Automatically respects system preferences via the
    prefers-color-scheme media query.
    rua Supported across modern versions of Windows, macOS, iOS, and
    Android.
    rCo Consistent Visual Styling
    rua Unified look and feel across:
    ru- Default start page
    ru- NaviServer documentation
    ru- nsstats module interface

    Configuration and File Management

    rCo Configuration via environment variables
    rua Added ability to pull in environment variables with a certain
    prefix as
    configuration variables for configuration files (new command
    ns_configure_variables). This helps configuration significantly
    for
    container-based deployments, where ports etc. have to be adjusted
    on
    standardized configuration files.

    rCo New File Location Options
    rua Unified log path resolution via logdir or serverdir.
    rua Moved serverdir definition from fastpath to the top-level server section;
    it now acts as the root for both logdir and page directories.
    rua Added bindir parameter for custom binary module and nsproxy worker locations.

    rCo Improved Log Configuration
    rua Relative log file paths are now resolved consistently based on:
    ru- serverrootproc (for mass virtual hosting), or
    ru- serverdir.
    rua Supports dynamic log file naming (e.g., using Host header) for per-vhost logging.
    rua Log rotation now applies across multiple log targets.
    rCo Improved Section Parameter Updates
    rua New -update flag for ns_section, allowing ns_param to overwrite previously
    defined values rather than appending.

    Proxy Features

    rCo Reverse Proxy Integration
    rua The reverse proxy module is now built into the NaviServer core.
    rua Leverages improvements in ns_http, including:
    ru- Persistent connections
    ru- Streaming request handling
    rua New features:
    ru- -use_target_host_header flag for ::revproxy::upstream to control
    Host header forwarding.
    ru- Configurable transport mechanism using either ns_http or
    ns_connchan.
    ru- Support for backend connections via Unix domain sockets.

    rCo Forward Proxy Implementation
    rua Base implementation included, built on the same scalable
    architecture as the reverse proxy.
    rua Full support for the HTTP CONNECT method:
    ru- Enables tunneling HTTPS connections through the proxy.
    ru- Eliminates the need for insecure plaintext fallbacks.

    Additional Functional Improvements

    rCo Case Insensitive ns_sets
    rua Optionally define ns_set to be case insensitive.
    Many usages are per definition case insensitive (header fields,
    configuration values, SQL attribute names, ...).
    Has correctness and performance impacts.

    rCo Unix Domain Socket Support
    rua Both ns_http and ns_connchan now support connections via Unix
    domain sockets.

    rCo Multibyte HTML Entity Support
    rua ns_striphtml and ns_unquotehtml now correctly decode multibyte
    numeric HTML entities.

    rCo New Log Severities
    rua Security rCo For security-related events.
    rua Deprecated rCo For usage of deprecated features (e.g., API calls, parameters).

    rCo TclPro Debugger Support
    rua Significantly improved integration with the TclPro debugger.
    rua Resolved missing file references and corrected documentation.
    rua See the ns_adp_debug manual for usage.

    rCo Tcl 9 Compatibility
    rua Internal updates to support Tcl 9 features and constraints.
    rua Support for Tcl command argument counts >2^31.

    rCo License Upgrade
    rua Changed from MPL 1.1 + GPL to MPL 1.2.
    rua Announced previously on the mailing list and Tcl forums.

    Tcl API Changes

    - ns_cache
    rCo New option cachingmode: Accepts full or none to toggle caching
    behavior.

    - ns_configsection
    rCo New option -filter: Filters variables by unread, defaulted, or
    defaults.

    - ns_configure_variables
    rCo New command to pull in configuration variables from environment
    variables (for use in configuration files)

    - ns_conn
    rCo General enhancements:
    rua ns_conn host, ns_conn port, ns_conn protocol: Now return
    appropriate
    values for all request types (not limited to forward proxy
    requests).
    rCo New subcommands:
    rua ns_conn target: Returns the complete request target, including
    query parameters,
    from the HTTP start line.
    rua ns_conn fragment: Returns the fragment identifier (after #) if
    present.
    rua ns_conn urldict: Parses the request URL into a Tcl dictionary for structured access.
    rua ns_conn host: Supports an optional default value if the host is
    not determined.
    rua ns_conn details: Returns a dictionary with driver-specific
    connection metadata.

    - ns_connchan
    rCo Security and diagnostics improvements:
    rua ns_connchan debug: Set or query the debug level.
    rua ns_connchan connect / ns_connchan open: Now accept additional security-related
    options: -cafile, -capath, -cert, -hostname, -insecure, -driver,
    and -unixsocket.
    rua ns_connchan status: Added -server option for multi-server introspection.
    rua ns_connchan write: Now performs buffered writes.
    rCo More detailed timeout handling

    - ns_driver
    rCo info, names, stats, and threads support the -server option to allow multi-server diagnostics.

    - ns_http
    rCo Connection handling and introspection:
    rua Persistent HTTP connections supported via the keepalive option in httpclient configuration.
    rua Introduced support for multiple task threads.
    rua Streaming response support for incremental data handling (useful
    for large file transfers
    and LLM interaction).
    rua Default timeout configuration for requests.
    rua New callbacks: response_header_callback and
    response_data_callback.
    rua Renamed -donecallback to -done_callback (old name deprecated).
    rua Added support for informational HTTP status codes (e.g., 100
    Continue).
    rua New subcommands:
    ru- ns_http keepalives: Displays active persistent connections.
    ru- ns_http taskthreads: Provides insight into HTTP client threads.
    rua Major internal refactoring of tclhttp.c for modularity and maintainability.

    - ns_ictl
    rCo getmodules: Now supports the -server option for per-server
    introspection.

    - ns_info
    rCo Added subcommands:
    rua argv: Returns the original argument vector.
    rua bindir: Returns the binary directory path.
    rua buildinfo: Displays build-time config and version info.
    rua logdir: Path to the log directory.
    rua meminfo: Displays memory statistics (when using tcmalloc).

    - ns_ip
    rCo Added subcommands:
    rua inany: Checks if an IP matches any configured address.
    rua properties: Returns metadata about configured IPs.
    rua public: Determines if an IP is publicly routable.
    rua trusted: Checks if an IP is trusted.
    rua valid: Validates IP syntax.
    rCo These enhancements supersede the need for ns_subnetmatch.

    - ns_issmallint
    rCo New command to check if a value is a valid small integer (replaces
    the old,
    now deprecated issmallint).

    - ns_logctl
    rCo New subcommand grep: Searches log files with pattern matching,
    stripping color codes and handling line continuations.

    - ns_register* Enhancements
    rCo All ns_register_* commands now support the -constraints option,
    enabling context-sensitive behavior.
    rCo New command: ns_register_auth allows registration of user- and request-level authorization handlers.

    - ns_server
    rCo New subcommands:
    rua authprocs: Lists registered request/user auth procedures.
    rua hosts: Lists registered hostnames for the server.
    rua logdir: Returns the server log directory.
    rua realm: returns or sets the realm of the server
    rua serverdir: Returns the base directory for the virtual server
    (-effective returns the resolved runtime path).
    rua vhostenabled: Returns a boolean indicating virtual hosting status.
    rCo ns_server mapped: New option -all returns a dict with handler and
    pool info.

    - ns_set
    rCo Case-insensitive support:
    rua New -nocase flag for ns_set create and related operations.
    rua Deprecated the i* subcommands (e.g., iget, ifind) in favor of
    unified interface.

    rCo Multi-valued key support:
    rua -all option retrieves all values for a given key in ns_set and ns_config.

    rCo New subcommands:
    rua format: Pretty-prints the set contents.
    rua stats: Returns memory usage statistics.

    rCo delkey: Now returns a boolean success flag.

    rCo Internal improvements:
    rua Refactored ns_set internals using dense storage for lower memory
    use and better cache locality.
    rua Replaced deeply nested switch logic with modular, maintainable
    code.

    - ns_thread
    rCo Unified thread creation:
    rua Use ns_thread create for all thread types.
    rua Deprecated begin and begindetached to align with ns_cond,
    ns_mutex,
    and ns_sema usage.

    - ns_urlspace
    rCo Wildcard matching now supports path-segment-level matches
    (previously
    limited to leaf nodes).
    rCo Applied improved matching in nscgi to support directory-wide CGI
    mapping.
    rCo Renamed option -contextfilter to -constraints in ns_urlspace
    set/unset
    to match the new registration API.

    Database Enhancements
    rCo ns_db info: Returns a dictionary of metadata for a given DB handle.
    rCo ns_dbpooldescription: Renamed from the previous ns_pooldescription
    for consistent naming.
    rCo ns_db rowcount: Fixed in this release to return actual row counts.

    New Utilities
    rCo ns_fseekchars: Efficiently scans a stream for a string (e.g., for multipart/form-data parsing).
    rCo ns_joinurl: Constructs well-formed URLs from path components.
    rCo ns_mkdtemp: Creates a unique temporary directory (POSIX-style
    mkdtemp()).
    rCo ns_parsehtml: Parses HTML fragments into a structured Tcl dict.
    rCo ns_parsemessage: Parses MIME-style messages (e.g., emails or HTTP headers).
    rCo ns_percentencode / ns_percentdecode: Replace deprecated ns_urlencode
    and ns_urldecode
    for robust URL-safe encoding/decoding.

    Changes in Core Modules

    nscgi
    rCo New command: ns_register_cgi for dynamic CGI handler registration (supports -noinherit, -path, etc.).
    rCo Supports unregistration via ns_unregister_op.
    rCo New environment variables: SCRIPT_FILENAME, REQUEST_URI.
    rCo Refactored to support major web apps (e.g., WordPress, Joomla).
    rCo See commit 36027b70215 for implementation details.

    nscp
    rCo Integrated with new authorization system (e.g., via nsperm users).
    rCo New command nscp users: Lists registered users for nscp
    authentication.

    nsperm
    rCo Acts as a pluggable authorization provider for request/user scopes.
    rCo New config parameter: allowLoopbackEmptyUserrCopermits unauthenticated loopback access when enabled.
    rCo Added support for setting default server start pages and nsstats.

    nsproxy
    rCo New subcommand: ns_proxy workersrCoprovides detailed runtime info on proxy worker processes.

    Bug Fixes

    Stability and Crash Resolutions

    rCo Addressed multiple potential crash scenarios:
    rua Robust handling of HTTP CONNECT requests.
    rua Fixed crashes caused by missing or empty argument lists in
    commands such as ns_filestat,
    ns_sockcallback, and ns_ictl oncleanup.
    rua Prevented crash in ns_log when invoked with an empty message.
    rua Resolved a 24-year-old bug in Ns_AdjTime() that could lead to
    fatal errors due to
    microsecond overflow in multithreaded environments.
    rua Fixed crash in ns_conn copy when operating on empty content.
    rua Prevented crash in ns_sema release with invalid semaphore counts.
    rua Corrected off-by-one error in ns_adp_bind_args that could access uninitialized Tcl_Obj values.
    rua Fixed crash in ns_inet_ntop due to unsafe memory operations with overlapping regions
    (notably on aarch64 with musl).
    rua Resolved crash in Ns_SetIUpdateSz() caused by case mismatch in
    header keys with the legacy C API.
    rua Fixed crash during nscp startup when the users section was not configured.
    rua Prevented crash in debug mode when the Host: header could not be
    mapped to a virtual server
    and the driver was installed locally.
    rua Avoided crash when launching nsd with -c and -t options and no
    home parameter defined.
    rua Fixed crash during computation of ns_conn location when the
    network driver was not
    globally installed (global installation now recommended).
    rua Fixed crash due to self-destructive header replacement when
    ns_conn outputheaders
    are passed via ns_respond ... -headers ...

    Functional Correctness and Logic Fixes:
    rCo ns_conn status: Fixed issue where updated status codes were silently ignored.
    rCo ns_conn doneCallback: Ensured this callback is always invoked in
    ns_http.
    rCo nsv_dict get: Fixed a memory leak in value retrieval.
    rCo ns_conn peeraddr: Resolved race condition in pipelined requests that
    could yield incorrect peer addresses.
    rCo ns_cache_eval -force: Fixed race condition that could produce
    obsolete results.
    rCo ns_sema create: Corrected handling of initial count values (e.g.,
    1000).
    rCo ns_trim: Fixed spacing logic to trim only leading and trailing whitespace, preserving internal spacing.
    rCo ns_config -int: Corrected fallback behavior when invalid values are supplied,
    now correctly using documented defaults.
    rCo ns_sockcallback: Now gracefully handles missing arguments.
    rCo ns_socknread: Fixed inaccurate results for buffered connections.
    rCo ns_crypto::aead::encrypt/decrypt: Restored compatibility with
    OpenSSL 1.1.1.
    rCo Fixed incorrect parsing of encoded backslashes in URLs.
    rCo Ns_StrTrimRight(): Corrected UTF-8 handling in right-side string trimming.
    rCo Fixed ns_conn location when running behind a reverse proxy to always returns a value,
    even in broken configurations.

    OpenSSL fixes
    rCo Added support for detecting and validating OCSP Must-Staple and AIA presence
    in certificates. Without that, NaviServer might crash, when OCSP is
    turned on,
    and NULL values are passed for AIA URLs (letsencrypt)
    rCo Introduced stable output buffers for send operations to support
    retries
    after SSL_ERROR_WANT_WRITE, preventing connection failures under
    high load.
    rCo Improved error handling in OpenSSL integration by draining the error stack via DrainErrorStack().

    HTTP Client Fixes
    rCo ns_http:
    rua Reordered initialization in NsInitServer() to ensure submodules
    can access a fully configured server state.

    HTML and ADP Parsing Fixes
    rCo ADP Parser:
    rua Enhanced support for quoted > characters inside attribute values, aligning with modern HTML parsing rules.
    rCo return-notice handling:
    rua Suppressed spurious error messages when fallback ADP templates are processed outside of a full ADP context.
    rCo ns_striphtml:
    rua Fixed long-standing bug where adjacent HTML entities were
    incorrectly decoded;
    only the first entity was processed.

    Logging and Diagnostics Fixes

    rCo Fixed misleading log output when dynamically changing extended
    headers via
    ns_accesslog extendedheaders ....
    rCo Improved error messages when port binding fails due to conflicts
    with driver assignment.
    rCo Fixed off-by-one error in the virtual server port configuration
    logic.
    rCo Clarified or corrected multiple logging messages across modules for better diagnostics.

    nscgi Module Fixes
    rCo Fixed file upload failures when uploads were internally spooled by NaviServer rCo
    previously returned 500 errors.
    rCo Corrected processing of CGI script exit codes not 0.
    rCo Fixed hostname and port reporting for SERVER_NAME.

    Database Fixes
    rCo ns_db rowcount: Fixed regression where the row count logic was not invoked, rendering the command a no-op.

    Build and Compatibility Fixes
    rCo Suppressed obsolete --enable-threads warning for Tcl versions where thread support is now enabled by default.
    rCo Fixed compilation failure with glibc 2.38+ due to PTHREAD_STACK_MIN becoming dynamic via sysconf().

    General Cleanups
    rCo Fixed small memory leak triggered by serverrootproc reset.
    rCo Numerous minor typo corrections, comment clarifications, and small
    logic cleanups across modules.

    C-Level Infrastructure, C API Enhancements, and Build System

    Core Infrastructure Improvements
    rCo Socket Layer Enhancements:
    rua Added sendErrno field to the Sock structure to improve diagnostics
    and tracking of write errors.
    rCo Modernized Initialization:
    rua Introduced NS_INIT_ONCE() macro for thread-safe one-time initialization,
    replacing legacy double-lock patterns.
    rCo Data Structure Utilities:
    rua Added utility functions Ns_DListSaveString() and
    Ns_DListFreeElements()
    to simplify dynamic list management.
    rua Replaced use of legacy Ns_DString functions with standard
    Tcl_DString,
    modernizing internal data handling.
    rCo Debugging Support:
    rua Added NsHexPrint() for hex-dumping of byte sequences, aiding in
    low-level debugging and analysis.
    rCo Introspection Enhancements:
    rua Introduced Ns_TclReturnCodeString() and Ns_ReturnCodeString() to
    convert internal return codes into readable strings, improving log clarity and diagnostics.
    rCo Code Quality and Performance:
    rua Applied extensive internal refactorings to improve performance,
    cache locality,
    and maintainability across multiple subsystems.

    C API Enhancements

    rCo General:
    rua Added typedefs for Ns_AuthorizeRequestProc, Ns_AuthorizeUserProc,
    Ns_UrlSpaceMatchInfo, Ns_DriverConnInfoProc
    rua Added enum for Ns_RequestType, Ns_UrlSpaceOp,
    Ns_DriverClientInitArg
    rua Added API calls in ns.h: Ns_ConfigFilename, Ns_ConnTarget, Ns_UrlSpaceMatchInfo,
    Ns_ConnServPtr, Ns_DStringAppendSockState, Ns_RegisterFilter2, Ns_TaskQueueLength,
    Ns_TaskQueueName, Ns_TaskQueueRequests, Ns_ObjvTablePrint, Ns_InfoLogPath, Ns_LogPath,
    Ns_ServerLogDir, Ns_ServerRootProcEnabled, Ns_ServerLogGetFd, Ns_ServerLogCloseAll,
    Ns_ServerLogRollAll, Ns_GetServer, Ns_ServerName,
    Ns_SockSetSendErrno,
    Ns_SockGetSendErrno, Ns_SockGetSendRejected, Ns_SockGetSendCount, Ns_SockFlagAdd,
    Ns_SockFlagClear, Ns_SockSendBufsEx, Ns_SockConnectUnix, Ns_SockGetClientSockAddr,
    Ns_SockGetConfiguredSockAddr, Ns_SockaddrPublicIpAddress, Ns_SockaddrTrustedReverseProxy,
    Ns_SockaddrInAny, Ns_SockaddrAddToDictIpProperties, Ns_TclReturnCodeString, Ns_ReturnCodeString,
    Ns_TclInterpServPtr, Ns_LogDeprecatedParameter,
    Ns_RegisterFastUrl2File

    rua Extended Ns_Request, Ns_TclCallback
    rua Refactored Ns_ConnReturnMoved() and Ns_ConnReturnRedirect() to
    unify redirection logic.

    rCo Secure Communication and Validation:
    rua Added fine-grained certificate validation APIs
    rua Improved error stack draining for OpenSSL operations.

    rCo Extended C API for ns_connchan:
    rua Introduced a minimal C-level API for connchan connections,
    enabling finer control
    over lower-level network operations.

    rCo Build Platform Compatibility:
    rua Updated Windows build system to use NS_IMPORT in place of
    deprecated NS_EXTERN.
    rua Avoided use of deprecated C functions such as mktemp() to improve portability and security.

    Build System and Tooling
    rCo Configuration and Sample Support:
    rua Replaced hard-coded OS commands (ls, mv, ...) consistently with
    build variables
    rua Replaced hard-coded OpenSSL binary references with the $(OPENSSL)
    build variable.
    rua Enhanced log path and configuration variable handling to support
    more dynamic setups.

    rCo Test Infrastructure:
    rua Extended regression and compatibility test coverage to validate
    edge cases
    and cross-platform behavior.

    rCo Build Metadata Introspection:
    rua Added support for build-time introspection of environment
    settings,
    including allocator type (e.g., malloc), compiler version, and Tcl
    build info.

    rCo Optional Deprecation-Free Builds:
    rua Introduced build flag NS_NO_DEPRECATED to exclude deprecated
    functions and
    APIs, mirroring TclrCOs TCL_NO_DEPRECATED mechanism.

    rCo CI/CD Modernization:
    rua Upgraded GitHub Actions workflows from version 3 to version 4 for
    improved performance and compatibility.

    rCo Sample Configuration Files:
    rua Improved sample configurations (nsd-config and openacs-config) to
    use environment-specific settings via ns_configure_variables
    rua prefer names http and https instead of nsock and nsssl inside
    sample
    configuration files to ease configuration for new users.

    Documentation Updates

    rCo Conducted a thorough review and restructuring of all documentation:
    rua Tcl Command Documentation:
    ru- Ensured all implemented Tcl commands and their options are fully documented.
    ru- Removed documentation for obsolete or unimplemented commands.
    ru- Deprecated commands are no longer advertised in manuals or used
    in examples.
    ru- Introduced a dedicated section listing deprecated commands.
    ru- Enabled automated generation of a complete command reference.
    rua Test Alignment:
    ru- Verified that every implemented Tcl command is covered by
    regression tests.
    ru- Ensured that all documented commands are also implemented and
    tested.

    rCo Standardized placeholder syntax across the documentation and syntax
    error messages
    (see commit ffbd32774db for details).

    Manual Page Improvements

    rCo nscgi: Significantly revised documentation and usage examples for
    clarity and completeness.
    rCo admin-config.man: Added a new section on rCLCustomizing File LocationsrCY.
    rCo Added and updated sections covering:
    rua Basic templating features.
    rua Error handling mechanisms.
    rua Recently introduced Tcl commands and options.
    Visual and Structural Enhancements
    rCo Updated diagrams and usage examples related to:
    rua Request processing flow.
    rua Reverse proxy (revproxy) behavior.
    Additional Improvements
    rCo Numerous corrections to spelling, grammar, formatting, and internal linking
    throughout the documentation.

    Deprecation Management Infrastructure
    rCo Introduced compiler warnings for usage of deprecated Ns_DString* functions
    rCo Added log severity level Deprecated to better surface deprecated
    usage at runtime
    rCo Documented all deprecated commands in a dedicated section of the
    command reference
    rCo Deprecated the use of manual double-checked locking for one-time initialization
    replaced by the NS_INIT_ONCE() macro for safer and cleaner
    initialization semantics

    Deprecations

    Tcl-Level Command Deprecations
    rCo Deprecated the following Tcl commands:
    rua ns_set print raA replaced by ns_set format
    rua ns_checkurl and ns_requestauthorize raA replaced by ns_auth request
    rua ns_thread begin raA replaced by ns_thread create
    rua ns_thread begindetached raA replaced by ns_thread create -detached
    rua ns_event raA replaced by ns_cond
    rua ns_pooldescription raA replaced by ns_dbpooldescription
    rua keyldel, keylget, keylkeys, keylset (from TclX) raA replaced by
    native dict functionality in Tcl
    rua Legacy experimental functions (marked TBD for over 20 years) are
    now deprecated:
    ru- ns_browsermatch, ns_choosecharset, ns_cookiecharset, ns_formfieldcharset, ns_formvalueput,
    ns_paren, ns_tagelement, ns_tagelementset
    rua Deprecated non-namespaced functions:
    ru- getformdata, issmallint
    rua ns_parsetime: now officially deprecated (was internally marked "To
    be removed" for ~15 years)
    rua ns_set_precision: deprecated in favor of standard Tcl idioms

    Tcl-Level Option Deprecations
    rCo Deprecated options:
    rua -buffered in ns_connchan write
    rua -donecallback in ns_http raA replaced by -done_callback (naming consistency)
    rua -binary (previously used to indicate Tcl objects with binary data)
    raA replaced
    by -data, aligning with conventions where -binary is a boolean
    flag

    C-Level API Deprecations
    rCo Deprecated or removed C functions:
    rua Ns_ObjvFlags() raA replaced by Ns_ObjvIndex() for option parsing (removed redundancy)
    rua Ns_SockSendBufs2() raA replaced by Ns_SockSendBufsEx() which returns
    an additional errorCode
    rua Ns_TclInitInterps() raA removed (marked as deprecated since 2005)
    rua Deprecated internal usage of OpenSSL and Tcl functions that have
    been marked as deprecated upstream
    rua All C functions previously marked as deprecated in source comments
    are now
    officially deprecated

    Configuration Parameter Deprecations
    rCo Global config parameters:
    rua logroll: raA replaced by logrollonsignal (standardized log rotation behavior on SIGHUP)
    rua serverlog: raA replaced by systemlog to reduce ambiguity between
    system and per-server logs

    rCo Section parameter changes:
    rua serverdir in the fastpath section is now deprecated raA use
    serverdir in the main
    per-server section instead (reflecting its broader usage scope)

    Changes in Extra Modules

    letsencrypt
    rCo Tcl9 compatibility changes

    nsauthpam
    rCo Tcl9 compatibility changes
    rCo License upgrade

    nscoap
    rCo Tcl9 compatibility changes
    rCo NaviServer 5 compatibility
    rCo License upgrade

    nsdbbdb
    rCo Replaced deprecated Ns_DString operations
    rCo Support for LMDB

    nsdbi
    rCo Removed calls to deprecated functions
    rCo Tcl9 compatibility changes

    nsdbilite
    rCo Removed calls to deprecated functions

    nsdbimy
    rCo Removed calls to deprecated functions

    nsdbipg
    rCo Removed calls to deprecated functions

    nsdbmysql
    rCo Removed calls to deprecated functions

    nsdbpg
    rCo Tcl9 compatibility changes
    rCo NaviServer 5 compatibility
    rCo Removed calls to deprecated functions
    rCo License upgrade

    nsdbsqlite
    rCo Fixed execution of DML queries.
    rCo Removed calls to deprecated functions
    rCo Pulled in new upstream version (3.47.2) of qlite3.c

    nsdns
    rCo Removed calls to deprecated functions
    rCo Code cleanup

    nsldap
    rCo Added support for LDAP URIs in pool configuration
    rCo Removed calls to deprecated functions
    rCo Removed unneeded compile macro
    rCo Fixed result setting of "connected" subcommand
    rCo Refactor nsldap Tcl command into modular subcommands
    rCo Tcl9 compatibility changes
    rCo Updated documentation

    nsloopctl
    rCo Tcl9 compatibility changes
    rCo Minor code cleanup

    nsmemcache
    rCo Removed calls to deprecated functions

    nsoracle
    rCo Added experimental boolean configuration parameter convertEncoding:
    When this Boolean parameter is true, the connection is created with
    OCIEnvNlsCreate() instead of OCIEnvCreate(). OCIEnvNlsCreate was
    introduced with Oracle9 and is an enhanced version of OCIEnvCreate()
    which is used by default (legacy setting) or when ConvertEncoding is
    not true.
    This parameter performs on-the-fly conversions when connecting to a
    Latin1
    encoded database.
    rCo Removed calls to deprecated functions
    rCo Modernized configuration (range checks) and use Ns_ReturnCode when appropriate
    rCo Tcl9 compatibility changes

    nsphp
    rCo Removed calls to deprecated functions

    nsshell
    rCo Updated command list for command completion for NaviServer 5
    rCo Updated most JavaScript libraries

    nssmtpd
    rCo Simplified configuration (provided defaults were possible)
    rCo Added support for providing mailserver password via userinfo in
    relayhost
    rCo Fixed multi-line response parsing
    rCo Tcl9 compatibility changes
    rCo NaviServer 5 compatibility
    rCo Removed calls to deprecated functions
    rCo Updated documentation
    rCo License upgrade

    nssnmp
    rCo Removed calls to deprecated functions

    nsstats
    rCo More detailed reports:
    rua added list of loaded modules per server
    rua added list of all registered domain names for a driver
    rua added server log dir to per-server information
    rCo Refactored web UI (adjusted layout for NaviServer 4.99 and 5)
    rCo Added support for darkmode
    rCo Added support for nsperm module, when installed
    rCo Made parsing of http client log file more robust
    rCo License upgrade

    nssyslogd
    rCo Removed calls to deprecated functions
    rCo NaviServer 5 compatibility

    nstk
    rCo Tcl9 compatibility changes

    nsudp
    rCo Tcl9 compatibility changes
    rCo NaviServer 5 compatibility
    rCo License upgrade

    nswebpush
    rCo Tcl9 compatibility changes
    rCo Updated code for newer and more picky web servers
    rCo Fixed code for aes128gcm

    revproxy
    rCo moved code to main repository

    websocket
    rCo NaviServer 5 compatibility
    rCo Avoid deprecated messages for ns_conn write -buffered
    rCo Improved documentation
    rCo More detailed timeout handling
    --- Synchronet 3.21a-Linux NewsLink 1.2