| author | Tomas Zeman <tzeman@volny.cz> |
| Tue, 02 Jul 2013 09:44:50 +0200 | |
| changeset 147 | 761da690b72c |
| parent 135 | 92afa092bd07 |
| permissions | -rw-r--r-- |
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
1 |
# HG changeset patch |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
2 |
# Parent 847c22ddbdd92b4a49325912c5bb7c075b0350e3 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
3 |
dnscache CNAME handling |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
4 |
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
5 |
diff -r 847c22ddbdd9 source/dietlibc/diet-djbdns/FrugalBuild |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
6 |
--- a/source/dietlibc/diet-djbdns/FrugalBuild Fri Feb 17 10:25:48 2012 +0100 |
|
135
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
7 |
+++ b/source/dietlibc/diet-djbdns/FrugalBuild Fri Feb 17 10:48:29 2012 +0100 |
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
8 |
@@ -4,7 +4,7 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
9 |
pkgorig=djbdns |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
10 |
pkgname=$branch-$pkgorig |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
11 |
pkgver=1.05 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
12 |
-pkgrel=3 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
13 |
+pkgrel=4 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
14 |
pkgdesc="High-performant & secure DNS services." |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
15 |
url="http://cr.yp.to/djbdns.html" |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
16 |
archs=(i686) |
|
135
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
17 |
@@ -13,12 +13,15 @@ |
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
18 |
makedepends=(dietlibc) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
19 |
install="$pkgorig.install" |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
20 |
backup=(etc/dnsroots.global) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
21 |
-source=(http://cr.yp.to/$pkgorig/$pkgorig-$pkgver.tar.gz) |
|
135
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
22 |
-sha1sums=('2efdb3a039d0c548f40936aa9cb30829e0ce8c3d')
|
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
23 |
+source=(http://cr.yp.to/$pkgorig/$pkgorig-$pkgver.tar.gz \ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
24 |
+ dnscache-cname-handling.patch) |
|
135
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
25 |
+sha1sums=('2efdb3a039d0c548f40936aa9cb30829e0ce8c3d' \
|
|
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
26 |
+ 'bbfa9b12aa298268a8da07ef6de279883c15893e') |
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
27 |
provides=(djbdns) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
28 |
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
29 |
build() {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
30 |
Fcd $pkgorig-$pkgver |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
31 |
+ Fpatchall |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
32 |
echo "diet gcc ${CFLAGS}" > conf-cc
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
33 |
echo "diet gcc -s -static" > conf-ld |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
34 |
echo "/usr" > conf-home |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
35 |
diff -r 847c22ddbdd9 source/dietlibc/diet-djbdns/dnscache-cname-handling.patch |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
36 |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
135
92afa092bd07
diet-djbdns-dnscache-cname-handling.patch: sha1sums fixed
Tomas Zeman <tzeman@volny.cz>
parents:
134
diff
changeset
|
37 |
+++ b/source/dietlibc/diet-djbdns/dnscache-cname-handling.patch Fri Feb 17 10:48:29 2012 +0100 |
|
134
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
38 |
@@ -0,0 +1,256 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
39 |
+http://homepage.ntlworld.com/jonathan.deboynepollard/Softwares/djbdns/dnscache-cname-handling.patch |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
40 |
+http://homepage.ntlworld.com/jonathan.deboynepollard/Softwares/djbdns/ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
41 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
42 |
+Making dnscache handle client-side aliases ("CNAME" records) correctly
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
43 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
44 |
+There are several problems with the way that dnscache handles client-side |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
45 |
+aliases, that become acutely apparent if one patches qmail to remove the |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
46 |
+workaround for a BIND version 4 problem. This patch modifies the behaviour of |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
47 |
+dnscache, to correct them, in the following ways: |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
48 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
49 |
+dnscache will cache "CNAME" resource record sets (both empty and non-empty). |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
50 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
51 |
+dnscache will correctly ignore a cached "CNAME" resource record set that |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
52 |
+happens to be empty (which will result if an explicit "CNAME" query is made |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
53 |
+against a domain name that has no client-side aliases). |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
54 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
55 |
+dnscache will notice lame servers where the lame delegation is present at the |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
56 |
+end of a chain of client-side aliases. Any instances of tinydns that have not |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
57 |
+been patched to make them publish whole alias chains instead of just the first |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
58 |
+links will thus be logged as "lame". |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
59 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
60 |
+dnscache will not issue redundant queries if it can follow an entire |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
61 |
+client-side alias chain to the end using the information that it already has in |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
62 |
+a response. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
63 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
64 |
+dnscache will cache any in-bailiwick information that it receives from lame |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
65 |
+servers. Any in-bailiwick client-side alias information and delegation |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
66 |
+information that are received from an otherwise "lame" server will no longer be |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
67 |
+thrown away along with the bath-water. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
68 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
69 |
+--- djbdns-1.05-original/query.c Sun Feb 11 21:11:45 2001 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
70 |
++++ djbdns-1.05/query.c Wed Mar 26 15:48:20 2003 |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
71 |
+@@ -91,6 +91,21 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
72 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
73 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
74 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
75 |
++static int move_name_to_alias(struct query *z,uint32 ttl) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
76 |
++{
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
77 |
++ int j ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
78 |
++ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
79 |
++ if (z->alias[QUERY_MAXALIAS - 1]) return 0 ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
80 |
++ for (j = QUERY_MAXALIAS - 1;j > 0;--j) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
81 |
++ z->alias[j] = z->alias[j - 1]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
82 |
++ for (j = QUERY_MAXALIAS - 1;j > 0;--j) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
83 |
++ z->aliasttl[j] = z->aliasttl[j - 1]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
84 |
++ z->alias[0] = z->name[0]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
85 |
++ z->aliasttl[0] = ttl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
86 |
++ z->name[0] = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
87 |
++ return 1 ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
88 |
++} |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
89 |
++ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
90 |
+ static int rqa(struct query *z) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
91 |
+ {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
92 |
+ int i; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
93 |
+@@ -123,7 +138,6 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
94 |
+ static char *t1 = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
95 |
+ static char *t2 = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
96 |
+ static char *t3 = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
97 |
+-static char *cname = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
98 |
+ static char *referral = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
99 |
+ static unsigned int *records = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
100 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
101 |
+@@ -179,15 +193,14 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
102 |
+ uint16 datalen; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
103 |
+ char *control; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
104 |
+ char *d; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
105 |
++ char *owner_name = 0 ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
106 |
+ const char *dtype; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
107 |
+ unsigned int dlen; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
108 |
+ int flagout; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
109 |
+- int flagcname; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
110 |
+ int flagreferral; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
111 |
+ int flagsoa; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
112 |
+ uint32 ttl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
113 |
+ uint32 soattl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
114 |
+- uint32 cnamettl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
115 |
+ int i; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
116 |
+ int j; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
117 |
+ int k; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
118 |
+@@ -252,7 +265,10 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
119 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
120 |
+ byte_copy(key,2,DNS_T_CNAME); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
121 |
+ cached = cache_get(key,dlen + 2,&cachedlen,&ttl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
122 |
+- if (cached) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
123 |
++ /* A previous explicit query might have caused an empty RRSet to have been |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
124 |
++ ** cached. Take care to ignore such a thing. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
125 |
++ */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
126 |
++ if (cached && cachedlen) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
127 |
+ if (typematch(DNS_T_CNAME,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
128 |
+ log_cachedanswer(d,DNS_T_CNAME); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
129 |
+ if (!rqa(z)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
130 |
+@@ -261,8 +277,11 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
131 |
+ return 1; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
132 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
133 |
+ log_cachedcname(d,cached); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
134 |
+- if (!dns_domain_copy(&cname,cached)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
135 |
+- goto CNAME; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
136 |
++ if (!z->level) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
137 |
++ if (!move_name_to_alias(z,ttl)) goto DIE ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
138 |
++ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
139 |
++ if (!dns_domain_copy(&z->name[z->level],cached)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
140 |
++ goto NEWNAME; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
141 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
142 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
143 |
+ if (typematch(DNS_T_NS,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
144 |
+@@ -351,7 +370,7 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
145 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
146 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
147 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
148 |
+- if (!typematch(DNS_T_ANY,dtype) && !typematch(DNS_T_AXFR,dtype) && !typematch(DNS_T_CNAME,dtype) && !typematch(DNS_T_NS,dtype) && !typematch(DNS_T_PTR,dtype) && !typematch(DNS_T_A,dtype) && !typematch(DNS_T_MX,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
149 |
++ if (!typematch(DNS_T_ANY,dtype) && !typematch(DNS_T_AXFR,dtype) && !typematch(DNS_T_NS,dtype) && !typematch(DNS_T_PTR,dtype) && !typematch(DNS_T_A,dtype) && !typematch(DNS_T_MX,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
150 |
+ byte_copy(key,2,dtype); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
151 |
+ cached = cache_get(key,dlen + 2,&cachedlen,&ttl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
152 |
+ if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
153 |
+@@ -471,29 +490,31 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
154 |
+ if (rcode && (rcode != 3)) goto DIE; /* impossible; see irrelevant() */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
155 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
156 |
+ flagout = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
157 |
+- flagcname = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
158 |
+ flagreferral = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
159 |
+ flagsoa = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
160 |
+ soattl = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
161 |
+- cnamettl = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
162 |
++ if (!dns_domain_copy(&owner_name,d)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
163 |
++ /* This code assumes that the CNAME chain is presented in the correct |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
164 |
++ ** order. The example algorithm in RFC 1034 will actually result in this |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
165 |
++ ** being the case, but the words do not require it to be so. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
166 |
++ */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
167 |
+ for (j = 0;j < numanswers;++j) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
168 |
+ pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
169 |
+ pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
170 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
171 |
+- if (dns_domain_equal(t1,d)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
172 |
++ if (dns_domain_equal(t1,owner_name)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
173 |
+ if (byte_equal(header + 2,2,DNS_C_IN)) { /* should always be true */
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
174 |
+ if (typematch(header,dtype)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
175 |
+ flagout = 1; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
176 |
+ else if (typematch(header,DNS_T_CNAME)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
177 |
+- if (!dns_packet_getname(buf,len,pos,&cname)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
178 |
+- flagcname = 1; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
179 |
+- cnamettl = ttlget(header + 4); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
180 |
++ if (!dns_packet_getname(buf,len,pos,&owner_name)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
181 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
182 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
183 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
184 |
+ uint16_unpack_big(header + 8,&datalen); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
185 |
+ pos += datalen; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
186 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
187 |
++ dns_domain_free(&owner_name) ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
188 |
+ posauthority = pos; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
189 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
190 |
+ for (j = 0;j < numauthority;++j) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
191 |
+@@ -515,15 +536,6 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
192 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
193 |
+ posglue = pos; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
194 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
195 |
+- |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
196 |
+- if (!flagcname && !rcode && !flagout && flagreferral && !flagsoa) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
197 |
+- if (dns_domain_equal(referral,control) || !dns_domain_suffix(referral,control)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
198 |
+- log_lame(whichserver,control,referral); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
199 |
+- byte_zero(whichserver,4); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
200 |
+- goto HAVENS; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
201 |
+- } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
202 |
+- |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
203 |
+- |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
204 |
+ if (records) { alloc_free(records); records = 0; }
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
205 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
206 |
+ k = numanswers + numauthority + numglue; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
207 |
+@@ -670,24 +682,36 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
208 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
209 |
+ alloc_free(records); records = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
210 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
211 |
++ if (byte_diff(DNS_T_CNAME,2,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
212 |
++ /* This code assumes that the CNAME chain is presented in the correct |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
213 |
++ ** order. The example algorithm in RFC 1034 will actually result in this |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
214 |
++ ** being the case, but the words do not require it to be so. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
215 |
++ */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
216 |
++ pos = posanswers; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
217 |
++ for (j = 0;j < numanswers;++j) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
218 |
++ pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
219 |
++ pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
220 |
++ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
221 |
++ if (dns_domain_equal(t1,d)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
222 |
++ if (byte_equal(header + 2,2,DNS_C_IN)) { /* should always be true */
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
223 |
++ if (typematch(header,DNS_T_CNAME)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
224 |
++ ttl = ttlget(header + 4); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
225 |
++ if (z->level == 0) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
226 |
++ if (!move_name_to_alias(z,ttl)) goto DIE ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
227 |
++ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
228 |
++ if (!dns_packet_getname(buf,len,pos,&z->name[z->level])) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
229 |
++ d = z->name[z->level]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
230 |
++ if (!dns_domain_suffix(d,control) || !roots_same(d,control)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
231 |
++ goto NEWNAME ; /* Cannot trust the chain further - restart using current name */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
232 |
++ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
233 |
++ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
234 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
235 |
+- if (flagcname) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
236 |
+- ttl = cnamettl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
237 |
+- CNAME: |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
238 |
+- if (!z->level) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
239 |
+- if (z->alias[QUERY_MAXALIAS - 1]) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
240 |
+- for (j = QUERY_MAXALIAS - 1;j > 0;--j) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
241 |
+- z->alias[j] = z->alias[j - 1]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
242 |
+- for (j = QUERY_MAXALIAS - 1;j > 0;--j) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
243 |
+- z->aliasttl[j] = z->aliasttl[j - 1]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
244 |
+- z->alias[0] = z->name[0]; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
245 |
+- z->aliasttl[0] = ttl; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
246 |
+- z->name[0] = 0; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
247 |
++ uint16_unpack_big(header + 8,&datalen); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
248 |
++ pos += datalen; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
249 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
250 |
+- if (!dns_domain_copy(&z->name[z->level],cname)) goto DIE; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
251 |
+- goto NEWNAME; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
252 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
253 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
254 |
++ /* A "no such name" error applies to the end of any CNAME chain, not to the start. */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
255 |
+ if (rcode == 3) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
256 |
+ log_nxdomain(whichserver,d,soattl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
257 |
+ cachegeneric(DNS_T_ANY,d,"",0,soattl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
258 |
+@@ -700,10 +724,26 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
259 |
+ return 1; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
260 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
261 |
+ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
262 |
++ /* We check for a lame server _after_ we have cached any records that it |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
263 |
++ ** might have returned to us. This copes better with the incorrect |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
264 |
++ ** behaviour of one content DNS server software that doesn't return |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
265 |
++ ** complete CNAME chains but instead returns only the first link in a |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
266 |
++ ** chain followed by a lame delegation to the same server. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
267 |
++ ** Also: We check for a lame server _after_ following the CNAME chain. The |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
268 |
++ ** delegation in a referral answer applies to the _end_ of the chain, not |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
269 |
++ ** to the beginning. |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
270 |
++ */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
271 |
++ if (!rcode && !flagout && flagreferral && !flagsoa) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
272 |
++ if (dns_domain_equal(referral,control) || !dns_domain_suffix(referral,control)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
273 |
++ log_lame(whichserver,control,referral); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
274 |
++ byte_zero(whichserver,4); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
275 |
++ goto HAVENS; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
276 |
++ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
277 |
++ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
278 |
+ if (!flagout && flagsoa) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
279 |
++ /* Don't save empty RRSets for those types that we use as special markers. */ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
280 |
+ if (byte_diff(DNS_T_ANY,2,dtype)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
281 |
+- if (byte_diff(DNS_T_AXFR,2,dtype)) |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
282 |
+- if (byte_diff(DNS_T_CNAME,2,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
283 |
++ if (byte_diff(DNS_T_AXFR,2,dtype)) {
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
284 |
+ save_start(); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
285 |
+ save_finish(dtype,d,soattl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
286 |
+ log_nodata(whichserver,d,dtype,soattl); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
287 |
+@@ -815,6 +855,7 @@ |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
288 |
+ DIE: |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
289 |
+ cleanup(z); |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
290 |
+ if (records) { alloc_free(records); records = 0; }
|
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
291 |
++ dns_domain_free(&owner_name) ; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
292 |
+ return -1; |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
293 |
+ } |
|
a78e58de5a7e
diet-djbdns-dnscache-cname-handling.patch: patching djbdns
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
294 |
+ |