From 50fabbc98d1688554f2bcc1b0fb933c217d407c9 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Wed, 17 Jul 2024 13:46:16 +0200 Subject: [PATCH] RHEL-25805 [pappl] rebase pappl to 1.4.6 Resolves: RHEL-25805 --- .gitignore | 1 + ...user-input-when-adding-a-printer-Iss.patch | 59 ++++++++++ ...-during-printers-subcommand-if-avail.patch | 102 ++++++++++++++++++ ...-Fix-crash-in-pappl_dnssd_list-with-.patch | 50 --------- pappl.spec | 15 ++- sources | 2 +- 6 files changed, 174 insertions(+), 55 deletions(-) create mode 100644 0001-Fix-port-number-user-input-when-adding-a-printer-Iss.patch create mode 100644 0001-List-raw-sockets-during-printers-subcommand-if-avail.patch delete mode 100644 0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch diff --git a/.gitignore b/.gitignore index 5df5e60..e86b18b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /pappl-1.4.2.tar.gz /pappl-1.4.3.tar.gz /pappl-1.4.4.tar.gz +/pappl-1.4.6.tar.gz diff --git a/0001-Fix-port-number-user-input-when-adding-a-printer-Iss.patch b/0001-Fix-port-number-user-input-when-adding-a-printer-Iss.patch new file mode 100644 index 0000000..b830f16 --- /dev/null +++ b/0001-Fix-port-number-user-input-when-adding-a-printer-Iss.patch @@ -0,0 +1,59 @@ +From 3f1c329fddc0490e2fc5b97925268db5875e4dfe Mon Sep 17 00:00:00 2001 +From: Michael R Sweet +Date: Thu, 2 May 2024 16:42:15 -0400 +Subject: [PATCH] Fix port number user input when adding a printer (Issue #360) + +--- + CHANGES.md | 2 ++ + pappl/system-webif.c | 16 ++++++++++++---- + 2 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/pappl/system-webif.c b/pappl/system-webif.c +index 0b8bf6f..93de51a 100644 +--- a/pappl/system-webif.c ++++ b/pappl/system-webif.c +@@ -365,18 +365,21 @@ _papplSystemWebAddPrinter( + device_uri[1024] = "", // Device URI + *device_id = NULL, // Device ID + hostname[256] = "", // Hostname ++ hostvalue[256], // Hostname[:port] + *ptr; // Pointer into string + int port = 0; // Default port for Socket printing + _pappl_system_dev_t devdata; // Device callback data + static const char *hostname_pattern = // IP address or hostname pattern + // Hostname per RFC 1123 +- "(^\\s*((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\b-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\b-){0,61}[0-9A-Za-z])?)*\\.?)\\s*$)" ++ "^((\\s*((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\b-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|\\b-){0,61}[0-9A-Za-z])?)*\\.?)\\s*)" + "|" + // IPv4 address +- "(^\\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\\s*$)" ++ "(\\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\\s*)" + "|" + // IPv6 address +- "(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$)"; ++ "(\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)" ++ // Optional port number ++ ")(|:[0-9]+)$"; + + + if (!papplClientHTMLAuthorize(client)) +@@ -523,10 +526,15 @@ _papplSystemWebAddPrinter( + + papplDeviceList(PAPPL_DEVTYPE_ALL, system_device_cb, &devdata, papplLogDevice, system); + ++ if (port) ++ snprintf(hostvalue, sizeof(hostvalue), "%s:%d", hostname, port); ++ else ++ papplCopyString(hostvalue, hostname, sizeof(hostvalue)); ++ + papplClientHTMLPrintf(client, + "\n" + " \n" +- " ", papplClientGetLocString(client, _PAPPL_LOC("Network Printer")), papplClientGetLocString(client, _PAPPL_LOC("Hostname/IP Address")), papplClientGetLocString(client, _PAPPL_LOC("IP address or hostname")), hostname_pattern, hostvalue, papplClientGetLocString(client, _PAPPL_LOC("Driver Name"))); + + if (system->autoadd_cb) + papplClientHTMLPrintf(client, "", papplClientGetLocString(client, _PAPPL_LOC("Auto-Detect Driver"))); +-- +2.45.2 + diff --git a/0001-List-raw-sockets-during-printers-subcommand-if-avail.patch b/0001-List-raw-sockets-during-printers-subcommand-if-avail.patch new file mode 100644 index 0000000..2000580 --- /dev/null +++ b/0001-List-raw-sockets-during-printers-subcommand-if-avail.patch @@ -0,0 +1,102 @@ +From 539d471a9a484fa8f6bc894064704adae7829d34 Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal +Date: Tue, 13 Feb 2024 17:52:27 +0100 +Subject: [PATCH] List raw sockets during `printers` subcommand if available + +Provide a way how to show path to raw socket via CLI without 3rd part +tools. +--- + pappl/mainloop-subcommands.c | 47 ++++++++++++++++++++++++++++++++++-- + pappl/printer-ipp.c | 11 +++++++++ + 2 files changed, 56 insertions(+), 2 deletions(-) + +diff --git a/pappl/mainloop-subcommands.c b/pappl/mainloop-subcommands.c +index 9df19b8..ee581b7 100644 +--- a/pappl/mainloop-subcommands.c ++++ b/pappl/mainloop-subcommands.c +@@ -1198,6 +1198,11 @@ _papplMainloopShowPrinters( + ipp_t *request, // IPP request + *response; // IPP response + ipp_attribute_t *attr; // Current attribute ++ ipp_tag_t value_tag; // Value tag of IPP attribute ++ const char *printer_name, // Printer name ++ *printer_uri, // Printer URI ++ *attr_name, // Attribute name ++ *socket_uri; // Socket URI + + + (void)num_options; +@@ -1213,8 +1218,46 @@ _papplMainloopShowPrinters( + + response = cupsDoRequest(http, request, "/ipp/system"); + +- for (attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME); attr; attr = ippFindNextAttribute(response, "printer-name", IPP_TAG_NAME)) +- puts(ippGetString(attr, 0, NULL)); ++ for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response)) ++ { ++ while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER) ++ attr = ippNextAttribute(response); ++ ++ if (attr == NULL) ++ break; ++ ++ value_tag = IPP_TAG_CUPS_INVALID; ++ printer_name = NULL; ++ printer_uri = NULL; ++ attr_name = NULL; ++ socket_uri = NULL; ++ ++ for (; attr && ippGetGroupTag(attr) == IPP_TAG_PRINTER; attr = ippNextAttribute(response)) ++ { ++ value_tag = ippGetValueTag(attr); ++ ++ if (value_tag != IPP_TAG_NAME && ++ value_tag != IPP_TAG_URI) ++ continue; ++ ++ attr_name = ippGetName(attr); ++ ++ if (value_tag == IPP_TAG_NAME && !strcmp(attr_name, "printer-name")) ++ printer_name = ippGetString(attr, 0, NULL); ++ ++ if (value_tag == IPP_TAG_URI && !strcmp(attr_name, "smi55357-printer-socket-uri-supported")) ++ socket_uri = ippGetString(attr, 0, NULL); ++ ++ if (value_tag == IPP_TAG_URI && !strcmp(attr_name, "printer-uri-supported")) ++ printer_uri = ippGetString(attr, 0, NULL); ++ } ++ ++ if (printer_name && printer_uri) ++ printf("%s - printer - %s\n", printer_name, printer_uri); ++ ++ if (printer_name && socket_uri) ++ printf("%s - raw socket - %s\n", printer_name, socket_uri); ++ } + + ippDelete(response); + httpClose(http); +diff --git a/pappl/printer-ipp.c b/pappl/printer-ipp.c +index 551eddc..0d473aa 100644 +--- a/pappl/printer-ipp.c ++++ b/pappl/printer-ipp.c +@@ -626,6 +626,17 @@ _papplPrinterCopyAttributesNoLock( + ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "uri-authentication-supported", 2, NULL, uri_authentication_none); + } + } ++ ++ if (printer->raw_active) ++ { ++ if (!ra || cupsArrayFind(ra, "smi55357-printer-socket-uri-supported")) ++ { ++ char socket_uri[1024]; // Buffer for socket URI ++ ++ httpAssembleURI(HTTP_URI_CODING_ALL, socket_uri, sizeof(socket_uri), "socket", NULL, client->host_field, 9099 + printer->printer_id, NULL); ++ ippAddString(client->response, IPP_TAG_PRINTER, IPP_TAG_URI, "smi55357-printer-socket-uri-supported", NULL, socket_uri); ++ } ++ } + } + + +-- +2.43.0 + diff --git a/0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch b/0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch deleted file mode 100644 index 6f2cc90..0000000 --- a/0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0a880d5a3fd8d924d570d47e91cd2b521b0dc2e9 Mon Sep 17 00:00:00 2001 -From: Zdenek Dohnal -Date: Thu, 11 Jan 2024 15:40:09 +0100 -Subject: [PATCH] device-network.c: Fix crash in `pappl_dnssd_list()` with - Avahi - -If PAPPL testsuite runs in isolated environment, e.g. in mock, we cannot -generate Avahi client, because Avahi is not running. This causes -`_papplDNSSDInit()` to return NULL, which is later sent into -`avahi_service_browser_new()`, which uses `assert()` for this argument -and make the binary crash if the input is NULL. - -The crash makes the testsuite fail during the build, which is useful -sanity check before the package is built. ---- - pappl/device-network.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/pappl/device-network.c b/pappl/device-network.c -index 108db3a..e866edd 100644 ---- a/pappl/device-network.c -+++ b/pappl/device-network.c -@@ -443,6 +443,7 @@ pappl_dnssd_list( - DNSServiceRef pdl_ref; // Browse reference for _pdl-datastream._tcp - # else - AvahiServiceBrowser *pdl_ref; // Browse reference for _pdl-datastream._tcp -+ _pappl_dns_sd_t dnssd; // DNS-SD service - # endif // HAVE_MDNSRESPONDER - - -@@ -467,7 +468,15 @@ pappl_dnssd_list( - _PAPPL_DEBUG("pappl_dnssd_find: pdl_ref=%p (after)\n", pdl_ref); - - # else -- if ((pdl_ref = avahi_service_browser_new(_papplDNSSDInit(NULL), AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_pdl-datastream._tcp", NULL, 0, pappl_dnssd_browse_cb, devices)) == NULL) -+ if ((dnssd = _papplDNSSDInit(NULL)) == NULL) -+ { -+ _papplDeviceError(err_cb, err_data, "Unable to create DNSSD service."); -+ cupsArrayDelete(devices); -+ _papplDNSSDUnlock(); -+ return (ret); -+ } -+ -+ if ((pdl_ref = avahi_service_browser_new(dnssd, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_pdl-datastream._tcp", NULL, 0, pappl_dnssd_browse_cb, devices)) == NULL) - { - _papplDeviceError(err_cb, err_data, "Unable to create service browser."); - cupsArrayDelete(devices); --- -2.43.0 - diff --git a/pappl.spec b/pappl.spec index 4c102ae..f8f4fa4 100644 --- a/pappl.spec +++ b/pappl.spec @@ -9,14 +9,18 @@ Summary: Printer Application Framework (PAPPL) Name: pappl -Version: 1.4.4 -Release: 4%{?dist} +Version: 1.4.6 +Release: 1%{?dist} License: Apache-2.0 WITH LLVM-exception Source: https://github.com/michaelrsweet/pappl/releases/download/v%{version}/pappl-%{version}.tar.gz Url: https://www.msweet.org/pappl -# https://github.com/michaelrsweet/pappl/pull/320 -Patch001: 0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch +# Add listing raw sockets +# https://github.com/michaelrsweet/pappl/pull/341 +Patch001: 0001-List-raw-sockets-during-printers-subcommand-if-avail.patch +# https://github.com/michaelrsweet/pappl/commit/3f1c329fdd +Patch002: 0001-Fix-port-number-user-input-when-adding-a-printer-Iss.patch + BuildRequires: avahi-devel BuildRequires: cups-devel @@ -105,6 +109,9 @@ make test %{_mandir}/man3/pappl-system.3.gz %changelog +* Wed Jul 17 2024 Zdenek Dohnal - 1.4.6-1 +- RHEL-25805 [pappl] rebase pappl to 1.4.6 + * Mon Jun 24 2024 Troy Dawson - 1.4.4-4 - Bump release for June 2024 mass rebuild diff --git a/sources b/sources index 6593976..47203c8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (pappl-1.4.4.tar.gz) = 59351f0cbe72ee8109d89b74e4f7623f87128c548944529ec1e63556a0c516b22cb46eaf8e87a63b4a55d2e08d93866565c1e60e0b9eee3fe99277d8b56edd5d +SHA512 (pappl-1.4.6.tar.gz) = 4130502470401340f2f9b52ddd723f52be5049017d6e218c63581739454f31342ed9898e6aabf823f61a758b545377ef83aa6bd91f613f5255e4531ee0d7023f