[packages/cups] - switch to OpenPrinting cups 2.4.8 - update patches and remove obsolete

baggins baggins at pld-linux.org
Sun May 19 22:42:44 CEST 2024


commit fab640eefd73757b1284090d170d722cce9e926f
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sun May 19 22:40:37 2024 +0200

    - switch to OpenPrinting cups 2.4.8
    - update patches and remove obsolete

 cups-avahi-address.patch          |   95 ----
 cups-avahi-no-threaded.patch      | 1029 -------------------------------------
 cups-certs_FHS.patch              |   26 +-
 cups-logrotate.patch              |   63 ---
 cups-lspp.patch                   |  259 +++++-----
 cups-no-polluted-krb5config.patch |   24 +-
 cups-nostrip.patch                |   12 +-
 cups-systemd-socket.patch         |   38 --
 cups.spec                         |   55 +-
 job-name-too-long.patch           |    6 +-
 scx3400w-quirks.patchs            |   24 -
 11 files changed, 180 insertions(+), 1451 deletions(-)
---
diff --git a/cups.spec b/cups.spec
index 2fd23cb..34540aa 100644
--- a/cups.spec
+++ b/cups.spec
@@ -12,13 +12,13 @@
 Summary(pl.UTF-8):	Ogólny system druku dla Uniksa
 Summary(pt_BR.UTF-8):	Sistema Unix de Impressão
 Name:		cups
-Version:	2.3.6
-Release:	1
+Version:	2.4.8
+Release:	0.1
 Epoch:		1
 License:	LGPL v2 (libraries), GPL v2 (the rest)
 Group:		Applications/Printing
-Source0:	https://github.com/apple/cups/archive/v%{version}/%{name}-%{version}.tar.gz
-# Source0-md5:	1bfba624d19092b20db4807323417efe
+Source0:	https://github.com/OpenPrinting/cups/releases/download/v%{version}/cups-%{version}-source.tar.gz
+# Source0-md5:	3fdd9a5249f090cd35e324246ef0e3e4
 Source1:	%{name}.init
 Source2:	%{name}.pamd
 Source3:	%{name}.logrotate
@@ -37,19 +37,14 @@ Patch9:		%{name}-verbose-compilation.patch
 Patch10:	%{name}-peercred.patch
 Patch11:	%{name}-usb.patch
 Patch12:	%{name}-desktop.patch
-Patch13:	%{name}-systemd-socket.patch
 Patch15:	reactivate_recommended_driver.patch
 Patch16:	read-embedded-options-from-incoming-postscript-and-add-to-ipp-attrs.patch
 Patch18:	%{name}-final-content-type.patch
 Patch19:	job-name-too-long.patch
-# avahi patches from fedora
-Patch100:	%{name}-avahi-address.patch
-Patch101:	%{name}-avahi-no-threaded.patch
 Patch102:	cups-banners.patch
 Patch103:	cups-pid.patch
 Patch104:	cups-eggcups.patch
 Patch105:	cups-driverd-timeout.patch
-Patch106:	cups-logrotate.patch
 Patch107:	cups-res_init.patch
 Patch108:	cups-filter-debug.patch
 Patch110:	cups-dnssd-deviceid.patch
@@ -59,8 +54,7 @@ Patch114:	cups-freebind.patch
 Patch115:	cups-ipp-multifile.patch
 Patch116:	cups-web-devices-timeout.patch
 Patch117:	cups-lspp.patch
-Patch118:	scx3400w-quirks.patchs
-URL:		http://www.cups.org/
+URL:		https://openprinting.github.io/cups/
 BuildRequires:	acl-devel
 %{?with_lspp:BuildRequires:	audit-libs-devel}
 BuildRequires:	autoconf >= 2.60
@@ -281,22 +275,15 @@ bibliotecas do CUPS.
 # why it hasn't been merged for so long (and why no other distro uses it)
 #%patch11 -p1
 %patch12 -p1
-%patch13 -p1
 %patch15 -p1
 %patch16 -p1
 %patch18 -p1
 %patch19 -p1
 
-%if %{with avahi}
-%patch100 -p1
-%patch101 -p1
-%endif
-
 %patch102 -p1
 %patch103 -p1
 %patch104 -p1
 %patch105 -p1
-%patch106 -p1
 %patch107 -p1
 %patch108 -p1
 %patch110 -p1
@@ -306,13 +293,11 @@ bibliotecas do CUPS.
 %patch115 -p1
 %patch116 -p1
 %patch117 -p1
-%patch118 -p1
 
 %build
 %{__aclocal} -I config-scripts
 %{__autoconf}
 %configure \
-	--libdir=%{_ulibdir} \
 	--enable-acl \
 	--enable-avahi%{!?with_avahi:=no} \
 	--disable-cdsassl \
@@ -335,6 +320,7 @@ bibliotecas do CUPS.
 	--with-log-file-perm=0640 \
 	--with-dbusdir=/etc/dbus-1 \
 	--with-docdir=%{_ulibdir}/%{name}/cgi-bin \
+	--with-pkgconfpath=%{_pkgconfigdir} \
 	--with-printcap=/etc/printcap \
 	%{?with_dnssd:--with-dnssd-libs=x} \
 	%{?with_dnssd:--with-dnssd-includes=x} \
@@ -356,14 +342,6 @@ install -d $RPM_BUILD_ROOT/etc/{rc.d/init.d,pam.d,logrotate.d,modprobe.d,securit
 	CUPS_USER=$(id -u) \
 	CUPS_GROUP=$(id -g)
 
-if [ "%{_lib}" != "lib" ] ; then
-	install -d $RPM_BUILD_ROOT%{_libdir}
-	%{__mv} $RPM_BUILD_ROOT%{_ulibdir}/*.so* $RPM_BUILD_ROOT%{_libdir}
-%if %{with static_libs}
-	%{__mv} $RPM_BUILD_ROOT%{_ulibdir}/*.a $RPM_BUILD_ROOT%{_libdir}
-%endif
-fi
-
 %if %{with avahi}
 ln -s %{_ulibdir}/cups/backend/dnssd $RPM_BUILD_ROOT%{_ulibdir}/cups/backend/mdns
 %endif
@@ -420,20 +398,20 @@ fi
 /sbin/chkconfig --add cups
 %service cups restart "cups daemon"
 /sbin/rmmod usblp > /dev/null 2>&1 || :
-%systemd_post org.cups.cupsd.service org.cups.cupd.socket org.cups.cupsd.path
+%systemd_post cups.service cups.socket cups.path
 
 %preun
 if [ "$1" = "0" ]; then
 	%service cups stop
 	/sbin/chkconfig --del cups
 fi
-%systemd_preun org.cups.cupsd.service org.cups.cupsd.socket org.cups.cupsd.path
+%systemd_preun cups.service cups.socket cups.path
 
 %postun
 %systemd_reload
 
 %triggerpostun -- cups < 1:1.5.2-1
-%systemd_trigger org.cups.cupsd.service org.cups.cupsd.socket org.cups.cupsd.path
+%systemd_trigger cups.service cups.socket cups.path
 
 %post	lib -p /sbin/ldconfig
 %postun	lib -p /sbin/ldconfig
@@ -456,9 +434,9 @@ fi
 /etc/dbus-1/system.d/cups.conf
 /etc/modprobe.d/cups.conf
 %if %{with systemd}
-%{systemdunitdir}/org.cups.cupsd.service
-%{systemdunitdir}/org.cups.cupsd.socket
-%{systemdunitdir}/org.cups.cupsd.path
+%{systemdunitdir}/cups.service
+%{systemdunitdir}/cups.socket
+%{systemdunitdir}/cups.path
 %{systemdtmpfilesdir}/%{name}.conf
 %endif
 %attr(600,root,lp) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/classes.conf
@@ -502,8 +480,10 @@ fi
 %{_ulibdir}/cups/cgi-bin/*.html
 %{_ulibdir}/cups/cgi-bin/*.png
 %{_ulibdir}/cups/cgi-bin/*.txt
+%lang(da) %{_ulibdir}/cups/cgi-bin/da
 %lang(de) %{_ulibdir}/cups/cgi-bin/de
 %lang(es) %{_ulibdir}/cups/cgi-bin/es
+%lang(fr) %{_ulibdir}/cups/cgi-bin/fr
 %lang(ja) %{_ulibdir}/cups/cgi-bin/ja
 %lang(pt_BR) %{_ulibdir}/cups/cgi-bin/pt_BR
 %lang(ru) %{_ulibdir}/cups/cgi-bin/ru
@@ -550,6 +530,7 @@ fi
 
 %dir %{_datadir}/cups/templates
 %{_datadir}/cups/templates/*.tmpl
+%lang(da) %{_datadir}/cups/templates/da
 %lang(de) %{_datadir}/cups/templates/de
 %lang(es) %{_datadir}/cups/templates/es
 %lang(fr) %{_datadir}/cups/templates/fr
@@ -611,8 +592,8 @@ fi
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/rc-inetd/cups-lpd
 %attr(755,root,root) %{_ulibdir}/cups/daemon/cups-lpd
 %if %{with systemd}
-%{systemdunitdir}/org.cups.cups-lpd.socket
-%{systemdunitdir}/org.cups.cups-lpd at .service
+%{systemdunitdir}/cups-lpd.socket
+%{systemdunitdir}/cups-lpd at .service
 %endif
 %{_mandir}/man8/cups-lpd.8*
 
@@ -684,6 +665,7 @@ fi
 %dir %{_datadir}/cups
 %lang(ca) %{_localedir}/ca/cups_ca.po
 %lang(cs) %{_localedir}/cs/cups_cs.po
+%lang(da) %{_localedir}/da/cups_da.po
 %lang(de) %{_localedir}/de/cups_de.po
 %{_localedir}/en/cups_en.po
 %lang(es) %{_localedir}/es/cups_es.po
@@ -704,6 +686,7 @@ fi
 %attr(755,root,root) %{_libdir}/libcups.so
 %attr(755,root,root) %{_libdir}/libcupsimage.so
 %{_includedir}/cups
+%{_pkgconfigdir}/cups.pc
 %{_mandir}/man1/cups-config.1*
 
 %if %{with static_libs}
diff --git a/cups-avahi-address.patch b/cups-avahi-address.patch
deleted file mode 100644
index b8090ea..0000000
--- a/cups-avahi-address.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-diff -up cups-2.2b2/cups/http-support.c.avahi-address cups-2.2b2/cups/http-support.c
---- cups-2.2b2/cups/http-support.c.avahi-address	2016-06-24 17:43:35.000000000 +0200
-+++ cups-2.2b2/cups/http-support.c	2016-06-27 15:31:34.201361844 +0200
-@@ -2340,7 +2340,7 @@ http_resolve_cb(
-     const char             *type,	/* I - Registration type */
-     const char             *domain,	/* I - Domain (unused) */
-     const char             *hostTarget,	/* I - Hostname */
--    const AvahiAddress     *address,	/* I - Address (unused) */
-+    const AvahiAddress     *address,	/* I - Address */
-     uint16_t               port,	/* I - Port number */
-     AvahiStringList        *txt,	/* I - TXT record */
-     AvahiLookupResultFlags flags,	/* I - Lookup flags (unused) */
-@@ -2493,39 +2493,62 @@ http_resolve_cb(
-     * getting the IP address of the .local name and then do reverse-lookups...
-     */
- 
--    http_addrlist_t	*addrlist,	/* List of addresses */
--			*addr;		/* Current address */
-+    http_addr_t addr;
-+    size_t addrlen;
-+    int error;
- 
-     DEBUG_printf(("5http_resolve_cb: Looking up \"%s\".", hostTarget));
- 
--    snprintf(fqdn, sizeof(fqdn), "%d", ntohs(port));
--    if ((addrlist = httpAddrGetList(hostTarget, AF_UNSPEC, fqdn)) != NULL)
-+    switch (address->proto)
-     {
--      for (addr = addrlist; addr; addr = addr->next)
-+    case AVAHI_PROTO_INET:
-+      addr.ipv4.sin_family = AF_INET;
-+      addrlen = sizeof (addr.ipv4.sin_addr);
-+      memcpy (&addr.ipv4.sin_addr, &address->data, addrlen);
-+      break;
-+    case AVAHI_PROTO_INET6:
-+      addr.ipv6.sin6_family = AF_INET6;
-+      addrlen = sizeof (addr.ipv6.sin6_addr);
-+      memcpy (&addr.ipv6.sin6_addr, &address->data, addrlen);
-+      break;
-+    default:
-+      DEBUG_printf(("8http_resolve_cb: unknown address family %d",
-+		    address->proto));
-+      addrlen = 0;
-+    }
-+
-+    if (addrlen > 0) {
-+      error = getnameinfo(&addr.addr, httpAddrLength (&addr),
-+			  fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD);
-+
-+      if (!error)
-       {
--        int error = getnameinfo(&(addr->addr.addr), (socklen_t)httpAddrLength(&(addr->addr)), fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD);
-+	DEBUG_printf(("8http_resolve_cb: Found \"%s\".", fqdn));
- 
--        if (!error)
--	{
--	  DEBUG_printf(("5http_resolve_cb: Found \"%s\".", fqdn));
-+	if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn ||
-+	    _cups_strcasecmp(hostptr, ".local"))
- 
--	  if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn ||
--	      _cups_strcasecmp(hostptr, ".local"))
--	  {
--	    hostTarget = fqdn;
--	    break;
--	  }
-+	{
-+	  hostTarget = fqdn;
- 	}
-+      } else {
-+	avahi_address_snprint (fqdn, sizeof (fqdn), address);
-+	hostTarget = fqdn;
-+
- #ifdef DEBUG
--	else
--	  DEBUG_printf(("5http_resolve_cb: \"%s\" did not resolve: %d",
--	                httpAddrString(&(addr->addr), fqdn, sizeof(fqdn)),
--			error));
-+	DEBUG_printf(("8http_resolve_cb: \"%s\" did not resolve: %d",
-+		      fqdn, error));
- #endif /* DEBUG */
-       }
- 
--      httpAddrFreeList(addrlist);
-     }
-+  } else {
-+   /*
-+    * Use the IP address that responded...
-+    */
-+
-+   avahi_address_snprint (fqdn, sizeof (fqdn), address);
-+   hostTarget = fqdn;
-   }
- 
-  /*
diff --git a/cups-avahi-no-threaded.patch b/cups-avahi-no-threaded.patch
deleted file mode 100644
index b81c497..0000000
--- a/cups-avahi-no-threaded.patch
+++ /dev/null
@@ -1,1029 +0,0 @@
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/Makefile cups-2.3.3/scheduler/Makefile
---- cups-2.3.3.org/scheduler/Makefile	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/Makefile	2021-04-20 22:45:53.873155054 +0200
-@@ -12,6 +12,7 @@ include ../Makedefs
- 
- CUPSDOBJS =	\
- 		auth.o \
-+		avahi.o \
- 		banners.o \
- 		cert.o \
- 		classes.o \
-@@ -35,7 +36,8 @@ CUPSDOBJS =	\
- 		server.o \
- 		statbuf.o \
- 		subscriptions.o \
--		sysman.o
-+		sysman.o \
-+		timeout.o
- LIBOBJS =	\
- 		filter.o \
- 		mime.o \
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/avahi.c cups-2.3.3/scheduler/avahi.c
---- cups-2.3.3.org/scheduler/avahi.c	1970-01-01 01:00:00.000000000 +0100
-+++ cups-2.3.3/scheduler/avahi.c	2021-04-20 22:45:53.873155054 +0200
-@@ -0,0 +1,441 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Avahi poll implementation for the CUPS scheduler.
-+ *
-+ *   Copyright (C) 2010, 2011 Red Hat, Inc.
-+ *   Authors:
-+ *    Tim Waugh <twaugh at redhat.com>
-+ *
-+ *   Redistribution and use in source and binary forms, with or without
-+ *   modification, are permitted provided that the following conditions
-+ *   are met:
-+ *
-+ *   Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ *
-+ *   Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ *
-+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ *   COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ *   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ *   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-+ *   OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Contents:
-+ *
-+ *   watch_read_cb         - Read callback for file descriptor
-+ *   watch_write_cb        - Write callback for file descriptor
-+ *   watched_fd_add_select() - Call cupsdAddSelect() as needed
-+ *   watch_new()           - Create a new file descriptor watch
-+ *   watch_free()          - Free a file descriptor watch
-+ *   watch_update()        - Update watched events for a file descriptor
-+ *   watch_get_events()    - Get events that happened for a file descriptor
-+ *   timeout_cb()          - Run a timed Avahi callback
-+ *   timeout_new()         - Set a wakeup time
-+ *   timeout_update()      - Update the expiration time for a timeout
-+ *   timeout_free()        - Free a timeout
-+ *   compare_watched_fds() - Compare watched file descriptors for array sorting
-+ *   avahi_cups_poll_new() - Create a new Avahi main loop object for CUPS
-+ *   avahi_cups_poll_free() - Free an Avahi main loop object for CUPS
-+ *   avahi_cups_poll_get() - Get the abstract poll API structure
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI /* Applies to entire file... */
-+
-+/*
-+ * Include necessary headers...
-+ */
-+
-+#include "cupsd.h"
-+
-+#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
-+#  include <malloc.h>
-+#endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-common/timeval.h>
-+#endif /* HAVE_AVAHI */
-+
-+
-+typedef struct
-+{
-+  AvahiCupsPoll *cups_poll;
-+
-+  int fd;
-+  AvahiWatchEvent occurred;
-+  cups_array_t *watches;
-+} cupsd_watched_fd_t;
-+
-+struct AvahiWatch
-+{
-+  cupsd_watched_fd_t *watched_fd;
-+
-+  AvahiWatchEvent events;
-+  AvahiWatchCallback callback;
-+  void *userdata;
-+};
-+
-+struct AvahiTimeout
-+{
-+  AvahiCupsPoll *cups_poll;
-+  AvahiTimeoutCallback callback;
-+  void *userdata;
-+  cupsd_timeout_t *cupsd_timeout;
-+};
-+
-+/*
-+ * Local functions...
-+ */
-+
-+static AvahiWatch *	watch_new(const AvahiPoll *api,
-+				  int fd,
-+				  AvahiWatchEvent events,
-+				  AvahiWatchCallback callback,
-+				  void *userdata);
-+static void		watch_free(AvahiWatch *watch);
-+static void		watch_update(AvahiWatch *watch,
-+				     AvahiWatchEvent events);
-+static AvahiWatchEvent	watch_get_events(AvahiWatch *watch);
-+
-+
-+/*
-+ * 'watch_read_cb' - Read callback for file descriptor
-+ */
-+
-+static void
-+watch_read_cb (void *userdata)
-+{
-+  AvahiWatch *watch;
-+  cupsd_watched_fd_t *watched_fd = userdata;
-+  watched_fd->occurred |= AVAHI_WATCH_IN;
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches))
-+  {
-+    if (watch->events & watched_fd->occurred)
-+    {
-+      (watch->callback) (watch, watched_fd->fd,
-+			 AVAHI_WATCH_IN, watch->userdata);
-+      watched_fd->occurred &= ~AVAHI_WATCH_IN;
-+      break;
-+    }
-+  }
-+}
-+
-+
-+/*
-+ * 'watch_write_cb' - Write callback for file descriptor
-+ */
-+
-+static void
-+watch_write_cb (void *userdata)
-+{
-+  AvahiWatch *watch;
-+  cupsd_watched_fd_t *watched_fd = userdata;
-+  watched_fd->occurred |= AVAHI_WATCH_OUT;
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches))
-+  {
-+    if (watch->events & watched_fd->occurred)
-+    {
-+      (watch->callback) (watch, watched_fd->fd,
-+			 AVAHI_WATCH_OUT, watch->userdata);
-+      watched_fd->occurred &= ~AVAHI_WATCH_OUT;
-+      break;
-+    }
-+  }
-+}
-+
-+
-+/*
-+ * 'watched_fd_add_select' - Call cupsdAddSelect() as needed
-+ */
-+
-+static int						/* O - Watches? */
-+watched_fd_add_select (cupsd_watched_fd_t *watched_fd)
-+{
-+  AvahiWatch *watch;
-+  cupsd_selfunc_t read_cb = NULL, write_cb = NULL;
-+  int any_watches = 0;
-+
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches))
-+  {
-+    any_watches = 1;
-+    if (watch->events & (AVAHI_WATCH_IN |
-+			     AVAHI_WATCH_ERR |
-+			     AVAHI_WATCH_HUP))
-+    {
-+      read_cb = (cupsd_selfunc_t)watch_read_cb;
-+      if (write_cb != NULL)
-+	break;
-+    }
-+
-+    if (watch->events & AVAHI_WATCH_OUT)
-+    {
-+      write_cb = (cupsd_selfunc_t)watch_write_cb;
-+      if (read_cb != NULL)
-+	break;
-+    }
-+  }
-+
-+  if (read_cb || write_cb)
-+    cupsdAddSelect (watched_fd->fd, read_cb, write_cb, watched_fd);
-+  else
-+    cupsdRemoveSelect (watched_fd->fd);
-+
-+  return (any_watches);
-+}
-+
-+/*
-+ * 'watch_new' - Create a new file descriptor watch
-+ */
-+
-+static AvahiWatch *
-+watch_new (const AvahiPoll *api,
-+	   int fd,
-+	   AvahiWatchEvent events,
-+	   AvahiWatchCallback callback,
-+	   void *userdata)
-+{
-+  cupsd_watched_fd_t key, *watched_fd;
-+  AvahiCupsPoll *cups_poll = api->userdata;
-+  AvahiWatch *watch = malloc(sizeof(AvahiWatch));
-+  if (watch == NULL)
-+    return (NULL);
-+
-+  watch->events = events;
-+  watch->callback = callback;
-+  watch->userdata = userdata;
-+
-+  key.fd = fd;
-+  watched_fd = cupsArrayFind (cups_poll->watched_fds, &key);
-+  if (watched_fd == NULL)
-+  {
-+    watched_fd = malloc(sizeof(cupsd_watched_fd_t));
-+    if (watched_fd == NULL)
-+    {
-+      free (watch);
-+      return (NULL);
-+    }
-+
-+    watched_fd->fd = fd;
-+    watched_fd->occurred = 0;
-+    watched_fd->cups_poll = cups_poll;
-+    watched_fd->watches = cupsArrayNew (NULL, NULL);
-+    cupsArrayAdd (cups_poll->watched_fds, watched_fd);
-+  }
-+
-+  watch->watched_fd = watched_fd;
-+  cupsArrayAdd(watched_fd->watches, watch);
-+  watched_fd_add_select (watched_fd);
-+  return (watch);
-+}
-+
-+
-+/*
-+ * 'watch_free' - Free a file descriptor watch
-+ */
-+
-+static void
-+watch_free (AvahiWatch *watch)
-+{
-+  cupsd_watched_fd_t *watched_fd = watch->watched_fd;
-+  AvahiCupsPoll *cups_poll = watched_fd->cups_poll;
-+
-+  cupsArrayRemove (watched_fd->watches, watch);
-+  free (watch);
-+
-+  if (!watched_fd_add_select (watched_fd))
-+  {
-+    /* No more watches */
-+    cupsArrayRemove (cups_poll->watched_fds, watched_fd);
-+    free (watched_fd);
-+  }
-+}
-+
-+
-+/*
-+ * 'watch_update' - Update watched events for a file descriptor
-+ */
-+
-+static void
-+watch_update (AvahiWatch *watch,
-+	      AvahiWatchEvent events)
-+{
-+  watch->events = events;
-+  watched_fd_add_select (watch->watched_fd);
-+}
-+
-+
-+/*
-+ * 'watch_get_events' - Get events that happened for a file descriptor
-+ */
-+
-+static AvahiWatchEvent
-+watch_get_events (AvahiWatch *watch)
-+{
-+  return (watch->watched_fd->occurred);
-+}
-+
-+
-+/*
-+ * 'timeout_cb()' - Run a timed Avahi callback
-+ */
-+
-+static void
-+timeout_cb (cupsd_timeout_t *cupsd_timeout, void *userdata)
-+{
-+  AvahiTimeout *timeout = userdata;
-+  (timeout->callback) (timeout, timeout->userdata);
-+}
-+
-+
-+/*
-+ * 'timeout_new' - Set a wakeup time
-+ */
-+
-+static AvahiTimeout *
-+timeout_new (const AvahiPoll *api,
-+	     const struct timeval *tv,
-+	     AvahiTimeoutCallback callback,
-+	     void *userdata)
-+{
-+  AvahiTimeout *timeout;
-+  AvahiCupsPoll *cups_poll = api->userdata;
-+
-+  timeout = malloc(sizeof(AvahiTimeout));
-+  if (timeout == NULL)
-+    return (NULL);
-+
-+  timeout->cups_poll = cups_poll;
-+  timeout->callback = callback;
-+  timeout->userdata = userdata;
-+  timeout->cupsd_timeout = cupsdAddTimeout (tv,
-+					    (cupsd_timeoutfunc_t)timeout_cb,
-+					    timeout);
-+  cupsArrayAdd (cups_poll->timeouts, timeout);
-+  return (timeout);
-+}
-+
-+
-+/*
-+ * 'timeout_update' - Update the expiration time for a timeout
-+ */
-+
-+static void
-+timeout_update (AvahiTimeout *timeout,
-+		const struct timeval *tv)
-+{
-+  cupsdUpdateTimeout (timeout->cupsd_timeout, tv);
-+}
-+
-+
-+/*
-+ * ' timeout_free' - Free a timeout
-+ */
-+
-+static void
-+timeout_free (AvahiTimeout *timeout)
-+{
-+  cupsArrayRemove (timeout->cups_poll->timeouts, timeout);
-+  cupsdRemoveTimeout (timeout->cupsd_timeout);
-+  free (timeout);
-+}
-+
-+
-+/*
-+ * 'compare_watched_fds' - Compare watched file descriptors for array sorting
-+ */
-+static int
-+compare_watched_fds(cupsd_watched_fd_t *p0,
-+		    cupsd_watched_fd_t *p1)
-+{
-+  /*
-+   * Compare by fd (no two elements have the same fd)
-+   */
-+
-+  if (p0->fd == p1->fd)
-+    return 0;
-+
-+  return (p0->fd < p1->fd ? -1 : 1);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_new' - Create a new Avahi main loop object for CUPS
-+ */
-+
-+AvahiCupsPoll *
-+avahi_cups_poll_new (void)
-+{
-+  AvahiCupsPoll *cups_poll = malloc(sizeof(AvahiCupsPoll));
-+  if (cups_poll == NULL)
-+    return (NULL);
-+
-+  cups_poll->watched_fds = cupsArrayNew ((cups_array_func_t)compare_watched_fds,
-+					 NULL);
-+  cups_poll->timeouts = cupsArrayNew (NULL, NULL);
-+
-+  cups_poll->api.userdata = cups_poll;
-+  cups_poll->api.watch_new = watch_new;
-+  cups_poll->api.watch_free = watch_free;
-+  cups_poll->api.watch_update = watch_update;
-+  cups_poll->api.watch_get_events = watch_get_events;
-+
-+  cups_poll->api.timeout_new = timeout_new;
-+  cups_poll->api.timeout_update = timeout_update;
-+  cups_poll->api.timeout_free = timeout_free;
-+
-+  return (cups_poll);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_free' - Free an Avahi main loop object for CUPS
-+ */
-+void
-+avahi_cups_poll_free (AvahiCupsPoll *cups_poll)
-+{
-+  cupsd_watched_fd_t *watched_fd;
-+
-+  for (watched_fd = (cupsd_watched_fd_t*)cupsArrayFirst(cups_poll->watched_fds);
-+       watched_fd;
-+       watched_fd = (cupsd_watched_fd_t*)cupsArrayNext(cups_poll->watched_fds))
-+    cupsArrayClear (watched_fd->watches);
-+
-+  cupsArrayClear (cups_poll->watched_fds);
-+  cupsArrayClear (cups_poll->timeouts);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_get' - Get the abstract poll API structure
-+ */
-+
-+const AvahiPoll *
-+avahi_cups_poll_get (AvahiCupsPoll *cups_poll)
-+{
-+  return (&cups_poll->api);
-+}
-+
-+
-+#endif /* HAVE_AVAHI ... from top of file */
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/avahi.h cups-2.3.3/scheduler/avahi.h
---- cups-2.3.3.org/scheduler/avahi.h	1970-01-01 01:00:00.000000000 +0100
-+++ cups-2.3.3/scheduler/avahi.h	2021-04-20 22:45:53.873155054 +0200
-@@ -0,0 +1,69 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Avahi poll implementation for the CUPS scheduler.
-+ *
-+ *   Copyright (C) 2010, 2011 Red Hat, Inc.
-+ *   Authors:
-+ *    Tim Waugh <twaugh at redhat.com>
-+ *
-+ *   Redistribution and use in source and binary forms, with or without
-+ *   modification, are permitted provided that the following conditions
-+ *   are met:
-+ *
-+ *   Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ *
-+ *   Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ *
-+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ *   COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ *   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ *   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-+ *   OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-client/client.h>
-+#  include <avahi-client/publish.h>
-+#endif /* HAVE_AVAHI */
-+
-+#ifdef HAVE_AUTHORIZATION_H
-+#  include <Security/Authorization.h>
-+#endif /* HAVE_AUTHORIZATION_H */
-+
-+
-+#ifdef HAVE_AVAHI
-+typedef struct
-+{
-+    AvahiPoll api;
-+    cups_array_t *watched_fds;
-+    cups_array_t *timeouts;
-+} AvahiCupsPoll;
-+#endif /* HAVE_AVAHI */
-+
-+/*
-+ * Prototypes...
-+ */
-+
-+#ifdef HAVE_AVAHI
-+extern AvahiCupsPoll *	avahi_cups_poll_new(void);
-+extern void		avahi_cups_poll_free(AvahiCupsPoll *cups_poll);
-+extern const AvahiPoll *avahi_cups_poll_get(AvahiCupsPoll *cups_poll);
-+#endif /* HAVE_AVAHI */
-+
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/cupsd.h cups-2.3.3/scheduler/cupsd.h
---- cups-2.3.3.org/scheduler/cupsd.h	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/cupsd.h	2021-04-20 22:45:53.873155054 +0200
-@@ -115,6 +115,7 @@ extern const char *cups_hstrerror(int);
- #include "colorman.h"
- #include "conf.h"
- #include "banners.h"
-+#include "avahi.h"
- #include "dirsvc.h"
- #include "network.h"
- #include "subscriptions.h"
-@@ -135,6 +136,15 @@ extern const char *cups_hstrerror(int);
- 
- typedef void (*cupsd_selfunc_t)(void *data);
- 
-+#ifdef HAVE_AVAHI
-+/*
-+ * Timeout callback function type...
-+ */
-+
-+typedef struct _cupsd_timeout_s cupsd_timeout_t;
-+typedef void (*cupsd_timeoutfunc_t)(cupsd_timeout_t *timeout, void *data);
-+#endif /* HAVE_AVAHI */
-+
- 
- /*
-  * Globals...
-@@ -159,6 +169,9 @@ VAR int			OnDemand	VALUE(0);
- 					/* Launched on demand */
- #endif /* HAVE_ONDEMAND */
- 
-+#ifdef HAVE_AVAHI
-+VAR cups_array_t *Timeouts;		/* Timed callbacks for main loop */
-+#endif /* HAVE_AVAHI */
- 
- /*
-  * Prototypes...
-@@ -220,3 +233,15 @@ extern void		cupsdStopSelect(void);
- /* server.c */
- extern void		cupsdStartServer(void);
- extern void		cupsdStopServer(void);
-+
-+#ifdef HAVE_AVAHI
-+extern void     cupsdInitTimeouts(void);
-+extern cupsd_timeout_t *cupsdAddTimeout (const struct timeval *tv,
-+					 cupsd_timeoutfunc_t cb,
-+					 void *data);
-+extern cupsd_timeout_t *cupsdNextTimeout (long *delay);
-+extern void     cupsdRunTimeout (cupsd_timeout_t *timeout);
-+extern void     cupsdUpdateTimeout (cupsd_timeout_t *timeout,
-+				    const struct timeval *tv);
-+extern void     cupsdRemoveTimeout (cupsd_timeout_t *timeout);
-+#endif /* HAVE_AVAHI */
-\ No newline at end of file
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/dirsvc.c cups-2.3.3/scheduler/dirsvc.c
---- cups-2.3.3.org/scheduler/dirsvc.c	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/dirsvc.c	2021-04-20 22:45:53.873155054 +0200
-@@ -190,7 +190,7 @@ cupsdStartBrowsing(void)
-     cupsdUpdateDNSSDName();
- 
- #  else /* HAVE_AVAHI */
--    if ((DNSSDMaster = avahi_threaded_poll_new()) == NULL)
-+    if ((DNSSDMaster = avahi_cups_poll_new()) == NULL)
-     {
-       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create DNS-SD thread.");
- 
-@@ -201,7 +201,7 @@ cupsdStartBrowsing(void)
-     {
-       int error;			/* Error code, if any */
- 
--      DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error);
-+      DNSSDClient = avahi_client_new(avahi_cups_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error);
- 
-       if (DNSSDClient == NULL)
-       {
-@@ -212,11 +212,9 @@ cupsdStartBrowsing(void)
-         if (FatalErrors & CUPSD_FATAL_BROWSE)
- 	  cupsdEndProcess(getpid(), 0);
- 
--        avahi_threaded_poll_free(DNSSDMaster);
-+        avahi_cups_poll_free(DNSSDMaster);
-         DNSSDMaster = NULL;
-       }
--      else
--	avahi_threaded_poll_start(DNSSDMaster);
-     }
- #  endif /* HAVE_DNSSD */
-   }
-@@ -632,7 +630,7 @@ dnssdClientCallback(
- 	  * Renew Avahi client...
- 	  */
- 
--	  DNSSDClient = avahi_client_new(avahi_threaded_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error);
-+	  DNSSDClient = avahi_client_new(avahi_cups_poll_get(DNSSDMaster), AVAHI_CLIENT_NO_FAIL, dnssdClientCallback, NULL, &error);
- 
- 	  if (!DNSSDClient)
- 	  {
-@@ -698,17 +696,11 @@ dnssdDeregisterInstance(
-   *srv = NULL;
- 
- #  else /* HAVE_AVAHI */
--  if (!from_callback)
--    avahi_threaded_poll_lock(DNSSDMaster);
--
-   if (*srv)
-   {
-     avahi_entry_group_free(*srv);
-     *srv = NULL;
-   }
--
--  if (!from_callback)
--    avahi_threaded_poll_unlock(DNSSDMaster);
- #  endif /* HAVE_DNSSD */
- }
- 
-@@ -1027,16 +1019,10 @@ dnssdRegisterInstance(
-   (void)commit;
- 
- #  else /* HAVE_AVAHI */
--  if (!from_callback)
--    avahi_threaded_poll_lock(DNSSDMaster);
--
-   if (!*srv)
-     *srv = avahi_entry_group_new(DNSSDClient, dnssdRegisterCallback, NULL);
-   if (!*srv)
-   {
--    if (!from_callback)
--      avahi_threaded_poll_unlock(DNSSDMaster);
--
-     cupsdLogMessage(CUPSD_LOG_WARN, "DNS-SD registration of \"%s\" failed: %s",
-                     name, dnssdErrorString(avahi_client_errno(DNSSDClient)));
-     return (0);
-@@ -1151,9 +1137,6 @@ dnssdRegisterInstance(
-       cupsdLogMessage(CUPSD_LOG_DEBUG, "DNS-SD commit of \"%s\" failed.",
-                       name);
-   }
--
--  if (!from_callback)
--    avahi_threaded_poll_unlock(DNSSDMaster);
- #  endif /* HAVE_DNSSD */
- 
-   if (error)
-@@ -1324,9 +1307,6 @@ dnssdStop(void)
-   DNSSDMaster = NULL;
- 
- #  else /* HAVE_AVAHI */
--  if (DNSSDMaster)
--    avahi_threaded_poll_stop(DNSSDMaster);
--
-   if (DNSSDClient)
-   {
-     avahi_client_free(DNSSDClient);
-@@ -1335,7 +1315,7 @@ dnssdStop(void)
- 
-   if (DNSSDMaster)
-   {
--    avahi_threaded_poll_free(DNSSDMaster);
-+    avahi_cups_poll_free(DNSSDMaster);
-     DNSSDMaster = NULL;
-   }
- #  endif /* HAVE_DNSSD */
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/dirsvc.h cups-2.3.3/scheduler/dirsvc.h
---- cups-2.3.3.org/scheduler/dirsvc.h	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/dirsvc.h	2021-04-20 22:45:53.873155054 +0200
-@@ -45,7 +45,7 @@ VAR cups_array_t	*DNSSDPrinters	VALUE(NU
- VAR DNSServiceRef	DNSSDMaster	VALUE(NULL);
- 					/* Master DNS-SD service reference */
- #  else /* HAVE_AVAHI */
--VAR AvahiThreadedPoll	*DNSSDMaster	VALUE(NULL);
-+VAR AvahiCupsPoll	*DNSSDMaster	VALUE(NULL);
- 					/* Master polling interface for Avahi */
- VAR AvahiClient		*DNSSDClient	VALUE(NULL);
- 					/* Client information */
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/main.c cups-2.3.3/scheduler/main.c
---- cups-2.3.3.org/scheduler/main.c	2021-04-20 22:45:53.709821838 +0200
-+++ cups-2.3.3/scheduler/main.c	2021-04-20 22:45:53.873155054 +0200
-@@ -132,7 +132,10 @@ main(int  argc,				/* I - Number of comm
-   int			service_idle_exit = 0;
- 					/* Idle exit on select timeout? */
- #endif /* HAVE_ONDEMAND */
--
-+#ifdef HAVE_AVAHI
-+  cupsd_timeout_t	*tmo;		/* Next scheduled timed callback */
-+  long			tmo_delay;	/* Time before it must be called */
-+#endif /* HAVE_AVAHI */
- 
- #ifdef HAVE_GETEUID
-  /*
-@@ -600,6 +603,14 @@ main(int  argc,				/* I - Number of comm
- 
-   httpInitialize();
- 
-+#ifdef HAVE_AVAHI
-+ /*
-+  * Initialize timed callback structures.
-+  */
-+
-+  cupsdInitTimeouts();
-+#endif /* HAVE_AVAHI */
-+
-   cupsdStartServer();
- 
-  /*
-@@ -934,6 +945,16 @@ main(int  argc,				/* I - Number of comm
-     }
- #endif /* __APPLE__ */
- 
-+#ifdef HAVE_AVAHI
-+   /*
-+    * If a timed callback is due, run it.
-+    */
-+
-+    tmo = cupsdNextTimeout (&tmo_delay);
-+    if (tmo && tmo_delay == 0)
-+      cupsdRunTimeout (tmo);
-+#endif /* HAVE_AVAHI */
-+
- #ifndef __APPLE__
-    /*
-     * Update the network interfaces once a minute...
-@@ -1643,6 +1664,10 @@ select_timeout(int fds)			/* I - Number
-   cupsd_client_t	*con;		/* Client information */
-   cupsd_job_t		*job;		/* Job information */
-   const char		*why;		/* Debugging aid */
-+#ifdef HAVE_AVAHI
-+  cupsd_timeout_t	*tmo;		/* Timed callback */
-+  long			tmo_delay;	/* Seconds before calling it */
-+#endif /* HAVE_AVAHI */
- 
- 
-   cupsdLogMessage(CUPSD_LOG_DEBUG2, "select_timeout: JobHistoryUpdate=%ld",
-@@ -1688,6 +1713,19 @@ select_timeout(int fds)			/* I - Number
-   }
- #endif /* __APPLE__ */
- 
-+#ifdef HAVE_AVAHI
-+ /*
-+  * See if there are any scheduled timed callbacks to run.
-+  */
-+
-+  if ((tmo = cupsdNextTimeout(&tmo_delay)) != NULL &&
-+      (now + tmo_delay) < timeout)
-+  {
-+    timeout = tmo_delay;
-+    why = "run a timed callback";
-+  }
-+#endif /* HAVE_AVAHI */
-+
-  /*
-   * Check whether we are accepting new connections...
-   */
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/timeout.c cups-2.3.3/scheduler/timeout.c
---- cups-2.3.3.org/scheduler/timeout.c	1970-01-01 01:00:00.000000000 +0100
-+++ cups-2.3.3/scheduler/timeout.c	2021-04-20 22:45:53.873155054 +0200
-@@ -0,0 +1,235 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Timeout functions for the Common UNIX Printing System (CUPS).
-+ *
-+ *   Copyright (C) 2010, 2011 Red Hat, Inc.
-+ *   Authors:
-+ *     Tim Waugh <twaugh at redhat.com>
-+ *
-+ *   Redistribution and use in source and binary forms, with or without
-+ *   modification, are permitted provided that the following conditions
-+ *   are met:
-+ *
-+ *   Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ *
-+ *   Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ *
-+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ *   COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ *   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ *   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ *   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-+ *   OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Contents:
-+ *
-+ *   cupsdInitTimeouts()  - Initialise timeout structure.
-+ *   cupsdAddTimeout()    - Add a timed callback.
-+ *   cupsdNextTimeout()   - Find the next enabled timed callback.
-+ *   cupsdUpdateTimeout() - Adjust the time of a timed callback or disable it.
-+ *   cupsdRemoveTimeout() - Discard a timed callback.
-+ *   compare_timeouts()   - Compare timed callbacks for array sorting.
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI /* Applies to entire file... */
-+
-+/*
-+ * Include necessary headers...
-+ */
-+
-+#include "cupsd.h"
-+
-+#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
-+#  include <malloc.h>
-+#endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-common/timeval.h>
-+#endif /* HAVE_AVAHI */
-+
-+
-+struct _cupsd_timeout_s
-+{
-+  struct timeval when;
-+  int enabled;
-+  cupsd_timeoutfunc_t callback;
-+  void *data;
-+};
-+
-+/*
-+ * Local functions...
-+ */
-+
-+/*
-+ * 'compare_timeouts()' - Compare timed callbacks for array sorting.
-+ */
-+
-+static int
-+compare_addrs (void *p0, void *p1)
-+{
-+  if (p0 == p1)
-+    return (0);
-+  if (p0 < p1)
-+    return (-1);
-+  return (1);
-+}
-+
-+static int
-+compare_timeouts (cupsd_timeout_t *p0, cupsd_timeout_t *p1)
-+{
-+  int addrsdiff = compare_addrs (p0, p1);
-+  int tvdiff;
-+
-+  if (addrsdiff == 0)
-+    return (0);
-+
-+  if (!p0->enabled || !p1->enabled)
-+  {
-+    if (!p0->enabled && !p1->enabled)
-+      return (addrsdiff);
-+
-+    return (p0->enabled ? -1 : 1);
-+  }
-+
-+  tvdiff = avahi_timeval_compare (&p0->when, &p1->when);
-+  if (tvdiff != 0)
-+    return (tvdiff);
-+
-+  return (addrsdiff);
-+}
-+
-+
-+/*
-+ * 'cupsdInitTimeouts()' - Initialise timeout structures.
-+ */
-+
-+void
-+cupsdInitTimeouts(void)
-+{
-+  Timeouts = cupsArrayNew ((cups_array_func_t)compare_timeouts, NULL);
-+}
-+
-+
-+/*
-+ * 'cupsdAddTimeout()' - Add a timed callback.
-+ */
-+
-+cupsd_timeout_t *				/* O - Timeout handle */
-+cupsdAddTimeout(const struct timeval *tv,	/* I - Absolute time */
-+		cupsd_timeoutfunc_t cb,		/* I - Callback function */
-+		void *data)			/* I - User data */
-+{
-+  cupsd_timeout_t *timeout;
-+
-+  timeout = malloc (sizeof(cupsd_timeout_t));
-+  if (timeout != NULL)
-+  {
-+    timeout->enabled = (tv != NULL);
-+    if (tv)
-+    {
-+      timeout->when.tv_sec = tv->tv_sec;
-+      timeout->when.tv_usec = tv->tv_usec;
-+    }
-+
-+    timeout->callback = cb;
-+    timeout->data = data;
-+    cupsArrayAdd (Timeouts, timeout);
-+  }
-+
-+  return timeout;
-+}
-+
-+
-+/*
-+ * 'cupsdNextTimeout()' - Find the next enabled timed callback.
-+ */
-+
-+cupsd_timeout_t *		/* O - Next enabled timeout or NULL */
-+cupsdNextTimeout(long *delay)	/* O - Seconds before scheduled */
-+{
-+  cupsd_timeout_t *first = cupsArrayFirst (Timeouts);
-+  struct timeval curtime;
-+
-+  if (first && !first->enabled)
-+    first = NULL;
-+
-+  if (first && delay)
-+  {
-+    gettimeofday (&curtime, NULL);
-+    if (avahi_timeval_compare (&curtime, &first->when) > 0)
-+    {
-+      *delay = 0;
-+    } else {
-+      *delay = 1 + first->when.tv_sec - curtime.tv_sec;
-+      if (first->when.tv_usec < curtime.tv_usec)
-+	(*delay)--;
-+    }
-+  }
-+
-+  return (first);
-+}
-+
-+
-+/*
-+ * 'cupsdRunTimeout()' - Run a timed callback.
-+ */
-+
-+void
-+cupsdRunTimeout(cupsd_timeout_t *timeout)	/* I - Timeout */
-+{
-+  if (!timeout)
-+    return;
-+  timeout->enabled = 0;
-+  if (!timeout->callback)
-+    return;
-+  timeout->callback (timeout, timeout->data);
-+}
-+
-+/*
-+ * 'cupsdUpdateTimeout()' - Adjust the time of a timed callback or disable it.
-+ */
-+
-+void
-+cupsdUpdateTimeout(cupsd_timeout_t *timeout,	/* I - Timeout */
-+		   const struct timeval *tv)	/* I - Absolute time or NULL */
-+{
-+  cupsArrayRemove (Timeouts, timeout);
-+  timeout->enabled = (tv != NULL);
-+  if (tv)
-+  {
-+    timeout->when.tv_sec = tv->tv_sec;
-+    timeout->when.tv_usec = tv->tv_usec;
-+  }
-+  cupsArrayAdd (Timeouts, timeout);
-+}
-+
-+
-+/*
-+ * 'cupsdRemoveTimeout()' - Discard a timed callback.
-+ */
-+
-+void
-+cupsdRemoveTimeout(cupsd_timeout_t *timeout)	/* I - Timeout */
-+{
-+  cupsArrayRemove (Timeouts, timeout);
-+  free (timeout);
-+}
-+
-+
-+#endif /* HAVE_AVAHI ... from top of file */
-+
-+/*
-+ * End of "$Id$".
-+ */
diff --git a/cups-certs_FHS.patch b/cups-certs_FHS.patch
index d00d586..0dad6f7 100644
--- a/cups-certs_FHS.patch
+++ b/cups-certs_FHS.patch
@@ -2,9 +2,9 @@ diff -urNp -x '*.orig' cups-2.3.3.org/config-scripts/cups-directories.m4 cups-2.
 --- cups-2.3.3.org/config-scripts/cups-directories.m4	2020-04-27 20:04:29.000000000 +0200
 +++ cups-2.3.3/config-scripts/cups-directories.m4	2021-04-20 22:45:49.526491490 +0200
 @@ -295,5 +295,12 @@ AC_ARG_WITH(rundir, [  --with-rundir
- 			CUPS_STATEDIR="$localstatedir/run/cups"
- 			;;
- 	esac])
+ 	CUPS_STATEDIR="$localstatedir/run/cups"
+     ])
+ ])
 +AC_ARG_WITH(logdir, [  --with-statedir           set path for certs state],statedir="$withval",statedir="")
 +
 +if test x$logdir = x; then
@@ -12,17 +12,17 @@ diff -urNp -x '*.orig' cups-2.3.3.org/config-scripts/cups-directories.m4 cups-2.
 +else
 +		CUPS_STATEDIR="$statedir"
 +fi
- AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR")
- AC_SUBST(CUPS_STATEDIR)
+ AC_DEFINE_UNQUOTED([CUPS_STATEDIR], ["$CUPS_STATEDIR"], [Location of transient state files.])
+ AC_SUBST([CUPS_STATEDIR])
 diff -urNp -x '*.orig' cups-2.3.3.org/config-scripts/cups-network.m4 cups-2.3.3/config-scripts/cups-network.m4
 --- cups-2.3.3.org/config-scripts/cups-network.m4	2020-04-27 20:04:29.000000000 +0200
 +++ cups-2.3.3/config-scripts/cups-network.m4	2021-04-20 22:45:49.526491490 +0200
 @@ -48,7 +48,7 @@ if test x$enable_domainsocket != xno -a
- 				;;
- 			*)
- 				# All others use FHS standard...
--				CUPS_DEFAULT_DOMAINSOCKET="$CUPS_STATEDIR/cups.sock"
-+				CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cups/cups.sock"
- 				;;
- 		esac
- 	else
+ 	    CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd"
+ 	], [*], [
+ 	    # All others use FHS standard...
+-	    CUPS_DEFAULT_DOMAINSOCKET="$CUPS_STATEDIR/cups.sock"
++	    CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cups/cups.sock"
+ 	])
+     ], [
+ 	CUPS_DEFAULT_DOMAINSOCKET="$default_domainsocket"
diff --git a/cups-logrotate.patch b/cups-logrotate.patch
deleted file mode 100644
index 6b8eb8c..0000000
--- a/cups-logrotate.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-diff -up cups-2.1b1/scheduler/log.c.logrotate cups-2.1b1/scheduler/log.c
---- cups-2.1b1/scheduler/log.c.logrotate	2015-06-04 20:00:31.000000000 +0200
-+++ cups-2.1b1/scheduler/log.c	2015-06-29 13:25:09.623350218 +0200
-@@ -26,6 +26,9 @@
- #  include <systemd/sd-journal.h>
- #endif /* HAVE_ASL_H */
- #include <syslog.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <unistd.h>
- 
- 
- /*
-@@ -135,12 +138,10 @@ cupsdCheckLogFile(cups_file_t **lf,	/* I
-   }
- 
-  /*
--  * Format the filename as needed...
-+  * Format the filename...
-   */
- 
--  if (!*lf ||
--      (strncmp(logname, "/dev/", 5) && cupsFileTell(*lf) > MaxLogSize &&
--       MaxLogSize > 0))
-+  if (strncmp(logname, "/dev/", 5))
-   {
-    /*
-     * Handle format strings...
-@@ -254,6 +255,34 @@ cupsdCheckLogFile(cups_file_t **lf,	/* I
-      /*
-       * Change ownership and permissions of non-device logs...
-       */
-+
-+      fchown(cupsFileNumber(*lf), RunUser, Group);
-+      fchmod(cupsFileNumber(*lf), LogFilePerm);
-+    }
-+  }
-+
-+ /*
-+  * Has someone else (i.e. logrotate) already rotated the log for us?
-+  */
-+  else if (strncmp(filename, "/dev/", 5))
-+  {
-+    struct stat st;
-+    if (stat(filename, &st) || st.st_size == 0)
-+    {
-+      /* File is either missing or has zero size. */
-+
-+      cupsFileClose(*lf);
-+      if ((*lf = cupsFileOpen(filename, "a")) == NULL)
-+      {
-+	syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
-+             strerror(errno));
-+
-+	return (0);
-+      }
-+
-+     /*
-+      * Change ownership and permissions of non-device logs...
-+      */
- 
-       fchown(cupsFileNumber(*lf), RunUser, Group);
-       fchmod(cupsFileNumber(*lf), LogFilePerm);
diff --git a/cups-lspp.patch b/cups-lspp.patch
index 7c094d2..cfa9f96 100644
--- a/cups-lspp.patch
+++ b/cups-lspp.patch
@@ -1,21 +1,23 @@
-diff -up cups-2.3.0/config.h.in.lspp cups-2.3.0/config.h.in
---- cups-2.3.0/config.h.in.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/config.h.in	2019-10-07 12:24:43.058597468 +0200
-@@ -684,4 +684,11 @@ static __inline int _cups_abs(int i) { r
- #  endif /* __GNUC__ || __STDC_VERSION__ */
- #endif /* !HAVE_ABS && !abs */
+diff -up cups-2.4.8/config.h.in.lspp cups-2.4.8/config.h.in
+--- cups-2.4.8/config.h.in.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/config.h.in	2024-05-14 13:15:22.457678901 +0200
+@@ -685,6 +685,13 @@ static __inline int _cups_abs(int i) { r
  
-+/*
+ 
+ /*
 + * Are we trying to meet LSPP requirements?
 + */
 +
 +#undef WITH_LSPP
 +
 +
- #endif /* !_CUPS_CONFIG_H_ */
-diff -up cups-2.3.0/config-scripts/cups-lspp.m4.lspp cups-2.3.0/config-scripts/cups-lspp.m4
---- cups-2.3.0/config-scripts/cups-lspp.m4.lspp	2019-10-07 12:24:43.058597468 +0200
-+++ cups-2.3.0/config-scripts/cups-lspp.m4	2019-10-07 12:24:43.058597468 +0200
++/*
+  * Building as a snap (snapcraft.io)?
+  */
+ 
+diff -up cups-2.4.8/config-scripts/cups-lspp.m4.lspp cups-2.4.8/config-scripts/cups-lspp.m4
+--- cups-2.4.8/config-scripts/cups-lspp.m4.lspp	2024-05-14 13:15:22.457678901 +0200
++++ cups-2.4.8/config-scripts/cups-lspp.m4	2024-05-14 13:15:22.457678901 +0200
 @@ -0,0 +1,36 @@
 +dnl
 +dnl   LSPP code for the Common UNIX Printing System (CUPS).
@@ -53,22 +55,22 @@ diff -up cups-2.3.0/config-scripts/cups-lspp.m4.lspp cups-2.3.0/config-scripts/c
 +            ;;
 +    esac
 +fi
-diff -up cups-2.3.0/configure.ac.lspp cups-2.3.0/configure.ac
---- cups-2.3.0/configure.ac.lspp	2019-10-07 12:24:43.058597468 +0200
-+++ cups-2.3.0/configure.ac	2019-10-07 12:39:20.122546282 +0200
-@@ -34,6 +34,8 @@ sinclude(config-scripts/cups-dnssd.m4)
+diff -up cups-2.4.8/configure.ac.lspp cups-2.4.8/configure.ac
+--- cups-2.4.8/configure.ac.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/configure.ac	2024-05-14 13:15:22.457678901 +0200
+@@ -40,6 +40,8 @@ sinclude(config-scripts/cups-container.m
  sinclude(config-scripts/cups-startup.m4)
  sinclude(config-scripts/cups-defaults.m4)
  
 +sinclude(config-scripts/cups-lspp.m4)
 +
+ dnl See what languages are available and make sure we generate the localization
+ dnl files as needed...
  INSTALL_LANGUAGES=""
- UNINSTALL_LANGUAGES=""
- LANGFILES=""
-diff -up cups-2.3.0/filter/common.c.lspp cups-2.3.0/filter/common.c
---- cups-2.3.0/filter/common.c.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/filter/common.c	2019-10-07 12:24:43.059597461 +0200
-@@ -11,6 +11,12 @@
+diff -up cups-2.4.8/filter/common.c.lspp cups-2.4.8/filter/common.c
+--- cups-2.4.8/filter/common.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/filter/common.c	2024-05-14 13:15:22.457678901 +0200
+@@ -12,6 +12,12 @@
   * Include necessary headers...
   */
  
@@ -81,7 +83,7 @@ diff -up cups-2.3.0/filter/common.c.lspp cups-2.3.0/filter/common.c
  #include "common.h"
  #include <locale.h>
  
-@@ -293,6 +299,18 @@ WriteLabelProlog(const char *label,	/* I
+@@ -294,6 +300,18 @@ WriteLabelProlog(const char *label,	/* I
  {
    const char	*classification;	/* CLASSIFICATION environment variable */
    const char	*ptr;			/* Temporary string pointer */
@@ -100,7 +102,7 @@ diff -up cups-2.3.0/filter/common.c.lspp cups-2.3.0/filter/common.c
  
  
   /*
-@@ -315,6 +333,124 @@ WriteLabelProlog(const char *label,	/* I
+@@ -316,6 +334,124 @@ WriteLabelProlog(const char *label,	/* I
      return;
    }
  
@@ -225,7 +227,7 @@ diff -up cups-2.3.0/filter/common.c.lspp cups-2.3.0/filter/common.c
   /*
    * Set the classification + page label string...
    */
-@@ -395,7 +531,10 @@ WriteLabelProlog(const char *label,	/* I
+@@ -396,7 +532,10 @@ WriteLabelProlog(const char *label,	/* I
    printf("  %.0f moveto ESPpl show\n", top - 14.0);
    puts("pop");
    puts("}bind put");
@@ -236,10 +238,10 @@ diff -up cups-2.3.0/filter/common.c.lspp cups-2.3.0/filter/common.c
  
  
  /*
-diff -up cups-2.3.0/filter/pstops.c.lspp cups-2.3.0/filter/pstops.c
---- cups-2.3.0/filter/pstops.c.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/filter/pstops.c	2019-10-07 12:24:43.059597461 +0200
-@@ -3170,6 +3170,18 @@ write_label_prolog(pstops_doc_t *doc,	/*
+diff -up cups-2.4.8/filter/pstops.c.lspp cups-2.4.8/filter/pstops.c
+--- cups-2.4.8/filter/pstops.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/filter/pstops.c	2024-05-14 13:15:22.458678907 +0200
+@@ -3171,6 +3171,18 @@ write_label_prolog(pstops_doc_t *doc,	/*
  {
    const char	*classification;	/* CLASSIFICATION environment variable */
    const char	*ptr;			/* Temporary string pointer */
@@ -258,7 +260,7 @@ diff -up cups-2.3.0/filter/pstops.c.lspp cups-2.3.0/filter/pstops.c
  
  
   /*
-@@ -3192,6 +3204,124 @@ write_label_prolog(pstops_doc_t *doc,	/*
+@@ -3193,6 +3205,124 @@ write_label_prolog(pstops_doc_t *doc,	/*
      return;
    }
  
@@ -383,7 +385,7 @@ diff -up cups-2.3.0/filter/pstops.c.lspp cups-2.3.0/filter/pstops.c
   /*
    * Set the classification + page label string...
    */
-@@ -3270,7 +3400,10 @@ write_label_prolog(pstops_doc_t *doc,	/*
+@@ -3271,7 +3401,10 @@ write_label_prolog(pstops_doc_t *doc,	/*
    doc_printf(doc, "  %.0f moveto ESPpl show\n", top - 14.0);
    doc_puts(doc, "pop\n");
    doc_puts(doc, "}bind put\n");
@@ -394,22 +396,10 @@ diff -up cups-2.3.0/filter/pstops.c.lspp cups-2.3.0/filter/pstops.c
  
  
  /*
-diff -up cups-2.3.0/Makedefs.in.lspp cups-2.3.0/Makedefs.in
---- cups-2.3.0/Makedefs.in.lspp	2019-10-07 12:24:43.059597461 +0200
-+++ cups-2.3.0/Makedefs.in	2019-10-07 12:37:19.200565805 +0200
-@@ -174,7 +174,7 @@ IPPFIND_MAN	=	@IPPFIND_MAN@
- LDFLAGS		=	@LDFLAGS@
- LINKCUPS	=	@LINKCUPS@
- LINKCUPSSTATIC	=	../cups/$(LIBCUPSSTATIC) $(LIBS)
--LIBS		=	$(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ) $(COMMONLIBS)
-+LIBS		=	$(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@
- ONDEMANDFLAGS	=	@ONDEMANDFLAGS@
- ONDEMANDLIBS	=	@ONDEMANDLIBS@
- OPTIM		=	@OPTIM@
-diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
---- cups-2.3.0/scheduler/client.c.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/client.c	2019-10-07 12:33:10.459693580 +0200
-@@ -19,12 +19,20 @@
+diff -up cups-2.4.8/scheduler/client.c.lspp cups-2.4.8/scheduler/client.c
+--- cups-2.4.8/scheduler/client.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/client.c	2024-05-14 13:15:22.458678907 +0200
+@@ -20,12 +20,20 @@
  #define _HTTP_NO_PRIVATE
  #include "cupsd.h"
  
@@ -430,7 +420,7 @@ diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
  
  
  /*
-@@ -265,6 +273,59 @@ cupsdAcceptClient(cupsd_listener_t *lis)
+@@ -264,6 +272,59 @@ cupsdAcceptClient(cupsd_listener_t *lis)
    }
  #endif /* HAVE_TCPD_H */
  
@@ -490,7 +480,7 @@ diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
  #ifdef AF_LOCAL
    if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
    {
-@@ -558,6 +619,13 @@ cupsdReadClient(cupsd_client_t *con)	/*
+@@ -565,6 +626,13 @@ cupsdReadClient(cupsd_client_t *con)	/*
    struct stat		filestats;	/* File information */
    mime_type_t		*type;		/* MIME type of file */
    static unsigned	request_id = 0;	/* Request ID for temp files */
@@ -504,7 +494,7 @@ diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
  
  
    status = HTTP_STATUS_CONTINUE;
-@@ -1679,6 +1747,73 @@ cupsdReadClient(cupsd_client_t *con)	/*
+@@ -1712,6 +1780,73 @@ cupsdReadClient(cupsd_client_t *con)	/*
              fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
  	  }
  
@@ -578,7 +568,7 @@ diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
  	  if (httpGetState(con->http) != HTTP_STATE_POST_SEND)
  	  {
  	    if (!httpWait(con->http, 0))
-@@ -3174,6 +3309,49 @@ is_path_absolute(const char *path)	/* I
+@@ -3208,6 +3343,49 @@ is_path_absolute(const char *path)	/* I
    return (1);
  }
  
@@ -628,10 +618,10 @@ diff -up cups-2.3.0/scheduler/client.c.lspp cups-2.3.0/scheduler/client.c
  
  /*
   * 'pipe_command()' - Pipe the output of a command to the remote client.
-diff -up cups-2.3.0/scheduler/client.h.lspp cups-2.3.0/scheduler/client.h
---- cups-2.3.0/scheduler/client.h.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/client.h	2019-10-07 12:24:43.113597079 +0200
-@@ -13,6 +13,13 @@
+diff -up cups-2.4.8/scheduler/client.h.lspp cups-2.4.8/scheduler/client.h
+--- cups-2.4.8/scheduler/client.h.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/client.h	2024-05-14 13:15:22.458678907 +0200
+@@ -14,6 +14,13 @@
  #endif /* HAVE_AUTHORIZATION_H */
  
  
@@ -645,7 +635,7 @@ diff -up cups-2.3.0/scheduler/client.h.lspp cups-2.3.0/scheduler/client.h
  /*
   * HTTP client structure...
   */
-@@ -63,6 +70,10 @@ struct cupsd_client_s
+@@ -66,6 +73,10 @@ struct cupsd_client_s
  #ifdef HAVE_AUTHORIZATION_H
    AuthorizationRef	authref;	/* Authorization ref */
  #endif /* HAVE_AUTHORIZATION_H */
@@ -656,20 +646,21 @@ diff -up cups-2.3.0/scheduler/client.h.lspp cups-2.3.0/scheduler/client.h
  };
  
  #define HTTP(con) ((con)->http)
-@@ -136,6 +147,9 @@ extern void	cupsdStartListening(void);
- extern void	cupsdStopListening(void);
+@@ -138,6 +149,10 @@ extern void	cupsdStopListening(void);
  extern void	cupsdUpdateCGI(void);
  extern void	cupsdWriteClient(cupsd_client_t *con);
+ 
 +#ifdef WITH_LSPP
 +extern uid_t	client_pid_to_auid(pid_t clipid);
 +#endif /* WITH_LSPP */
- 
- #ifdef HAVE_SSL
++
+ #ifdef HAVE_TLS
  extern int	cupsdEndTLS(cupsd_client_t *con);
-diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
---- cups-2.3.0/scheduler/conf.c.lspp	2019-10-07 12:24:43.049597531 +0200
-+++ cups-2.3.0/scheduler/conf.c	2019-10-07 12:24:43.113597079 +0200
-@@ -37,6 +37,9 @@
+ extern int	cupsdStartTLS(cupsd_client_t *con);
+diff -up cups-2.4.8/scheduler/conf.c.lspp cups-2.4.8/scheduler/conf.c
+--- cups-2.4.8/scheduler/conf.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/conf.c	2024-05-14 13:15:22.459678912 +0200
+@@ -38,6 +38,9 @@
  #  define INADDR_NONE	0xffffffff
  #endif /* !INADDR_NONE */
  
@@ -679,7 +670,7 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
  
  /*
   * Configuration variable structure...
-@@ -131,6 +134,10 @@ static const cupsd_var_t	cupsd_vars[] =
+@@ -129,6 +132,10 @@ static const cupsd_var_t	cupsd_vars[] =
    { "ServerName",		&ServerName,		CUPSD_VARTYPE_STRING },
    { "StrictConformance",	&StrictConformance,	CUPSD_VARTYPE_BOOLEAN },
    { "Timeout",			&Timeout,		CUPSD_VARTYPE_TIME },
@@ -690,7 +681,7 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
    { "WebInterface",		&WebInterface,		CUPSD_VARTYPE_BOOLEAN }
  };
  static const cupsd_var_t	cupsfiles_vars[] =
-@@ -544,6 +551,9 @@ cupsdReadConfiguration(void)
+@@ -539,6 +546,9 @@ cupsdReadConfiguration(void)
    const char	*tmpdir;		/* TMPDIR environment variable */
    struct stat	tmpinfo;		/* Temporary directory info */
    cupsd_policy_t *p;			/* Policy */
@@ -700,7 +691,7 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
  
  
   /*
-@@ -864,6 +874,25 @@ cupsdReadConfiguration(void)
+@@ -854,6 +864,25 @@ cupsdReadConfiguration(void)
  
    RunUser = getuid();
  
@@ -726,7 +717,7 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
    cupsdLogMessage(CUPSD_LOG_INFO, "Remote access is %s.",
                    RemotePort ? "enabled" : "disabled");
  
-@@ -1275,7 +1304,19 @@ cupsdReadConfiguration(void)
+@@ -1282,7 +1311,19 @@ cupsdReadConfiguration(void)
      cupsdClearString(&Classification);
  
    if (Classification)
@@ -746,7 +737,7 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
  
   /*
    * Check the MaxClients setting, and then allocate memory for it...
-@@ -3830,6 +3871,18 @@ read_location(cups_file_t *fp,		/* I - C
+@@ -3881,6 +3922,18 @@ read_location(cups_file_t *fp,		/* I - C
    return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum);
  }
  
@@ -765,12 +756,12 @@ diff -up cups-2.3.0/scheduler/conf.c.lspp cups-2.3.0/scheduler/conf.c
  
  /*
   * 'read_policy()' - Read a <Policy name> definition.
-diff -up cups-2.3.0/scheduler/conf.h.lspp cups-2.3.0/scheduler/conf.h
---- cups-2.3.0/scheduler/conf.h.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/conf.h	2019-10-07 12:24:43.113597079 +0200
-@@ -243,6 +243,13 @@ VAR char		*ServerKeychain		VALUE(NULL);
+diff -up cups-2.4.8/scheduler/conf.h.lspp cups-2.4.8/scheduler/conf.h
+--- cups-2.4.8/scheduler/conf.h.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/conf.h	2024-05-14 13:15:22.459678912 +0200
+@@ -242,6 +242,13 @@ VAR char		*ServerKeychain		VALUE(NULL);
  					/* Keychain holding cert + key */
- #endif /* HAVE_SSL */
+ #endif /* HAVE_TLS */
  
 +#ifdef WITH_LSPP
 +VAR int			AuditLog		VALUE(-1),
@@ -782,7 +773,7 @@ diff -up cups-2.3.0/scheduler/conf.h.lspp cups-2.3.0/scheduler/conf.h
  #ifdef HAVE_ONDEMAND
  VAR int			IdleExitTimeout		VALUE(60);
  					/* Time after which an idle cupsd will exit */
-@@ -261,6 +268,9 @@ VAR int			HaveServerCreds		VALUE(0);
+@@ -260,6 +267,9 @@ VAR int			HaveServerCreds		VALUE(0);
  VAR gss_cred_id_t	ServerCreds;	/* Server's GSS credentials */
  #endif /* HAVE_GSSAPI */
  
@@ -792,10 +783,10 @@ diff -up cups-2.3.0/scheduler/conf.h.lspp cups-2.3.0/scheduler/conf.h
  
  /*
   * Prototypes...
-diff -up cups-2.3.0/scheduler/cupsd.h.lspp cups-2.3.0/scheduler/cupsd.h
---- cups-2.3.0/scheduler/cupsd.h.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/cupsd.h	2019-10-07 12:31:38.458480578 +0200
-@@ -8,6 +8,8 @@
+diff -up cups-2.4.8/scheduler/cupsd.h.lspp cups-2.4.8/scheduler/cupsd.h
+--- cups-2.4.8/scheduler/cupsd.h.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/cupsd.h	2024-05-14 13:15:22.459678912 +0200
+@@ -9,6 +9,8 @@
   * information.
   */
  
@@ -804,7 +795,7 @@ diff -up cups-2.3.0/scheduler/cupsd.h.lspp cups-2.3.0/scheduler/cupsd.h
  
  /*
   * Include necessary headers.
-@@ -33,6 +35,14 @@
+@@ -34,6 +36,14 @@
  #  include <unistd.h>
  #endif /* _WIN32 */
  
@@ -819,10 +810,10 @@ diff -up cups-2.3.0/scheduler/cupsd.h.lspp cups-2.3.0/scheduler/cupsd.h
  #include "mime.h"
  
  #if defined(HAVE_CDSASSL)
-diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
---- cups-2.3.0/scheduler/ipp.c.lspp	2019-10-07 12:24:43.016597764 +0200
-+++ cups-2.3.0/scheduler/ipp.c	2019-10-07 12:31:01.243798920 +0200
-@@ -11,6 +11,9 @@
+diff -up cups-2.4.8/scheduler/ipp.c.lspp cups-2.4.8/scheduler/ipp.c
+--- cups-2.4.8/scheduler/ipp.c.lspp	2024-05-14 13:15:22.447678849 +0200
++++ cups-2.4.8/scheduler/ipp.c	2024-05-14 13:15:22.460678917 +0200
+@@ -12,6 +12,9 @@
   * information.
   */
  
@@ -832,7 +823,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  /*
   * Include necessary headers...
   */
-@@ -27,6 +30,14 @@ extern int mbr_group_name_to_uuid(const
+@@ -28,6 +31,14 @@ extern int mbr_group_name_to_uuid(const
  extern int mbr_check_membership_by_id(uuid_t user, gid_t group, int* ismember);
  #endif /* __APPLE__ */
  
@@ -847,7 +838,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
  /*
   * Local functions...
-@@ -51,6 +62,9 @@ static void	cancel_all_jobs(cupsd_client
+@@ -52,6 +63,9 @@ static void	cancel_all_jobs(cupsd_client
  static void	cancel_job(cupsd_client_t *con, ipp_attribute_t *uri);
  static void	cancel_subscription(cupsd_client_t *con, int id);
  static int	check_rss_recipient(const char *recipient);
@@ -857,7 +848,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  static int	check_quotas(cupsd_client_t *con, cupsd_printer_t *p);
  static void	close_job(cupsd_client_t *con, ipp_attribute_t *uri);
  static void	copy_attrs(ipp_t *to, ipp_t *from, cups_array_t *ra,
-@@ -1240,6 +1254,21 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1188,6 +1202,21 @@ add_job(cupsd_client_t  *con,		/* I - Cl
      "time-at-creation",
      "time-at-processing"
    };
@@ -879,7 +870,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_job(%p[%d], %p(%s), %p(%s/%s))",
-@@ -1568,6 +1597,106 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1516,6 +1545,106 @@ add_job(cupsd_client_t  *con,		/* I - Cl
  
    attr = ippFindAttribute(con->request, "requesting-user-name", IPP_TAG_NAME);
  
@@ -986,7 +977,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
    if ((job = cupsdAddJob(priority, printer->name)) == NULL)
    {
      send_ipp_status(con, IPP_INTERNAL_ERROR,
-@@ -1576,6 +1705,32 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1524,6 +1653,32 @@ add_job(cupsd_client_t  *con,		/* I - Cl
      return (NULL);
    }
  
@@ -1019,7 +1010,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
    job->dtype   = printer->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE);
    job->attrs   = con->request;
    job->dirty   = 1;
-@@ -1763,6 +1918,29 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1711,6 +1866,29 @@ add_job(cupsd_client_t  *con,		/* I - Cl
        ippSetString(job->attrs, &attr, 0, printer->job_sheets[0]);
        ippSetString(job->attrs, &attr, 1, printer->job_sheets[1]);
      }
@@ -1049,7 +1040,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
      job->job_sheets = attr;
  
-@@ -1793,6 +1971,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1741,6 +1919,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
  	                		     "job-sheets=\"%s,none\", "
  					     "job-originating-user-name=\"%s\"",
  	              Classification, job->username);
@@ -1059,7 +1050,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  	}
  	else if (attr->num_values == 2 &&
  	         strcmp(attr->values[0].string.text,
-@@ -1811,6 +1992,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1759,6 +1940,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
  					     "job-originating-user-name=\"%s\"",
  		      attr->values[0].string.text,
  		      attr->values[1].string.text, job->username);
@@ -1069,7 +1060,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  	}
  	else if (strcmp(attr->values[0].string.text, Classification) &&
  	         strcmp(attr->values[0].string.text, "none") &&
-@@ -1831,6 +2015,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1779,6 +1963,9 @@ add_job(cupsd_client_t  *con,		/* I - Cl
  			"job-originating-user-name=\"%s\"",
  			attr->values[0].string.text,
  			attr->values[1].string.text, job->username);
@@ -1079,7 +1070,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
          }
        }
        else if (strcmp(attr->values[0].string.text, Classification) &&
-@@ -1871,8 +2058,52 @@ add_job(cupsd_client_t  *con,		/* I - Cl
+@@ -1819,8 +2006,52 @@ add_job(cupsd_client_t  *con,		/* I - Cl
  		      "job-sheets=\"%s\", "
  		      "job-originating-user-name=\"%s\"",
  		      Classification, job->username);
@@ -1132,7 +1123,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
     /*
      * See if we need to add the starting sheet...
-@@ -3648,6 +3879,128 @@ check_rss_recipient(
+@@ -3647,6 +3878,128 @@ check_rss_recipient(
  }
  
  
@@ -1261,7 +1252,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  /*
   * 'check_quotas()' - Check quotas for a printer and user.
   */
-@@ -4103,6 +4456,15 @@ copy_banner(cupsd_client_t *con,	/* I -
+@@ -4102,6 +4455,15 @@ copy_banner(cupsd_client_t *con,	/* I -
    char		attrname[255],		/* Name of attribute */
  		*s;			/* Pointer into name */
    ipp_attribute_t *attr;		/* Attribute */
@@ -1277,7 +1268,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-@@ -4138,6 +4500,85 @@ copy_banner(cupsd_client_t *con,	/* I -
+@@ -4137,6 +4499,85 @@ copy_banner(cupsd_client_t *con,	/* I -
  
    fchmod(cupsFileNumber(out), 0640);
    fchown(cupsFileNumber(out), RunUser, Group);
@@ -1363,7 +1354,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
  
   /*
    * Try the localized banner file under the subdirectory...
-@@ -4232,6 +4673,24 @@ copy_banner(cupsd_client_t *con,	/* I -
+@@ -4231,6 +4672,24 @@ copy_banner(cupsd_client_t *con,	/* I -
        else
          s = attrname;
  
@@ -1388,7 +1379,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
        if (!strcmp(s, "printer-name"))
        {
          cupsFilePuts(out, job->dest);
-@@ -6439,6 +6898,22 @@ get_job_attrs(cupsd_client_t  *con,	/* I
+@@ -6681,6 +7140,22 @@ get_job_attrs(cupsd_client_t  *con,	/* I
  
    exclude = cupsdGetPrivateAttrs(policy, con, printer, job->username);
  
@@ -1411,7 +1402,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
   /*
    * Copy attributes...
    */
-@@ -6836,6 +7311,11 @@ get_jobs(cupsd_client_t  *con,		/* I - C
+@@ -7079,6 +7554,11 @@ get_jobs(cupsd_client_t  *con,		/* I - C
        if (username[0] && _cups_strcasecmp(username, job->username))
  	continue;
  
@@ -1423,7 +1414,7 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
        if (count > 0)
  	ippAddSeparator(con->response);
  
-@@ -11445,6 +11925,11 @@ validate_user(cupsd_job_t    *job,	/* I
+@@ -11810,6 +12290,11 @@ validate_user(cupsd_job_t    *job,	/* I
  
    strlcpy(username, get_username(con), userlen);
  
@@ -1435,10 +1426,10 @@ diff -up cups-2.3.0/scheduler/ipp.c.lspp cups-2.3.0/scheduler/ipp.c
   /*
    * Check the username against the owner...
    */
-diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
---- cups-2.3.0/scheduler/job.c.lspp	2019-10-07 12:24:43.024597707 +0200
-+++ cups-2.3.0/scheduler/job.c	2019-10-07 12:30:13.092210820 +0200
-@@ -8,6 +8,9 @@
+diff -up cups-2.4.8/scheduler/job.c.lspp cups-2.4.8/scheduler/job.c
+--- cups-2.4.8/scheduler/job.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/job.c	2024-05-14 13:16:41.100084985 +0200
+@@ -9,6 +9,9 @@
   * information.
   */
  
@@ -1448,7 +1439,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
  /*
   * Include necessary headers...
   */
-@@ -23,6 +26,14 @@
+@@ -24,6 +27,14 @@
  #  endif /* HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H */
  #endif /* __APPLE__ */
  
@@ -1464,9 +1455,9 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
  /*
   * Design Notes for Job Management
 @@ -544,6 +555,14 @@ cupsdContinueJob(cupsd_job_t *job)	/* I
+ 					/* PRINTER env variable */
+ 			*printer_state_reasons = NULL;
  					/* PRINTER_STATE_REASONS env var */
- 			rip_max_cache[255];
- 					/* RIP_MAX_CACHE env variable */
 +#ifdef WITH_LSPP
 +  char			*audit_message = NULL;	/* Audit message string */
 +  context_t		jobcon;		/* SELinux context of the job */
@@ -1478,7 +1469,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-@@ -1080,6 +1099,67 @@ cupsdContinueJob(cupsd_job_t *job)	/* I
+@@ -1070,6 +1089,67 @@ cupsdContinueJob(cupsd_job_t *job)	/* I
    if (final_content_type[0])
      envp[envc ++] = final_content_type;
  
@@ -1546,8 +1537,8 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
    if (Classification && !banner_page)
    {
      if ((attr = ippFindAttribute(job->attrs, "job-sheets",
-@@ -1858,6 +1938,22 @@ cupsdLoadJob(cupsd_job_t *job)		/* I - J
-       ippSetString(job->attrs, &job->reasons, 0, "none");
+@@ -1856,6 +1936,22 @@ cupsdLoadJob(cupsd_job_t *job)		/* I - J
+     ippSetString(job->attrs, &job->reasons, 0, "job-completed-successfully");
    }
  
 +#ifdef WITH_LSPP
@@ -1569,7 +1560,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
    job->impressions = ippFindAttribute(job->attrs, "job-impressions-completed", IPP_TAG_INTEGER);
    job->sheets      = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER);
    job->job_sheets  = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
-@@ -2273,6 +2369,14 @@ cupsdSaveJob(cupsd_job_t *job)		/* I - J
+@@ -2268,6 +2364,14 @@ cupsdSaveJob(cupsd_job_t *job)		/* I - J
  {
    char		filename[1024];		/* Job control filename */
    cups_file_t	*fp;			/* Job file */
@@ -1584,7 +1575,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p",
-@@ -2295,6 +2399,78 @@ cupsdSaveJob(cupsd_job_t *job)		/* I - J
+@@ -2290,6 +2394,78 @@ cupsdSaveJob(cupsd_job_t *job)		/* I - J
  
    fchown(cupsFileNumber(fp), RunUser, Group);
  
@@ -1663,7 +1654,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
    job->attrs->state = IPP_IDLE;
  
    if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL,
-@@ -3995,6 +4171,19 @@ get_options(cupsd_job_t *job,		/* I - Jo
+@@ -4020,6 +4196,19 @@ get_options(cupsd_job_t *job,		/* I - Jo
  	  banner_page)
          continue;
  
@@ -1683,7 +1674,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
       /*
        * Otherwise add them to the list...
        */
-@@ -4805,6 +4994,18 @@ start_job(cupsd_job_t     *job,		/* I -
+@@ -4834,6 +5023,18 @@ start_job(cupsd_job_t     *job,		/* I -
            cupsd_printer_t *printer)	/* I - Printer to print job */
  {
    const char	*filename;		/* Support filename */
@@ -1702,7 +1693,7 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
    ipp_attribute_t *cancel_after = ippFindAttribute(job->attrs,
  						   "job-cancel-after",
  						   IPP_TAG_INTEGER);
-@@ -4993,6 +5194,113 @@ start_job(cupsd_job_t     *job,		/* I -
+@@ -5022,6 +5223,113 @@ start_job(cupsd_job_t     *job,		/* I -
    fcntl(job->side_pipes[1], F_SETFD,
  	fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC);
  
@@ -1816,10 +1807,10 @@ diff -up cups-2.3.0/scheduler/job.c.lspp cups-2.3.0/scheduler/job.c
   /*
    * Now start the first file in the job...
    */
-diff -up cups-2.3.0/scheduler/job.h.lspp cups-2.3.0/scheduler/job.h
---- cups-2.3.0/scheduler/job.h.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/job.h	2019-10-07 12:29:54.364371023 +0200
-@@ -7,6 +7,13 @@
+diff -up cups-2.4.8/scheduler/job.h.lspp cups-2.4.8/scheduler/job.h
+--- cups-2.4.8/scheduler/job.h.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/job.h	2024-05-14 13:15:22.461678922 +0200
+@@ -8,6 +8,13 @@
   * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
   */
  
@@ -1833,7 +1824,7 @@ diff -up cups-2.3.0/scheduler/job.h.lspp cups-2.3.0/scheduler/job.h
  /*
   * Constants...
   */
-@@ -84,6 +91,10 @@ struct cupsd_job_s			/**** Job request *
+@@ -85,6 +92,10 @@ struct cupsd_job_s			/**** Job request *
    int			progress;	/* Printing progress */
    int			num_keywords;	/* Number of PPD keywords */
    cups_option_t		*keywords;	/* PPD keywords */
@@ -1844,10 +1835,10 @@ diff -up cups-2.3.0/scheduler/job.h.lspp cups-2.3.0/scheduler/job.h
  };
  
  typedef struct cupsd_joblog_s		/**** Job log message ****/
-diff -up cups-2.3.0/scheduler/main.c.lspp cups-2.3.0/scheduler/main.c
---- cups-2.3.0/scheduler/main.c.lspp	2019-10-07 12:24:43.037597616 +0200
-+++ cups-2.3.0/scheduler/main.c	2019-10-07 12:24:43.119597037 +0200
-@@ -57,6 +57,9 @@
+diff -up cups-2.4.8/scheduler/main.c.lspp cups-2.4.8/scheduler/main.c
+--- cups-2.4.8/scheduler/main.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/main.c	2024-05-14 13:15:22.461678922 +0200
+@@ -58,6 +58,9 @@
  #  include <sys/param.h>
  #endif /* HAVE_SYS_PARAM_H */
  
@@ -1857,7 +1848,7 @@ diff -up cups-2.3.0/scheduler/main.c.lspp cups-2.3.0/scheduler/main.c
  
  /*
   * Local functions...
-@@ -123,6 +126,9 @@ main(int  argc,				/* I - Number of comm
+@@ -124,6 +127,9 @@ main(int  argc,				/* I - Number of comm
  #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
    struct sigaction	action;		/* Actions for POSIX signals */
  #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
@@ -1867,7 +1858,7 @@ diff -up cups-2.3.0/scheduler/main.c.lspp cups-2.3.0/scheduler/main.c
  #ifdef __APPLE__
    int			use_sysman = 1;	/* Use system management functions? */
  #else
-@@ -495,6 +501,25 @@ main(int  argc,				/* I - Number of comm
+@@ -494,6 +500,25 @@ main(int  argc,				/* I - Number of comm
      exit(errno);
    }
  
@@ -1893,7 +1884,7 @@ diff -up cups-2.3.0/scheduler/main.c.lspp cups-2.3.0/scheduler/main.c
   /*
    * Let the system know we are busy while we bring up cupsd...
    */
-@@ -1201,6 +1226,11 @@ main(int  argc,				/* I - Number of comm
+@@ -1203,6 +1228,11 @@ main(int  argc,				/* I - Number of comm
  
    cupsdStopSelect();
  
@@ -1905,10 +1896,10 @@ diff -up cups-2.3.0/scheduler/main.c.lspp cups-2.3.0/scheduler/main.c
    return (!stop_scheduler);
  }
  
-diff -up cups-2.3.0/scheduler/printers.c.lspp cups-2.3.0/scheduler/printers.c
---- cups-2.3.0/scheduler/printers.c.lspp	2019-08-23 17:19:38.000000000 +0200
-+++ cups-2.3.0/scheduler/printers.c	2019-10-07 12:29:17.956658129 +0200
-@@ -8,6 +8,8 @@
+diff -up cups-2.4.8/scheduler/printers.c.lspp cups-2.4.8/scheduler/printers.c
+--- cups-2.4.8/scheduler/printers.c.lspp	2024-04-26 13:38:21.000000000 +0200
++++ cups-2.4.8/scheduler/printers.c	2024-05-14 13:15:22.462678928 +0200
+@@ -9,6 +9,8 @@
   * information.
   */
  
@@ -1917,7 +1908,7 @@ diff -up cups-2.3.0/scheduler/printers.c.lspp cups-2.3.0/scheduler/printers.c
  /*
   * Include necessary headers...
   */
-@@ -32,6 +34,10 @@
+@@ -33,6 +35,10 @@
  #  include <asl.h>
  #endif /* __APPLE__ */
  
@@ -1928,7 +1919,7 @@ diff -up cups-2.3.0/scheduler/printers.c.lspp cups-2.3.0/scheduler/printers.c
  
  /*
   * Local functions...
-@@ -2252,6 +2258,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
+@@ -2184,6 +2190,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
    ipp_attribute_t *attr;		/* Attribute data */
    char		*name,			/* Current user/group name */
  		*filter;		/* Current filter */
@@ -1942,7 +1933,7 @@ diff -up cups-2.3.0/scheduler/printers.c.lspp cups-2.3.0/scheduler/printers.c
  
  
   /*
-@@ -2378,6 +2391,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
+@@ -2309,6 +2322,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
        attr->values[1].string.text = _cupsStrAlloc(Classification ?
  	                                   Classification : p->job_sheets[1]);
      }
diff --git a/cups-no-polluted-krb5config.patch b/cups-no-polluted-krb5config.patch
index d038afa..48dea0e 100644
--- a/cups-no-polluted-krb5config.patch
+++ b/cups-no-polluted-krb5config.patch
@@ -1,15 +1,15 @@
 --- cups-1.5rc1/config-scripts/cups-gssapi.m4~	2011-05-12 07:21:56.000000000 +0200
 +++ cups-1.5rc1/config-scripts/cups-gssapi.m4	2011-06-15 21:40:54.182690659 +0200
 @@ -46,9 +46,9 @@
- 				;;
- 			*)
- 				# Other platforms just ask for GSSAPI
--				CFLAGS="`$KRB5CONFIG --cflags gssapi` $CFLAGS"
--				CPPFLAGS="`$KRB5CONFIG --cflags gssapi` $CPPFLAGS"
--				LIBGSSAPI="`$KRB5CONFIG --libs gssapi`"
-+				CFLAGS="`CFLAGS= LDFLAGS= $KRB5CONFIG --cflags gssapi` $CFLAGS"
-+				CPPFLAGS="`CFLAGS= LDFLAGS= $KRB5CONFIG --cflags gssapi` $CPPFLAGS"
-+				LIBGSSAPI="`CFLAGS= LDFLAGS= $KRB5CONFIG --libs gssapi`"
- 				;;
- 		esac
- 		AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available])
+ 	    AC_MSG_ERROR([--enable-gssapi specified but krb5-config cannot be found.])
+ 	], [
+ 	    AC_DEFINE([HAVE_GSSAPI], [1], [Is GSSAPI available?])
+-	    CFLAGS="$($KRB5CONFIG --cflags gssapi) $CFLAGS"
+-	    CPPFLAGS="$($KRB5CONFIG --cflags gssapi) $CPPFLAGS"
+-	    LIBGSSAPI="$($KRB5CONFIG --libs gssapi)"
++	    CFLAGS="$(CFLAGS= LDFLAGS= $KRB5CONFIG --cflags gssapi) $CFLAGS"
++	    CPPFLAGS="$(CFLAGS= LDFLAGS= $KRB5CONFIG --cflags gssapi) $CPPFLAGS"
++	    LIBGSSAPI="$(CFLAGS= LDFLAGS= $KRB5CONFIG --libs gssapi)"
+ 	])
+     ])
+ 
diff --git a/cups-nostrip.patch b/cups-nostrip.patch
index f62295f..d5028b7 100644
--- a/cups-nostrip.patch
+++ b/cups-nostrip.patch
@@ -1,12 +1,12 @@
 diff -urNp -x '*.orig' cups-2.3.3.org/config-scripts/cups-compiler.m4 cups-2.3.3/config-scripts/cups-compiler.m4
 --- cups-2.3.3.org/config-scripts/cups-compiler.m4	2020-04-27 20:04:29.000000000 +0200
 +++ cups-2.3.3/config-scripts/cups-compiler.m4	2021-04-20 22:45:49.129825106 +0200
-@@ -25,8 +25,6 @@ AC_ARG_ENABLE(unit_tests, [  --enable-un
+@@ -30,8 +30,6 @@
  dnl For debugging, keep symbols, otherwise strip them...
- if test x$enable_debug = xyes -a "x$OPTIM" = x; then
- 	OPTIM="-g"
--else
--	INSTALL_STRIP="-s"
- fi
+ AS_IF([test x$enable_debug = xyes -a "x$OPTIM" = x], [
+     OPTIM="-g"
+-], [
+-    INSTALL_STRIP="-s"
+ ])
  
  dnl Debug printfs can slow things down, so provide a separate option for that
diff --git a/cups-systemd-socket.patch b/cups-systemd-socket.patch
deleted file mode 100644
index 06fb6e1..0000000
--- a/cups-systemd-socket.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/main.c cups-2.3.3/scheduler/main.c
---- cups-2.3.3.org/scheduler/main.c	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/main.c	2021-04-20 22:45:51.479823429 +0200
-@@ -681,8 +681,16 @@ main(int  argc,				/* I - Number of comm
- 
- #ifdef HAVE_ONDEMAND
-   if (OnDemand)
-+  {
-     cupsdAddEvent(CUPSD_EVENT_SERVER_STARTED, NULL, NULL, "Scheduler started on demand.");
--  else
-+# ifdef HAVE_SYSTEMD
-+    sd_notifyf(0, "READY=1\n"
-+               "STATUS=Scheduler is running...\n"
-+               "MAINPID=%lu",
-+               (unsigned long) getpid());
-+# endif /* HAVE_SYSTEMD */
-+  } else
-+
- #endif /* HAVE_ONDEMAND */
-   if (fg)
-     cupsdAddEvent(CUPSD_EVENT_SERVER_STARTED, NULL, NULL, "Scheduler started in foreground.");
-diff -urNp -x '*.orig' cups-2.3.3.org/scheduler/org.cups.cupsd.service.in cups-2.3.3/scheduler/org.cups.cupsd.service.in
---- cups-2.3.3.org/scheduler/org.cups.cupsd.service.in	2020-04-27 20:04:29.000000000 +0200
-+++ cups-2.3.3/scheduler/org.cups.cupsd.service.in	2021-04-20 22:45:51.479823429 +0200
-@@ -1,11 +1,11 @@
- [Unit]
- Description=CUPS Scheduler
- Documentation=man:cupsd(8)
--After=sssd.service
-+After=sssd.service network.target
- 
- [Service]
- ExecStart=@sbindir@/cupsd -l
--Type=simple
-+Type=notify
- Restart=on-failure
- 
- [Install]
diff --git a/job-name-too-long.patch b/job-name-too-long.patch
index 6e15d25..25364c5 100644
--- a/job-name-too-long.patch
+++ b/job-name-too-long.patch
@@ -1,6 +1,6 @@
 --- cups-2.3.6/backend/ipp.c.orig	2024-05-19 14:12:43.566004590 +0200
 +++ cups-2.3.6/backend/ipp.c	2024-05-19 14:49:20.758512651 +0200
-@@ -1519,14 +1519,13 @@
+@@ -1519,18 +1519,17 @@
  
    if (create_job)
    {
@@ -9,6 +9,10 @@
    }
    else
    {
+    /*
+     * TODO: make this compatible with UTF-8 - possible UTF-8 truncation here..
+     */
+ 
 -    snprintf(print_job_name, sizeof(print_job_name), "%s - %s", argv[1],
 -             argv[3]);
 -    monitor.job_name = print_job_name;
diff --git a/scx3400w-quirks.patchs b/scx3400w-quirks.patchs
deleted file mode 100644
index b5037a8..0000000
--- a/scx3400w-quirks.patchs
+++ /dev/null
@@ -1,24 +0,0 @@
-From 231c3a3e3ee12e0078be772647707c7d63a6c098 Mon Sep 17 00:00:00 2001
-From: Zdenek Dohnal <zdohnal at redhat.com>
-Date: Tue, 12 Oct 2021 06:31:15 +0200
-Subject: [PATCH] org.cups.usb-quirks: Samsung SCX-3405W works without quirks
-
----
- CHANGES.md                  | 4 ++--
- backend/org.cups.usb-quirks | 3 +++
- 2 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
-index b4e12a25e..5aa0d41af 100644
---- a/backend/org.cups.usb-quirks
-+++ b/backend/org.cups.usb-quirks
-@@ -194,6 +194,9 @@
- # All Samsung devices (https://bugs.launchpad.net/bugs/1032456)
- 0x04e8 soft-reset
- 
-+# Samsung SCX-3405W works without quirks (https://github.com/OpenPrinting/cups/issues/270)
-+0x04e8 0x344f whitelist
-+
- # Samsung ML-2160 Series (https://bugzilla.redhat.com/show_bug.cgi?id=873123)
- 0x04e8 0x330f unidir
- 
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/cups.git/commitdiff/fab640eefd73757b1284090d170d722cce9e926f



More information about the pld-cvs-commit mailing list