RHEL-25805 [pappl] rebase pappl to 1.4.6
Resolves: RHEL-25805
This commit is contained in:
parent
78d025c616
commit
50fabbc98d
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@
|
|||||||
/pappl-1.4.2.tar.gz
|
/pappl-1.4.2.tar.gz
|
||||||
/pappl-1.4.3.tar.gz
|
/pappl-1.4.3.tar.gz
|
||||||
/pappl-1.4.4.tar.gz
|
/pappl-1.4.4.tar.gz
|
||||||
|
/pappl-1.4.6.tar.gz
|
||||||
|
@ -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
|
||||||
|
|
102
0001-List-raw-sockets-during-printers-subcommand-if-avail.patch
Normal file
102
0001-List-raw-sockets-during-printers-subcommand-if-avail.patch
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
15
pappl.spec
15
pappl.spec
@ -9,14 +9,18 @@
|
|||||||
|
|
||||||
Summary: Printer Application Framework (PAPPL)
|
Summary: Printer Application Framework (PAPPL)
|
||||||
Name: pappl
|
Name: pappl
|
||||||
Version: 1.4.4
|
Version: 1.4.6
|
||||||
Release: 4%{?dist}
|
Release: 1%{?dist}
|
||||||
License: Apache-2.0 WITH LLVM-exception
|
License: Apache-2.0 WITH LLVM-exception
|
||||||
Source: https://github.com/michaelrsweet/pappl/releases/download/v%{version}/pappl-%{version}.tar.gz
|
Source: https://github.com/michaelrsweet/pappl/releases/download/v%{version}/pappl-%{version}.tar.gz
|
||||||
Url: https://www.msweet.org/pappl
|
Url: https://www.msweet.org/pappl
|
||||||
|
|
||||||
# https://github.com/michaelrsweet/pappl/pull/320
|
# Add listing raw sockets
|
||||||
Patch001: 0001-device-network.c-Fix-crash-in-pappl_dnssd_list-with-.patch
|
# 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: avahi-devel
|
||||||
BuildRequires: cups-devel
|
BuildRequires: cups-devel
|
||||||
@ -105,6 +109,9 @@ make test
|
|||||||
%{_mandir}/man3/pappl-system.3.gz
|
%{_mandir}/man3/pappl-system.3.gz
|
||||||
|
|
||||||
%changelog
|
%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
|
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 1.4.4-4
|
||||||
- Bump release for June 2024 mass rebuild
|
- Bump release for June 2024 mass rebuild
|
||||||
|
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (pappl-1.4.4.tar.gz) = 59351f0cbe72ee8109d89b74e4f7623f87128c548944529ec1e63556a0c516b22cb46eaf8e87a63b4a55d2e08d93866565c1e60e0b9eee3fe99277d8b56edd5d
|
SHA512 (pappl-1.4.6.tar.gz) = 4130502470401340f2f9b52ddd723f52be5049017d6e218c63581739454f31342ed9898e6aabf823f61a758b545377ef83aa6bd91f613f5255e4531ee0d7023f
|
||||||
|
Loading…
Reference in New Issue
Block a user