avahi-32: fix source and fix a race condition in IPv6

This commit is contained in:
Danny Rawlins 2021-02-19 22:32:03 +11:00
parent 97d77fee05
commit 5dfb2078d2
3 changed files with 59 additions and 5 deletions

View File

@ -1,6 +1,7 @@
untrusted comment: verify with /etc/ports/compat-32.pub untrusted comment: verify with /etc/ports/compat-32.pub
RWSwxGo/zH7eXRE3eJZ0NvaW1J/tOn3Y6sA17mlx4YgSEjI1P2bGYOlHTMNk5Sj2T+wMsuk5381GQXYJEjSXMFZiIza6ERLNuw0= RWSwxGo/zH7eXZ7Thl9iGG5oeFKGcyp23d/3BRA9LPmwK9hoJ7ST4+FM6n+KaiI45pCNN2sG1C7/3ebNo/WAhY+22H8T2Hl2xQo=
SHA256 (Pkgfile) = 5943f1254a7dfff2fc514d51634e544e8bfed9c669c7db8de4917025e4be48ff SHA256 (Pkgfile) = 217f28b57408d98b7f36bb5d41710740c40e76cf5d6ac3307b7c82d6a9028c6b
SHA256 (.footprint) = 72baed23d6e6598de90dec8a3db81f29cb89850df72c2db38afa392e5d9089da SHA256 (.footprint) = 72baed23d6e6598de90dec8a3db81f29cb89850df72c2db38afa392e5d9089da
SHA256 (avahi-0.8.tar.gz) = 060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda SHA256 (avahi-0.8.tar.gz) = 060309d7a333d38d951bc27598c677af1796934dbd98e1024e7ad8de798fedda
SHA256 (avahi-0.8-ipv6_race_condition_fix-1.patch) = 218c909581d0ca2c86c8145bb0797050d987a6b0ae3417949dbe2a6d55c49360
SHA256 (reverse-move-to-run.patch) = a333bcf15dd3e72ac99b2e883202e7170d2ff27bf61820413235bc9f3c9c2605 SHA256 (reverse-move-to-run.patch) = a333bcf15dd3e72ac99b2e883202e7170d2ff27bf61820413235bc9f3c9c2605

View File

@ -1,18 +1,20 @@
# Description: A system which facilitates service discovery on a local network via the mDNS/DNS-SD protocol suite # Description: A system which facilitates service discovery on a local network via the mDNS/DNS-SD protocol suite
# URL: http://www.avahi.org/ # URL: https://www.avahi.org/
# Maintainer: CRUX compat-32 Team, compat-32-ports at crux dot nu # Maintainer: CRUX compat-32 Team, compat-32-ports at crux dot nu
# Depends on: avahi dbus-32 gdbm-32 glib-32 libcap-32 libdaemon-32 libevent-32 # Depends on: avahi dbus-32 gdbm-32 glib-32 libcap-32 libdaemon-32 libevent-32
name=avahi-32 name=avahi-32
version=0.8 version=0.8
release=1 release=3
source=(https://avahi.org/download/avahi-$version.tar.gz source=(https://github.com/lathiat/avahi/releases/download/v$version/avahi-$version.tar.gz
avahi-0.8-ipv6_race_condition_fix-1.patch
reverse-move-to-run.patch) reverse-move-to-run.patch)
build() { build() {
cd avahi-$version cd avahi-$version
patch -p1 -i $SRC/reverse-move-to-run.patch patch -p1 -i $SRC/reverse-move-to-run.patch
patch -p1 -i $SRC/avahi-0.8-ipv6_race_condition_fix-1.patch
NOCONFIGURE=1 ./autogen.sh NOCONFIGURE=1 ./autogen.sh

View File

@ -0,0 +1,51 @@
Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org>
Date: 2020-10-19
Initial Package Version: 0.8
Upstream Status: PR, not applied
Origin: Upstream PR (github.com/lathiat/avahi/pull/309)
Description: Fixes a race condition when multiple NICs are in use
when IPv6 is enabled. This will exhibit behavior where
messages about withdrawing address records, registering
access records, and new hostname announcements are
spammed to the log every second.
diff -Naurp avahi-0.8.orig/avahi-core/server.c avahi-0.8/avahi-core/server.c
--- avahi-0.8.orig/avahi-core/server.c 2020-02-16 21:41:24.939967558 -0600
+++ avahi-0.8/avahi-core/server.c 2020-10-19 11:07:22.054861721 -0500
@@ -193,7 +193,7 @@ static void withdraw_rrset(AvahiServer *
withdraw_entry(s, e);
}
-static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i) {
+static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i, int from_local_iface) {
AvahiEntry *e, *n;
int ours = 0, won = 0, lost = 0;
@@ -210,7 +210,7 @@ static void incoming_probe(AvahiServer *
if (e->dead)
continue;
- if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0) {
+ if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0 || from_local_iface) {
ours = 1;
break;
} else {
@@ -639,7 +639,7 @@ static void handle_query_packet(AvahiSer
if (!avahi_key_is_pattern(record->key)) {
if (!from_local_iface)
reflect_probe(s, i, record);
- incoming_probe(s, record, i);
+ incoming_probe(s, record, i, from_local_iface);
}
avahi_record_unref(record);
@@ -961,8 +961,7 @@ static void dispatch_packet(AvahiServer
return;
/* We don't want to reflect local traffic, so we check if this packet is generated locally. */
- if (s->config.enable_reflector)
- from_local_iface = originates_from_local_iface(s, iface, src_address, port);
+ from_local_iface = originates_from_local_iface(s, iface, src_address, port);
if (avahi_dns_packet_check_valid_multicast(p) < 0) {
avahi_log_debug("Received invalid packet.");