comparison src/core/ngx_resolver.c @ 5839:20ebe12cfa7a stable-1.6

Resolver: fixed resend on malformed responses. DNS request resend on malformed responses was broken in 98876ce2a7fd (1.5.8). Reported by Pramod Korathota.
author Ruslan Ermilov <ru@nginx.com>
date Wed, 16 Jul 2014 10:21:28 +0400
parents 957d734362ed
children 60d2cb03faee
comparison
equal deleted inserted replaced
5838:91c1f9071abf 5839:20ebe12cfa7a
1465 "unexpected response for %V", &name); 1465 "unexpected response for %V", &name);
1466 ngx_resolver_free(r, name.data); 1466 ngx_resolver_free(r, name.data);
1467 goto failed; 1467 goto failed;
1468 } 1468 }
1469 1469
1470 rn->naddrs6 = 0;
1471 qident = (rn->query6[0] << 8) + rn->query6[1]; 1470 qident = (rn->query6[0] << 8) + rn->query6[1];
1472 1471
1473 break; 1472 break;
1474 #endif 1473 #endif
1475 1474
1480 "unexpected response for %V", &name); 1479 "unexpected response for %V", &name);
1481 ngx_resolver_free(r, name.data); 1480 ngx_resolver_free(r, name.data);
1482 goto failed; 1481 goto failed;
1483 } 1482 }
1484 1483
1485 rn->naddrs = 0;
1486 qident = (rn->query[0] << 8) + rn->query[1]; 1484 qident = (rn->query[0] << 8) + rn->query[1];
1487 } 1485 }
1488 1486
1489 if (ident != qident) { 1487 if (ident != qident) {
1490 ngx_log_error(r->log_level, r->log, 0, 1488 ngx_log_error(r->log_level, r->log, 0,
1505 #if (NGX_HAVE_INET6) 1503 #if (NGX_HAVE_INET6)
1506 switch (qtype) { 1504 switch (qtype) {
1507 1505
1508 case NGX_RESOLVE_AAAA: 1506 case NGX_RESOLVE_AAAA:
1509 1507
1508 rn->naddrs6 = 0;
1509
1510 if (rn->naddrs == (u_short) -1) { 1510 if (rn->naddrs == (u_short) -1) {
1511 goto next; 1511 goto next;
1512 } 1512 }
1513 1513
1514 if (rn->naddrs) { 1514 if (rn->naddrs) {
1517 1517
1518 break; 1518 break;
1519 1519
1520 default: /* NGX_RESOLVE_A */ 1520 default: /* NGX_RESOLVE_A */
1521 1521
1522 rn->naddrs = 0;
1523
1522 if (rn->naddrs6 == (u_short) -1) { 1524 if (rn->naddrs6 == (u_short) -1) {
1523 goto next; 1525 goto next;
1524 } 1526 }
1525 1527
1526 if (rn->naddrs6) { 1528 if (rn->naddrs6) {
1536 1538
1537 #if (NGX_HAVE_INET6) 1539 #if (NGX_HAVE_INET6)
1538 switch (qtype) { 1540 switch (qtype) {
1539 1541
1540 case NGX_RESOLVE_AAAA: 1542 case NGX_RESOLVE_AAAA:
1543
1544 rn->naddrs6 = 0;
1541 1545
1542 if (rn->naddrs == (u_short) -1) { 1546 if (rn->naddrs == (u_short) -1) {
1543 rn->code = (u_char) code; 1547 rn->code = (u_char) code;
1544 goto next; 1548 goto next;
1545 } 1549 }
1546 1550
1547 break; 1551 break;
1548 1552
1549 default: /* NGX_RESOLVE_A */ 1553 default: /* NGX_RESOLVE_A */
1554
1555 rn->naddrs = 0;
1550 1556
1551 if (rn->naddrs6 == (u_short) -1) { 1557 if (rn->naddrs6 == (u_short) -1) {
1552 rn->code = (u_char) code; 1558 rn->code = (u_char) code;
1553 goto next; 1559 goto next;
1554 } 1560 }
1812 } 1818 }
1813 } 1819 }
1814 #endif 1820 #endif
1815 1821
1816 i += len; 1822 i += len;
1823 }
1824 }
1825
1826 switch (qtype) {
1827
1828 #if (NGX_HAVE_INET6)
1829 case NGX_RESOLVE_AAAA:
1830
1831 if (rn->naddrs6 == (u_short) -1) {
1832 rn->naddrs6 = 0;
1833 }
1834
1835 break;
1836 #endif
1837
1838 default: /* NGX_RESOLVE_A */
1839
1840 if (rn->naddrs == (u_short) -1) {
1841 rn->naddrs = 0;
1817 } 1842 }
1818 } 1843 }
1819 1844
1820 if (rn->naddrs != (u_short) -1 1845 if (rn->naddrs != (u_short) -1
1821 #if (NGX_HAVE_INET6) 1846 #if (NGX_HAVE_INET6)