]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/dnsmasq/0074-Fix-crash-in-auth-code-with-odd-configuration.patch
dnsmasq: Import more upstream fixes
[ipfire-2.x.git] / src / patches / dnsmasq / 0074-Fix-crash-in-auth-code-with-odd-configuration.patch
CommitLineData
d54a2ce4
MT
1From 38440b204db65f9be16c4c3daa7e991e4356f6ed Mon Sep 17 00:00:00 2001
2From: Simon Kelley <simon@thekelleys.org.uk>
3Date: Sun, 12 Apr 2015 21:52:47 +0100
5f206778 4Subject: [PATCH 74/87] Fix crash in auth code with odd configuration.
d54a2ce4
MT
5
6---
7 CHANGELOG | 32 +++++++++++++++++++++-----------
8 src/auth.c | 13 ++++++++-----
9 2 files changed, 29 insertions(+), 16 deletions(-)
10
11diff --git a/CHANGELOG b/CHANGELOG
12index 9af617056f1f..f2142c71cbdc 100644
13--- a/CHANGELOG
14+++ b/CHANGELOG
15@@ -68,18 +68,31 @@ version 2.73
16 Fix broken DNSSEC validation of ECDSA signatures.
17
18 Add --dnssec-timestamp option, which provides an automatic
19- way to detect when the system time becomes valid after boot
20- on systems without an RTC, whilst allowing DNS queries before the
21- clock is valid so that NTP can run. Thanks to
22- Kevin Darbyshire-Bryant for developing this idea.
23+ way to detect when the system time becomes valid after
24+ boot on systems without an RTC, whilst allowing DNS
25+ queries before the clock is valid so that NTP can run.
26+ Thanks to Kevin Darbyshire-Bryant for developing this idea.
27
28 Add --tftp-no-fail option. Thanks to Stefan Tomanek for
29 the patch.
30
31- Fix crash caused by looking up servers.bind, CHAOS text record,
32- when more than about five --servers= lines are in the dnsmasq
33- config. This causes memory corruption which causes a crash later.
34- Thanks to Matt Coddington for sterling work chasing this down.
35+ Fix crash caused by looking up servers.bind, CHAOS text
36+ record, when more than about five --servers= lines are
37+ in the dnsmasq config. This causes memory corruption
38+ which causes a crash later. Thanks to Matt Coddington for
39+ sterling work chasing this down.
40+
41+ Fix crash on receipt of certain malformed DNS requests.
42+ Thanks to Nick Sampanis for spotting the problem.
43+
44+ Fix crash in authoritative DNS code, if a .arpa zone
45+ is declared as authoritative, and then a PTR query which
46+ is not to be treated as authoritative arrived. Normally,
47+ directly declaring .arpa zone as authoritative is not
48+ done, so this crash wouldn't be seen. Instead the
49+ relevant .arpa zone should be specified as a subnet
50+ in the auth-zone declaration. Thanks to Johnny S. Lee
51+ for the bugreport and initial patch.
52
53
54 version 2.72
55@@ -125,10 +138,7 @@ version 2.72
56 Fix problem with --local-service option on big-endian platforms
57 Thanks to Richard Genoud for the patch.
58
59- Fix crash on receipt of certain malformed DNS requests. Thanks
60- to Nick Sampanis for spotting the problem.
61
62-
63 version 2.71
64 Subtle change to error handling to help DNSSEC validation
65 when servers fail to provide NODATA answers for
66diff --git a/src/auth.c b/src/auth.c
67index 15721e52793f..4a5c39fc5c07 100644
68--- a/src/auth.c
69+++ b/src/auth.c
70@@ -141,7 +141,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
71 for (zone = daemon->auth_zones; zone; zone = zone->next)
72 if ((subnet = find_subnet(zone, flag, &addr)))
73 break;
74-
75+
76 if (!zone)
77 {
78 auth = 0;
79@@ -186,7 +186,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
80
81 if (intr)
82 {
83- if (in_zone(zone, intr->name, NULL))
84+ if (local_query || in_zone(zone, intr->name, NULL))
85 {
86 found = 1;
87 log_query(flag | F_REVERSE | F_CONFIG, intr->name, &addr, NULL);
88@@ -208,8 +208,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
89 *p = 0; /* must be bare name */
90
91 /* add external domain */
92- strcat(name, ".");
93- strcat(name, zone->domain);
94+ if (zone)
95+ {
96+ strcat(name, ".");
97+ strcat(name, zone->domain);
98+ }
99 log_query(flag | F_DHCP | F_REVERSE, name, &addr, record_source(crecp->uid));
100 found = 1;
101 if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
102@@ -217,7 +220,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
103 T_PTR, C_IN, "d", name))
104 anscount++;
105 }
106- else if (crecp->flags & (F_DHCP | F_HOSTS) && in_zone(zone, name, NULL))
107+ else if (crecp->flags & (F_DHCP | F_HOSTS) && (local_query || in_zone(zone, name, NULL)))
108 {
109 log_query(crecp->flags & ~F_FORWARD, name, &addr, record_source(crecp->uid));
110 found = 1;
111--
1122.1.0
113