RHEL-25805 [pappl] rebase pappl to 1.4.6

Resolves: RHEL-25805
This commit is contained in:
Zdenek Dohnal 2024-07-17 13:46:16 +02:00
parent 78d025c616
commit 50fabbc98d
6 changed files with 174 additions and 55 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -0,0 +1,59 @@
From 3f1c329fddc0490e2fc5b97925268db5875e4dfe Mon Sep 17 00:00:00 2001
From: Michael R Sweet <msweet@msweet.org>
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,
"<option value=\"socket\">%s</option></tr>\n"
" <tr><th><label for=\"hostname\">%s:</label></th><td><input type=\"text\" name=\"hostname\" id=\"hostname\" placeholder=\"%s\" pattern=\"%s\" value=\"%s\" disabled=\"disabled\"></td></tr>\n"
- " <tr><th><label for=\"driver_name\">%s:</label></th><td><select name=\"driver_name\">", papplClientGetLocString(client, _PAPPL_LOC("Network Printer")), papplClientGetLocString(client, _PAPPL_LOC("Hostname/IP Address")), papplClientGetLocString(client, _PAPPL_LOC("IP address or hostname")), hostname_pattern, hostname, papplClientGetLocString(client, _PAPPL_LOC("Driver Name")));
+ " <tr><th><label for=\"driver_name\">%s:</label></th><td><select name=\"driver_name\">", 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, "<option value=\"auto\">%s</option>", papplClientGetLocString(client, _PAPPL_LOC("Auto-Detect Driver")));
--
2.45.2

View File

@ -0,0 +1,102 @@
From 539d471a9a484fa8f6bc894064704adae7829d34 Mon Sep 17 00:00:00 2001
From: Zdenek Dohnal <zdohnal@redhat.com>
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

View File

@ -1,50 +0,0 @@
From 0a880d5a3fd8d924d570d47e91cd2b521b0dc2e9 Mon Sep 17 00:00:00 2001
From: Zdenek Dohnal <zdohnal@redhat.com>
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

View File

@ -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 <zdohnal@redhat.com> - 1.4.6-1
- RHEL-25805 [pappl] rebase pappl to 1.4.6
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.4.4-4
- Bump release for June 2024 mass rebuild

View File

@ -1 +1 @@
SHA512 (pappl-1.4.4.tar.gz) = 59351f0cbe72ee8109d89b74e4f7623f87128c548944529ec1e63556a0c516b22cb46eaf8e87a63b4a55d2e08d93866565c1e60e0b9eee3fe99277d8b56edd5d
SHA512 (pappl-1.4.6.tar.gz) = 4130502470401340f2f9b52ddd723f52be5049017d6e218c63581739454f31342ed9898e6aabf823f61a758b545377ef83aa6bd91f613f5255e4531ee0d7023f