diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index 3e12f93..6579be4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ *.src.rpm /avahi-0.6.31.tar.gz /avahi-0.6.32.tar.gz +/avahi-0.7.tar.gz +/avahi-0.8.tar.gz +/v0.9-rc2.tar.gz diff --git a/avahi-0.6.32-use_ipv6_no.patch b/avahi-0.6.32-use_ipv6_no.patch deleted file mode 100644 index 462cf26..0000000 --- a/avahi-0.6.32-use_ipv6_no.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up avahi-0.6.32-rc/avahi-daemon/avahi-daemon.conf.use_ipv6_no avahi-0.6.32-rc/avahi-daemon/avahi-daemon.conf ---- avahi-0.6.32-rc/avahi-daemon/avahi-daemon.conf.use_ipv6_no 2015-10-09 19:39:05.000000000 -0500 -+++ avahi-0.6.32-rc/avahi-daemon/avahi-daemon.conf 2015-11-21 07:53:38.332358201 -0600 -@@ -23,7 +23,7 @@ - #domain-name=local - #browse-domains=0pointer.de, zeroconf.org - use-ipv4=yes --use-ipv6=yes -+use-ipv6=no - #allow-interfaces=eth0 - #deny-interfaces=eth1 - #check-response-ttl=no diff --git a/avahi-0.8-no_undefined.patch b/avahi-0.8-no_undefined.patch new file mode 100644 index 0000000..1d6f786 --- /dev/null +++ b/avahi-0.8-no_undefined.patch @@ -0,0 +1,31 @@ +diff --git a/avahi-qt/Makefile.am b/avahi-qt/Makefile.am +index b404810..6911db8 100644 +--- a/avahi-qt/Makefile.am ++++ b/avahi-qt/Makefile.am +@@ -40,7 +40,7 @@ qt-watch.moc3: qt-watch.cpp + + libavahi_qt3_la_CPPFLAGS = $(AM_CFLAGS) $(QT3_CFLAGS) -DQT3 $(VISIBILITY_HIDDEN_CFLAGS) + libavahi_qt3_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT3_LIBS) +-libavahi_qt3_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -version-info $(LIBAVAHI_QT3_VERSION_INFO) ++libavahi_qt3_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--no-undefined -no-undefined -export-dynamic -version-info $(LIBAVAHI_QT3_VERSION_INFO) + endif + + if HAVE_QT4 +@@ -62,7 +62,7 @@ qt-watch.moc4: qt-watch.cpp + + libavahi_qt4_la_CPPFLAGS = $(AM_CFLAGS) $(QT4_CFLAGS) -DQT4 $(VISIBILITY_HIDDEN_CFLAGS) + libavahi_qt4_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT4_LIBS) +-libavahi_qt4_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_QT4_VERSION_INFO) ++libavahi_qt4_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--no-undefined -no-undefined -version-info $(LIBAVAHI_QT4_VERSION_INFO) + endif + + if HAVE_QT5 +@@ -84,7 +84,7 @@ qt-watch.moc5: qt-watch.cpp + + libavahi_qt5_la_CPPFLAGS = $(AM_CFLAGS) --std=gnu++11 $(QT5_CFLAGS) -DQT5 $(VISIBILITY_HIDDEN_CFLAGS) + libavahi_qt5_la_LIBADD = $(AM_LDADD) ../avahi-common/libavahi-common.la $(QT5_LIBS) +-libavahi_qt5_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_QT5_VERSION_INFO) ++libavahi_qt5_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--no-undefined -no-undefined -version-info $(LIBAVAHI_QT5_VERSION_INFO) + endif + + CLEANFILES = $(BUILT_SOURCES) diff --git a/avahi-0.9-CVE-2024-52615.patch b/avahi-0.9-CVE-2024-52615.patch new file mode 100644 index 0000000..3a36c57 --- /dev/null +++ b/avahi-0.9-CVE-2024-52615.patch @@ -0,0 +1,224 @@ +From 4e2e1ea0908d7e6ad7f38ae04fdcdf2411f8b942 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 27 Nov 2024 18:07:32 +0100 +Subject: [PATCH] core/wide-area: fix for CVE-2024-52615 + +--- + avahi-core/wide-area.c | 128 ++++++++++++++++++++++------------------- + 1 file changed, 69 insertions(+), 59 deletions(-) + +diff --git a/avahi-core/wide-area.c b/avahi-core/wide-area.c +index 00a15056e..06df7afc6 100644 +--- a/avahi-core/wide-area.c ++++ b/avahi-core/wide-area.c +@@ -81,6 +81,10 @@ struct AvahiWideAreaLookup { + + AvahiAddress dns_server_used; + ++ int fd; ++ AvahiWatch *watch; ++ AvahiProtocol proto; ++ + AVAHI_LLIST_FIELDS(AvahiWideAreaLookup, lookups); + AVAHI_LLIST_FIELDS(AvahiWideAreaLookup, by_key); + }; +@@ -88,9 +92,6 @@ struct AvahiWideAreaLookup { + struct AvahiWideAreaLookupEngine { + AvahiServer *server; + +- int fd_ipv4, fd_ipv6; +- AvahiWatch *watch_ipv4, *watch_ipv6; +- + /* Cache */ + AVAHI_LLIST_HEAD(AvahiWideAreaCacheEntry, cache); + AvahiHashmap *cache_by_key; +@@ -125,35 +126,67 @@ static AvahiWideAreaLookup* find_lookup(AvahiWideAreaLookupEngine *e, uint16_t i + return l; + } + ++static void socket_event(AVAHI_GCC_UNUSED AvahiWatch *w, int fd, AVAHI_GCC_UNUSED AvahiWatchEvent events, void *userdata); ++ + static int send_to_dns_server(AvahiWideAreaLookup *l, AvahiDnsPacket *p) { ++ AvahiWideAreaLookupEngine *e; + AvahiAddress *a; ++ AvahiServer *s; ++ AvahiWatch *w; ++ int r; + + assert(l); + assert(p); + +- if (l->engine->n_dns_servers <= 0) ++ e = l->engine; ++ assert(e); ++ ++ s = e->server; ++ assert(s); ++ ++ if (e->n_dns_servers <= 0) + return -1; + +- assert(l->engine->current_dns_server < l->engine->n_dns_servers); ++ assert(e->current_dns_server < e->n_dns_servers); + +- a = &l->engine->dns_servers[l->engine->current_dns_server]; ++ a = &e->dns_servers[e->current_dns_server]; + l->dns_server_used = *a; + +- if (a->proto == AVAHI_PROTO_INET) { ++ if (l->fd >= 0) { ++ /* We are reusing lookup object and sending packet to another server so let's cleanup before we establish connection to new server. */ ++ s->poll_api->watch_free(l->watch); ++ l->watch = NULL; + +- if (l->engine->fd_ipv4 < 0) +- return -1; ++ close(l->fd); ++ l->fd = -EBADF; ++ } + +- return avahi_send_dns_packet_ipv4(l->engine->fd_ipv4, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv4, AVAHI_DNS_PORT); ++ assert(a->proto == AVAHI_PROTO_INET || a->proto == AVAHI_PROTO_INET6); + +- } else { +- assert(a->proto == AVAHI_PROTO_INET6); ++ if (a->proto == AVAHI_PROTO_INET) ++ r = s->config.use_ipv4 ? avahi_open_unicast_socket_ipv4() : -1; ++ else ++ r = s->config.use_ipv6 ? avahi_open_unicast_socket_ipv6() : -1; + +- if (l->engine->fd_ipv6 < 0) +- return -1; ++ if (r < 0) { ++ avahi_log_error(__FILE__ ": Failed to create socket for wide area lookup"); ++ return -1; ++ } + +- return avahi_send_dns_packet_ipv6(l->engine->fd_ipv6, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv6, AVAHI_DNS_PORT); ++ w = s->poll_api->watch_new(s->poll_api, r, AVAHI_WATCH_IN, socket_event, l); ++ if (!w) { ++ close(r); ++ avahi_log_error(__FILE__ ": Failed to create socket watch for wide area lookup"); ++ return -1; + } ++ ++ l->fd = r; ++ l->watch = w; ++ l->proto = a->proto; ++ ++ return a->proto == AVAHI_PROTO_INET ? ++ avahi_send_dns_packet_ipv4(l->fd, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv4, AVAHI_DNS_PORT): ++ avahi_send_dns_packet_ipv6(l->fd, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv6, AVAHI_DNS_PORT); + } + + static void next_dns_server(AvahiWideAreaLookupEngine *e) { +@@ -246,6 +279,9 @@ AvahiWideAreaLookup *avahi_wide_area_lookup_new( + l->dead = 0; + l->key = avahi_key_ref(key); + l->cname_key = avahi_key_new_cname(l->key); ++ l->fd = -EBADF; ++ l->watch = NULL; ++ l->proto = AVAHI_PROTO_UNSPEC; + l->callback = callback; + l->userdata = userdata; + +@@ -314,6 +350,12 @@ static void lookup_destroy(AvahiWideAreaLookup *l) { + if (l->cname_key) + avahi_key_unref(l->cname_key); + ++ if (l->watch) ++ l->engine->server->poll_api->watch_free(l->watch); ++ ++ if (l->fd >= 0) ++ close(l->fd); ++ + avahi_free(l); + } + +@@ -572,14 +614,20 @@ static void handle_packet(AvahiWideAreaLookupEngine *e, AvahiDnsPacket *p) { + } + + static void socket_event(AVAHI_GCC_UNUSED AvahiWatch *w, int fd, AVAHI_GCC_UNUSED AvahiWatchEvent events, void *userdata) { +- AvahiWideAreaLookupEngine *e = userdata; ++ AvahiWideAreaLookup *l = userdata; ++ AvahiWideAreaLookupEngine *e = l->engine; + AvahiDnsPacket *p = NULL; + +- if (fd == e->fd_ipv4) +- p = avahi_recv_dns_packet_ipv4(e->fd_ipv4, NULL, NULL, NULL, NULL, NULL); ++ assert(l); ++ assert(e); ++ assert(l->fd == fd); ++ ++ if (l->proto == AVAHI_PROTO_INET) ++ p = avahi_recv_dns_packet_ipv4(l->fd, NULL, NULL, NULL, NULL, NULL); + else { +- assert(fd == e->fd_ipv6); +- p = avahi_recv_dns_packet_ipv6(e->fd_ipv6, NULL, NULL, NULL, NULL, NULL); ++ assert(l->proto == AVAHI_PROTO_INET6); ++ ++ p = avahi_recv_dns_packet_ipv6(l->fd, NULL, NULL, NULL, NULL, NULL); + } + + if (p) { +@@ -598,32 +646,6 @@ AvahiWideAreaLookupEngine *avahi_wide_area_engine_new(AvahiServer *s) { + e->server = s; + e->cleanup_dead = 0; + +- /* Create sockets */ +- e->fd_ipv4 = s->config.use_ipv4 ? avahi_open_unicast_socket_ipv4() : -1; +- e->fd_ipv6 = s->config.use_ipv6 ? avahi_open_unicast_socket_ipv6() : -1; +- +- if (e->fd_ipv4 < 0 && e->fd_ipv6 < 0) { +- avahi_log_error(__FILE__": Failed to create wide area sockets: %s", strerror(errno)); +- +- if (e->fd_ipv6 >= 0) +- close(e->fd_ipv6); +- +- if (e->fd_ipv4 >= 0) +- close(e->fd_ipv4); +- +- avahi_free(e); +- return NULL; +- } +- +- /* Create watches */ +- +- e->watch_ipv4 = e->watch_ipv6 = NULL; +- +- if (e->fd_ipv4 >= 0) +- e->watch_ipv4 = s->poll_api->watch_new(e->server->poll_api, e->fd_ipv4, AVAHI_WATCH_IN, socket_event, e); +- if (e->fd_ipv6 >= 0) +- e->watch_ipv6 = s->poll_api->watch_new(e->server->poll_api, e->fd_ipv6, AVAHI_WATCH_IN, socket_event, e); +- + e->n_dns_servers = e->current_dns_server = 0; + + /* Initialize cache */ +@@ -651,18 +673,6 @@ void avahi_wide_area_engine_free(AvahiWideAreaLookupEngine *e) { + avahi_hashmap_free(e->lookups_by_id); + avahi_hashmap_free(e->lookups_by_key); + +- if (e->watch_ipv4) +- e->server->poll_api->watch_free(e->watch_ipv4); +- +- if (e->watch_ipv6) +- e->server->poll_api->watch_free(e->watch_ipv6); +- +- if (e->fd_ipv6 >= 0) +- close(e->fd_ipv6); +- +- if (e->fd_ipv4 >= 0) +- close(e->fd_ipv4); +- + avahi_free(e); + } + +@@ -680,7 +690,7 @@ void avahi_wide_area_set_servers(AvahiWideAreaLookupEngine *e, const AvahiAddres + + if (a) { + for (e->n_dns_servers = 0; n > 0 && e->n_dns_servers < AVAHI_WIDE_AREA_SERVERS_MAX; a++, n--) +- if ((a->proto == AVAHI_PROTO_INET && e->fd_ipv4 >= 0) || (a->proto == AVAHI_PROTO_INET6 && e->fd_ipv6 >= 0)) ++ if (a->proto == AVAHI_PROTO_INET || a->proto == AVAHI_PROTO_INET6) + e->dns_servers[e->n_dns_servers++] = *a; + } else { + assert(n == 0); diff --git a/avahi-0.9-address-data-size.patch b/avahi-0.9-address-data-size.patch new file mode 100644 index 0000000..70a64d5 --- /dev/null +++ b/avahi-0.9-address-data-size.patch @@ -0,0 +1,30 @@ +From 358e5a3b0122b418614e2ac0fc71f6aad1de06f8 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 23 Jun 2025 16:27:40 +0200 +Subject: [PATCH] Make data member as big as IPv6 address + +Unfortunately, recent FORTIFY_SOURCE hardening for inet_pton() can't +deal with our type independent "data[1]" union member trick. + +Fixes #699 +--- + avahi-common/address.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/avahi-common/address.h b/avahi-common/address.h +index a14104fad..013fa975e 100644 +--- a/avahi-common/address.h ++++ b/avahi-common/address.h +@@ -71,9 +71,9 @@ typedef struct AvahiAddress { + AvahiProtocol proto; /**< Address family */ + + union { +- AvahiIPv6Address ipv6; /**< Address when IPv6 */ +- AvahiIPv4Address ipv4; /**< Address when IPv4 */ +- uint8_t data[1]; /**< Type-independent data field */ ++ AvahiIPv6Address ipv6; /**< Address when IPv6 */ ++ AvahiIPv4Address ipv4; /**< Address when IPv4 */ ++ uint8_t data[sizeof(AvahiIPv6Address)]; /**< Type-independent data field */ + } data; + } AvahiAddress; + diff --git a/avahi.spec b/avahi.spec index 5f4e1e3..8d2b1d2 100644 --- a/avahi.spec +++ b/avahi.spec @@ -1,13 +1,53 @@ +%bcond_with bootstrap +%bcond_without check + +%if %{without bootstrap} %{?!WITH_MONO: %global WITH_MONO 1} +%else +%{?!WITH_MONO: %global WITH_MONO 0} +%endif + %{?!WITH_COMPAT_DNSSD: %global WITH_COMPAT_DNSSD 1} %{?!WITH_COMPAT_HOWL: %global WITH_COMPAT_HOWL 1} -%{?!WITH_QT3: %global WITH_QT3 1} +%{?!WITH_QT3: %global WITH_QT3 0} +%{?!WITH_QT4: %global WITH_QT4 0} + +%if %{without bootstrap} +%{?!WITH_GTK2: %global WITH_GTK2 1} +%{?!WITH_GTK3: %global WITH_GTK3 1} +%{?!WITH_QT5: %global WITH_QT5 1} +%else +%{?!WITH_GTK2: %global WITH_GTK2 0} +%{?!WITH_GTK3: %global WITH_GTK3 0} +%{?!WITH_QT5: %global WITH_QT5 0} +%endif + +# https://bugzilla.redhat.com/show_bug.cgi?id=1751484 +%{?!WITH_PYTHON: %global WITH_PYTHON 0} %ifnarch %{mono_arches} %define WITH_MONO 0 %endif + +%if 0%{?fedora} +%global WITH_QT3 1 +%global WITH_QT4 1 +%endif + %if 0%{?rhel} -%define WITH_MONO 0 +%if 0%{?rhel} > 9 +%global WITH_GTK2 0 +%endif +%global WITH_MONO 0 +%global WITH_QT5 0 +%if 0%{?rhel} < 8 +%global WITH_PYTHON 1 +%endif +%endif + +%if 0%{?fedora} == 34 || 0%{?rhel} >= 9 +# https://bugzilla.redhat.com/show_bug.cgi?id=1907727 +%global _lto_cflags %{nil} %endif # http://bugzilla.redhat.com/1008395 - no hardened build @@ -16,41 +56,68 @@ # trim changelog included in binary rpms %global _changelog_trimtime %(date +%s -d "1 year ago") +%define rc rc2 + Name: avahi -Version: 0.6.32 -Release: 4%{?dist} +Version: 0.9%{?rc:~%{rc}} +Release: 7%{?dist} Summary: Local network service discovery -License: LGPLv2+ +License: LGPL-2.1-or-later AND LGPL-2.0-or-later AND BSD-2-Clause-Views AND MIT URL: http://avahi.org Requires: dbus Requires: expat Requires: libdaemon >= 0.11 # For /usr/bin/dbus-send Requires(post): dbus -Requires(pre): shadow-utils Requires(pre): coreutils Requires: %{name}-libs%{?_isa} = %{version}-%{release} BuildRequires: automake BuildRequires: libtool BuildRequires: dbus-devel >= 0.90 -BuildRequires: dbus-glib-devel >= 0.70 -BuildRequires: dbus-python -BuildRequires: libxml2-python +BuildRequires: desktop-file-utils +%if %{WITH_GTK2} BuildRequires: gtk2-devel +%endif +%if %{WITH_GTK3} BuildRequires: gtk3-devel >= 2.99.0 +%endif #BuildRequires: gobject-introspection-devel %if %{WITH_QT3} BuildRequires: qt3-devel %endif +%if %{WITH_QT4} BuildRequires: qt4-devel +%endif +%if %{WITH_QT5} +BuildRequires: qt5-qtbase-devel +%endif BuildRequires: libdaemon-devel >= 0.11 BuildRequires: glib2-devel BuildRequires: libcap-devel BuildRequires: expat-devel +%if %{WITH_PYTHON} +%if %{without bootstrap} +BuildRequires: pygtk2 +%endif +%if 0%{?fedora} > 27 +%global python2_dbus python2-dbus +%global python2_libxml2 python2-libxml2 +%else +%global python2_dbus dbus-python +%global python2_libxml2 libxml2-python +%endif +BuildRequires: %{python2_dbus} +BuildRequires: %{python2_libxml2} +# really only need interpreter + rpm-macros -- rex BuildRequires: python2-devel BuildRequires: python3-devel +%else +Obsoletes: python2-avahi < %{version}-%{release} +Obsoletes: python3-avahi < %{version}-%{release} +%endif BuildRequires: gdbm-devel -BuildRequires: pygtk2 +BuildRequires: pkgconfig(pygobject-3.0) +BuildRequires: pkgconfig(libevent) >= 2.0.21 BuildRequires: intltool BuildRequires: perl-XML-Parser BuildRequires: xmltoman @@ -59,22 +126,26 @@ BuildRequires: mono-devel BuildRequires: monodoc-devel %endif BuildRequires: systemd -%{?systemd_requires} +BuildRequires: systemd-devel +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: gettext-devel -%if 0%{?beta:1} -Source0: https://github.com/lathiat/avahi/archive/%{version}-%{beta}.tar.gz#/%{name}-%{version}-%{beta}.tar.gz +%if 0%{?rc:1} +Source0: https://github.com/avahi/avahi/archive/refs/tags/v%{version_no_tilde}.tar.gz %else -Source0: https://github.com/lathiat/avahi/releases/download/v%{version}/avahi-%{version}.tar.gz +Source0: https://github.com/avahi/avahi/releases/download/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz %endif ## upstream patches +# https://github.com/avahi/avahi/pull/662 +Patch1: avahi-0.9-CVE-2024-52615.patch +# https://github.com/avahi/avahi/pull/707 +Patch2: avahi-0.9-address-data-size.patch ## downstream patches -Patch100: avahi-0.6.30-mono-libdir.patch -# selectively set use-ipv6=yes -%if 0%{?fedora} < 24 -Patch101: avahi-0.6.32-use_ipv6_no.patch -%endif +Patch100: avahi-0.6.30-mono-libdir.patch +Patch102: avahi-0.8-no_undefined.patch %description Avahi is a system which facilitates service discovery on @@ -99,13 +170,16 @@ Requires: %{name} = %{version}-%{release} Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: %{name}-glib%{?_isa} = %{version}-%{release} Requires: %{name}-ui-gtk3%{?_isa} = %{version}-%{release} -Requires: python-avahi = %{version}-%{release} -Requires: vnc +Requires: tigervnc Requires: openssh-clients +%if %{WITH_PYTHON} +Requires: gdbm Requires: pygtk2 Requires: pygtk2-libglade -Requires: gdbm -Requires: dbus-python +Requires: python2-avahi = %{version}-%{release} +Requires: %{python2_dbus} +Requires: python2-gobject-base +%endif %description ui-tools Graphical user interface tools that use Avahi to browse for mDNS services. @@ -139,12 +213,12 @@ This library contains a GObject wrapper for the Avahi API Summary: Libraries and header files for Avahi GObject development Requires: %{name}-devel%{?_isa} = %{version}-%{release} Requires: %{name}-gobject%{?_isa} = %{version}-%{release} -#Requires: %{name}-glib-devel = %{version}-%{release} %description gobject-devel The avahi-gobject-devel package contains the header files and libraries necessary for developing programs using avahi-gobject. +%if %{WITH_GTK2} %package ui Summary: Gtk user interface library for Avahi (Gtk+ 2 version) Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -153,7 +227,9 @@ Requires: gtk2 %description ui This library contains a Gtk 2.x widget for browsing services. +%endif +%if %{WITH_GTK3} %package ui-gtk3 Summary: Gtk user interface library for Avahi (Gtk+ 3 version) Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -162,17 +238,23 @@ Requires: gtk3 %description ui-gtk3 This library contains a Gtk 3.x widget for browsing services. +%endif +%if %{WITH_GTK2} || %{WITH_GTK3} %package ui-devel Summary: Libraries and header files for Avahi UI development Requires: %{name}-devel%{?_isa} = %{version}-%{release} +%if %{WITH_GTK2} Requires: %{name}-ui%{?_isa} = %{version}-%{release} +%endif +%if %{WITH_GTK3} Requires: %{name}-ui-gtk3%{?_isa} = %{version}-%{release} -#Requires: %{name}-glib-devel = %{version}-%{release} +%endif %description ui-devel The avahi-ui-devel package contains the header files and libraries necessary for developing programs using avahi-ui. +%endif %if %{WITH_QT3} %package qt3 @@ -192,6 +274,7 @@ The avahi-qt3-devel package contains the header files and libraries necessary for developing programs using avahi with Qt3. %endif +%if %{WITH_QT4} %package qt4 Summary: Qt4 libraries for avahi Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -207,6 +290,25 @@ Requires: %{name}-qt4%{?_isa} = %{version}-%{release} %description qt4-devel Th avahi-qt4-devel package contains the header files and libraries necessary for developing programs using avahi with Qt4. +%endif + +%if %{WITH_QT5} +%package qt5 +Summary: Qt5 libraries for avahi +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description qt5 +Libraries for easy use of avahi from Qt5 applications. + +%package qt5-devel +Summary: Libraries and header files for avahi Qt5 development +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-qt5%{?_isa} = %{version}-%{release} + +%description qt5-devel +Th avahi-qt5-devel package contains the header files and libraries +necessary for developing programs using avahi with Qt5. +%endif %if %{WITH_MONO} %package sharp @@ -226,6 +328,7 @@ Requires: %{name}-sharp%{?_isa} = %{version}-%{release} Requires: mono-core >= 1.1.13 Requires: gtk-sharp2 BuildRequires: gtk-sharp2-devel +BuildRequires: make %description ui-sharp The avahi-sharp package contains the files needed to run @@ -242,10 +345,6 @@ Mono programs that use avahi-ui. %package libs Summary: Libraries for avahi run-time use -# http://bugzilla.redhat.com/913168 -%if 0%{?fedora} < 20 -Requires: %{name} = %{version}-%{release} -%endif %description libs The avahi-libs package contains the libraries needed @@ -265,8 +364,8 @@ necessary for developing programs using avahi. %package compat-howl Summary: Libraries for howl compatibility Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Obsoletes: howl-libs -Provides: howl-libs +Obsoletes: howl-libs < 0.6-16 +Provides: howl-libs = %{version}-%{release} %description compat-howl Libraries that are compatible with those provided by the howl package. @@ -275,8 +374,8 @@ Libraries that are compatible with those provided by the howl package. Summary: Header files for development with the howl compatibility libraries Requires: %{name}-compat-howl%{?_isa} = %{version}-%{release} Requires: %{name}-devel%{?_isa} = %{version}-%{release} -Obsoletes: howl-devel -Provides: howl-devel +Obsoletes: howl-devel < 0.6-16 +Provides: howl-devel = %{version}-%{release} %description compat-howl-devel Header files for development with the howl compatibility libraries. @@ -302,7 +401,6 @@ libraries. %package autoipd Summary: Link-local IPv4 address automatic configuration daemon (IPv4LL) -Requires(pre): shadow-utils Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description autoipd @@ -323,13 +421,15 @@ avahi-dnsconfd connects to a running avahi-daemon and runs the script local LAN. This is useful for configuring unicast DNS servers in a DHCP-like fashion with mDNS. -%package -n python-avahi +%if %{WITH_PYTHON} +%package -n python2-avahi Summary: Python2 Avahi bindings -Provides: python2-avahi = %{version}-%{release} +Obsoletes: python-avahi < 0.7 +Provides: python-avahi = %{version}-%{release} Requires: %{name} = %{version}-%{release} Requires: %{name}-libs%{?_isa} = %{version}-%{release} -%description -n python-avahi +%description -n python2-avahi %{summary}. %package -n python3-avahi @@ -339,19 +439,28 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} %description -n python3-avahi %{summary}. +%endif %prep -%autosetup -n %{name}-%{version}%{?beta:-%{beta}} -p1 - -# let ^^ autosetup handle it -- rex -#patch100 -p1 -b .mono-libdir +%autosetup -n %{name}-%{version_no_tilde} -p1 rm -fv docs/INSTALL +# Create two sysusers.d config files +cat >avahi.sysusers.conf <avahi-autoipd.sysusers.conf </dev/null || groupadd -f -g 70 -r avahi -if ! getent passwd avahi > /dev/null ; then - if ! getent passwd 70 > /dev/null ; then - useradd -r -l -u 70 -g avahi -d %{_localstatedir}/run/avahi-daemon -s /sbin/nologin -c "Avahi mDNS/DNS-SD Stack" avahi - else - useradd -r -l -g avahi -d %{_localstatedir}/run/avahi-daemon -s /sbin/nologin -c "Avahi mDNS/DNS-SD Stack" avahi - fi -fi -exit 0 +install -m0644 -D avahi.sysusers.conf %{buildroot}%{_sysusersdir}/avahi.conf +install -m0644 -D avahi-autoipd.sysusers.conf %{buildroot}%{_sysusersdir}/avahi-autoipd.conf + + +%check +%if %{with check} + %make_build check +%endif +%if %{without bootstrap} + for i in %{buildroot}%{_datadir}/applications/b*.desktop ; do + desktop-file-validate $i + done +%endif +%if %{WITH_PYTHON} + desktop-file-validate %{buildroot}%{_datadir}/applications/avahi-discover.desktop +%endif + %post -/sbin/ldconfig >/dev/null 2>&1 || : +%{?ldconfig} /usr/bin/dbus-send --system --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig >/dev/null 2>&1 || : if [ "$1" -eq 1 -a -s /etc/localtime ]; then - /usr/bin/cp -cfp /etc/localtime /etc/avahi/etc/localtime >/dev/null 2>&1 || : + /usr/bin/cp -cfp /etc/localtime %{_sysconfdir}/avahi/etc/localtime >/dev/null 2>&1 || : fi %systemd_post avahi-daemon.socket avahi-daemon.service @@ -441,20 +596,9 @@ fi %systemd_preun avahi-daemon.socket avahi-daemon.service %postun -/sbin/ldconfig >/dev/null 2>&1 || : +%{?ldconfig} %systemd_postun_with_restart avahi-daemon.socket avahi-daemon.service -%pre autoipd -getent group avahi-autoipd >/dev/null || groupadd -f -g 170 -r avahi-autoipd -if ! getent passwd avahi-autoipd > /dev/null ; then - if ! getent passwd 170 > /dev/null; then - useradd -r -u 170 -l -g avahi-autoipd -d %{_localstatedir}/lib/avahi-autoipd -s /sbin/nologin -c "Avahi IPv4LL Stack" avahi-autoipd - else - useradd -r -l -g avahi-autoipd -d %{_localstatedir}/lib/avahi-autoipd -s /sbin/nologin -c "Avahi IPv4LL Stack" avahi-autoipd - fi -fi -exit 0 - %post dnsconfd %systemd_post avahi-dnsconfd.service @@ -464,34 +608,19 @@ exit 0 %postun dnsconfd %systemd_postun_with_restart avahi-dnsconfd.service -%post glib -p /sbin/ldconfig -%postun glib -p /sbin/ldconfig +%ldconfig_scriptlets glib -%post compat-howl -p /sbin/ldconfig -%postun compat-howl -p /sbin/ldconfig +%ldconfig_scriptlets compat-howl -%post compat-libdns_sd -p /sbin/ldconfig -%postun compat-libdns_sd -p /sbin/ldconfig +%ldconfig_scriptlets compat-libdns_sd -%post libs -p /sbin/ldconfig -%postun libs -p /sbin/ldconfig +%ldconfig_scriptlets libs -%if %{WITH_QT3} -%post qt3 -p /sbin/ldconfig -%postun qt3 -p /sbin/ldconfig -%endif +%ldconfig_scriptlets ui -%post qt4 -p /sbin/ldconfig -%postun qt4 -p /sbin/ldconfig +%ldconfig_scriptlets ui-gtk3 -%post ui -p /sbin/ldconfig -%postun ui -p /sbin/ldconfig - -%post ui-gtk3 -p /sbin/ldconfig -%postun ui-gtk3 -p /sbin/ldconfig - -%post gobject -p /sbin/ldconfig -%postun gobject -p /sbin/ldconfig +%ldconfig_scriptlets gobject %files -f %{name}.lang %doc docs/* avahi-daemon/example.service avahi-daemon/sftp-ssh.service avahi-daemon/ssh.service @@ -500,15 +629,16 @@ exit 0 %ghost %{_sysconfdir}/avahi/etc/localtime %config(noreplace) %{_sysconfdir}/avahi/hosts %dir %{_sysconfdir}/avahi/services -%ghost %dir %{_localstatedir}/run/avahi-daemon +%ghost %attr(0755, avahi, avahi) %dir %{_localstatedir}/run/avahi-daemon %config(noreplace) %{_sysconfdir}/avahi/avahi-daemon.conf -%config(noreplace) %{_sysconfdir}/dbus-1/system.d/avahi-dbus.conf +%config(noreplace) %{_datadir}/dbus-1/system.d/avahi-dbus.conf %{_sbindir}/avahi-daemon %dir %{_datadir}/avahi %{_datadir}/avahi/*.dtd -%{_datadir}/avahi/service-types %dir %{_libdir}/avahi +%if %{WITH_PYTHON} %{_libdir}/avahi/service-types.db +%endif %{_mandir}/man5/* %{_mandir}/man8/avahi-daemon.* %{_unitdir}/avahi-daemon.service @@ -516,12 +646,14 @@ exit 0 %{_datadir}/dbus-1/interfaces/*.xml %{_datadir}/dbus-1/system-services/org.freedesktop.Avahi.service %{_libdir}/libavahi-core.so.* +%{_sysusersdir}/avahi.conf %files autoipd %{_sbindir}/avahi-autoipd %config(noreplace) %{_sysconfdir}/avahi/avahi-autoipd.action %attr(1770,avahi-autoipd,avahi-autoipd) %dir %{_localstatedir}/lib/avahi-autoipd/ %{_mandir}/man8/avahi-autoipd.* +%{_sysusersdir}/avahi-autoipd.conf %files dnsconfd %config(noreplace) %{_sysconfdir}/avahi/avahi-dnsconfd.action @@ -530,42 +662,66 @@ exit 0 %{_unitdir}/avahi-dnsconfd.service %files tools -%{_bindir}/* -%{_mandir}/man1/* -%exclude %{_bindir}/b* -%exclude %{_bindir}/avahi-discover* -%exclude %{_bindir}/avahi-bookmarks -%exclude %{_mandir}/man1/b* -%exclude %{_mandir}/man1/avahi-discover* -%exclude %{_mandir}/man1/avahi-bookmarks* +%{_bindir}/avahi-browse +%{_bindir}/avahi-browse-domains +%{_bindir}/avahi-publish +%{_bindir}/avahi-publish-address +%{_bindir}/avahi-publish-service +%{_bindir}/avahi-resolve +%{_bindir}/avahi-resolve-address +%{_bindir}/avahi-resolve-host-name +%{_bindir}/avahi-set-host-name +%{_mandir}/man1/avahi-browse.1* +%{_mandir}/man1/avahi-browse-domains.1* +%{_mandir}/man1/avahi-publish.1* +%{_mandir}/man1/avahi-publish-address.1* +%{_mandir}/man1/avahi-publish-service.1* +%{_mandir}/man1/avahi-resolve.1* +%{_mandir}/man1/avahi-resolve-address.1* +%{_mandir}/man1/avahi-resolve-host-name.1* +%{_mandir}/man1/avahi-set-host-name.1* + +%if %{without bootstrap} %files ui-tools -%{_bindir}/b* -%{_bindir}/avahi-discover +%{_bindir}/bshell +%{_bindir}/bssh +%{_bindir}/bvnc +%{_bindir}/avahi-discover-standalone +%{_mandir}/man1/bshell.1* +%{_mandir}/man1/bssh.1* +%{_mandir}/man1/bvnc.1* +%{_datadir}/applications/b*.desktop +%{_datadir}/avahi/interfaces/ +%if %{WITH_PYTHON} # avahi-bookmarks is not really a UI tool, but I won't create a seperate package for it... %{_bindir}/avahi-bookmarks -%{_mandir}/man1/b* %{_mandir}/man1/avahi-discover* %{_mandir}/man1/avahi-bookmarks* -%{_datadir}/applications/b*.desktop %{_datadir}/applications/avahi-discover.desktop -%{_datadir}/avahi/interfaces/ %{python2_sitelib}/avahi_discover/ +%endif +%endif %files devel %{_libdir}/libavahi-common.so %{_libdir}/libavahi-core.so %{_libdir}/libavahi-client.so +%{_libdir}/libavahi-libevent.so %{_includedir}/avahi-client %{_includedir}/avahi-common %{_includedir}/avahi-core +%{_includedir}/avahi-libevent %{_libdir}/pkgconfig/avahi-core.pc %{_libdir}/pkgconfig/avahi-client.pc +%{_libdir}/pkgconfig/avahi-libevent.pc %files libs -%doc README LICENSE +%doc README +%license LICENSE %{_libdir}/libavahi-common.so.* %{_libdir}/libavahi-client.so.* +%{_libdir}/libavahi-libevent.so.* %files glib %{_libdir}/libavahi-glib.so.* @@ -577,30 +733,42 @@ exit 0 %files gobject %{_libdir}/libavahi-gobject.so.* -#%{_libdir}/girepository-1.0/Avahi-0.6.typelib -#%{_libdir}/girepository-1.0/AvahiCore-0.6.typelib +#%%{_libdir}/girepository-1.0/Avahi-0.6.typelib +#%%{_libdir}/girepository-1.0/AvahiCore-0.6.typelib %files gobject-devel %{_libdir}/libavahi-gobject.so %{_includedir}/avahi-gobject %{_libdir}/pkgconfig/avahi-gobject.pc -#%{_datadir}/gir-1.0/Avahi-0.6.gir -#%{_datadir}/gir-1.0/AvahiCore-0.6.gir +#%%{_datadir}/gir-1.0/Avahi-0.6.gir +#%%{_datadir}/gir-1.0/AvahiCore-0.6.gir +%if %{WITH_GTK2} %files ui %{_libdir}/libavahi-ui.so.* +%endif +%if %{WITH_GTK3} %files ui-gtk3 %{_libdir}/libavahi-ui-gtk3.so.* +%endif +%if %{WITH_GTK2} || %{WITH_GTK3} %files ui-devel -%{_libdir}/libavahi-ui.so -%{_libdir}/libavahi-ui-gtk3.so %{_includedir}/avahi-ui +%if %{WITH_GTK2} +%{_libdir}/libavahi-ui.so %{_libdir}/pkgconfig/avahi-ui.pc +%endif +%if %{WITH_GTK3} +%{_libdir}/libavahi-ui-gtk3.so %{_libdir}/pkgconfig/avahi-ui-gtk3.pc +%endif +%endif %if %{WITH_QT3} +%ldconfig_scriptlets qt3 + %files qt3 %{_libdir}/libavahi-qt3.so.* @@ -610,6 +778,9 @@ exit 0 %{_libdir}/pkgconfig/avahi-qt3.pc %endif +%if %{WITH_QT4} +%ldconfig_scriptlets qt4 + %files qt4 %{_libdir}/libavahi-qt4.so.* @@ -617,6 +788,19 @@ exit 0 %{_libdir}/libavahi-qt4.so %{_includedir}/avahi-qt4/ %{_libdir}/pkgconfig/avahi-qt4.pc +%endif + +%if %{WITH_QT5} +%ldconfig_scriptlets qt5 + +%files qt5 +%{_libdir}/libavahi-qt5.so.* + +%files qt5-devel +%{_libdir}/libavahi-qt5.so +%{_includedir}/avahi-qt5/ +%{_libdir}/pkgconfig/avahi-qt5.pc +%endif %if %{WITH_MONO} %files sharp @@ -655,16 +839,226 @@ exit 0 %{_libdir}/pkgconfig/libdns_sd.pc %endif -%files -n python-avahi -# These are .py files only, so they don't go in lib64 +%if %{WITH_PYTHON} +%files -n python2-avahi %{python2_sitelib}/avahi/ %files -n python3-avahi -# These are .py files only, so they don't go in lib64 %{python3_sitelib}/avahi/ +%endif %changelog +* Fri Jan 16 2026 Fedora Release Engineering - 0.9~rc2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Tue Aug 05 2025 Petr Menšík - 0.9~rc2-6 +- Fix port randomization for wide area queries (CVE-2024-52615) +- Add systemd-devel dependency +- Fix test crashing because FORTIFY_SOURCE protection + +* Wed Jul 23 2025 Fedora Release Engineering - 0.9~rc2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Apr 14 2025 Zbigniew Jędrzejewski-Szmek - 0.9~rc2-4 +- Also create sysusers.d config file for the avahi-autoipd user + +* Thu Jan 23 2025 Zbigniew Jędrzejewski-Szmek - 0.9~rc2-3 +- Add sysusers.d config file to allow rpm to create users/groups automatically + +* Thu Jan 16 2025 Michal Sekletar - 0.9~rc2-2 +- Fix previous changelog entry + +* Thu Jan 16 2025 Michal Sekletar - 0.9~rc2-1 +- Rebase to 0.9-rc2 + +* Thu Jan 16 2025 Fedora Release Engineering - 0.8-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Aug 21 2024 Michal Sekletar - 0.8-30 +- fix file attributes of /run/avahi-daemon (rhbz#1608918) + +* Wed Jul 17 2024 Fedora Release Engineering - 0.8-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Thu Apr 04 2024 Michal Sekletar - 0.8-28 +- Add gettext-devel to build dependencies + +* Mon Jan 22 2024 Fedora Release Engineering - 0.8-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 0.8-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 26 2023 Lukáš Zaoral - 0.8-25 +- migrate to SPDX license format + +* Wed Jul 19 2023 Fedora Release Engineering - 0.8-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed May 10 2023 Tomas Popela - 0.8-23 +- Drop BR on dbus-glib as the project is not using it at all + +* Sun Mar 19 2023 Petr Menšík - 0.8-22 +- Enable unit tests during check +- Prevent crashes on some invalid DBus calls +- Provide versioned howl compatibility package +- Correct bootstrap option + +* Sun Mar 19 2023 Yaakov Selkowitz - 0.8-21 +- Disable GTK2 in ELN/RHEL10 builds + +* Wed Jan 18 2023 Fedora Release Engineering - 0.8-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Nov 11 2022 Petr Menšík - 0.8-19 +- Add upstream PR links to patches + +* Tue Nov 01 2022 Christian Krause - 0.8-18 +- Install glade file for avahi-discover-standalone unconditionally + (fixes #2036073 and #2126721) +- Install desktop files for bssh and bvnc unconditionally + +* Fri Aug 05 2022 Kalev Lember - 0.8-17 +- Avoid systemd_requires as per updated packaging guidelines + +* Wed Jul 20 2022 Fedora Release Engineering - 0.8-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 0.8-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Aug 03 2021 Rex Dieter - 0.8-14 +- pull in upstream fix for CVE-2021-36217 (#1989381,#1989382) +- revert "Re-enable LTO" on f34 (still needed) + +* Wed Jul 21 2021 Fedora Release Engineering - 0.8-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon May 10 2021 Jeff Law - 0.8-12 +- Re-enable LTO + +* Thu Apr 29 2021 Rex Dieter - 0.8-11 +- avahi libraries missing -fstack-protector-strong (#1817737) + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 0.8-10 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Tue Feb 16 2021 Rex Dieter - 0.8-9 +- cleanup/fix conditionals (#1751484) +- disable lto, workaround FTBFS (#1907727) + +* Tue Jan 26 2021 Fedora Release Engineering - 0.8-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Nov 17 2020 Rex Dieter - 0.8-7 +- fix undefined symbols in libavahi-qt3 (#1897925) + +* Thu Oct 15 2020 Rex Dieter - 0.8-6 +- resurrect ui-tools, not just for python (#1885513) + +* Mon Sep 21 2020 Michal Sekletar - 0.8-5 +- Disable bootstrap + +* Mon Sep 07 2020 Ondřej Lysoněk - 0.8-4 +- Rebuilt due to libevent rebase + +* Mon Jul 27 2020 Fedora Release Engineering - 0.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sun Mar 22 2020 Rex Dieter - 0.8-2 +- pull in some upstream fixes + +* Sun Mar 22 2020 Lubomir Rintel - 0.8-1 +- Update to version 0.8 + +* Thu Feb 20 2020 Petr Viktorin - 0.7-24 +- Don't BuildRequire pygtk2 if building without Python + +* Tue Jan 28 2020 Fedora Release Engineering - 0.7-23 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Sep 19 2019 Rex Dieter - 0.7-22 +- drop python bindings/support (includes -ui-tools that use the bindings) on f31+ (#1751484) + +* Mon Aug 19 2019 Miro Hrončok - 0.7-21 +- Rebuilt for Python 3.8 + +* Wed Jul 24 2019 Fedora Release Engineering - 0.7-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 22 2019 Michal Sekletár - 0.7-19 +- add support for advertising services on the local machine only (i.e. on loopback) + +* Mon Feb 04 2019 Kalev Lember - 0.7-18 +- Update requires for pygobject3 -> python2-gobject rename + +* Thu Jan 31 2019 Fedora Release Engineering - 0.7-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jul 30 2018 Adam Williamson - 0.7-16 +- Update python3 sed hack to avoid '/usr/bin/python32' dep + +* Tue Jul 24 2018 Jan Grulich - 0.7-15 +- Requires: tigervnc + Tigervnc removed old obsoleted provides + +* Thu Jul 12 2018 Fedora Release Engineering - 0.7-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 0.7-13 +- Rebuilt for Python 3.7 + +* Thu Apr 05 2018 Rex Dieter - 0.7-12 +- use %%make_build %%ldconfig_scriptlets %%license +- %%build: --enable-shared=yes --enable-static=no --disable-silent-rules + +* Thu Apr 05 2018 Rex Dieter - 0.7-11 +- avahi-discover is missing "gi" module (#1564059) + +* Mon Mar 19 2018 Michal Sekletar - 0.7-10 +- add gcc to build reqs +- disable mono and qt support on RHEL + +* Wed Feb 07 2018 Fedora Release Engineering - 0.7-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Fri Dec 15 2017 Iryna Shcherbina - 0.7-8 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Mon Dec 11 2017 Rex Dieter - 0.7-7 +- %%check: validate .desktop files (#1524175) + +* Tue Oct 24 2017 Merlin Mathesius - 0.7-6 +- Add option to disable qt4 support + +* Sat Oct 07 2017 Rex Dieter - 0.7-5 +- consistently use %%{_unitdir} macro + +* Mon Oct 02 2017 Troy Dawson - 0.7-4 +- Cleanup spec file conditionals + +* Wed Aug 02 2017 Fedora Release Engineering - 0.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 0.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 10 2017 Rex Dieter - 0.7-1 +- avahi-0.7 (#1469100) +- rename python-avahi => python2-avahi + +* Fri Feb 10 2017 Fedora Release Engineering - 0.6.32-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Dec 22 2016 Miro Hrončok - 0.6.32-6 +- Rebuild for Python 3.6 + +* Thu Oct 13 2016 Peter Robinson 0.6.32-5 +- rebuild - mono on aarch64 + * Fri Aug 05 2016 Rex Dieter - 0.6.32-4 - -devel: fix typo in Requires: (#1364505) diff --git a/plans/main.fmf b/plans/main.fmf new file mode 100644 index 0000000..ae0c305 --- /dev/null +++ b/plans/main.fmf @@ -0,0 +1,6 @@ +summary: Run all tests +execute: + how: tmt +discover: + how: fmf + diff --git a/sources b/sources index 926cdc5..965ac12 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -22b5e705d3eabb31d26f2e1e7b074013 avahi-0.6.32.tar.gz +SHA512 (v0.9-rc2.tar.gz) = 29d6c9d075d0202b9da2cdf935fa04fad31ba95475ba5de086c9958d25caa405925bbd82ed439a024febf7880325e80c1a032a660284a7708c71dae9076f413b diff --git a/tests/Basic-sanity-test/Makefile b/tests/Basic-sanity-test/Makefile new file mode 100644 index 0000000..ce59f5b --- /dev/null +++ b/tests/Basic-sanity-test/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/avahi/Sanity/Basic-sanity-test +# Description: Tests basic functionality of avahi. +# Author: Martin Cermak +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2010 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/avahi/Sanity/Basic-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE named.conf zonefile + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -e runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Martin Cermak " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Tests basic functionality of avahi." >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 10m" >> $(METADATA) + @echo "RunFor: avahi" >> $(METADATA) + @echo "Requires: avahi avahi-tools bind bind-chroot bind-utils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Releases: -RedHatEnterpriseLinux3 -RedHatEnterpriseLinux4" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Basic-sanity-test/PURPOSE b/tests/Basic-sanity-test/PURPOSE new file mode 100644 index 0000000..1486bec --- /dev/null +++ b/tests/Basic-sanity-test/PURPOSE @@ -0,0 +1,15 @@ +PURPOSE of /CoreOS/avahi/Sanity/Basic-sanity-test +Description: Tests basic functionality of avahi. +Author: Martin Cermak + +My objective was to write a very basic sanity test for avahi. +As I'm the avahi newbie, I browsed avahi.org, experimented +a little with RHEL avahi packages and pinged Lennart, which +did not respond. + +My result is a simple test for the avahi domain name resolver. +It requires the avahi-daemon running. As the RHTS/Beaker is/will +shortly be a closed system without the possibility to reach the +outside network, this test contains its own nameserver. + + diff --git a/tests/Basic-sanity-test/named.conf b/tests/Basic-sanity-test/named.conf new file mode 100644 index 0000000..e477af9 --- /dev/null +++ b/tests/Basic-sanity-test/named.conf @@ -0,0 +1,11 @@ +options { + directory "/var/named"; + allow-query { any; }; +}; + +zone "" IN { + type master; + file ".zone"; + allow-update { none; }; +}; + diff --git a/tests/Basic-sanity-test/runtest.sh b/tests/Basic-sanity-test/runtest.sh new file mode 100755 index 0000000..b027d39 --- /dev/null +++ b/tests/Basic-sanity-test/runtest.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/avahi/Sanity/Basic-sanity-test +# Description: Tests basic functionality of avahi. +# Author: Martin Cermak +# Author: Tomas Dolezal - rhel7 updates +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include rhts environment +. /usr/bin/rhts-environment.sh +. /usr/lib/beakerlib/beakerlib.sh + +TEMPSTR=$(date +%c%N | md5sum | awk '{print $1}' | cut -c -8) +ORIGPWD=$(pwd) + +IP1='127.0.0.1' +IP2='::1' + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm 'avahi' + rlAssertRpm 'avahi-tools' + + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + + ROOTDIR="" #using non-chroot + rlFileBackup /etc/named.conf /etc/resolv.conf + rlFileBackup --clean /var/named/ + cat $ORIGPWD/named.conf > /etc/named.conf + + rlRun "TDOMAIN=$TEMPSTR.cz" + rlRun "TZONEFILE=$ROOTDIR/var/named/$TDOMAIN.zone" + + # set up /etc/named.conf + rlRun "sed -i \"s//$TDOMAIN/g\" /etc/named.conf" + + # set up zonefile + rlRun "cp $ORIGPWD/zonefile $TZONEFILE" + rlRun "chmod a+r $TZONEFILE" + rlRun "sed -i \"s//$TDOMAIN/g\" $TZONEFILE" + rlRun "sed -i \"s//$IP1/g\" $TZONEFILE" + rlRun "sed -i \"s//$IP2/g\" $TZONEFILE" + rlRun "sed -i \"s//$(date +%N)/g\" $TZONEFILE" + + rlServiceStart named #using non-chroot + + # set default resolver + rlRun "echo nameserver 127.0.0.1 > /etc/resolv.conf" + rlPhaseEnd + + rlPhaseStartTest + # check bind + rlRun "dig @localhost server1.$TDOMAIN +short | grep $IP1" + rlRun "dig AAAA @localhost server2.$TDOMAIN +short | grep $IP2" + + # turn on avahi or restart it with new resolv.conf + rlServiceStart "avahi-daemon" + + # the test itself... + rlRun "avahi-resolve -4n server1.$TDOMAIN | grep '127.0.0.1'" 0 "Test the IPv4 avahi DN resolver." + rlRun "avahi-resolve -6n server2.$TDOMAIN | grep '::1'" 0 "Test the IPv6 avahi DN resolver." + + rlPhaseEnd + + rlPhaseStartCleanup + rlFileRestore + rlServiceStart avahi-daemon + rlServiceRestore named avahi-daemon + + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd + rlJournalPrintText +rlJournalEnd diff --git a/tests/Basic-sanity-test/zonefile b/tests/Basic-sanity-test/zonefile new file mode 100644 index 0000000..46b8421 --- /dev/null +++ b/tests/Basic-sanity-test/zonefile @@ -0,0 +1,23 @@ +$ORIGIN . +$TTL 86400 +@ IN SOA dns1.. hostmaster.. ( + ; serial + 21600 ; refresh after 6 hours + 3600 ; retry after 1 hour + 604800 ; expire after 1 week + 86400 ) ; minimum TTL of 1 day + + IN NS dns1.. + IN NS dns2.. + + IN MX 10 mail.. + IN MX 20 mail2.. + + IN A + +server1 IN A +server2 IN AAAA + +dns1 IN A +dns2 IN A + diff --git a/tests/got-audit/got-audit.gdb b/tests/got-audit/got-audit.gdb new file mode 100644 index 0000000..6661297 --- /dev/null +++ b/tests/got-audit/got-audit.gdb @@ -0,0 +1,2 @@ +gef config gef.disable_color True +got-audit --all diff --git a/tests/got-audit/main.fmf b/tests/got-audit/main.fmf new file mode 100644 index 0000000..8295e03 --- /dev/null +++ b/tests/got-audit/main.fmf @@ -0,0 +1,7 @@ +summary: Audit the GOT for signs of tampering +description: | + Pointers in the server process GOT will be checked to ensure that + each function pointer's value is within a shared object file + that exports a symbol of that name, and that no shared object + files export conflicting symbols. +contact: Gordon Messmer diff --git a/tests/got-audit/runtest.sh b/tests/got-audit/runtest.sh new file mode 100755 index 0000000..0b48e98 --- /dev/null +++ b/tests/got-audit/runtest.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/avahi/Sanity/got-audit +# Description: Check pointers in the server process GOT for signs of tampering +# Author: Gordon Messmer +# + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +TEST="/CoreOS/avahi/Sanity/got-audit" + +rlJournalStart + rlPhaseStartSetup + rlServiceStart avahi-daemon.socket + rlServiceStart avahi-daemon + rlRun "TestDir=\$(pwd)" + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlRun "auditfile=\$(mktemp --tmpdir=${TmpDir})" + rlPhaseEnd + + rlPhaseStartTest "Run GEF got-audit" + rlRun "SERVICE_PID=\$(systemctl show --property=MainPID --value avahi-daemon.service)" + rlRun "echo SERVICE_PID is '$SERVICE_PID'" + [ -n "$SERVICE_PID" ] || rlFail "No service pid was found" + rlRun "gdb-gef --pid '$SERVICE_PID' --command='$TestDir'/got-audit.gdb --batch > '$auditfile'" + # Basic test: ensure that at least one symbol is found in libc.so, + # to verify that the report looks plausible. + rlAssertGrep " : /.*/libc.so" "$auditfile" + # Ensure the got-audit did not report any errors + rlAssertNotGrep " :: ERROR" "$auditfile" + rlRun "cp '$auditfile' '$TMT_TEST_DATA'/got-audit.txt" + rlPhaseEnd + + rlPhaseStartCleanup + rlServiceRestore avahi-daemon.socket + rlServiceRestore avahi-daemon + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalEnd +rlJournalPrintText diff --git a/tests/main.fmf b/tests/main.fmf new file mode 100644 index 0000000..f225a72 --- /dev/null +++ b/tests/main.fmf @@ -0,0 +1,2 @@ +test: ./runtest.sh +framework: beakerlib diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..5ff2c8d --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,18 @@ +--- + +# Tests that run in classic context +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + tests: + - Basic-sanity-test + - got-audit + required_packages: + - avahi + - avahi-tools + - bind + - bind-chroot + - bind-utils + - gdb-gef # needed to test got-audit