Changes since version 1.6-dev1 : Alexander Rigbo (1): BUG/MINOR: ssl: Display correct filename in error message Andrew Hayworth (1): MEDIUM: logs: Add HTTP request-line log format directives Baptiste Assmann (6): BUG/MEDIUM: check: tcpcheck regression introduced by e16c1b3f BUG/MINOR: check: fix tcpcheck error message MINOR: use an int instead of calling tcpcheck_get_step_id MINOR: tcpcheck_rule structure update MINOR: include comment in tcpcheck error log DOC: tcpcheck comment documentation CJ Ess (2): MEDIUM: http: configurable http result codes for http-request deny BUILD: Compile clean when debug options defined Dragan Dosen (1): BUG/MEDIUM: http: fix the url_param fetch Jason Harvey (1): DOC: Fix L4TOUT typo in documentation Joseph Lynch (2): MEDIUM: check: include server address and port in the send-state header MEDIUM: backend: Allow redispatch on retry intervals Nenad Merdanovic (4): MINOR: Add TLS ticket keys reference and use it in the listener struct MEDIUM: Add support for updating TLS ticket keys via socket DOC: Document new socket commands "show tls-keys" and "set ssl tls-key" MINOR: Add sample fetch which identifies if the SSL session has been resumed Simon Horman (7): MEDIUM: stats: Add enum srv_stats_state MEDIUM: stats: Separate server state and colour in stats MEDIUM: stats: Only report drain state in stats if server has SRV_ADMF_DRAIN set MEDIUM: stats: Differentiate between DRAIN and DRAIN (agent) MEDIUM: Lower priority of email alerts for log-health-checks messages MEDIUM: Send email alerts when servers are marked as UP or enter the drain state MEDIUM: Document when email-alerts are sent Thierry FOURNIER (35): BUG/MEDIUM: lua: bad argument number in analyser and in error message MEDIUM: lua: automatically converts strings in proxy, tables, server and ip BUG/MINOR: utf8: remove compilator warning MEDIUM: map: uses HAProxy facilities to store default value BUG/MINOR: lua: error in detection of mandatory arguments BUG/MINOR: lua: set current proxy as default value if it is possible BUG/MEDIUM: http: the action set-{method|path|query|uri} doesn't run. BUG/MEDIUM: lua: undetected infinite loop BUG/MAJOR: http: don't read past buffer's end in http_replace_value BUG/MEDIUM: http: the function "(req|res)-replace-value" doesn't respect the HTTP syntax MEDIUM/CLEANUP: http: rewrite and lighten http_transform_header() prototype BUILD: lua: it miss the '-ldl' directive MEDIUM: http: allows 'R' and 'S' in the protocol alphabet MINOR: http: split the function http_action_set_req_line() in two parts MINOR: http: split http_transform_header() function in two parts. MINOR: http: export function inet_set_tos() MINOR: lua: txn: add function set_(loglevel|tos|mark) MINOR: lua: create and register HTTP class DOC: lua: fix some typos MINOR: lua: add log functions BUG/MINOR: lua: Fix SSL initialisation DOC: lua: some fixes MINOR: lua: (req|res)_get_headers return more than one header value MINOR: lua: map system integration in Lua BUG/MEDIUM: http: functions set-{path,query,method,uri} breaks the HTTP parser MINOR: sample: add url_dec converter MEDIUM: sample: fill the struct sample with the session, proxy and stream pointers MEDIUM: sample change the prototype of sample-fetches and converters functions MINOR: sample: fill the struct sample with the options. MEDIUM: sample: change the prototype of sample-fetches functions MINOR: http: split the url_param in two parts CLEANUP: http: bad indentation MINOR: http: add body_param fetch MEDIUM: http: url-encoded parsing function can run throught wrapped buffer DOC: http: req.body_param documentation William Lallemand (4): MEDIUM: cfgparse: introduce weak and strong quoting BUG/MEDIUM: cfgparse: incorrect memmove in quotes management MINOR: cfgparse: remove line size limitation MEDIUM: cfgparse: expand environment variables Willy Tarreau (182): CLEANUP: stream-int: remove a redundant clearing of the linger_risk flag MINOR: connection: make conn_sock_shutw() actually perform the shutdown() call MINOR: stream-int: use conn_sock_shutw() to shutdown a connection MINOR: connection: perform the call to xprt->shutw() in conn_data_shutw() MEDIUM: stream-int: replace xprt->shutw calls with conn_data_shutw() MINOR: checks: use conn_data_shutw_hard() instead of call via xprt MINOR: connection: implement conn_sock_send() MEDIUM: stream-int: make conn_si_send_proxy() use conn_sock_send() MEDIUM: connection: make conn_drain() perform more controls REORG: connection: move conn_drain() to connection.c and rename it CLEANUP: stream-int: remove inclusion of fd.h that is not used anymore MEDIUM: channel: don't always set CF_WAKE_WRITE on bi_put* CLEANUP: lua: don't use si_ic/si_oc on known stream-ints BUG/MEDIUM: peers: correctly configure the client timeout MINOR: peers: centralize configuration of the peers frontend MINOR: proxy: store the default target into the frontend's configuration MEDIUM: stats: use frontend_accept() as the accept function MEDIUM: peers: use frontend_accept() instead of peer_accept() CLEANUP: listeners: remove unused timeout MEDIUM: listener: store the default target per listener BUILD: fix automatic inclusion of libdl. MEDIUM: lua: implement a simple memory allocator MEDIUM: compression: postpone buffer adjustments after compression MEDIUM: compression: don't send leading zeroes with chunk size BUG/MINOR: compression: consider the expansion factor in init MINOR: http: check the algo name "identity" instead of the function pointer CLEANUP: compression: statify all algo-specific functions MEDIUM: compression: add a distinction between UA- and config- algorithms MEDIUM: compression: add new "raw-deflate" compression algorithm MEDIUM: compression: split deflate_flush() into flush and finish CLEANUP: compression: remove unused reset functions MAJOR: compression: integrate support for libslz BUG/MEDIUM: http: hdr_cnt would not count any header when called without name BUG/MAJOR: http: null-terminate the http actions keywords list CLEANUP: lua: remove the unused hlua_sleep memory pool BUG/MAJOR: lua: use correct object size when initializing a new converter CLEANUP: lua: remove hard-coded sizeof() in object creations and mallocs CLEANUP: lua: fix confusing local variable naming in hlua_txn_new() CLEANUP: hlua: stop using variable name "s" alternately for hlua_txn and hlua_smp CLEANUP: lua: get rid of the last "*ht" for struct hlua_txn. CLEANUP: lua: rename last occurrences of "*s" to "*htxn" for hlua_txn CLEANUP: lua: rename variable "sc" for struct hlua_smp CLEANUP: lua: get rid of the last two "*hs" for hlua_smp REORG/MAJOR: session: rename the "session" entity to "stream" REORG/MEDIUM: stream: rename stream flags from SN_* to SF_* MINOR: session: start to reintroduce struct session MEDIUM: stream: allocate the session when a stream is created MEDIUM: stream: move the listener's pointer to the session MEDIUM: stream: move the frontend's pointer to the session MINOR: session: add a pointer to the session's origin MEDIUM: session: use the pointer to the origin instead of s->si[0].end CLEANUP: sample: remove useless tests in fetch functions for l4 != NULL MEDIUM: http: move header captures from http_txn to struct stream MINOR: http: create a dedicated pool for http_txn MAJOR: http: move http_txn out of struct stream MAJOR: sample: don't pass l7 anymore to sample fetch functions CLEANUP: lua: remove unused hlua_smp->l7 and hlua_txn->l7 MEDIUM: http: remove the now useless http_txn from {req/res} rules CLEANUP: lua: don't pass http_txn anymore to hlua_request_act_wrapper() MAJOR: sample: pass a pointer to the session to each sample fetch function MINOR: stream: provide a few helpers to retrieve frontend, listener and origin CLEANUP: stream: don't set ->target to the incoming connection anymore MINOR: stream: move session initialization before the stream's MINOR: session: store the session's accept date MINOR: session: don't rely on s->logs.logwait in embryonic sessions MINOR: session: implement session_free() and use it everywhere MINOR: session: add stick counters to the struct session REORG: stktable: move the stkctr_* functions from stream to sticktable MEDIUM: streams: support looking up stkctr in the session MEDIUM: session: update the session's stick counters upon session_free() MEDIUM: proto_tcp: track the session's counters in the connection ruleset MAJOR: tcp: make tcp_exec_req_rules() only rely on the session MEDIUM: stream: don't call stream_store_counters() in kill_mini_session() nor session_accept() MEDIUM: stream: move all the session-specific stuff of stream_accept() earlier MAJOR: stream: don't initialize the stream anymore in stream_accept MEDIUM: session: remove the task pointer from the session REORG: session: move the session parts out of stream.c MINOR: stream-int: make appctx_new() take the applet in argument MEDIUM: peers: move the appctx initialization earlier MINOR: session: introduce session_new() MINOR: session: make use of session_new() when creating a new session MINOR: peers: make use of session_new() when creating a new session MEDIUM: peers: initialize the task before the stream MINOR: session: set the CO_FL_CONNECTED flag on the connection once ready CLEANUP: stream.c: do not re-attach the connection to the stream MEDIUM: stream: isolate connection-specific initialization code MEDIUM: stream: also accept appctx as origin in stream_accept_session() MEDIUM: peers: make use of stream_accept_session() MEDIUM: frontend: make ->accept only return +/-1 MEDIUM: stream: return the stream upon accept() MEDIUM: frontend: move some stream initialisation to stream_new() MEDIUM: frontend: move the fd-specific settings to session_accept_fd() MEDIUM: frontend: don't restrict frontend_accept() to connections anymore MEDIUM: frontend: move some remaining stream settings to stream_new() CLEANUP: frontend: remove one useless local variable MEDIUM: stream: don't rely on the session's listener anymore in stream_new() MEDIUM: lua: make use of stream_new() to create an outgoing connection MINOR: lua: minor cleanup in hlua_socket_new() MINOR: lua: no need for setting timeouts / conn_retries in hlua_socket_new() MINOR: peers: no need for setting timeouts / conn_retries in peer_session_create() CLEANUP: stream-int: swap stream-int and appctx declarations CLEANUP: namespaces: fix protection against multiple inclusions MINOR: session: maintain the session count stats in the session, not the stream MEDIUM: session: adjust the connection flags before stream_new() MINOR: stream: pass the pointer to the origin explicitly to stream_new() CLEANUP: poll: move the conditions for waiting out of the poll functions BUG/MEDIUM: listener: don't report an error when resuming unbound listeners BUG/MEDIUM: init: don't limit cpu-map to the first 32 processes only BUG/MAJOR: tcp/http: fix current_rule assignment when restarting over a ruleset BUG/MEDIUM: stream-int: always reset si->ops when si->end is nullified DOC: update the entities diagrams BUG/MEDIUM: http: properly retrieve the front connection MINOR: applet: add a new "owner" pointer in the appctx MEDIUM: applet: make the applet not depend on a stream interface anymore REORG: applet: move the applet definitions out of stream_interface CLEANUP: applet: rename struct si_applet to applet REORG: stream-int: create si_applet_ops dedicated to applets MEDIUM: applet: add basic support for an applet run queue MEDIUM: applet: implement a run queue for active appctx MEDIUM: stream-int: add a new function si_applet_done() MAJOR: applet: now call si_applet_done() instead of si_update() in I/O handlers MAJOR: stream: use a regular ->update for all stream interfaces MEDIUM: dumpstats: don't unregister the applet anymore MEDIUM: applet: centralize the call to si_applet_done() in the I/O handler MAJOR: stream: do not allocate request buffers anymore when the left side is an applet MINOR: stream-int: add two flags to indicate an applet's wishes regarding I/O MEDIUM: applet: make the applets only use si_applet_{cant|want|stop}_{get|put} MEDIUM: stream-int: pause the appctx if the task is woken up BUG/MAJOR: tcp: only call registered actions when they're registered BUG/MEDIUM: peers: fix applet scheduling BUG/MEDIUM: peers: recent applet changes broke peers updates scheduling MINOR: tools: provide an rdtsc() function for time comparisons IMPORT: lru: import simple ebtree-based LRU functions IMPORT: hash: import xxhash-r39 MEDIUM: pattern: add a revision to all pattern expressions MAJOR: pattern: add LRU-based cache on pattern matching BUG/MEDIUM: http: remove content-length from chunked messages DOC: http: update the comments about the rules for determining transfer-length BUG/MEDIUM: http: do not restrict parsing of transfer-encoding to HTTP/1.1 BUG/MEDIUM: http: incorrect transfer-coding in the request is a bad request BUG/MEDIUM: http: remove content-length form responses with bad transfer-encoding MEDIUM: http: restrict the HTTP version token to 1 digit as per RFC7230 MEDIUM: http: disable support for HTTP/0.9 by default MEDIUM: http: add option-ignore-probes to get rid of the floods of 408 BUG/MINOR: config: clear proxy->table.peers.p for disabled proxies MEDIUM: init: don't stop proxies in parent process when exiting MINOR: stick-table: don't attach to peers in stopped state MEDIUM: config: initialize stick-tables after peers, not before MEDIUM: peers: add the ability to disable a peers section MINOR: peers: store the pointer to the signal handler MEDIUM: peers: unregister peers that were never started MEDIUM: config: propagate the table's process list to the peers sections MEDIUM: init: stop any peers section not bound to the correct process MEDIUM: config: validate that peers sections are bound to exactly one process MAJOR: peers: allow peers section to be used with nbproc > 1 DOC: relax the peers restriction to single-process DOC: document option http-ignore-probes DOC: fix the comments about the meaning of msg->sol in HTTP BUG/MEDIUM: http: wait for the exact amount of body bytes in wait_for_request_body BUG/MAJOR: http: prevent risk of reading past end with balance url_param MEDIUM: stream: move HTTP request body analyser before process_common MEDIUM: http: add a new option http-buffer-request MEDIUM: http: provide 3 fetches for the body DOC: update the doc on the proxy protocol BUILD: pattern: fix build warnings introduced in the LRU cache BUG/MEDIUM: stats: properly initialize the scope before dumping stats CLEANUP: config: fix misleading information in error message. MINOR: config: report the number of processes using a peers section in the error case BUG/MEDIUM: config: properly compute the default number of processes for a proxy MEDIUM: http: add new "capture" action for http-request BUG/MEDIUM: http: fix the http-request capture parser BUG/MEDIUM: http: don't forward client shutdown without NOLINGER except for tunnels BUILD/MINOR: ssl: fix build failure introduced by recent patch BUG/MAJOR: check: fix breakage of inverted tcp-check rules CLEANUP: checks: fix double usage of cur / current_step in tcp-checks BUG/MEDIUM: checks: do not dereference head of a tcp-check at the end CLEANUP: checks: simplify the loop processing of tcp-checks BUG/MAJOR: checks: always check for end of list before proceeding BUG/MEDIUM: checks: do not dereference a list as a tcpcheck struct BUG/MAJOR: checks: break infinite loops when tcp-checks starts with comment MEDIUM: http: make url_param iterate over multiple occurrences BUG/MEDIUM: peers: apply a random reconnection timeout