Parent Directory
|
Revision Log
|
Revision Graph
* Tue Jul 11 2017 Jean-Philipe Pialasse <tests@pialasse.com> 1.05-9.sme -- backport SME10 fixes [SME: 10381] --import patches from openwrt and rename already applied patches --fix security issues [SME: 10374] - 020-dnsroots-update.patch: update list of root DNS servers - 070-dnscache-dpos-tcp-servfail.patch: SERVFAIL rename previous patch dns_transmit-bug.patch - 210-dnscache-strict-forwardonly.patch: rename previous patch dnscache-strict-forwardonly.patch - 270-dnscache-sigpipe-fix.patch: SIGPIPE - 300-bugfix-dnscache-dempsky-poison.patch: CVE-2009-0858 - 310-bugfix-dnscache-merge-outgoing-requests.patch: CVE-2008-4392 - 320-bugfix-dnscache-cache-soa-records.patch: CVE-2008-4392 - 450-dnscache-ghost-domain-CVE-2012-1191.patch: CVE-2012-1191 http://marc.info/?l=djbdns&m=134190748729079&w=2 --bug fixes [SME: 10374] - 060-dnscache-big-udp-packets.patch: accept and handle longer than 512 bytes UDP packets - 230-tinydns-data-semantic-error.patch: handle semantic error to avoid publishing false dns records - 240-tinydns-alias-chain-truncation.patch: rename previous patch tinydns-alias-chain-truncation.patch --fix issue with short ttl cname like akamaid [SME: 8362] - 200-dnscache-cname-handling.patch: rename previous patch dnscache-cname-handling.patch - 330-fix-dnscache-cname-handling.patch: fix dnscache cname for short ttl - 500-cutom-dnscache-maxloop.patch: set max loop to 200 --needed for previous patches to apply cleanly - 030-srv-records-and-axfrget.patch: add SRV record type and axfr-get decompose SRC and PTR records (for 230-*.patch) - 080-dnscache-cache-negatives.patch: rfc2308 ? (for 200-*.patch) - 090-tinydns-one-second.patch: improve tinydns with 8 or more concurent connections (for 240-*.patch) - 120-compiler-temporary-filename.patch: change tmp filename to avoid conflicts (for 230-*.patch) --not backported from SME10 branch - 050-tinydns-mmap-leak.patch: report cdb leak
1 | unnilennium | 1.1 | --- a/tdlookup.c |
2 | +++ b/tdlookup.c | ||
3 | @@ -103,12 +103,13 @@ static int doname(void) | ||
4 | return response_addname(d1); | ||
5 | } | ||
6 | |||
7 | -static int doit(char *q,char qtype[2]) | ||
8 | +static int doit1(char **pqname,char qtype[2]) | ||
9 | { | ||
10 | unsigned int bpos; | ||
11 | unsigned int anpos; | ||
12 | unsigned int aupos; | ||
13 | unsigned int arpos; | ||
14 | + char *q; | ||
15 | char *control; | ||
16 | char *wild; | ||
17 | int flaggavesoa; | ||
18 | @@ -122,6 +123,12 @@ static int doit(char *q,char qtype[2]) | ||
19 | int addrnum; | ||
20 | uint32 addrttl; | ||
21 | int i; | ||
22 | + int loop = 0 ; | ||
23 | + | ||
24 | +RESTART: | ||
25 | + if (loop++ >= 100) return 0 ; | ||
26 | + | ||
27 | + q = *pqname ; | ||
28 | |||
29 | anpos = response_len; | ||
30 | |||
31 | @@ -136,7 +143,14 @@ static int doit(char *q,char qtype[2]) | ||
32 | if (byte_equal(type,2,DNS_T_NS)) flagns = 1; | ||
33 | } | ||
34 | if (flagns) break; | ||
35 | - if (!*control) return 0; /* q is not within our bailiwick */ | ||
36 | + if (!*control) { /* q is not within our bailiwick */ | ||
37 | + if (loop <= 1) | ||
38 | + return 0 ; | ||
39 | + else { | ||
40 | + response[2] &= ~4; | ||
41 | + goto DONE; /* The administrator has issued contradictory instructions */ | ||
42 | + } | ||
43 | + } | ||
44 | control += *control; | ||
45 | control += 1; | ||
46 | } | ||
47 | @@ -172,9 +186,17 @@ static int doit(char *q,char qtype[2]) | ||
48 | continue; | ||
49 | } | ||
50 | if (!response_rstart(q,type,ttl)) return 0; | ||
51 | - if (byte_equal(type,2,DNS_T_NS) || byte_equal(type,2,DNS_T_CNAME) || byte_equal(type,2,DNS_T_PTR)) { | ||
52 | + if (byte_equal(type,2,DNS_T_NS) || byte_equal(type,2,DNS_T_PTR)) { | ||
53 | if (!doname()) return 0; | ||
54 | } | ||
55 | + else if (byte_equal(type,2,DNS_T_CNAME)) { | ||
56 | + if (!doname()) return 0; | ||
57 | + if (byte_diff(type,2,qtype)) { | ||
58 | + response_rfinish(RESPONSE_ANSWER); | ||
59 | + if (!dns_domain_copy(pqname,d1)) return 0 ; | ||
60 | + goto RESTART ; | ||
61 | + } | ||
62 | + } | ||
63 | else if (byte_equal(type,2,DNS_T_MX)) { | ||
64 | if (!dobytes(2)) return 0; | ||
65 | if (!doname()) return 0; | ||
66 | @@ -275,9 +297,21 @@ static int doit(char *q,char qtype[2]) | ||
67 | } | ||
68 | } | ||
69 | |||
70 | +DONE: | ||
71 | return 1; | ||
72 | } | ||
73 | |||
74 | +static int doit(char *qname,char qtype[2]) | ||
75 | +{ | ||
76 | + int r ; | ||
77 | + char * q = 0 ; | ||
78 | + | ||
79 | + if (!dns_domain_copy(&q, qname)) return 0 ; | ||
80 | + r = doit1(&q, qtype) ; | ||
81 | + dns_domain_free(&q) ; | ||
82 | + return r ; | ||
83 | +} | ||
84 | + | ||
85 | int respond(char *q,char qtype[2],char ip[4]) | ||
86 | { | ||
87 | static struct tai cdb_valid = { 0 }; |
admin@koozali.org | ViewVC Help |
Powered by ViewVC 1.2.1 | ![]() |