diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2008-10-24 14:38:09 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2008-10-24 14:38:09 +0000 |
| commit | 571a5e1512bf760e260697d5786ea06349542884 (patch) | |
| tree | ba20396ab59f29a134e93146c3b742e7c82b3cfa /src | |
| parent | 1c2bb210c19870e8fddbddf3d1a267140090ec65 (diff) | |
| download | nginx-571a5e1512bf760e260697d5786ea06349542884.tar.gz nginx-571a5e1512bf760e260697d5786ea06349542884.tar.bz2 | |
show name for a FORMERR DNS response
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/ngx_resolver.c | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index f887dcaaf..f4bbe19d4 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -956,8 +956,11 @@ ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n) { char *err; size_t len; - ngx_uint_t i, ident, flags, code, nqs, nan, qtype, qclass; + ngx_uint_t i, times, ident, qident, flags, code, nqs, nan, + qtype, qclass; + ngx_queue_t *q; ngx_resolver_qs_t *qs; + ngx_resolver_node_t *rn; ngx_resolver_query_t *query; if ((size_t) n < sizeof(ngx_resolver_query_t)) { @@ -985,11 +988,31 @@ ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n) code = flags & 0x7f; - if (code == NGX_RESOLVE_FORMERR || code > NGX_RESOLVE_REFUSED) { - ngx_log_error(r->log_level, r->log, 0, - "DNS error (%ui: %s), query id:%ui", - code, ngx_resolver_strerror(code), ident); - return; + if (code == NGX_RESOLVE_FORMERR) { + + times = 0; + + for (q = ngx_queue_head(&r->name_resend_queue); + q != ngx_queue_sentinel(&r->name_resend_queue) || times++ < 100; + q = ngx_queue_next(q)) + { + rn = ngx_queue_data(q, ngx_resolver_node_t, queue); + qident = (rn->query[0] << 8) + rn->query[1]; + + if (qident == ident) { + ngx_log_error(r->log_level, r->log, 0, + "DNS error (%ui: %s), query id:%ui, name:\"%*s\"", + code, ngx_resolver_strerror(code), ident, + rn->nlen, rn->name); + return; + } + } + + goto dns_error; + } + + if (code > NGX_RESOLVE_REFUSED) { + goto dns_error; } if (nqs != 1) { @@ -1069,6 +1092,13 @@ done: ngx_log_error(r->log_level, r->log, 0, err); return; + +dns_error: + + ngx_log_error(r->log_level, r->log, 0, + "DNS error (%ui: %s), query id:%ui", + code, ngx_resolver_strerror(code), ident); + return; } |
