Changeset 7624:1055e43e4fab in nginx


Ignore:
Timestamp:
02/11/20 10:22:44 (7 days ago)
Author:
Vladimir Homutov <vl@…>
Branch:
default
Phase:
public
Tags:
tip
Message:

Made ngx_http_get_forwarded_addr_internal() non-recursive.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/http/ngx_http_core_module.c

    r7605 r7624  
    26682668{
    26692669    u_char      *p;
    2670     ngx_int_t    rc;
    26712670    ngx_addr_t   paddr;
    2672 
    2673     if (ngx_cidr_match(addr->sockaddr, proxies) != NGX_OK) {
    2674         return NGX_DECLINED;
    2675     }
    2676 
    2677     for (p = xff + xfflen - 1; p > xff; p--, xfflen--) {
    2678         if (*p != ' ' && *p != ',') {
    2679             break;
    2680         }
    2681     }
    2682 
    2683     for ( /* void */ ; p > xff; p--) {
    2684         if (*p == ' ' || *p == ',') {
    2685             p++;
    2686             break;
    2687         }
    2688     }
    2689 
    2690     if (ngx_parse_addr_port(r->pool, &paddr, p, xfflen - (p - xff)) != NGX_OK) {
    2691         return NGX_DECLINED;
    2692     }
    2693 
    2694     *addr = paddr;
    2695 
    2696     if (recursive && p > xff) {
    2697         rc = ngx_http_get_forwarded_addr_internal(r, addr, xff, p - 1 - xff,
    2698                                                   proxies, 1);
    2699 
    2700         if (rc == NGX_DECLINED) {
    2701             return NGX_DONE;
    2702         }
    2703 
    2704         /* rc == NGX_OK || rc == NGX_DONE  */
    2705         return rc;
    2706     }
     2671    ngx_uint_t   found;
     2672
     2673    found = 0;
     2674
     2675    do {
     2676
     2677        if (ngx_cidr_match(addr->sockaddr, proxies) != NGX_OK) {
     2678            return found ? NGX_DONE : NGX_DECLINED;
     2679        }
     2680
     2681        for (p = xff + xfflen - 1; p > xff; p--, xfflen--) {
     2682            if (*p != ' ' && *p != ',') {
     2683                break;
     2684            }
     2685        }
     2686
     2687        for ( /* void */ ; p > xff; p--) {
     2688            if (*p == ' ' || *p == ',') {
     2689                p++;
     2690                break;
     2691            }
     2692        }
     2693
     2694        if (ngx_parse_addr_port(r->pool, &paddr, p, xfflen - (p - xff))
     2695            != NGX_OK)
     2696        {
     2697            return found ? NGX_DONE : NGX_DECLINED;
     2698        }
     2699
     2700        *addr = paddr;
     2701        found = 1;
     2702        xfflen = p - 1 - xff;
     2703
     2704    } while (recursive && p > xff);
    27072705
    27082706    return NGX_OK;
Note: See TracChangeset for help on using the changeset viewer.