Package init
This commit is contained in:
commit
6d2d430e87
63
dnsmasq-2.77-underflow.patch
Normal file
63
dnsmasq-2.77-underflow.patch
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
From c82a594d95431e8615126621397ea595eb037a6b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Doran Moppert <dmoppert@redhat.com>
|
||||||
|
Date: Tue, 26 Sep 2017 14:48:20 +0930
|
||||||
|
Subject: [PATCH] google patch hand-applied
|
||||||
|
|
||||||
|
---
|
||||||
|
src/edns0.c | 10 +++++-----
|
||||||
|
src/forward.c | 4 ++++
|
||||||
|
src/rfc1035.c | 2 ++
|
||||||
|
3 files changed, 11 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/edns0.c b/src/edns0.c
|
||||||
|
index af33877..ba6ff0c 100644
|
||||||
|
--- a/src/edns0.c
|
||||||
|
+++ b/src/edns0.c
|
||||||
|
@@ -212,11 +212,11 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
|
||||||
|
/* Copy back any options */
|
||||||
|
if (buff)
|
||||||
|
{
|
||||||
|
- if (p + rdlen > limit)
|
||||||
|
- {
|
||||||
|
- free(buff);
|
||||||
|
- return plen; /* Too big */
|
||||||
|
- }
|
||||||
|
+ if (p + rdlen > limit)
|
||||||
|
+ {
|
||||||
|
+ free(buff);
|
||||||
|
+ return plen; /* Too big */
|
||||||
|
+ }
|
||||||
|
memcpy(p, buff, rdlen);
|
||||||
|
free(buff);
|
||||||
|
p += rdlen;
|
||||||
|
diff --git a/src/forward.c b/src/forward.c
|
||||||
|
index cdd11d3..3078f64 100644
|
||||||
|
--- a/src/forward.c
|
||||||
|
+++ b/src/forward.c
|
||||||
|
@@ -1438,6 +1438,10 @@ void receive_query(struct listener *listen, time_t now)
|
||||||
|
udp_size = PACKETSZ; /* Sanity check - can't reduce below default. RFC 6891 6.2.3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Make sure the udp size is not smaller than the incoming message so that we
|
||||||
|
+ // do not underflow
|
||||||
|
+ if (udp_size < n) udp_size = n;
|
||||||
|
+
|
||||||
|
#ifdef HAVE_AUTH
|
||||||
|
if (auth_dns)
|
||||||
|
{
|
||||||
|
diff --git a/src/rfc1035.c b/src/rfc1035.c
|
||||||
|
index b078b59..777911b 100644
|
||||||
|
--- a/src/rfc1035.c
|
||||||
|
+++ b/src/rfc1035.c
|
||||||
|
@@ -1281,6 +1281,8 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
||||||
|
int nxdomain = 0, auth = 1, trunc = 0, sec_data = 1;
|
||||||
|
struct mx_srv_record *rec;
|
||||||
|
size_t len;
|
||||||
|
+ // Make sure we do not underflow here too.
|
||||||
|
+ if (qlen > (limit - ((char *)header))) return 0;
|
||||||
|
|
||||||
|
if (ntohs(header->ancount) != 0 ||
|
||||||
|
ntohs(header->nscount) != 0 ||
|
||||||
|
--
|
||||||
|
2.14.3
|
||||||
|
|
||||||
37
dnsmasq-2.78-fips.patch
Normal file
37
dnsmasq-2.78-fips.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
From 89f57e39b69f92beacb6bad9c68d61f9c4fb0e77 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
||||||
|
Date: Fri, 2 Mar 2018 13:17:04 +0100
|
||||||
|
Subject: [PATCH] Print warning on FIPS machine with dnssec enabled. Dnsmasq
|
||||||
|
has no proper FIPS 140-2 compliant implementation.
|
||||||
|
|
||||||
|
---
|
||||||
|
src/dnsmasq.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
|
||||||
|
index ce44809..9f6c020 100644
|
||||||
|
--- a/src/dnsmasq.c
|
||||||
|
+++ b/src/dnsmasq.c
|
||||||
|
@@ -187,6 +187,7 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
|
if (daemon->cachesize < CACHESIZ)
|
||||||
|
die(_("cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
|
||||||
|
+
|
||||||
|
#else
|
||||||
|
die(_("DNSSEC not available: set HAVE_DNSSEC in src/config.h"), NULL, EC_BADCONF);
|
||||||
|
#endif
|
||||||
|
@@ -769,7 +770,10 @@ int main (int argc, char **argv)
|
||||||
|
}
|
||||||
|
|
||||||
|
my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
|
||||||
|
-
|
||||||
|
+
|
||||||
|
+ if (access("/etc/system-fips", F_OK) == 0)
|
||||||
|
+ my_syslog(LOG_WARNING, _("DNSSEC support is not FIPS 140-2 compliant"));
|
||||||
|
+
|
||||||
|
daemon->dnssec_no_time_check = option_bool(OPT_DNSSEC_TIME);
|
||||||
|
if (option_bool(OPT_DNSSEC_TIME) && !daemon->back_to_the_future)
|
||||||
|
my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until receipt of SIGINT"));
|
||||||
|
--
|
||||||
|
2.14.4
|
||||||
|
|
||||||
BIN
dnsmasq-2.79.tar.xz
Normal file
BIN
dnsmasq-2.79.tar.xz
Normal file
Binary file not shown.
73
dnsmasq-2.80-dnssec.patch
Normal file
73
dnsmasq-2.80-dnssec.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
From a997ca0da044719a0ce8a232d14da8b30022592b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Simon Kelley <simon@thekelleys.org.uk>
|
||||||
|
Date: Fri, 29 Jun 2018 14:39:41 +0100
|
||||||
|
Subject: [PATCH] Fix sometimes missing DNSSEC RRs when DNSSEC validation not
|
||||||
|
enabled.
|
||||||
|
|
||||||
|
Dnsmasq does pass on the do-bit, and return DNSSEC RRs, irrespective
|
||||||
|
of of having DNSSEC validation compiled in or enabled.
|
||||||
|
|
||||||
|
The thing to understand here is that the cache does not store all the
|
||||||
|
DNSSEC RRs, and dnsmasq doesn't have the (very complex) logic required
|
||||||
|
to determine the set of DNSSEC RRs required in an answer. Therefore if
|
||||||
|
the client wants the DNSSEC RRs, the query can not be answered from
|
||||||
|
the cache. When DNSSEC validation is enabled, any query with the
|
||||||
|
do-bit set is never answered from the cache, unless the domain is
|
||||||
|
known not to be signed: the query is always forwarded. This ensures
|
||||||
|
that the DNSEC RRs are included.
|
||||||
|
|
||||||
|
The same thing should be true when DNSSEC validation is not enabled,
|
||||||
|
but there's a bug in the logic.
|
||||||
|
|
||||||
|
line 1666 of src/rfc1035.c looks like this
|
||||||
|
|
||||||
|
if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || !do_bit || !(crecp->flags & F_DNSSECOK))
|
||||||
|
|
||||||
|
{ ...answer from cache ... }
|
||||||
|
|
||||||
|
So local stuff (hosts, DHCP, ) get answered. If the do_bit is not set
|
||||||
|
then the query is answered, and if the domain is known not to be
|
||||||
|
signed, the query is answered.
|
||||||
|
|
||||||
|
Unfortunately, if DNSSEC validation is not turned on then the
|
||||||
|
F_DNSSECOK bit is not valid, and it's always zero, so the question
|
||||||
|
always gets answered from the cache, even when the do-bit is set.
|
||||||
|
|
||||||
|
This code should look like that at line 1468, dealing with PTR queries
|
||||||
|
|
||||||
|
if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) ||
|
||||||
|
!do_bit ||
|
||||||
|
(option_bool(OPT_DNSSEC_VALID) && !(crecp->flags & F_DNSSECOK)))
|
||||||
|
|
||||||
|
where the F_DNSSECOK bit is only used when validation is enabled.
|
||||||
|
---
|
||||||
|
src/rfc1035.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/rfc1035.c b/src/rfc1035.c
|
||||||
|
index ebb1f36..580f5ef 100644
|
||||||
|
--- a/src/rfc1035.c
|
||||||
|
+++ b/src/rfc1035.c
|
||||||
|
@@ -1663,7 +1663,9 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the client asked for DNSSEC don't use cached data. */
|
||||||
|
- if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || !do_bit || !(crecp->flags & F_DNSSECOK))
|
||||||
|
+ if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) ||
|
||||||
|
+ !do_bit ||
|
||||||
|
+ (option_bool(OPT_DNSSEC_VALID) && !(crecp->flags & F_DNSSECOK)))
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* don't answer wildcard queries with data not from /etc/hosts
|
||||||
|
@@ -1747,7 +1749,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
||||||
|
{
|
||||||
|
if ((crecp = cache_find_by_name(NULL, name, now, F_CNAME | (dryrun ? F_NO_RR : 0))) &&
|
||||||
|
(qtype == T_CNAME || (crecp->flags & F_CONFIG)) &&
|
||||||
|
- ((crecp->flags & F_CONFIG) || !do_bit || !(crecp->flags & F_DNSSECOK)))
|
||||||
|
+ ((crecp->flags & F_CONFIG) || !do_bit || (option_bool(OPT_DNSSEC_VALID) && !(crecp->flags & F_DNSSECOK))))
|
||||||
|
{
|
||||||
|
if (!(crecp->flags & F_DNSSECOK))
|
||||||
|
sec_data = 0;
|
||||||
|
--
|
||||||
|
2.14.4
|
||||||
|
|
||||||
1
dnsmasq-systemd-sysusers.conf
Normal file
1
dnsmasq-systemd-sysusers.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
u dnsmasq - "Dnsmasq DHCP and DNS server" /var/lib/dnsmasq
|
||||||
9
dnsmasq.service
Normal file
9
dnsmasq.service
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=DNS caching server.
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/sbin/dnsmasq -k
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
109
dnsmasq.spec
Normal file
109
dnsmasq.spec
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
Name: dnsmasq
|
||||||
|
Version: 2.79
|
||||||
|
Release: 8
|
||||||
|
Summary: Dnsmasq provides network infrastructure for small networks
|
||||||
|
License: GPLv2 or GPLv3
|
||||||
|
URL: http://www.thekelleys.org.uk/dnsmasq/
|
||||||
|
Source0: http://www.thekelleys.org.uk/dnsmasq/%{name}-%{version}.tar.xz
|
||||||
|
Source1: dnsmasq.service
|
||||||
|
Source2: dnsmasq-systemd-sysusers.conf
|
||||||
|
|
||||||
|
#patches from the opensource fedora/redhat repository
|
||||||
|
Patch0001: dnsmasq-2.77-underflow.patch
|
||||||
|
Patch0002: dnsmasq-2.78-fips.patch
|
||||||
|
Patch0003: dnsmasq-2.80-dnssec.patch
|
||||||
|
|
||||||
|
BuildRequires: dbus-devel pkgconfig libidn2-devel nettle-devel systemd
|
||||||
|
Requires: nettle >= 3.4
|
||||||
|
Provides: dnsmasq-utils
|
||||||
|
Obsoletes: dnsmasq-utils
|
||||||
|
|
||||||
|
%{?systemd_requires}
|
||||||
|
|
||||||
|
%description
|
||||||
|
Dnsmasq provides network infrastructure for small networks: DNS, DHCP, router
|
||||||
|
advertisement and network boot. It is designed to be lightweight and have a small
|
||||||
|
footprint, suitable for resource constrained routers and firewalls.
|
||||||
|
It has also been widely used for tethering on smartphones and portable hotspots,
|
||||||
|
and to support virtual networking in virtualisation frameworks.
|
||||||
|
|
||||||
|
%package help
|
||||||
|
Summary: Help documents for dnsmasq
|
||||||
|
|
||||||
|
%description help
|
||||||
|
Help package contains some readme, man and other related files for dnsmasq.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -n %{name}-%{version} -p1
|
||||||
|
|
||||||
|
for file in dnsmasq.conf.example man/dnsmasq.8 man/es/dnsmasq.8 src/config.h; do
|
||||||
|
sed -i 's|/var/lib/misc/dnsmasq.leases|/var/lib/dnsmasq/dnsmasq.leases|g' "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
sed -i 's|#user=|user=dnsmasq|;s|#group=|group=dnsmasq|;s|%%%%PREFIX%%%%|%{_prefix}|' dnsmasq.conf.example
|
||||||
|
sed -i 's|#define CHGRP "dip"|#define CHGRP "dnsmasq"|' src/config.h
|
||||||
|
sed -i 's|#define CHUSER "nobody"|#define CHUSER "dnsmasq"|' src/config.h
|
||||||
|
sed -i 's|^COPTS[[:space:]]*=|\0 -DHAVE_DBUS -DHAVE_LIBIDN2 -DHAVE_DNSSEC|' Makefile
|
||||||
|
|
||||||
|
cat << EOF >> dnsmasq.conf.example
|
||||||
|
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%build
|
||||||
|
%make_build CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS"
|
||||||
|
%make_build -C contrib/lease-tools CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS"
|
||||||
|
|
||||||
|
%install
|
||||||
|
install -d $RPM_BUILD_ROOT{%{_sbindir},%{_mandir}/man8,%{_var}/lib/dnsmasq}
|
||||||
|
install -d $RPM_BUILD_ROOT{%{_sysconfdir}/dnsmasq.d,%{_sysconfdir}/dbus-1/system.d}
|
||||||
|
install src/dnsmasq $RPM_BUILD_ROOT%{_sbindir}/dnsmasq
|
||||||
|
install -m644 man/dnsmasq.8 $RPM_BUILD_ROOT%{_mandir}/man8/
|
||||||
|
install dnsmasq.conf.example $RPM_BUILD_ROOT%{_sysconfdir}/dnsmasq.conf
|
||||||
|
install dbus/dnsmasq.conf $RPM_BUILD_ROOT%{_sysconfdir}/dbus-1/system.d/
|
||||||
|
install -D trust-anchors.conf $RPM_BUILD_ROOT%{_datadir}/%{name}/trust-anchors.conf
|
||||||
|
|
||||||
|
install -d $RPM_BUILD_ROOT{%{_bindir},%{_mandir}/man1,%{_unitdir}}
|
||||||
|
install -m755 contrib/lease-tools/{dhcp_release,dhcp_release6,dhcp_lease_time} $RPM_BUILD_ROOT%{_bindir}/
|
||||||
|
install -m644 contrib/lease-tools/{dhcp_release.1,dhcp_release6.1,dhcp_lease_time.1} $RPM_BUILD_ROOT%{_mandir}/man1/
|
||||||
|
|
||||||
|
install -m644 %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}
|
||||||
|
install -Dpm644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysusersdir}/dnsmasq.conf
|
||||||
|
|
||||||
|
%pre
|
||||||
|
%sysusers_create_inline %(cat %{SOURCE2})
|
||||||
|
|
||||||
|
%post
|
||||||
|
%sysusers_create
|
||||||
|
%systemd_post dnsmasq
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_preun dnsmasq
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_postun_with_restart dnsmasq
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc dbus/DBus-interface
|
||||||
|
%license COPYING COPYING-v3
|
||||||
|
%defattr(0644,root,dnsmasq,0755)
|
||||||
|
%config(noreplace) %{_sysconfdir}/dnsmasq.conf
|
||||||
|
%dir %{_sysconfdir}/dnsmasq.d
|
||||||
|
%dir %{_sharedstatedir}/dnsmasq
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%{_bindir}/dhcp_*
|
||||||
|
%{_sbindir}/dnsmasq
|
||||||
|
%{_unitdir}/dnsmasq.service
|
||||||
|
%{_sysusersdir}/dnsmasq.conf
|
||||||
|
%{_datadir}/%{name}/trust-anchors.conf
|
||||||
|
%dir %{_datadir}/dnsmasq
|
||||||
|
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/dnsmasq.conf
|
||||||
|
%exclude %{_initrddir}
|
||||||
|
|
||||||
|
%files help
|
||||||
|
%doc CHANGELOG FAQ doc.html setup.html
|
||||||
|
%{_mandir}/man1/dhcp_*
|
||||||
|
%{_mandir}/man8/dnsmasq*
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue Sep 20 2019 yanzhihua <yanzhihua4@huawei.com> - 2.79-8
|
||||||
|
- Package init.
|
||||||
Loading…
x
Reference in New Issue
Block a user