Mercurial > hg > nginx
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 |