comparison src/core/ngx_resolver.c @ 2282:ec97eb9a8038

show name for a FORMERR DNS response
author Igor Sysoev <igor@sysoev.ru>
date Fri, 24 Oct 2008 14:38:09 +0000
parents 5004229420a6
children 52987a023486
comparison
equal deleted inserted replaced
2281:5004229420a6 2282:ec97eb9a8038
954 static void 954 static void
955 ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n) 955 ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n)
956 { 956 {
957 char *err; 957 char *err;
958 size_t len; 958 size_t len;
959 ngx_uint_t i, ident, flags, code, nqs, nan, qtype, qclass; 959 ngx_uint_t i, times, ident, qident, flags, code, nqs, nan,
960 qtype, qclass;
961 ngx_queue_t *q;
960 ngx_resolver_qs_t *qs; 962 ngx_resolver_qs_t *qs;
963 ngx_resolver_node_t *rn;
961 ngx_resolver_query_t *query; 964 ngx_resolver_query_t *query;
962 965
963 if ((size_t) n < sizeof(ngx_resolver_query_t)) { 966 if ((size_t) n < sizeof(ngx_resolver_query_t)) {
964 goto short_response; 967 goto short_response;
965 } 968 }
983 return; 986 return;
984 } 987 }
985 988
986 code = flags & 0x7f; 989 code = flags & 0x7f;
987 990
988 if (code == NGX_RESOLVE_FORMERR || code > NGX_RESOLVE_REFUSED) { 991 if (code == NGX_RESOLVE_FORMERR) {
989 ngx_log_error(r->log_level, r->log, 0, 992
990 "DNS error (%ui: %s), query id:%ui", 993 times = 0;
991 code, ngx_resolver_strerror(code), ident); 994
992 return; 995 for (q = ngx_queue_head(&r->name_resend_queue);
996 q != ngx_queue_sentinel(&r->name_resend_queue) || times++ < 100;
997 q = ngx_queue_next(q))
998 {
999 rn = ngx_queue_data(q, ngx_resolver_node_t, queue);
1000 qident = (rn->query[0] << 8) + rn->query[1];
1001
1002 if (qident == ident) {
1003 ngx_log_error(r->log_level, r->log, 0,
1004 "DNS error (%ui: %s), query id:%ui, name:\"%*s\"",
1005 code, ngx_resolver_strerror(code), ident,
1006 rn->nlen, rn->name);
1007 return;
1008 }
1009 }
1010
1011 goto dns_error;
1012 }
1013
1014 if (code > NGX_RESOLVE_REFUSED) {
1015 goto dns_error;
993 } 1016 }
994 1017
995 if (nqs != 1) { 1018 if (nqs != 1) {
996 err = "invalid number of questions in DNS response"; 1019 err = "invalid number of questions in DNS response";
997 goto done; 1020 goto done;
1066 1089
1067 done: 1090 done:
1068 1091
1069 ngx_log_error(r->log_level, r->log, 0, err); 1092 ngx_log_error(r->log_level, r->log, 0, err);
1070 1093
1094 return;
1095
1096 dns_error:
1097
1098 ngx_log_error(r->log_level, r->log, 0,
1099 "DNS error (%ui: %s), query id:%ui",
1100 code, ngx_resolver_strerror(code), ident);
1071 return; 1101 return;
1072 } 1102 }
1073 1103
1074 1104
1075 static void 1105 static void