[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