Mercurial > hg > nginx
comparison src/core/ngx_resolver.c @ 7718:8fe7ebe5adc4
Resolver: improved error messages (ticket #2024).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 28 Sep 2020 17:41:22 +0300 |
parents | 571383f75a9a |
children | eb54227110f0 |
comparison
equal
deleted
inserted
replaced
7717:e3e8b8234f05 | 7718:8fe7ebe5adc4 |
---|---|
1916 | 1916 |
1917 rn = ngx_resolver_lookup_name(r, &name, hash); | 1917 rn = ngx_resolver_lookup_name(r, &name, hash); |
1918 | 1918 |
1919 if (rn == NULL) { | 1919 if (rn == NULL) { |
1920 ngx_log_error(r->log_level, r->log, 0, | 1920 ngx_log_error(r->log_level, r->log, 0, |
1921 "unexpected response for %V", &name); | 1921 "unexpected DNS response for %V", &name); |
1922 ngx_resolver_free(r, name.data); | 1922 ngx_resolver_free(r, name.data); |
1923 goto failed; | 1923 goto failed; |
1924 } | 1924 } |
1925 | 1925 |
1926 switch (qtype) { | 1926 switch (qtype) { |
1928 #if (NGX_HAVE_INET6) | 1928 #if (NGX_HAVE_INET6) |
1929 case NGX_RESOLVE_AAAA: | 1929 case NGX_RESOLVE_AAAA: |
1930 | 1930 |
1931 if (rn->query6 == NULL || rn->naddrs6 != (u_short) -1) { | 1931 if (rn->query6 == NULL || rn->naddrs6 != (u_short) -1) { |
1932 ngx_log_error(r->log_level, r->log, 0, | 1932 ngx_log_error(r->log_level, r->log, 0, |
1933 "unexpected response for %V", &name); | 1933 "unexpected DNS response for %V", &name); |
1934 ngx_resolver_free(r, name.data); | 1934 ngx_resolver_free(r, name.data); |
1935 goto failed; | 1935 goto failed; |
1936 } | 1936 } |
1937 | 1937 |
1938 if (trunc && rn->tcp6) { | 1938 if (trunc && rn->tcp6) { |
1947 | 1947 |
1948 default: /* NGX_RESOLVE_A */ | 1948 default: /* NGX_RESOLVE_A */ |
1949 | 1949 |
1950 if (rn->query == NULL || rn->naddrs != (u_short) -1) { | 1950 if (rn->query == NULL || rn->naddrs != (u_short) -1) { |
1951 ngx_log_error(r->log_level, r->log, 0, | 1951 ngx_log_error(r->log_level, r->log, 0, |
1952 "unexpected response for %V", &name); | 1952 "unexpected DNS response for %V", &name); |
1953 ngx_resolver_free(r, name.data); | 1953 ngx_resolver_free(r, name.data); |
1954 goto failed; | 1954 goto failed; |
1955 } | 1955 } |
1956 | 1956 |
1957 if (trunc && rn->tcp) { | 1957 if (trunc && rn->tcp) { |
1962 qident = (rn->query[0] << 8) + rn->query[1]; | 1962 qident = (rn->query[0] << 8) + rn->query[1]; |
1963 } | 1963 } |
1964 | 1964 |
1965 if (ident != qident) { | 1965 if (ident != qident) { |
1966 ngx_log_error(r->log_level, r->log, 0, | 1966 ngx_log_error(r->log_level, r->log, 0, |
1967 "wrong ident %ui response for %V, expect %ui", | 1967 "wrong ident %ui in DNS response for %V, expect %ui", |
1968 ident, &name, qident); | 1968 ident, &name, qident); |
1969 ngx_resolver_free(r, name.data); | 1969 ngx_resolver_free(r, name.data); |
1970 goto failed; | 1970 goto failed; |
1971 } | 1971 } |
1972 | 1972 |
2147 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) | 2147 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) |
2148 + (an->ttl[2] << 8) + (an->ttl[3]); | 2148 + (an->ttl[2] << 8) + (an->ttl[3]); |
2149 | 2149 |
2150 if (class != 1) { | 2150 if (class != 1) { |
2151 ngx_log_error(r->log_level, r->log, 0, | 2151 ngx_log_error(r->log_level, r->log, 0, |
2152 "unexpected RR class %ui", class); | 2152 "unexpected RR class %ui in DNS response", class); |
2153 goto failed; | 2153 goto failed; |
2154 } | 2154 } |
2155 | 2155 |
2156 if (ttl < 0) { | 2156 if (ttl < 0) { |
2157 ttl = 0; | 2157 ttl = 0; |
2216 break; | 2216 break; |
2217 | 2217 |
2218 default: | 2218 default: |
2219 | 2219 |
2220 ngx_log_error(r->log_level, r->log, 0, | 2220 ngx_log_error(r->log_level, r->log, 0, |
2221 "unexpected RR type %ui", type); | 2221 "unexpected RR type %ui in DNS response", type); |
2222 } | 2222 } |
2223 | 2223 |
2224 i += len; | 2224 i += len; |
2225 } | 2225 } |
2226 | 2226 |
2565 | 2565 |
2566 rn = ngx_resolver_lookup_srv(r, &name, hash); | 2566 rn = ngx_resolver_lookup_srv(r, &name, hash); |
2567 | 2567 |
2568 if (rn == NULL || rn->query == NULL) { | 2568 if (rn == NULL || rn->query == NULL) { |
2569 ngx_log_error(r->log_level, r->log, 0, | 2569 ngx_log_error(r->log_level, r->log, 0, |
2570 "unexpected response for %V", &name); | 2570 "unexpected DNS response for %V", &name); |
2571 ngx_resolver_free(r, name.data); | 2571 ngx_resolver_free(r, name.data); |
2572 goto failed; | 2572 goto failed; |
2573 } | 2573 } |
2574 | 2574 |
2575 if (trunc && rn->tcp) { | 2575 if (trunc && rn->tcp) { |
2579 | 2579 |
2580 qident = (rn->query[0] << 8) + rn->query[1]; | 2580 qident = (rn->query[0] << 8) + rn->query[1]; |
2581 | 2581 |
2582 if (ident != qident) { | 2582 if (ident != qident) { |
2583 ngx_log_error(r->log_level, r->log, 0, | 2583 ngx_log_error(r->log_level, r->log, 0, |
2584 "wrong ident %ui response for %V, expect %ui", | 2584 "wrong ident %ui in DNS response for %V, expect %ui", |
2585 ident, &name, qident); | 2585 ident, &name, qident); |
2586 ngx_resolver_free(r, name.data); | 2586 ngx_resolver_free(r, name.data); |
2587 goto failed; | 2587 goto failed; |
2588 } | 2588 } |
2589 | 2589 |
2689 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) | 2689 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) |
2690 + (an->ttl[2] << 8) + (an->ttl[3]); | 2690 + (an->ttl[2] << 8) + (an->ttl[3]); |
2691 | 2691 |
2692 if (class != 1) { | 2692 if (class != 1) { |
2693 ngx_log_error(r->log_level, r->log, 0, | 2693 ngx_log_error(r->log_level, r->log, 0, |
2694 "unexpected RR class %ui", class); | 2694 "unexpected RR class %ui in DNS response", class); |
2695 goto failed; | 2695 goto failed; |
2696 } | 2696 } |
2697 | 2697 |
2698 if (ttl < 0) { | 2698 if (ttl < 0) { |
2699 ttl = 0; | 2699 ttl = 0; |
2732 break; | 2732 break; |
2733 | 2733 |
2734 default: | 2734 default: |
2735 | 2735 |
2736 ngx_log_error(r->log_level, r->log, 0, | 2736 ngx_log_error(r->log_level, r->log, 0, |
2737 "unexpected RR type %ui", type); | 2737 "unexpected RR type %ui in DNS response", type); |
2738 } | 2738 } |
2739 | 2739 |
2740 i += len; | 2740 i += len; |
2741 } | 2741 } |
2742 | 2742 |
3163 | 3163 |
3164 valid: | 3164 valid: |
3165 | 3165 |
3166 if (rn == NULL || rn->query == NULL) { | 3166 if (rn == NULL || rn->query == NULL) { |
3167 ngx_log_error(r->log_level, r->log, 0, | 3167 ngx_log_error(r->log_level, r->log, 0, |
3168 "unexpected response for %V", &name); | 3168 "unexpected DNS response for %V", &name); |
3169 ngx_resolver_free(r, name.data); | 3169 ngx_resolver_free(r, name.data); |
3170 goto failed; | 3170 goto failed; |
3171 } | 3171 } |
3172 | 3172 |
3173 qident = (rn->query[0] << 8) + rn->query[1]; | 3173 qident = (rn->query[0] << 8) + rn->query[1]; |
3174 | 3174 |
3175 if (ident != qident) { | 3175 if (ident != qident) { |
3176 ngx_log_error(r->log_level, r->log, 0, | 3176 ngx_log_error(r->log_level, r->log, 0, |
3177 "wrong ident %ui response for %V, expect %ui", | 3177 "wrong ident %ui in DNS response for %V, expect %ui", |
3178 ident, &name, qident); | 3178 ident, &name, qident); |
3179 ngx_resolver_free(r, name.data); | 3179 ngx_resolver_free(r, name.data); |
3180 goto failed; | 3180 goto failed; |
3181 } | 3181 } |
3182 | 3182 |
3254 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) | 3254 ttl = (an->ttl[0] << 24) + (an->ttl[1] << 16) |
3255 + (an->ttl[2] << 8) + (an->ttl[3]); | 3255 + (an->ttl[2] << 8) + (an->ttl[3]); |
3256 | 3256 |
3257 if (class != 1) { | 3257 if (class != 1) { |
3258 ngx_log_error(r->log_level, r->log, 0, | 3258 ngx_log_error(r->log_level, r->log, 0, |
3259 "unexpected RR class %ui", class); | 3259 "unexpected RR class %ui in DNS response", class); |
3260 goto failed; | 3260 goto failed; |
3261 } | 3261 } |
3262 | 3262 |
3263 if (ttl < 0) { | 3263 if (ttl < 0) { |
3264 ttl = 0; | 3264 ttl = 0; |
3281 break; | 3281 break; |
3282 | 3282 |
3283 default: | 3283 default: |
3284 | 3284 |
3285 ngx_log_error(r->log_level, r->log, 0, | 3285 ngx_log_error(r->log_level, r->log, 0, |
3286 "unexpected RR type %ui", type); | 3286 "unexpected RR type %ui in DNS response", type); |
3287 } | 3287 } |
3288 | 3288 |
3289 i += len; | 3289 i += len; |
3290 } | 3290 } |
3291 | 3291 |
3950 len += 1 + n; | 3950 len += 1 + n; |
3951 p = &p[n]; | 3951 p = &p[n]; |
3952 } | 3952 } |
3953 | 3953 |
3954 if (p >= last) { | 3954 if (p >= last) { |
3955 err = "name is out of response"; | 3955 err = "name is out of DNS response"; |
3956 goto invalid; | 3956 goto invalid; |
3957 } | 3957 } |
3958 } | 3958 } |
3959 | 3959 |
3960 err = "compression pointers loop"; | 3960 err = "compression pointers loop in DNS response"; |
3961 | 3961 |
3962 invalid: | 3962 invalid: |
3963 | 3963 |
3964 ngx_log_error(r->log_level, r->log, 0, err); | 3964 ngx_log_error(r->log_level, r->log, 0, err); |
3965 | 3965 |