aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/ngx_http_auth_request_module.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2022-05-30 21:25:54 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2022-05-30 21:25:54 +0300
commit911c95bfd3a17632c6f3d8c2f261055520278cc7 (patch)
tree381654eb0d8f4e82542dcda543f8a23d22945798 /src/http/modules/ngx_http_auth_request_module.c
parent87465e089b169f58a6bdd99ab0e7e9fcc79edda1 (diff)
downloadnginx-911c95bfd3a17632c6f3d8c2f261055520278cc7.tar.gz
nginx-911c95bfd3a17632c6f3d8c2f261055520278cc7.zip
Auth request: multiple WWW-Authenticate headers (ticket #485).
When using auth_request with an upstream server which returns 401 (Unauthorized), multiple WWW-Authenticate headers from the upstream server response are now properly copied to the response.
Diffstat (limited to 'src/http/modules/ngx_http_auth_request_module.c')
-rw-r--r--src/http/modules/ngx_http_auth_request_module.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/http/modules/ngx_http_auth_request_module.c b/src/http/modules/ngx_http_auth_request_module.c
index f64ab09aa..8bc98aae6 100644
--- a/src/http/modules/ngx_http_auth_request_module.c
+++ b/src/http/modules/ngx_http_auth_request_module.c
@@ -101,7 +101,7 @@ ngx_module_t ngx_http_auth_request_module = {
static ngx_int_t
ngx_http_auth_request_handler(ngx_http_request_t *r)
{
- ngx_table_elt_t *h, *ho;
+ ngx_table_elt_t *h, *ho, **ph;
ngx_http_request_t *sr;
ngx_http_post_subrequest_t *ps;
ngx_http_auth_request_ctx_t *ctx;
@@ -147,7 +147,9 @@ ngx_http_auth_request_handler(ngx_http_request_t *r)
h = sr->upstream->headers_in.www_authenticate;
}
- if (h) {
+ ph = &r->headers_out.www_authenticate;
+
+ while (h) {
ho = ngx_list_push(&r->headers_out.headers);
if (ho == NULL) {
return NGX_ERROR;
@@ -156,7 +158,10 @@ ngx_http_auth_request_handler(ngx_http_request_t *r)
*ho = *h;
ho->next = NULL;
- r->headers_out.www_authenticate = ho;
+ *ph = ho;
+ ph = &ho->next;
+
+ h = h->next;
}
return ctx->status;