Skip to content
Permalink
Browse files

Made ngx_http_get_forwarded_addr_internal() non-recursive.

  • Loading branch information
vl-homutov committed Feb 11, 2020
1 parent 16168dc commit de5a054b338ab14fc240f1062f023f7f0ef0d605
Showing with 25 additions and 27 deletions.
  1. +25 −27 src/http/ngx_http_core_module.c
@@ -2667,43 +2667,41 @@ ngx_http_get_forwarded_addr_internal(ngx_http_request_t *r, ngx_addr_t *addr,
u_char *xff, size_t xfflen, ngx_array_t *proxies, int recursive)
{
u_char *p;
ngx_int_t rc;
ngx_addr_t paddr;
ngx_uint_t found;

if (ngx_cidr_match(addr->sockaddr, proxies) != NGX_OK) {
return NGX_DECLINED;
}
found = 0;

for (p = xff + xfflen - 1; p > xff; p--, xfflen--) {
if (*p != ' ' && *p != ',') {
break;
}
}
do {

for ( /* void */ ; p > xff; p--) {
if (*p == ' ' || *p == ',') {
p++;
break;
if (ngx_cidr_match(addr->sockaddr, proxies) != NGX_OK) {
return found ? NGX_DONE : NGX_DECLINED;
}
}

if (ngx_parse_addr_port(r->pool, &paddr, p, xfflen - (p - xff)) != NGX_OK) {
return NGX_DECLINED;
}

*addr = paddr;
for (p = xff + xfflen - 1; p > xff; p--, xfflen--) {
if (*p != ' ' && *p != ',') {
break;
}
}

if (recursive && p > xff) {
rc = ngx_http_get_forwarded_addr_internal(r, addr, xff, p - 1 - xff,
proxies, 1);
for ( /* void */ ; p > xff; p--) {
if (*p == ' ' || *p == ',') {
p++;
break;
}
}

if (rc == NGX_DECLINED) {
return NGX_DONE;
if (ngx_parse_addr_port(r->pool, &paddr, p, xfflen - (p - xff))
!= NGX_OK)
{
return found ? NGX_DONE : NGX_DECLINED;
}

/* rc == NGX_OK || rc == NGX_DONE */
return rc;
}
*addr = paddr;
found = 1;
xfflen = p - 1 - xff;

} while (recursive && p > xff);

return NGX_OK;
}

0 comments on commit de5a054

Please sign in to comment.
You can’t perform that action at this time.