Mercurial > hg > nginx
diff src/core/ngx_resolver.c @ 1969:41fd9a2e0755
limit CNAME recursion
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 12 Apr 2008 07:29:20 +0000 |
parents | 4a4b15c9c474 |
children | b52cb9bf2064 |
line wrap: on
line diff
--- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -435,10 +435,29 @@ ngx_resolve_name_locked(ngx_resolver_t * /* NGX_RESOLVE_CNAME */ - ctx->name.len = rn->cnlen; - ctx->name.data = rn->u.cname; - - return ngx_resolve_name_locked(r, ctx); + if (ctx->recursion++ < NGX_RESOLVER_MAX_RECURSION) { + + ctx->name.len = rn->cnlen; + ctx->name.data = rn->u.cname; + + return ngx_resolve_name_locked(r, ctx); + } + + ctx->next = rn->waiting; + rn->waiting = NULL; + + /* unlock name mutex */ + + do { + ctx->state = NGX_RESOLVE_NXDOMAIN; + next = ctx->next; + + ctx->handler(ctx); + + ctx = next; + } while (ctx); + + return NGX_OK; } if (rn->waiting) {