git: 9274f29acde6 - main - www/nginx-devel: enable third-party lua module back

From: Sergey A. Osokin <osa_at_FreeBSD.org>
Date: Sun, 10 Jul 2022 20:31:58 UTC
The branch main has been updated by osa:

URL: https://cgit.FreeBSD.org/ports/commit/?id=9274f29acde6ef0ae667f42aa1d3f9577030441e

commit 9274f29acde6ef0ae667f42aa1d3f9577030441e
Author:     Sergey A. Osokin <osa@FreeBSD.org>
AuthorDate: 2022-07-10 20:30:30 +0000
Commit:     Sergey A. Osokin <osa@FreeBSD.org>
CommitDate: 2022-07-10 20:31:53 +0000

    www/nginx-devel: enable third-party lua module back
    
    Bump PORTREVISION.
---
 www/nginx-devel/Makefile                           |   2 +-
 www/nginx-devel/Makefile.extmod                    |   1 +
 www/nginx-devel/files/extra-patch-lua-nginx-module | 167 +++++++++++++++++++++
 3 files changed, 169 insertions(+), 1 deletion(-)

diff --git a/www/nginx-devel/Makefile b/www/nginx-devel/Makefile
index 1de332053904..0d94f81afdbb 100644
--- a/www/nginx-devel/Makefile
+++ b/www/nginx-devel/Makefile
@@ -2,6 +2,7 @@
 
 PORTNAME?=	nginx
 PORTVERSION=	1.23.0
+PORTREVISION=	1
 CATEGORIES=	www
 MASTER_SITES=	https://nginx.org/download/ \
 		LOCAL/osa
@@ -252,7 +253,6 @@ NJS_CONFIGURE_ARGS=	--no-pcre2
     ${PORT_OPTIONS:MHTTP_UPLOAD_PROGRESS} || \
     ${PORT_OPTIONS:MHTTP_UPSTREAM_STICKY} || \
     ${PORT_OPTIONS:MHTTP_ZIP} || \
-    ${PORT_OPTIONS:MLUA} || \
     ${PORT_OPTIONS:MNAXSI} || \
     ${PORT_OPTIONS:MSRCACHE} || \
     ${PORT_OPTIONS:MVOD}
diff --git a/www/nginx-devel/Makefile.extmod b/www/nginx-devel/Makefile.extmod
index 59e16850f99f..c8edbf55356b 100644
--- a/www/nginx-devel/Makefile.extmod
+++ b/www/nginx-devel/Makefile.extmod
@@ -229,6 +229,7 @@ LUA_CONFIGURE_ENV=	LUAJIT_INC=${LOCALBASE}/include/luajit-2.1 \
 			LUAJIT_LIB=${LOCALBASE}/lib
 LUA_GH_TUPLE=		openresty:lua-nginx-module:v0.10.21:lua
 LUA_VARS=		DSO_EXTMODS+=lua
+LUA_EXTRA_PATCHES=	${PATCHDIR}/extra-patch-lua-nginx-module:-p1
 
 LINK_GH_TUPLE=		Taymindis:nginx-link-function:3.2.4:link
 LINK_EXTRA_PATCHES=	${PATCHDIR}/extra-patch-nginx-link-function-config \
diff --git a/www/nginx-devel/files/extra-patch-lua-nginx-module b/www/nginx-devel/files/extra-patch-lua-nginx-module
new file mode 100644
index 000000000000..b2a22d723d1f
--- /dev/null
+++ b/www/nginx-devel/files/extra-patch-lua-nginx-module
@@ -0,0 +1,167 @@
+From b6d167cf1a93c0c885c28db5a439f2404874cb26 Mon Sep 17 00:00:00 2001
+From: Hiroaki Nakamura <hnakamur@gmail.com>
+Date: Tue, 28 Jun 2022 14:37:24 +0900
+Subject: [PATCH] bugfix: update handling of multiple headers changed in nginx
+ 1.23.0 (#2063)
+
+---
+ src/ngx_http_lua_headers_in.c  | 46 ++++++++++++++++++++++++
+ src/ngx_http_lua_headers_out.c | 64 ++++++++++++++++++++++++++++++++++
+ 2 files changed, 110 insertions(+)
+
+diff --git a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c b/src/ngx_http_lua_headers_in.c
+index a55d9cac7..440548140 100644
+--- a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c
++++ b/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_in.c
+@@ -152,9 +152,15 @@ static ngx_http_lua_set_header_t  ngx_http_lua_set_handlers[] = {
+                  ngx_http_set_builtin_header },
+ #endif
+ 
++#if defined(nginx_version) && nginx_version >= 1023000
++    { ngx_string("Cookie"),
++                 offsetof(ngx_http_headers_in_t, cookie),
++                 ngx_http_set_builtin_multi_header },
++#else
+     { ngx_string("Cookie"),
+                  offsetof(ngx_http_headers_in_t, cookies),
+                  ngx_http_set_builtin_multi_header },
++#endif
+ 
+     { ngx_null_string, 0, ngx_http_set_header }
+ };
+@@ -580,6 +586,45 @@ static ngx_int_t
+ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+     ngx_http_lua_header_val_t *hv, ngx_str_t *value)
+ {
++#if defined(nginx_version) && nginx_version >= 1023000
++    ngx_table_elt_t  **headers, **ph, *h;
++    int                nelts;
++
++    headers = (ngx_table_elt_t **) ((char *) &r->headers_in + hv->offset);
++
++    if (!hv->no_override && *headers != NULL) {
++        nelts = 0;
++        for (h = *headers; h; h = h->next) {
++            nelts++;
++        }
++
++        *headers = NULL;
++
++        dd("clear multi-value headers: %d", nelts);
++    }
++
++    if (ngx_http_set_header_helper(r, hv, value, &h) == NGX_ERROR) {
++        return NGX_ERROR;
++    }
++
++    if (value->len == 0) {
++        return NGX_OK;
++    }
++
++    dd("new multi-value header: %p", h);
++
++    if (*headers) {
++        for (ph = headers; *ph; ph = &(*ph)->next) { /* void */ }
++        *ph = h;
++
++    } else {
++        *headers = h;
++    }
++
++    h->next = NULL;
++
++    return NGX_OK;
++#else
+     ngx_array_t       *headers;
+     ngx_table_elt_t  **v, *h;
+ 
+@@ -626,6 +671,7 @@ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+ 
+     *v = h;
+     return NGX_OK;
++#endif
+ }
+ 
+ 
+diff --git a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c b/src/ngx_http_lua_headers_out.c
+index 6e9f9c19a..571723d9a 100644
+--- a/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c
++++ b/../lua-nginx-module-0.10.21/src/ngx_http_lua_headers_out.c
+@@ -311,6 +311,69 @@ static ngx_int_t
+ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+     ngx_http_lua_header_val_t *hv, ngx_str_t *value)
+ {
++#if defined(nginx_version) && nginx_version >= 1023000
++    ngx_table_elt_t  **headers, *h, *ho, **ph;
++
++    headers = (ngx_table_elt_t **) ((char *) &r->headers_out + hv->offset);
++
++    if (hv->no_override) {
++        for (h = *headers; h; h = h->next) {
++            if (!h->hash) {
++                h->value = *value;
++                h->hash = hv->hash;
++                return NGX_OK;
++            }
++        }
++
++        goto create;
++    }
++
++    /* override old values (if any) */
++
++    if (*headers) {
++        for (h = (*headers)->next; h; h = h->next) {
++            h->hash = 0;
++            h->value.len = 0;
++        }
++
++        h = *headers;
++
++        h->value = *value;
++
++        if (value->len == 0) {
++            h->hash = 0;
++
++        } else {
++            h->hash = hv->hash;
++        }
++
++        return NGX_OK;
++    }
++
++create:
++
++    for (ph = headers; *ph; ph = &(*ph)->next) { /* void */ }
++
++    ho = ngx_list_push(&r->headers_out.headers);
++    if (ho == NULL) {
++        return NGX_ERROR;
++    }
++
++    ho->value = *value;
++
++    if (value->len == 0) {
++        ho->hash = 0;
++
++    } else {
++        ho->hash = hv->hash;
++    }
++
++    ho->key = hv->key;
++    ho->next = NULL;
++    *ph = ho;
++
++    return NGX_OK;
++#else
+     ngx_array_t      *pa;
+     ngx_table_elt_t  *ho, **ph;
+     ngx_uint_t        i;
+@@ -384,6 +447,7 @@ ngx_http_set_builtin_multi_header(ngx_http_request_t *r,
+     *ph = ho;
+ 
+     return NGX_OK;
++#endif
+ }
+ 
+