commit d2064e29d0115c0beab7816549142ba8e440deaa Author: MSVSphere Packaging Team Date: Fri Oct 25 14:20:42 2024 +0300 import cups-browsed-2.0.0-6.el10 diff --git a/.cups-browsed.metadata b/.cups-browsed.metadata new file mode 100644 index 0000000..634caaa --- /dev/null +++ b/.cups-browsed.metadata @@ -0,0 +1 @@ +98fa3d9fa277a0ed169e01d744c98a78c1b34974 SOURCES/cups-browsed-2.0.0.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49e9205 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/cups-browsed-2.0.0.tar.gz diff --git a/SOURCES/0001-Fix-memory-leak-in-resolve_callback.patch b/SOURCES/0001-Fix-memory-leak-in-resolve_callback.patch new file mode 100644 index 0000000..485e484 --- /dev/null +++ b/SOURCES/0001-Fix-memory-leak-in-resolve_callback.patch @@ -0,0 +1,38 @@ +From a38ab5522964afe07415aeebecdc12b13d0c9196 Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal +Date: Thu, 25 Jan 2024 17:43:25 +0100 +Subject: [PATCH] Fix memory leak in resolve_callback + +--- + daemon/cups-browsed.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/daemon/cups-browsed.c b/daemon/cups-browsed.c +index 1e461bd1..d4527c05 100644 +--- a/daemon/cups-browsed.c ++++ b/daemon/cups-browsed.c +@@ -10899,7 +10899,7 @@ resolve_callback(void* arg) + AVAHI_GCC_UNUSED void* userdata = a->userdata; + + char ifname[IF_NAMESIZE]; +- AvahiStringList *uuid_entry, *printer_type_entry; ++ AvahiStringList *uuid_entry = NULL, *printer_type_entry; + char *uuid_key, *uuid_value; + + debug_printf("resolve_callback() in THREAD %ld\n", pthread_self()); +@@ -11176,6 +11176,12 @@ resolve_callback(void* arg) + } + + ignore: ++ if (uuid_entry) ++ { ++ avahi_free(uuid_key); ++ avahi_free(uuid_value); ++ } ++ + if (a->name) free((char*)a->name); + if (a->type) free((char*)a->type); + if (a->domain) free((char*)a->domain); +-- +2.43.0 + diff --git a/SOURCES/0001-Init-variables-which-can-be-later-used-uninitialized.patch b/SOURCES/0001-Init-variables-which-can-be-later-used-uninitialized.patch new file mode 100644 index 0000000..c18f30a --- /dev/null +++ b/SOURCES/0001-Init-variables-which-can-be-later-used-uninitialized.patch @@ -0,0 +1,34 @@ +From 4ccd64b65b4672ce211bf56ee1ca6e1a5f8ebf5c Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal +Date: Wed, 7 Feb 2024 14:59:41 +0100 +Subject: [PATCH] Init variables which can be later used uninitialized + +--- + daemon/cups-browsed.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/daemon/cups-browsed.c b/daemon/cups-browsed.c +index 29fd34a1..a144abae 100644 +--- a/daemon/cups-browsed.c ++++ b/daemon/cups-browsed.c +@@ -6935,7 +6935,7 @@ on_job_state (CupsNotifier *object, + + // The priority order for the PDLs is the same as in the + // PPD generator in ppd/ppd-generator.c of libppd +- document_format = (char *)malloc(sizeof(char) * 32); ++ document_format = (char *)calloc(32, sizeof(char)); + if (cupsArrayFind(pdl_list, "application/vnd.cups-pdf")) + strcpy(document_format, "application/vnd.cups-pdf"); + else if (cupsArrayFind(pdl_list, "image/urf")) +@@ -10951,7 +10951,7 @@ resolve_callback(void* arg) + // Called whenever a service has been resolved successfully + + // New remote printer found +- AvahiStringList *rp_entry, *adminurl_entry; ++ AvahiStringList *rp_entry = NULL, *adminurl_entry = NULL; + char *rp_key, *rp_value, *adminurl_key, *adminurl_value; + + debug_printf("Avahi Resolver: Service '%s' of type '%s' in domain '%s' with host name '%s' and port %d on interface '%s' (%s).\n", +-- +2.43.0 + diff --git a/SOURCES/browsed-goto-fail.patch b/SOURCES/browsed-goto-fail.patch new file mode 100644 index 0000000..8f04770 --- /dev/null +++ b/SOURCES/browsed-goto-fail.patch @@ -0,0 +1,16 @@ +diff --git a/daemon/cups-browsed.c b/daemon/cups-browsed.c +index 7f83510..9be61ca 100644 +--- a/daemon/cups-browsed.c ++++ b/daemon/cups-browsed.c +@@ -7792,8 +7792,11 @@ create_remote_printer_entry (const char *queue_name, + p->prattrs = cfGetPrinterAttributes(p->uri, NULL, 0, NULL, 0, 1); + debug_log_out(cf_get_printer_attributes_log); + if (p->prattrs == NULL) ++ { + debug_printf("get-printer-attributes IPP call failed on printer %s (%s).\n", + p->queue_name, p->uri); ++ goto fail; ++ } + } + } + else diff --git a/SOURCES/browsed-ignore-NULL-attrs.patch b/SOURCES/browsed-ignore-NULL-attrs.patch new file mode 100644 index 0000000..c3dc4ac --- /dev/null +++ b/SOURCES/browsed-ignore-NULL-attrs.patch @@ -0,0 +1,31 @@ +diff --git a/daemon/cups-browsed.c b/daemon/cups-browsed.c +index a2530d9..efc5669 100644 +--- a/daemon/cups-browsed.c ++++ b/daemon/cups-browsed.c +@@ -5947,6 +5947,12 @@ record_printer_options(const char *printer) + attr = ippFirstAttribute(response); + while (attr) + { ++ if (ippGetValueTag(attr) == IPP_TAG_NOVALUE) ++ { ++ attr = ippNextAttribute(response); ++ continue; ++ } ++ + key = ippGetName(attr); + for (ptr = attrs_to_record; *ptr; ptr++) + if (strcasecmp(key, *ptr) == 0 || +@@ -5966,6 +5972,13 @@ record_printer_options(const char *printer) + memmove(c, c + 1, strlen(c)); + if (*c) c ++; + } ++ ++ if (strlen(buf) == 0) ++ { ++ attr = ippNextAttribute(response); ++ continue; ++ } ++ + debug_printf(" %s=%s\n", key, buf); + p->num_options = cupsAddOption(key, buf, p->num_options, + &(p->options)); diff --git a/SPECS/cups-browsed.spec b/SPECS/cups-browsed.spec new file mode 100644 index 0000000..99ac6cc --- /dev/null +++ b/SPECS/cups-browsed.spec @@ -0,0 +1,257 @@ +%global _cups_serverbin %{_prefix}/lib/cups + +%if 0%{?fedora} +%bcond_without mdns +%else +%bcond_with mdns +%endif + + +Name: cups-browsed +Epoch: 1 +Version: 2.0.0 +Release: 6%{?dist} +Summary: Daemon for local auto-installation of remote printers +# the CUPS exception text is the same as LLVM exception, so using that name with +# agreement from legal team +# https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/message/A7GFSD6M3GYGSI32L2FC5KB22DUAEQI3/ +License: Apache-2.0 WITH LLVM-exception +URL: https://github.com/OpenPrinting/cups-browsed +Source0: %{URL}/releases/download/%{version}/%{name}-%{version}.tar.gz + + +# Patches +# https://github.com/OpenPrinting/cups-browsed/pull/26 both 001 and 002 +Patch001: 0001-Fix-memory-leak-in-resolve_callback.patch +Patch002: 0001-Init-variables-which-can-be-later-used-uninitialized.patch +# https://github.com/OpenPrinting/cups-browsed/pull/25 +Patch003: browsed-goto-fail.patch +# RHEL-51349 Cups browsing with 'Autoclustering on' in RHEL 9 cannot find printer clusters for HA +# https://github.com/OpenPrinting/cups-browsed/pull/32 +# https://github.com/OpenPrinting/cups-browsed/pull/33 +Patch04: browsed-ignore-NULL-attrs.patch + + +# remove once CentOS Stream 10 is released, cups-browsed +# was shipped in cups-filters before 2.0 +Conflicts: cups-filters < 2.0 + +# for generating configure and Makefile scripts in autogen.h +BuildRequires: autoconf +# for generating configure and Makefile scripts in autogen.h +BuildRequires: automake +# most filter functions written in C +BuildRequires: gcc +# for generating configure and Makefile scripts in autogen.h +BuildRequires: gettext-devel +# for autosetup +BuildRequires: git-core +# for generating configure and Makefile scripts in autogen.h +BuildRequires: libtool +# uses Makefiles +BuildRequires: make +# for pkg-config in configure and in SPEC file +BuildRequires: pkgconf-pkg-config +# for looking for devices on mDNS and their sharing on mDNS +BuildRequires: pkgconfig(avahi-client) +# for polling avahi +BuildRequires: pkgconfig(avahi-glib) +# uses CUPS and IPP API +BuildRequires: pkgconfig(cups) >= 2.2.2 +# uses cupsfilters API +BuildRequires: pkgconfig(libcupsfilters) >= 2.0b3 +# implicitclass uses libppd +BuildRequires: pkgconfig(libppd) >= 2.0b3 +# for dBUS proxy from GLib +BuildRequires: pkgconfig(glib-2.0) +# needed for systemd rpm macros in scriptlets +BuildRequires: systemd-rpm-macros + +%if %{with mdns} +# Avahi has to run for mDNS support +Recommends: avahi +# if set to browse or share mDNS, we need a resolver +Recommends: nss-mdns +%endif +# only recommends cups RPM in case someone wants to use CUPS container/SNAP +# - cups-browsed has to have a cupsd daemon to send requests to +# using a weak dep will work for bootstraping as well in case the old cups-filters +# 1.x, which is CUPS dependency, will be in repos when cups-browsed +Recommends: cups + +# requires cups directories +Requires: cups-filesystem + +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + + +%description +cups-browsed is a helper daemon, which automatically installs printers +locally, provides load balancing and clustering of print queues. +The daemon installs the printers based on found mDNS records and CUPS +broadcast, or by polling a remote print server. + + +%prep +%autosetup -S git + + +%build +# generate configuration/compilation files +./autogen.sh + +# --enable-auto-setup-driverless-only - enable autoinstalling of driverless IPP +# destinations +# --disable-saving-created-queues - don't save the queues during shutdown +# --disable-frequent-netif-update - don't update network interfaces after +# every found printer, update only on NM dBUS event +# --with-browseremoteprotocols - which protocols to use for looking for printers, default DNSSD and CUPS +# --with-remote-cups-local-queue-naming - use the name from remote server +# if polling the server for printers via BrowsePoll +%configure --enable-auto-setup-driverless-only\ + --disable-rpath\ + --disable-saving-created-queues\ + --disable-frequent-netif-update\ +%if %{without mdns} + --with-browseremoteprotocols=none\ +%endif + --with-remote-cups-local-queue-naming=RemoteName\ + --without-rcdir + +%make_build + + +%install +%make_install + +# systemd unit file +mkdir -p %{buildroot}%{_unitdir} +install -p -m 644 daemon/cups-browsed.service %{buildroot}%{_unitdir} + +# remove INSTALL file +rm -f %{buildroot}%{_pkgdocdir}/INSTALL + +# provided by cups-browsed dependency +rm -f %{buildroot}%{_pkgdocdir}/CHANGES-1.x.md + +# license related files are already under /usr/share/licenses +rm -f %{buildroot}%{_pkgdocdir}/{LICENSE,COPYING,NOTICE} + + +%post +%systemd_post cups-browsed.service + +# put UpdateCUPSQueuesMaxPerCall and PauseBetweenCUPSQueueUpdates into cups-browsed.conf +# for making cups-browsed work more stable for environments with many print queues +# TODO make this configurable during build +for directive in "UpdateCUPSQueuesMaxPerCall" "PauseBetweenCUPSQueueUpdates" +do + found=`%{_bindir}/grep "^[[:blank:]]*$directive" %{_sysconfdir}/cups/cups-browsed.conf` + if [ -z "$found" ] + then + if [ "x$directive" == "xUpdateCUPSQueuesMaxPerCall" ] + then + %{_bindir}/echo "UpdateCUPSQueuesMaxPerCall 20" >> %{_sysconfdir}/cups/cups-browsed.conf + else + %{_bindir}/echo "PauseBetweenCUPSQueueUpdates 5" >> %{_sysconfdir}/cups/cups-browsed.conf + fi + fi +done + +%preun +%systemd_preun cups-browsed.service + +%postun +%systemd_postun_with_restart cups-browsed.service + +# remove once F41 is EOL +%posttrans +if ls -lah /var/cache/cups/cups-browsed* &> /dev/null +then + BROWSED_ACTIVE="0" + CUPSD_ACTIVE="0" + + if systemctl is-active cups-browsed &> /dev/null + then + BROWSED_ACTIVE="1" + CUPSD_ACTIVE="1" + elif systemctl is-active cups &> /dev/null + then + CUPSD_ACTIVE="1" + fi + + if test "x$CUPSD_ACTIVE" = "x1" + then + systemctl stop cups + fi + + # RHEL-46785 - clean up recorded options to make the fix work + rm -rf /var/cache/cups/*.data /var/cache/cups/cups-browsed* &> /dev/null + + if test "x$BROWSED_ACTIVE" = "x1" + then + systemctl start cups-browsed + elif test "x$CUPSD_ACTIVE" = "x1" + then + systemctl start cups + fi +fi + + +%files +%license COPYING LICENSE NOTICE +%doc ABOUT-NLS AUTHORS CHANGES.md CONTRIBUTING.md DEVELOPING.md README.md +# implicitclass backend must be run as root +# https://github.com/OpenPrinting/cups-filters/issues/183#issuecomment-570196216 +%attr(0744,root,root) %{_cups_serverbin}/backend/implicitclass +# 2123809 - rpm -Va reports changes due %%post scriptlet (remove the verify part once we remove +# cups-browsed.conf update from %%post scriptlet) +%config(noreplace) %verify(not size filedigest mtime) %{_sysconfdir}/cups/cups-browsed.conf +%{_mandir}/man5/cups-browsed.conf.5.gz +%{_mandir}/man8/cups-browsed.8.gz +%{_sbindir}/cups-browsed +%{_unitdir}/cups-browsed.service + + +%changelog +* Tue Aug 06 2024 Zdenek Dohnal - 1:2.0.0-6 +- RHEL-51349 Cups browsing with 'Autoclustering on' cannot find printer clusters for HA due incorrect orientation-requested-default + +* Mon Jun 24 2024 Troy Dawson - 1:2.0.0-5 +- Bump release for June 2024 mass rebuild + +* Wed Feb 07 2024 Zdenek Dohnal - 1:2.0.0-4 +- 2253985 - cups-browsed crashes when remote CUPS queue found by DNS-SD is not able to response on IPP Get-Printer-Attributes +- fix several issues reported by openscanhub + +* Wed Jan 24 2024 Fedora Release Engineering - 1:2.0.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 1:2.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Oct 04 2023 Zdenek Dohnal - 1:2.0.0-1 +- 2240317 - cups-browsed-2.0.0 is available + +* Tue Aug 29 2023 Zdenek Dohnal - 1:2.0~rc2-3 +- 2150035 - [abrt] cups-filters: __strlen_avx2(): cups-browsed killed by SIGSEGV + +* Wed Jul 19 2023 Fedora Release Engineering - 1:2.0~rc2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jun 28 2023 Zdenek Dohnal - 1:2.0~rc2-1 +- 2.0rc2 + +* Thu Apr 27 2023 Zdenek Dohnal - 1:2.0~rc1-1 +- 2.0rc1 + +* Mon Apr 03 2023 Zdenek Dohnal - 1:2.0~b4-1 +- 2179346 - cups-browsed-2.0b4 is available + +* Wed Mar 01 2023 Zdenek Dohnal - 1:2.0~b3-2 +- use Epoch to ensure upgrade path because I didn't read FPG carefully + +* Thu Feb 02 2023 Zdenek Dohnal - 2.0b3-1 +- Initial import (fedora#2170547)