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