|
|
- commit c990c7fe448248c4e2a34b84b593cc1b3536b328
- Author: Willy Tarreau <w@1wt.eu>
- Date: Sun Nov 11 10:36:25 2018 +0100
-
- BUG/MINOR: config: better detect the presence of the h2 pattern in npn/alpn
-
- In 1.8, commit 45a66cc ("MEDIUM: config: ensure that tune.bufsize is at
- least 16384 when using HTTP/2") tried to avoid an annoying issue making
- H2 fail when haproxy is built with default buffer sizes smaller than 16kB,
- which used to be the case for a very long time. Sadly, the test only sees
- when NPN/ALPN exactly match "h2" and not when it's combined like
- "h2,http/1.1" nor "http/1.1,h2". We can safely use strstr() there because
- the string is prefixed by the token's length (0x02) which is unambiguous
- as it cannot be part of any other token.
-
- This fix should be backported to 1.8 as a safety guard against bad
- configurations.
-
- (cherry picked from commit 4db49c0704898e51892a176505299de3e022c5ea)
- Signed-off-by: William Lallemand <wlallemand@haproxy.org>
-
- diff --git a/src/cfgparse.c b/src/cfgparse.c
- index 87a4d803..618ffd39 100644
- --- a/src/cfgparse.c
- +++ b/src/cfgparse.c
- @@ -7629,7 +7629,7 @@ int check_config_validity()
- if (curproxy->mode == PR_MODE_HTTP && global.tune.bufsize < 16384) {
- #ifdef OPENSSL_NPN_NEGOTIATED
- /* check NPN */
- - if (bind_conf->ssl_conf.npn_str && strcmp(bind_conf->ssl_conf.npn_str, "\002h2") == 0) {
- + if (bind_conf->ssl_conf.npn_str && strstr(bind_conf->ssl_conf.npn_str, "\002h2")) {
- ha_alert("config : HTTP frontend '%s' enables HTTP/2 via NPN at [%s:%d], so global.tune.bufsize must be at least 16384 bytes (%d now).\n",
- curproxy->id, bind_conf->file, bind_conf->line, global.tune.bufsize);
- cfgerr++;
- @@ -7637,7 +7637,7 @@ int check_config_validity()
- #endif
- #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
- /* check ALPN */
- - if (bind_conf->ssl_conf.alpn_str && strcmp(bind_conf->ssl_conf.alpn_str, "\002h2") == 0) {
- + if (bind_conf->ssl_conf.alpn_str && strstr(bind_conf->ssl_conf.alpn_str, "\002h2")) {
- ha_alert("config : HTTP frontend '%s' enables HTTP/2 via ALPN at [%s:%d], so global.tune.bufsize must be at least 16384 bytes (%d now).\n",
- curproxy->id, bind_conf->file, bind_conf->line, global.tune.bufsize);
- cfgerr++;
|