comparison src/core/ngx_resolver.c @ 6360:93d70d87914c stable-1.8

Resolver: limited CNAME recursion. Previously, the recursion was only limited for cached responses.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 26 Jan 2016 16:47:14 +0300
parents dac6eda40475
children
comparison
equal deleted inserted replaced
6359:dac6eda40475 6360:93d70d87914c
1979 rn->valid = ngx_time() + (r->valid ? r->valid : (time_t) rn->ttl); 1979 rn->valid = ngx_time() + (r->valid ? r->valid : (time_t) rn->ttl);
1980 rn->expire = ngx_time() + r->expire; 1980 rn->expire = ngx_time() + r->expire;
1981 1981
1982 ngx_queue_insert_head(&r->name_expire_queue, &rn->queue); 1982 ngx_queue_insert_head(&r->name_expire_queue, &rn->queue);
1983 1983
1984 ngx_resolver_free(r, rn->query);
1985 rn->query = NULL;
1986 #if (NGX_HAVE_INET6)
1987 rn->query6 = NULL;
1988 #endif
1989
1984 ctx = rn->waiting; 1990 ctx = rn->waiting;
1985 rn->waiting = NULL; 1991 rn->waiting = NULL;
1986 1992
1987 if (ctx) { 1993 if (ctx) {
1988 1994
1995 if (ctx->recursion++ >= NGX_RESOLVER_MAX_RECURSION) {
1996
1997 /* unlock name mutex */
1998
1999 do {
2000 ctx->state = NGX_RESOLVE_NXDOMAIN;
2001 next = ctx->next;
2002
2003 ctx->handler(ctx);
2004
2005 ctx = next;
2006 } while (ctx);
2007
2008 return;
2009 }
2010
1989 for (next = ctx; next; next = next->next) { 2011 for (next = ctx; next; next = next->next) {
1990 next->node = NULL; 2012 next->node = NULL;
1991 } 2013 }
1992 2014
1993 (void) ngx_resolve_name_locked(r, ctx, &name); 2015 (void) ngx_resolve_name_locked(r, ctx, &name);
1994 } 2016 }
1995
1996 ngx_resolver_free(r, rn->query);
1997 rn->query = NULL;
1998 #if (NGX_HAVE_INET6)
1999 rn->query6 = NULL;
2000 #endif
2001 2017
2002 /* unlock name mutex */ 2018 /* unlock name mutex */
2003 2019
2004 return; 2020 return;
2005 } 2021 }