comparison src/core/ngx_resolver.c @ 6352:ff9b32c0e141

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 497d0cff8ace
children d35b4d590b2d
comparison
equal deleted inserted replaced
6351:497d0cff8ace 6352:ff9b32c0e141
1999 rn->valid = ngx_time() + (r->valid ? r->valid : (time_t) rn->ttl); 1999 rn->valid = ngx_time() + (r->valid ? r->valid : (time_t) rn->ttl);
2000 rn->expire = ngx_time() + r->expire; 2000 rn->expire = ngx_time() + r->expire;
2001 2001
2002 ngx_queue_insert_head(&r->name_expire_queue, &rn->queue); 2002 ngx_queue_insert_head(&r->name_expire_queue, &rn->queue);
2003 2003
2004 ngx_resolver_free(r, rn->query);
2005 rn->query = NULL;
2006 #if (NGX_HAVE_INET6)
2007 rn->query6 = NULL;
2008 #endif
2009
2004 ctx = rn->waiting; 2010 ctx = rn->waiting;
2005 rn->waiting = NULL; 2011 rn->waiting = NULL;
2006 2012
2007 if (ctx) { 2013 if (ctx) {
2008 2014
2015 if (ctx->recursion++ >= NGX_RESOLVER_MAX_RECURSION) {
2016
2017 /* unlock name mutex */
2018
2019 do {
2020 ctx->state = NGX_RESOLVE_NXDOMAIN;
2021 next = ctx->next;
2022
2023 ctx->handler(ctx);
2024
2025 ctx = next;
2026 } while (ctx);
2027
2028 return;
2029 }
2030
2009 for (next = ctx; next; next = next->next) { 2031 for (next = ctx; next; next = next->next) {
2010 next->node = NULL; 2032 next->node = NULL;
2011 } 2033 }
2012 2034
2013 (void) ngx_resolve_name_locked(r, ctx, &name); 2035 (void) ngx_resolve_name_locked(r, ctx, &name);
2014 } 2036 }
2015
2016 ngx_resolver_free(r, rn->query);
2017 rn->query = NULL;
2018 #if (NGX_HAVE_INET6)
2019 rn->query6 = NULL;
2020 #endif
2021 2037
2022 /* unlock name mutex */ 2038 /* unlock name mutex */
2023 2039
2024 return; 2040 return;
2025 } 2041 }