1.4.70

May 10, 2023

Important changes

  • speed up CGI spawning
  • native Windows build (experimental) (not packaged; no installer)
  • support HTTP/2 downstream proxy serving multiple clients on single connection (mod_extforward, mod_maxminddb)
  • restructure code to isolate HTTP/2

Downloads

Behavior Changes (previously announced):

  • no longer building separate modules for built-in modules
    lighttpd 1.4.70 omits building separate (unused) modules for:
    mod_access mod_alias mod_evhost mod_expire mod_fastcgi mod_indexfile
    mod_redirect mod_rewrite mod_scgi mod_setenv mod_simple_vhost mod_staticfile

Future Scheduled Behavior Changes:

  • HTTP/2 support will be split out into optional separate module (mod_h2)
    (static builds will need to list mod_h2 in plugin-static.h to include mod_h2)

Changes from 1.4.69

  • [autotools] chmod u+w configparser.c for lemon
  • [build] skip build separate modules for built-ins
  • [core] cache format secs for high prec errlog
  • [mod_maxminddb] check remote IP each request (fixes #3191)
  • [multiple] store ptrs to remote addr in request_st (#3192)
  • [mod_extforward] manage remote addr per request (fixes #3192)
  • [core] use C23 memset_explicit() were available
  • [mod_accesslog] %{mask}a to mask/anonymize IP
  • [core] cast to fix compiler error in prior commit
  • [scons] fix static build to include builtin_mods
  • [core] h2_recv_headers() tweak to reduce code size
  • [core] h2_get_stream_req() code reuse
  • [core] h2: remove obsolete comment
  • [core] h2 mark :status matching lsxpack enum value
  • [core] h2 match w/ lsxpack pseudo-header key only
  • [core] limit server.max-request-field-size <=65535
  • [core] permit shell HERE docs to specify config
  • [core] add members to http_header_parse_ctx
  • [mod_extforward] typo in comment
  • [mod_openssl] SSL_CTX_set_options() takes uint64_t
  • [core] reorder enum handler_t
  • [core] connection_handle_request_start_state()
  • [core] check chunk file open early in mmap viewadj (fixes #3197)
  • [core] h2 http_request_parse_header() tweak
  • [mod_extforward] recognize unix domain sockets (fixes #3198)
  • [mod_magnet] support ./configure —with-lua=luajit (#3199)
  • [core] remove instance of devel debug code
  • [core] quiet coverity warning
  • [core] connection_check_upgrade() h2_upgrade_h2c()
  • [core] CON_STATE_REQUEST_END transient state
  • [core] expose request_set_state() for internal use
  • [core] h2_send_goaway_graceful()
  • [core] h2_check_timeout()
  • [core] h2_process_streams()
  • [core] h2_recv_reqbody()
  • [core] HTTP_VERSION_3 enum value
  • [core] r[x union w/ structs for r]{style=”text-align:right;”}>x.{h1}
  • [core] r[x union w/ structs for r]{style=”text-align:right;”}>x.{h1,h2}
  • [core] http_dispatch[] tables for HTTP proto vers
  • [core] hxcon “base class” for h2con
  • [mod_h2] HTTP/2 module: mod_h2
  • [multiple] optimistic client read only if HTTP/1.x
  • [core] _WIN32 port compatibility headers
  • [core] _WIN32 impl of setenv(), unsetenv()
  • [multiple] _WIN32 protect code w/ HAVE_SYSLOG_H
  • [multiple] _WIN32 protect code w/ HAVE_FORK
  • [core] _WIN32 protect code w/ HAVE_IPV6
  • [multiple] _WIN32 protect code w/ HAVE_SYS_UN_H
  • [multiple] _WIN32 stat() compat sys-stat.h
  • [core] _WIN32 uid, gid compat
  • [core] _WIN32 signal-related compat
  • [multiple] _WIN32 misc compat
  • [core] _WIN32 minimal glob() impl for configfile.c
  • [core] _WIN32 use gmtime_s(), localtime_s()
  • [mod_dirlisting] _WIN32 Find*File()
  • [multiple] _WIN32 Find*File() sys-dirent.h
  • [core] _WIN32 sys-unistd.h to wrap <unistd.h>
  • [core] _WIN32 sys-wait.h to wrap <sys/wait.h>
  • [core] _WIN32 implementation of socketpair()
  • [core] _WIN32 fdevent_createprocess()
  • [core] _WIN32 socket-compat, filesystem-compat
  • [core] _WIN32 check WSAGetLastError() w/ sockets
  • [mod_cgi] _WIN32 use socketpair instead of pipe
  • [core] _WIN32 clock ticks and time
  • [core] _WIN32 alternative fdarray for Windows
  • [core] _WIN32 basic (very limited) getopt() impl
  • [tests] _WIN32 fcgi-responder.c, scgi-responder.c
  • [core] WIN32 rename_WIN32 to _WIN32
  • [core] _WIN32 casts to quiet some VS warnings
  • [tests] _WIN32 use TMPDIR (or TEMP) for test files
  • [build] _WIN32 mingw build
  • [multiple] MINGW32 missing strftime() “%F %T”
  • [tests] _WIN32 adjustments in LightyTest.pm
  • [core] _WIN32 reset std streams at startup
  • [core] _WIN32 log_perror() with GetLastError()
  • [core] _WIN32 log_serror() for WSAGetLastError()
  • [core] _WIN32 use log_serror() for WSAGetLastError
  • [core] _WIN32 use rand_s() to init pseudo RNG
  • [core] _WIN32 fdevent_kill()
  • [multiple] _WIN32 use fdevent_kill()
  • [core] _WIN32 stat(), ‘/’ and ‘\\’ adjustments
  • [tests] _WIN32 cygwin test support
  • [mod_deflate] _WIN32 disable deflate.cache-dir
  • [mod_dirlisting] _WIN32 close files before unlink
  • [tests] _WIN32 close files before unlink
  • [core] _WIN32 close chunk temp files before unlink
  • [core] _WIN32 prefer WSAPoll()
  • [core] _WIN32 lighttpd winsvc
  • [core] _WIN32 custom fs funcs on UTF-8 paths
  • [core] _WIN32 scream UTF-8 at MS (does not matter)
  • [cmake] _WIN32 build more mods with BUILD_STATIC
  • [cmake] _WIN32 remove older build config
  • [core] _WIN32 use WSASend for writev-equiv on sock
  • [meson] static build option under cygwin
  • [build] WIN32_declspec(dllexport) *_plugin_init
  • [build] _WIN32 shared dll build (autotools, cmake)
  • [tests] _WIN32 skip time-sensitive tests during CI
  • [core] use posix_spawn() where available
  • [mod_cgi] comment about caching target dirname
  • [meson] update comment with build flags
  • [meson] check FORCE_{WOLFSSL,MBEDTLS}_CRYPTO
  • [mod_auth] warn if auth.require path never matches
  • [core] h1.[ch] collect some HTTP/1.x specific code
  • [core] noinline connection shutdown, reset
  • [TLS] $SERVER[“socket”] inherit global ssl.engine
  • [mod_proxy] match “map-host-response” “-“ w/ Host
  • [core] noinline stat_cache_sptree_find()
  • [core] rename http_kv funcs, reorder http_versions
  • [mod_cgi] move fd count to cgi_create_env()
  • [mod_cgi] reduce code size
  • [mod_cgi] do not issue trace if CGI closes input
  • [mod_cgi] cgi_create_err() cold err handling func
  • [core] always decr fd count upon socket close()
  • [mod_mbedtls] check MBEDTLS_DEBUG_C for debug func
  • [core] return pid_t from fdevent_waitpid()
  • [core] _WIN32 compile fix
  • [meson] build fix for builtin_mods
  • [core] move some shared funcs to call from modules
  • [build] move some files to call from modules
  • [mod_cgi] doubly-linked list of CGI pids
  • [mod_cgi] reuse fd already opened to /dev/null
  • [mod_cgi] reset upload_temp_file_size in CGI close
  • [tests] copy confs for running tests in alt dir
  • [scons] avoid dup mod_h2 module in static build
  • [autoconf] include fs_win32.h in hdrs for dpkg
  • [build] ifdef _WIN32 before include fs_win32.h
  • [mod_openssl] SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE
  • [mod_dirlisting] _WIN32 fix fstat() after close()
  • [core] quiet coverity warning
  • [mod_openssl] FreeBSD: check “kern.ipc.tls.enable”
  • [core] fix HTTP/2 use of http_response_loop()
  • [mod_openssl] check kernel support for KTLS
  • [core] posix_spawnattr_setcwd_np() on QNX
  • [core] posix_spawn_file_actions_addclosefrom_np()
  • [core] Mac OS POSIX_SPAWN_CLOEXEC_DEFAULT
  • [core] modify use of posix_spawnattr_setsigdefault
  • [mod_dirlisting] _WIN32 compile fix
  • [core] fdevent_load_file() check if limit exceeded
  • [tests] tests/prepare.sh comment w/ alt build root
  • [core] treat mod_h2 as built-in module (for now)