Compare commits
No commits in common. 'c9' and 'cs10' have entirely different histories.
@ -1,2 +1,2 @@
|
|||||||
23108e0f6ca7d8caa1a6a6224f5322e21ba0a27d SOURCES/cups-2.3.3op2-source.tar.gz
|
768db9c0db0b9d66c8be6df1d31e9b3ddfad08b9 SOURCES/cups-2.4.10-source.tar.gz
|
||||||
79ee155bed4c18088be472a6e364f37ad6e410a6 SOURCES/cupsprinter.png
|
79ee155bed4c18088be472a6e364f37ad6e410a6 SOURCES/cupsprinter.png
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
SOURCES/cups-2.3.3op2-source.tar.gz
|
SOURCES/cups-2.4.10-source.tar.gz
|
||||||
SOURCES/cupsprinter.png
|
SOURCES/cupsprinter.png
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
diff -up cups-2.3.3op2/conf/cupsd.conf.in.idleexittimeout cups-2.3.3op2/conf/cupsd.conf.in
|
|
||||||
--- cups-2.3.3op2/conf/cupsd.conf.in.idleexittimeout 2021-02-01 22:10:25.000000000 +0100
|
|
||||||
+++ cups-2.3.3op2/conf/cupsd.conf.in 2021-11-29 11:37:02.426407322 +0100
|
|
||||||
@@ -28,6 +28,9 @@ DefaultAuthType Basic
|
|
||||||
# Web interface setting...
|
|
||||||
WebInterface @CUPS_WEBIF@
|
|
||||||
|
|
||||||
+# Timeout after cupsd exits if idle (applied only if cupsd runs on-demand - with -l)
|
|
||||||
+IdleExitTimeout @EXIT_TIMEOUT@
|
|
||||||
+
|
|
||||||
# Restrict access to the server...
|
|
||||||
<Location />
|
|
||||||
Order allow,deny
|
|
||||||
diff -up cups-2.3.3op2/config-scripts/cups-defaults.m4.idleexittimeout cups-2.3.3op2/config-scripts/cups-defaults.m4
|
|
||||||
--- cups-2.3.3op2/config-scripts/cups-defaults.m4.idleexittimeout 2021-11-29 11:37:02.426407322 +0100
|
|
||||||
+++ cups-2.3.3op2/config-scripts/cups-defaults.m4 2021-11-29 11:39:16.629262421 +0100
|
|
||||||
@@ -461,3 +461,16 @@ esac
|
|
||||||
|
|
||||||
AC_SUBST(CUPS_WEBIF)
|
|
||||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_WEBIF, $CUPS_DEFAULT_WEBIF)
|
|
||||||
+
|
|
||||||
+dnl Set default value of IdleExitTimeout
|
|
||||||
+AC_ARG_WITH([idle_exit_timeout], AS_HELP_STRING([--with-idle-exit-timeout], [set the default value for IdleExitTimeout, default=60]), [
|
|
||||||
+ AS_IF([test "x$withval" = "xno"], [
|
|
||||||
+ EXIT_TIMEOUT=0
|
|
||||||
+ ], [
|
|
||||||
+ EXIT_TIMEOUT=$withval
|
|
||||||
+ ])
|
|
||||||
+], [
|
|
||||||
+ EXIT_TIMEOUT=60
|
|
||||||
+])
|
|
||||||
+
|
|
||||||
+AC_SUBST([EXIT_TIMEOUT])
|
|
@ -1,33 +0,0 @@
|
|||||||
diff -up cups-2.3.3op2/config-scripts/cups-defaults.m4.conf-timeoutstartsec cups-2.3.3op2/config-scripts/cups-defaults.m4
|
|
||||||
--- cups-2.3.3op2/config-scripts/cups-defaults.m4.conf-timeoutstartsec 2021-11-29 13:50:14.568976028 +0100
|
|
||||||
+++ cups-2.3.3op2/config-scripts/cups-defaults.m4 2021-11-29 13:51:02.785567762 +0100
|
|
||||||
@@ -482,3 +482,18 @@ AC_ARG_WITH([idle_exit_timeout], AS_HELP
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_SUBST([EXIT_TIMEOUT])
|
|
||||||
+
|
|
||||||
+dnl set TimeoutStartSec for cups.service
|
|
||||||
+dnl - if used as --without-*, it sets TimeoutStartSec to infinity
|
|
||||||
+AC_ARG_WITH([systemd-timeoutstartsec],
|
|
||||||
+ AS_HELP_STRING([--with-systemd-timeoutstartsec],
|
|
||||||
+ [set TimeoutStartSec value in cups.service, default=default value in systemd]), [
|
|
||||||
+ AS_IF([ test "x$withval" = "xno" ], [
|
|
||||||
+ TIMEOUTSTARTSEC="TimeoutStartSec=infinity"
|
|
||||||
+ ], [
|
|
||||||
+ TIMEOUTSTARTSEC="TimeoutStartSec=$withval"
|
|
||||||
+ ])
|
|
||||||
+], [
|
|
||||||
+ TIMEOUTSTARTSEC=""
|
|
||||||
+])
|
|
||||||
+AC_SUBST([TIMEOUTSTARTSEC])
|
|
||||||
diff -up cups-2.3.3op2/scheduler/cups.service.in.conf-timeoutstartsec cups-2.3.3op2/scheduler/cups.service.in
|
|
||||||
--- cups-2.3.3op2/scheduler/cups.service.in.conf-timeoutstartsec 2021-11-29 13:50:14.551976172 +0100
|
|
||||||
+++ cups-2.3.3op2/scheduler/cups.service.in 2021-11-29 13:50:14.568976028 +0100
|
|
||||||
@@ -8,6 +8,7 @@ Requires=cups.socket
|
|
||||||
ExecStart=@sbindir@/cupsd -l
|
|
||||||
Type=notify
|
|
||||||
Restart=on-failure
|
|
||||||
+@TIMEOUTSTARTSEC@
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
Also=cups.socket cups.path
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From 08d2576b02fced09b94bcc205cfa7d08300abac3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael R Sweet <michael.r.sweet@gmail.com>
|
||||||
|
Date: Wed, 13 Sep 2023 13:47:55 -0400
|
||||||
|
Subject: [PATCH] Fix Coverity-discovered issues.
|
||||||
|
|
||||||
|
---
|
||||||
|
cups/raster-stream.c | 2 +-
|
||||||
|
scheduler/ipp.c | 13 +++++--------
|
||||||
|
scheduler/job.c | 2 --
|
||||||
|
tools/ipptool.c | 15 +++++++++------
|
||||||
|
4 files changed, 15 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/scheduler/job.c b/scheduler/job.c
|
||||||
|
index 278bfb501..6b5ae84ec 100644
|
||||||
|
--- a/scheduler/job.c
|
||||||
|
+++ b/scheduler/job.c
|
||||||
|
@@ -767,8 +767,6 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
|
||||||
|
cupsdLogJob(job, CUPSD_LOG_DEBUG,
|
||||||
|
"Unable to add decompression filter - %s", strerror(errno));
|
||||||
|
|
||||||
|
- cupsArrayDelete(filters);
|
||||||
|
-
|
||||||
|
abort_message = "Stopping job because the scheduler ran out of memory.";
|
||||||
|
|
||||||
|
goto abort_job;
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 313c388dbc023bbcb75d1efed800d0cfc992a6cc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael R Sweet <msweet@msweet.org>
|
||||||
|
Date: Wed, 14 Aug 2024 21:18:54 -0400
|
||||||
|
Subject: [PATCH] Fix IPP everywhere printer setup (Issue #1033)
|
||||||
|
|
||||||
|
---
|
||||||
|
CHANGES.md | 1 +
|
||||||
|
scheduler/ipp.c | 6 +++---
|
||||||
|
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
|
||||||
|
index 37623c54e..d334f70cf 100644
|
||||||
|
--- a/scheduler/ipp.c
|
||||||
|
+++ b/scheduler/ipp.c
|
||||||
|
@@ -5346,7 +5346,7 @@ create_local_bg_thread(
|
||||||
|
|
||||||
|
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||||
|
ippSetVersion(request, 2, 0);
|
||||||
|
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
|
||||||
|
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
|
||||||
|
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
|
||||||
|
|
||||||
|
response = cupsDoRequest(http, request, resource);
|
||||||
|
@@ -5367,7 +5367,7 @@ create_local_bg_thread(
|
||||||
|
|
||||||
|
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||||
|
ippSetVersion(request, 1, 1);
|
||||||
|
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, printer->device_uri);
|
||||||
|
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, device_uri);
|
||||||
|
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", NULL, "all");
|
||||||
|
|
||||||
|
response = cupsDoRequest(http, request, resource);
|
||||||
|
@@ -5390,7 +5390,7 @@ create_local_bg_thread(
|
||||||
|
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||||
|
ippSetVersion(request, 2, 0);
|
||||||
|
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
|
||||||
|
- "printer-uri", NULL, uri);
|
||||||
|
+ "printer-uri", NULL, device_uri);
|
||||||
|
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||||
|
"requested-attributes", NULL, "media-col-database");
|
||||||
|
response2 = cupsDoRequest(http, request, resource);
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
diff -up cups-2.3.3op2/backend/lpd.c.lpd-delay cups-2.3.3op2/backend/lpd.c
|
|
||||||
--- cups-2.3.3op2/backend/lpd.c.lpd-delay 2021-02-01 22:10:25.000000000 +0100
|
|
||||||
+++ cups-2.3.3op2/backend/lpd.c 2023-06-28 17:28:52.465476261 +0200
|
|
||||||
@@ -63,7 +63,7 @@ static int abort_job = 0; /* Non-zero i
|
|
||||||
|
|
||||||
#define RESERVE_NONE 0 /* Don't reserve a priviledged port */
|
|
||||||
#define RESERVE_RFC1179 1 /* Reserve port 721-731 */
|
|
||||||
-#define RESERVE_ANY 2 /* Reserve port 1-1023 */
|
|
||||||
+#define RESERVE_ANY 2 /* Reserve port 512-1023 */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -778,7 +778,7 @@ lpd_queue(const char *hostname, /*
|
|
||||||
|
|
||||||
if (lport < 721 && reserve == RESERVE_RFC1179)
|
|
||||||
lport = 731;
|
|
||||||
- else if (lport < 1)
|
|
||||||
+ else if (lport < 512)
|
|
||||||
lport = 1023;
|
|
||||||
|
|
||||||
#ifdef HAVE_GETEUID
|
|
@ -1,86 +0,0 @@
|
|||||||
diff --git a/cups/http-addr.c b/cups/http-addr.c
|
|
||||||
index 86749c848..5b035e02b 100644
|
|
||||||
--- a/cups/http-addr.c
|
|
||||||
+++ b/cups/http-addr.c
|
|
||||||
@@ -196,31 +196,29 @@ httpAddrListen(http_addr_t *addr, /* I - Address to bind to */
|
|
||||||
{
|
|
||||||
mode_t mask; /* Umask setting */
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Remove any existing domain socket file...
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- unlink(addr->un.sun_path);
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Save the current umask and set it to 0 so that all users can access
|
|
||||||
- * the domain socket...
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- mask = umask(0);
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Bind the domain socket...
|
|
||||||
- */
|
|
||||||
+ // Remove any existing domain socket file...
|
|
||||||
+ if ((status = unlink(addr->un.sun_path)) < 0)
|
|
||||||
+ {
|
|
||||||
+ DEBUG_printf(("1httpAddrListen: Unable to unlink \"%s\": %s", addr->un.sun_path, strerror(errno)));
|
|
||||||
+ if (errno == ENOENT)
|
|
||||||
+ status = 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr));
|
|
||||||
+ if (!status)
|
|
||||||
+ {
|
|
||||||
+ // Save the current umask and set it to 0 so that all users can access
|
|
||||||
+ // the domain socket...
|
|
||||||
+ mask = umask(0);
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Restore the umask and fix permissions...
|
|
||||||
- */
|
|
||||||
+ // Bind the domain socket...
|
|
||||||
+ if ((status = bind(fd, (struct sockaddr *)addr, (socklen_t)httpAddrLength(addr))) < 0)
|
|
||||||
+ {
|
|
||||||
+ DEBUG_printf(("1httpAddrListen: Unable to bind domain socket \"%s\": %s", addr->un.sun_path, strerror(errno)));
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- umask(mask);
|
|
||||||
- chmod(addr->un.sun_path, 0140777);
|
|
||||||
+ // Restore the umask...
|
|
||||||
+ umask(mask);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* AF_LOCAL */
|
|
||||||
diff --git a/scheduler/conf.c b/scheduler/conf.c
|
|
||||||
index bb6049b2c..4c703c9b9 100644
|
|
||||||
--- a/scheduler/conf.c
|
|
||||||
+++ b/scheduler/conf.c
|
|
||||||
@@ -3062,6 +3062,25 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
|
||||||
|
|
||||||
cupsd_listener_t *lis; /* New listeners array */
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * If we are launched on-demand, do not use domain sockets from the config
|
|
||||||
+ * file. Also check that the domain socket path is not too long...
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_ONDEMAND
|
|
||||||
+ if (*value == '/' && OnDemand)
|
|
||||||
+ {
|
|
||||||
+ if (strcmp(value, CUPS_DEFAULT_DOMAINSOCKET))
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_INFO, "Ignoring %s address %s at line %d - only using domain socket from launchd/systemd.", line, value, linenum);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+#endif // HAVE_ONDEMAND
|
|
||||||
+
|
|
||||||
+ if (*value == '/' && strlen(value) > (sizeof(addr->addr.un.sun_path) - 1))
|
|
||||||
+ {
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_INFO, "Ignoring %s address %s at line %d - too long.", line, value, linenum);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the address list...
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From 5cc470c8d95df40f32e8a401b2946886c91b03d1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael R Sweet <msweet@msweet.org>
|
||||||
|
Date: Fri, 15 Nov 2024 11:55:07 -0500
|
||||||
|
Subject: [PATCH] Fix make-and-model whitespace trimming (Issue #1096)
|
||||||
|
|
||||||
|
---
|
||||||
|
CHANGES.md | 1 +
|
||||||
|
cups/ppd-cache.c | 2 ++
|
||||||
|
2 files changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
|
||||||
|
index a6163a0e1..a3198a795 100644
|
||||||
|
--- a/cups/ppd-cache.c
|
||||||
|
+++ b/cups/ppd-cache.c
|
||||||
|
@@ -3293,6 +3293,8 @@ _ppdCreateFromIPP2(
|
||||||
|
mptr --;
|
||||||
|
if (*mptr == ' ')
|
||||||
|
*mptr = '\0';
|
||||||
|
+ else
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!make[0])
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
From ffd290b4ab247f82722927ba9b21358daa16dbf1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rose <83477269+AtariDreams@users.noreply.github.com>
|
|
||||||
Date: Thu, 1 Jun 2023 11:33:39 -0400
|
|
||||||
Subject: [PATCH] Log result of httpGetHostname BEFORE closing the connection
|
|
||||||
|
|
||||||
httpClose frees the memory of con->http. This is problematic because httpGetHostname then tries to access the memory it points to.
|
|
||||||
|
|
||||||
We have to log the hostname first.
|
|
||||||
---
|
|
||||||
scheduler/client.c | 16 +++++++---------
|
|
||||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scheduler/client.c b/scheduler/client.c
|
|
||||||
index 91e441188..327473a4d 100644
|
|
||||||
--- a/scheduler/client.c
|
|
||||||
+++ b/scheduler/client.c
|
|
||||||
@@ -193,13 +193,11 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
|
|
||||||
/*
|
|
||||||
* Can't have an unresolved IP address with double-lookups enabled...
|
|
||||||
*/
|
|
||||||
-
|
|
||||||
- httpClose(con->http);
|
|
||||||
-
|
|
||||||
cupsdLogClient(con, CUPSD_LOG_WARN,
|
|
||||||
- "Name lookup failed - connection from %s closed!",
|
|
||||||
+ "Name lookup failed - closing connection from %s!",
|
|
||||||
httpGetHostname(con->http, NULL, 0));
|
|
||||||
|
|
||||||
+ httpClose(con->http);
|
|
||||||
free(con);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -235,11 +233,11 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
|
|
||||||
* with double-lookups enabled...
|
|
||||||
*/
|
|
||||||
|
|
||||||
- httpClose(con->http);
|
|
||||||
-
|
|
||||||
cupsdLogClient(con, CUPSD_LOG_WARN,
|
|
||||||
- "IP lookup failed - connection from %s closed!",
|
|
||||||
+ "IP lookup failed - closing connection from %s!",
|
|
||||||
httpGetHostname(con->http, NULL, 0));
|
|
||||||
+
|
|
||||||
+ httpClose(con->http);
|
|
||||||
free(con);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -256,11 +254,11 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
|
|
||||||
|
|
||||||
if (!hosts_access(&wrap_req))
|
|
||||||
{
|
|
||||||
- httpClose(con->http);
|
|
||||||
-
|
|
||||||
cupsdLogClient(con, CUPSD_LOG_WARN,
|
|
||||||
"Connection from %s refused by /etc/hosts.allow and "
|
|
||||||
"/etc/hosts.deny rules.", httpGetHostname(con->http, NULL, 0));
|
|
||||||
+
|
|
||||||
+ httpClose(con->http);
|
|
||||||
free(con);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From a0c8b9c9556882f00c68b9727a95a1b6d1452913 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael R Sweet <michael.r.sweet@gmail.com>
|
|
||||||
Date: Tue, 6 Dec 2022 09:04:01 -0500
|
|
||||||
Subject: [PATCH] Require authentication for CUPS-Get-Document.
|
|
||||||
|
|
||||||
---
|
|
||||||
conf/cupsd.conf.in | 8 +++++++-
|
|
||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/conf/cupsd.conf.in b/conf/cupsd.conf.in
|
|
||||||
index b25884907..a07536f3e 100644
|
|
||||||
--- a/conf/cupsd.conf.in
|
|
||||||
+++ b/conf/cupsd.conf.in
|
|
||||||
@@ -68,7 +68,13 @@ IdleExitTimeout @EXIT_TIMEOUT@
|
|
||||||
Order deny,allow
|
|
||||||
</Limit>
|
|
||||||
|
|
||||||
- <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
|
|
||||||
+ <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job>
|
|
||||||
+ Require user @OWNER @SYSTEM
|
|
||||||
+ Order deny,allow
|
|
||||||
+ </Limit>
|
|
||||||
+
|
|
||||||
+ <Limit CUPS-Get-Document>
|
|
||||||
+ AuthType Default
|
|
||||||
Require user @OWNER @SYSTEM
|
|
||||||
Order deny,allow
|
|
||||||
</Limit>
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
From c5ad7aaf6c8063a39974c6b4a3cf59b7f912daae Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bryan Mason <bmason@redhat.com>
|
|
||||||
Date: Tue, 27 Jun 2023 04:18:46 -0700
|
|
||||||
Subject: [PATCH 1/2] Use "purge-job" instead of "purge-jobs" when canceling a
|
|
||||||
single job (#742)
|
|
||||||
|
|
||||||
The command "cancel -x <job>" adds "purge-jobs true" to the Cancel-Job
|
|
||||||
operation; however, the correct attribute to use for Cancel-job is
|
|
||||||
"purge-job" (singular), not "purge-jobs" (plural). As a result, job
|
|
||||||
files are not removed from /var/spool/cups when "cancel -x <job>" is
|
|
||||||
executed.
|
|
||||||
|
|
||||||
This patch resolves the issue by adding "purge-job" when the IPP
|
|
||||||
operation is Cancel-Job and "purge-jobs" for other IPP operations
|
|
||||||
(Purge-Jobs, Cancel-Jobs, and Cancel-My-Jobs)
|
|
||||||
---
|
|
||||||
systemv/cancel.c | 8 +++++++-
|
|
||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/systemv/cancel.c b/systemv/cancel.c
|
|
||||||
index 572f413e1..f5b8e12b5 100644
|
|
||||||
--- a/systemv/cancel.c
|
|
||||||
+++ b/systemv/cancel.c
|
|
||||||
@@ -260,6 +260,7 @@ main(int argc, /* I - Number of command-line arguments */
|
|
||||||
* attributes-natural-language
|
|
||||||
* printer-uri + job-id *or* job-uri
|
|
||||||
* [requesting-user-name]
|
|
||||||
+ * [purge-job] or [purge-jobs]
|
|
||||||
*/
|
|
||||||
|
|
||||||
request = ippNewRequest(op);
|
|
||||||
@@ -294,7 +295,12 @@ main(int argc, /* I - Number of command-line arguments */
|
|
||||||
"requesting-user-name", NULL, cupsUser());
|
|
||||||
|
|
||||||
if (purge)
|
|
||||||
- ippAddBoolean(request, IPP_TAG_OPERATION, "purge-jobs", (char)purge);
|
|
||||||
+ {
|
|
||||||
+ if (op == IPP_CANCEL_JOB)
|
|
||||||
+ ippAddBoolean(request, IPP_TAG_OPERATION, "purge-job", (char)purge);
|
|
||||||
+ else
|
|
||||||
+ ippAddBoolean(request, IPP_TAG_OPERATION, "purge-jobs", (char)purge);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Do the request and get back a response...
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/cgi-bin/ipp-var.c b/cgi-bin/ipp-var.c
|
|
||||||
index 92f1501..7edc058 100644
|
|
||||||
--- a/cgi-bin/ipp-var.c
|
|
||||||
+++ b/cgi-bin/ipp-var.c
|
|
||||||
@@ -275,10 +275,7 @@ cgiMoveJobs(http_t *http, /* I - Connection to server */
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((user = getenv("REMOTE_USER")) == NULL)
|
|
||||||
- {
|
|
||||||
- puts("Status: 401\n");
|
|
||||||
- exit(0);
|
|
||||||
- }
|
|
||||||
+ user = "guest";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See if the user has already selected a new destination...
|
|
@ -1,32 +0,0 @@
|
|||||||
From 8ae6eb11184dcbd9eaf3c6badd4fad59fcc3863a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Mon, 15 Aug 2022 17:38:12 +0200
|
|
||||||
Subject: [PATCH] cups/dest.c: Write data into /etc/cups/lpoptions if we're
|
|
||||||
root
|
|
||||||
|
|
||||||
Fixes #454 , the patch is created by Yair Yarom
|
|
||||||
(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008053).
|
|
||||||
---
|
|
||||||
cups/dest.c | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cups/dest.c b/cups/dest.c
|
|
||||||
index f563ce226..a9273ff93 100644
|
|
||||||
--- a/cups/dest.c
|
|
||||||
+++ b/cups/dest.c
|
|
||||||
@@ -2080,7 +2080,11 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
|
||||||
|
|
||||||
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
|
||||||
|
|
||||||
- if (cg->home)
|
|
||||||
+ if (cg->home
|
|
||||||
+#ifndef _WIN32
|
|
||||||
+ && getuid() != 0
|
|
||||||
+#endif /* !_WIN32 */
|
|
||||||
+ )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Create ~/.cups subdirectory...
|
|
||||||
--
|
|
||||||
2.44.0
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 876fdc1c90a885a58644c8757bc1283c9fd5bcb7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vasilis Liaskovitis <vliaskovitis@suse.com>
|
|
||||||
Date: Wed, 1 Mar 2023 13:46:28 +0100
|
|
||||||
Subject: [PATCH] cups/http-addr.c: Set listen backlog size to INT_MAX (fixes
|
|
||||||
#308)
|
|
||||||
|
|
||||||
Use a listen queue size of INT_MAX, which should default to the maximum
|
|
||||||
supported queue size on the system.
|
|
||||||
|
|
||||||
This avoids the problem of the listening backlog queue getting full when
|
|
||||||
there are too many requests at the same time. The problem was observed
|
|
||||||
with the previous backlog size (128) by customers when submitting large
|
|
||||||
batches of print jobs, resulting in some jobs getting lost.
|
|
||||||
|
|
||||||
Signed-off-by: Vasilis Liaskovitis <vliaskovitis@suse.com>
|
|
||||||
---
|
|
||||||
cups/http-addr.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cups/http-addr.c b/cups/http-addr.c
|
|
||||||
index a61ee0449..6aeeb8074 100644
|
|
||||||
--- a/cups/http-addr.c
|
|
||||||
+++ b/cups/http-addr.c
|
|
||||||
@@ -249,7 +249,7 @@ httpAddrListen(http_addr_t *addr, /* I - Address to bind to */
|
|
||||||
* Listen...
|
|
||||||
*/
|
|
||||||
|
|
||||||
- if (listen(fd, 128))
|
|
||||||
+ if (listen(fd, INT_MAX))
|
|
||||||
{
|
|
||||||
_cupsSetHTTPError(HTTP_STATUS_ERROR);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From d9924186325c89aefa56e36258f56f246dd2c4ad Mon Sep 17 00:00:00 2001
|
|
||||||
From: Richard Lescak <rlescak@redhat.com>
|
|
||||||
Date: Tue, 11 Jan 2022 10:53:34 +0100
|
|
||||||
Subject: [PATCH] cups/http.c,encode.c: Fix memory leaks
|
|
||||||
|
|
||||||
---
|
|
||||||
CHANGES.md | 3 ++-
|
|
||||||
cups/encode.c | 1 +
|
|
||||||
cups/http.c | 1 +
|
|
||||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cups/encode.c b/cups/encode.c
|
|
||||||
index 5bcbf6fe5..15b1c6b40 100644
|
|
||||||
--- a/cups/encode.c
|
|
||||||
+++ b/cups/encode.c
|
|
||||||
@@ -655,6 +655,7 @@ _cupsEncodeOption(
|
|
||||||
ippSetCollection(ipp, &attr, i, collection);
|
|
||||||
cupsEncodeOptions2(collection, num_cols, cols, IPP_TAG_JOB);
|
|
||||||
cupsFreeOptions(num_cols, cols);
|
|
||||||
+ ippDelete(collection);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default :
|
|
||||||
diff --git a/cups/http.c b/cups/http.c
|
|
||||||
index bd41e6f8e..4b6a24bd3 100644
|
|
||||||
--- a/cups/http.c
|
|
||||||
+++ b/cups/http.c
|
|
||||||
@@ -4624,6 +4624,7 @@ http_tls_upgrade(http_t *http) /* I - HTTP connection */
|
|
||||||
* Restore the HTTP request data...
|
|
||||||
*/
|
|
||||||
|
|
||||||
+ httpClearFields(http);
|
|
||||||
memcpy(http->_fields, myhttp._fields, sizeof(http->_fields));
|
|
||||||
memcpy(http->fields, myhttp.fields, sizeof(http->fields));
|
|
||||||
|
|
||||||
diff --git a/cups/ppd.c b/cups/ppd.c
|
|
||||||
index 525df3592..54368ac4c 100644
|
|
||||||
--- a/cups/ppd.c
|
|
||||||
+++ b/cups/ppd.c
|
|
||||||
@@ -3430,12 +3430,12 @@ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */
|
|
||||||
srctype[256],
|
|
||||||
dstsuper[16], /* Destination MIME media type */
|
|
||||||
dsttype[256],
|
|
||||||
- program[1024], /* Command to run */
|
|
||||||
*ptr, /* Pointer into command to run */
|
|
||||||
buffer[1024], /* Re-written cupsFilter value */
|
|
||||||
**filter; /* Current filter */
|
|
||||||
int cost; /* Cost of filter */
|
|
||||||
|
|
||||||
+ char program[1024] = { 0 }; /* Command to run */
|
|
||||||
|
|
||||||
DEBUG_printf(("4ppd_update_filters(ppd=%p, cg=%p)", ppd, pg));
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
|||||||
From bdb1ca45454d90410031c4c2054005a995f76180 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Wed, 6 Apr 2022 15:04:45 +0200
|
|
||||||
Subject: [PATCH] cups/tls-gnutls.c: Use always GNUTLS_SHUT_WR
|
|
||||||
|
|
||||||
The current mode for `gnutls_bye()` in client use cases strictly
|
|
||||||
follows TLS v1.2 standard, which in this particular part says:
|
|
||||||
|
|
||||||
```
|
|
||||||
Unless some other fatal alert has been transmitted, each party is
|
|
||||||
required to send a close_notify alert before closing the write
|
|
||||||
side of the connection. The other party MUST respond with a
|
|
||||||
close_notify alert of its own and close down the connection immediately,
|
|
||||||
discarding any pending writes. It is not required for the initiator
|
|
||||||
of the close to wait for the responding close_notify alert before
|
|
||||||
closing the read side of the connection.
|
|
||||||
```
|
|
||||||
|
|
||||||
and waits for the other side of TLS connection to confirm the close.
|
|
||||||
|
|
||||||
Unfortunately it can undesired for reasons:
|
|
||||||
- we support switching of TLS versions in CUPS, and this mode strictly
|
|
||||||
follows TLS v1.2 - so for older version this behavior is not expected
|
|
||||||
and can cause delays
|
|
||||||
- even some TLS v1.2 implementations (like Windows Server 2016) don't
|
|
||||||
comply TLS v1.2 behavior even if it says it does - in that case,
|
|
||||||
encrypted printing takes 30s till HTTP timeout is reached, because the
|
|
||||||
other side didn't send confirmation
|
|
||||||
- AFAIU openssl's SSL_shutdown() doesn't make this TLS v1.2 difference,
|
|
||||||
so we could end up with two TLS implementations in CUPS which will
|
|
||||||
behave differently
|
|
||||||
|
|
||||||
Since the standard defines that waiting for confirmation is not required
|
|
||||||
and due the problems above, I would propose using GNUTLS_SHUT_WR mode
|
|
||||||
regardless of HTTP mode.
|
|
||||||
---
|
|
||||||
cups/tls-gnutls.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c
|
|
||||||
index c55995b2b..f87b4f4df 100644
|
|
||||||
--- a/cups/tls-gnutls.c
|
|
||||||
+++ b/cups/tls-gnutls.c
|
|
||||||
@@ -1667,7 +1667,7 @@ _httpTLSStop(http_t *http) /* I - Connection to server */
|
|
||||||
int error; /* Error code */
|
|
||||||
|
|
||||||
|
|
||||||
- error = gnutls_bye(http->tls, http->mode == _HTTP_MODE_CLIENT ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR);
|
|
||||||
+ error = gnutls_bye(http->tls, GNUTLS_SHUT_WR);
|
|
||||||
if (error != GNUTLS_E_SUCCESS)
|
|
||||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, gnutls_strerror(errno), 0);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
From 8dce8d76c1f9ae1769284e3a3b9405f906956a10 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Dohnal <zdohnal@redhat.com>
|
||||||
|
Date: Wed, 9 Oct 2024 10:31:18 +0200
|
||||||
|
Subject: [PATCH] dest.c: Don't look for user config in cupsGetNamedDest as
|
||||||
|
root
|
||||||
|
|
||||||
|
We were still looking into ~/.cups/lpoptions as root in the function,
|
||||||
|
which IMHO is not expected.
|
||||||
|
|
||||||
|
Merged from master
|
||||||
|
---
|
||||||
|
cups/dest.c | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cups/dest.c b/cups/dest.c
|
||||||
|
index b48d8f219..3eeb50933 100644
|
||||||
|
--- a/cups/dest.c
|
||||||
|
+++ b/cups/dest.c
|
||||||
|
@@ -1784,7 +1784,11 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||||
|
else
|
||||||
|
instance = NULL;
|
||||||
|
}
|
||||||
|
+#if _WIN32
|
||||||
|
else if (cg->home)
|
||||||
|
+#else
|
||||||
|
+ else if (cg->home && getuid() != 0)
|
||||||
|
+#endif
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* No default in the environment, try the user's lpoptions files...
|
||||||
|
@@ -1899,7 +1903,11 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||||
|
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||||
|
cups_get_dests(filename, dest_name, instance, 0, 1, 1, &dest);
|
||||||
|
|
||||||
|
+#if _WIN32
|
||||||
|
if (cg->home)
|
||||||
|
+#else
|
||||||
|
+ if (cg->home && getuid() != 0)
|
||||||
|
+#endif // _WIN32
|
||||||
|
{
|
||||||
|
#if _WIN32
|
||||||
|
snprintf(filename, sizeof(filename), "%s/AppData/Local/cups/lpoptions", cg->home);
|
||||||
|
@@ -3493,7 +3501,11 @@ cups_enum_dests(
|
||||||
|
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
|
||||||
|
data.num_dests = cups_get_dests(filename, NULL, NULL, 1, user_default != NULL, data.num_dests, &data.dests);
|
||||||
|
|
||||||
|
+#if _WIN32
|
||||||
|
if (cg->home)
|
||||||
|
+#else
|
||||||
|
+ if (cg->home && getuid() != 0)
|
||||||
|
+#endif // _WIN32
|
||||||
|
{
|
||||||
|
#if _WIN32
|
||||||
|
snprintf(filename, sizeof(filename), "%s/AppData/Local/cups/lpoptions", cg->home);
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
diff -up cups-2.2.6/cups/http-addrlist.c.cupsgetjobs-pollhup cups-2.2.6/cups/http-addrlist.c
|
|
||||||
--- cups-2.2.6/cups/http-addrlist.c.cupsgetjobs-pollhup 2023-12-19 18:25:15.484637450 +0100
|
|
||||||
+++ cups-2.2.6/cups/http-addrlist.c 2023-12-19 18:28:57.129163387 +0100
|
|
||||||
@@ -313,6 +313,39 @@ httpAddrConnect2(
|
|
||||||
{
|
|
||||||
# ifdef HAVE_POLL
|
|
||||||
DEBUG_printf(("pfds[%d].revents=%x\n", i, pfds[i].revents));
|
|
||||||
+
|
|
||||||
+# ifdef _WIN32
|
|
||||||
+ if (((WSAGetLastError() == WSAEINPROGRESS) && (pfds[i].revents & POLLIN) && (pfds[i].revents & POLLOUT)) ||
|
|
||||||
+ ((pfds[i].revents & POLLHUP) && (pfds[i].revents & (POLLIN|POLLOUT))))
|
|
||||||
+# else
|
|
||||||
+ if (((errno == EINPROGRESS) && (pfds[i].revents & POLLIN) && (pfds[i].revents & POLLOUT)) ||
|
|
||||||
+ ((pfds[i].revents & POLLHUP) && (pfds[i].revents & (POLLIN|POLLOUT))))
|
|
||||||
+# endif /* _WIN32 */
|
|
||||||
+ {
|
|
||||||
+ // Some systems generate POLLIN or POLLOUT together with POLLHUP when doing
|
|
||||||
+ // asynchronous connections. The solution seems to be to use getsockopt to
|
|
||||||
+ // check the SO_ERROR value and ignore the POLLHUP if there is no error or
|
|
||||||
+ // the error is EINPROGRESS.
|
|
||||||
+
|
|
||||||
+ int sres, /* Return value from getsockopt() - 0, or -1 if error */
|
|
||||||
+ serr; /* Option SO_ERROR value */
|
|
||||||
+ socklen_t slen = sizeof(serr); /* Option value size */
|
|
||||||
+
|
|
||||||
+ sres = getsockopt(fds[i], SOL_SOCKET, SO_ERROR, &serr, &slen);
|
|
||||||
+
|
|
||||||
+ if (sres || serr)
|
|
||||||
+ {
|
|
||||||
+ pfds[i].revents |= POLLERR;
|
|
||||||
+# ifdef DEBUG
|
|
||||||
+ DEBUG_printf(("1httpAddrConnect2: getsockopt returned: %d with error: %s", sres, strerror(serr)));
|
|
||||||
+# endif
|
|
||||||
+ }
|
|
||||||
+ else if (pfds[i].revents && (pfds[i].revents & POLLHUP) && (pfds[i].revents & (POLLIN | POLLOUT)))
|
|
||||||
+ {
|
|
||||||
+ pfds[i].revents &= ~POLLHUP;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (pfds[i].revents && !(pfds[i].revents & (POLLERR | POLLHUP)))
|
|
||||||
# else
|
|
||||||
if (FD_ISSET(fds[i], &input_set) && !FD_ISSET(fds[i], &error_set))
|
|
@ -0,0 +1,81 @@
|
|||||||
|
From 2e3f15832140454e2d21b327bfa4b05612b50b9a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Dohnal <zdohnal@redhat.com>
|
||||||
|
Date: Mon, 2 Dec 2024 14:20:26 +0100
|
||||||
|
Subject: [PATCH] scheduler: Clean up failed IPP Everywhere permanent queues
|
||||||
|
|
||||||
|
If creating of permanent queue with IPP Everywhere model fails
|
||||||
|
in separate thread, the print queue is created as raw.
|
||||||
|
It would be great if we remove such queue if creation fails,
|
||||||
|
and marking them as temporary would make them to be removed automatically.
|
||||||
|
---
|
||||||
|
scheduler/ipp.c | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
|
||||||
|
index 2d80a960e..089267c86 100644
|
||||||
|
--- a/scheduler/ipp.c
|
||||||
|
+++ b/scheduler/ipp.c
|
||||||
|
@@ -5294,6 +5294,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Couldn't resolve mDNS URI \"%s\"."), printer->device_uri);
|
||||||
|
@@ -5314,6 +5315,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Bad device URI \"%s\"."), device_uri);
|
||||||
|
@@ -5332,6 +5334,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to connect to %s:%d: %s"), host, port, cupsLastErrorString());
|
||||||
|
@@ -5420,6 +5423,12 @@ create_local_bg_thread(
|
||||||
|
// Validate response from printer...
|
||||||
|
if (!ippValidateAttributes(response))
|
||||||
|
{
|
||||||
|
+ /* Force printer to timeout and be deleted */
|
||||||
|
+ _cupsRWLockWrite(&printer->lock);
|
||||||
|
+ printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
+ _cupsRWUnlock(&printer->lock);
|
||||||
|
+
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Printer returned invalid data: %s"), cupsLastErrorString());
|
||||||
|
goto finish_response;
|
||||||
|
}
|
||||||
|
@@ -5453,6 +5462,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to read generated PPD: %s"), strerror(errno));
|
||||||
|
@@ -5468,6 +5478,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD for printer: %s"), strerror(errno));
|
||||||
|
@@ -5501,6 +5512,7 @@ create_local_bg_thread(
|
||||||
|
/* Force printer to timeout and be deleted */
|
||||||
|
_cupsRWLockWrite(&printer->lock);
|
||||||
|
printer->state_time = 0;
|
||||||
|
+ printer->temporary = 1;
|
||||||
|
_cupsRWUnlock(&printer->lock);
|
||||||
|
|
||||||
|
send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD: %s"), cupsLastErrorString());
|
||||||
|
--
|
||||||
|
2.47.1
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
From d60341b3355fd8825bec00792f301ef99d715a93 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Wed, 3 Apr 2024 10:39:24 +0200
|
|
||||||
Subject: [PATCH] scheduler: Fix sending response headers to client
|
|
||||||
|
|
||||||
Sometimes headers are not correctly copied into response to the client
|
|
||||||
(some are missing). It happens because `sent_header` is set prematurely
|
|
||||||
before the actual send happens. The present code in affected `cupsdWriteClient`
|
|
||||||
scope looks like code remains from CUPS 1.6.3.
|
|
||||||
|
|
||||||
With the change, testing via curl gives reliable results all time.
|
|
||||||
---
|
|
||||||
scheduler/client.c | 15 ++++-----------
|
|
||||||
1 file changed, 4 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scheduler/client.c b/scheduler/client.c
|
|
||||||
index 62ac21c69..e7e312b8e 100644
|
|
||||||
--- a/scheduler/client.c
|
|
||||||
+++ b/scheduler/client.c
|
|
||||||
@@ -2400,23 +2400,12 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
|
|
||||||
httpSetField(con->http, field, value);
|
|
||||||
|
|
||||||
if (field == HTTP_FIELD_LOCATION)
|
|
||||||
- {
|
|
||||||
con->pipe_status = HTTP_STATUS_SEE_OTHER;
|
|
||||||
- con->sent_header = 2;
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- con->sent_header = 1;
|
|
||||||
}
|
|
||||||
else if (!_cups_strcasecmp(con->header, "Status") && value)
|
|
||||||
- {
|
|
||||||
con->pipe_status = (http_status_t)atoi(value);
|
|
||||||
- con->sent_header = 2;
|
|
||||||
- }
|
|
||||||
else if (!_cups_strcasecmp(con->header, "Set-Cookie") && value)
|
|
||||||
- {
|
|
||||||
httpSetCookie(con->http, value);
|
|
||||||
- con->sent_header = 1;
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -2451,6 +2440,8 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
|
|
||||||
cupsdCloseClient(con);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ con->sent_header = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@@ -2459,6 +2450,8 @@ cupsdWriteClient(cupsd_client_t *con) /* I - Client connection */
|
|
||||||
cupsdCloseClient(con);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ con->sent_header = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
--
|
|
||||||
2.44.0
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From de4f8c196106033e4c372dce3e91b9d42b0b9444 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Thu, 26 May 2022 06:27:04 +0200
|
|
||||||
Subject: [PATCH] scheduler/cert.c: Fix string comparison (fixes
|
|
||||||
CVE-2022-26691)
|
|
||||||
|
|
||||||
The previous algorithm didn't expect the strings can have a different
|
|
||||||
length, so one string can be a substring of the other and such substring
|
|
||||||
was reported as equal to the longer string.
|
|
||||||
---
|
|
||||||
CHANGES.md | 1 +
|
|
||||||
scheduler/cert.c | 9 ++++++++-
|
|
||||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/scheduler/cert.c b/scheduler/cert.c
|
|
||||||
index b268bf1b2..9b65b96c9 100644
|
|
||||||
--- a/scheduler/cert.c
|
|
||||||
+++ b/scheduler/cert.c
|
|
||||||
@@ -444,5 +444,12 @@ ctcompare(const char *a, /* I - First string */
|
|
||||||
b ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return (result);
|
|
||||||
+ /*
|
|
||||||
+ * The while loop finishes when *a == '\0' or *b == '\0'
|
|
||||||
+ * so after the while loop either both *a and *b == '\0',
|
|
||||||
+ * or one points inside a string, so when we apply bitwise OR on *a,
|
|
||||||
+ * *b and result, we get a non-zero return value if the compared strings don't match.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ return (result | *a | *b);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.36.1
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From db9cecdd932e58c51d2d659f63415ad47d151717 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Fri, 1 Sep 2023 17:11:54 +0200
|
|
||||||
Subject: [PATCH] scheduler/conf.c: Print to stderr if we don't open
|
|
||||||
cups-files.conf
|
|
||||||
|
|
||||||
In case cupsd can't open the cups-files.conf, the error message is lost
|
|
||||||
if journal and syslog don't exist or work on system (usually in
|
|
||||||
containers).
|
|
||||||
|
|
||||||
Log the error into stderr at this place to get the error message if
|
|
||||||
needed.
|
|
||||||
---
|
|
||||||
scheduler/conf.c | 6 +-----
|
|
||||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scheduler/conf.c b/scheduler/conf.c
|
|
||||||
index b18535162..4fa7eb1df 100644
|
|
||||||
--- a/scheduler/conf.c
|
|
||||||
+++ b/scheduler/conf.c
|
|
||||||
@@ -811,11 +811,7 @@ cupsdReadConfiguration(void)
|
|
||||||
cupsdLogMessage(CUPSD_LOG_INFO, "No %s, using defaults.", CupsFilesFile);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
-#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
|
||||||
- sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
|
|
||||||
-#else
|
|
||||||
- syslog(LOG_LPR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
|
|
||||||
-#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
|
|
||||||
+ fprintf(stderr, "Unable to read \"%s\" - %s\n", CupsFilesFile, strerror(errno));
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From 08e9b6e1f8497a8159d6bd7cd6dc96ae79a2e704 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bryan Mason <bmason@redhat.com>
|
|
||||||
Date: Thu, 15 Jul 2021 16:26:27 -0700
|
|
||||||
Subject: [PATCH] scheduler/job.c: use gziptoany for raw files (not just raw
|
|
||||||
printers)
|
|
||||||
|
|
||||||
---
|
|
||||||
scheduler/job.c | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/scheduler/job.c b/scheduler/job.c
|
|
||||||
index d8c2efcc6..b448acda5 100644
|
|
||||||
--- a/scheduler/job.c
|
|
||||||
+++ b/scheduler/job.c
|
|
||||||
@@ -501,6 +501,7 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
|
|
||||||
int backroot; /* Run backend as root? */
|
|
||||||
int pid; /* Process ID of new filter process */
|
|
||||||
int banner_page; /* 1 if banner page, 0 otherwise */
|
|
||||||
+ int raw_file; /* 1 if file type is vnd.cups-raw */
|
|
||||||
int filterfds[2][2] = { { -1, -1 }, { -1, -1 } };
|
|
||||||
/* Pipes used between filters */
|
|
||||||
int envc; /* Number of environment variables */
|
|
||||||
@@ -746,8 +747,11 @@ cupsdContinueJob(cupsd_job_t *job) /* I - Job */
|
|
||||||
* Add decompression/raw filter as needed...
|
|
||||||
*/
|
|
||||||
|
|
||||||
+ raw_file = !strcmp(job->filetypes[job->current_file]->super, "application") &&
|
|
||||||
+ !strcmp(job->filetypes[job->current_file]->type, "vnd.cups-raw");
|
|
||||||
+
|
|
||||||
if ((job->compressions[job->current_file] && (!job->printer->remote || job->num_files == 1)) ||
|
|
||||||
- (!job->printer->remote && job->printer->raw && job->num_files > 1))
|
|
||||||
+ (!job->printer->remote && (job->printer->raw || raw_file) && job->num_files > 1))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Add gziptoany filter to the front of the list...
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,94 +0,0 @@
|
|||||||
diff --git a/scheduler/conf.c b/scheduler/conf.c
|
|
||||||
index c113eb3..77ce179 100644
|
|
||||||
--- a/scheduler/conf.c
|
|
||||||
+++ b/scheduler/conf.c
|
|
||||||
@@ -573,6 +573,18 @@ cupsdReadConfiguration(void)
|
|
||||||
|
|
||||||
cupsdDeleteAllListeners();
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Allocate Listeners array
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ Listeners = cupsArrayNew(NULL, NULL);
|
|
||||||
+
|
|
||||||
+ if (!Listeners)
|
|
||||||
+ {
|
|
||||||
+ fprintf(stderr, "Unable to allocate memory for array Listeners.\n");
|
|
||||||
+ return (0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
old_remote_port = RemotePort;
|
|
||||||
RemotePort = 0;
|
|
||||||
|
|
||||||
@@ -1080,28 +1092,6 @@ cupsdReadConfiguration(void)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Check that we have at least one listen/port line; if not, report this
|
|
||||||
- * as an error and exit!
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- if (cupsArrayCount(Listeners) == 0)
|
|
||||||
- {
|
|
||||||
- /*
|
|
||||||
- * No listeners!
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- cupsdLogMessage(CUPSD_LOG_EMERG,
|
|
||||||
- "No valid Listen or Port lines were found in the "
|
|
||||||
- "configuration file.");
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Commit suicide...
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- cupsdEndProcess(getpid(), 0);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
* Set the default locale using the language and charset...
|
|
||||||
*/
|
|
||||||
@@ -3162,17 +3152,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
|
|
||||||
* Allocate another listener...
|
|
||||||
*/
|
|
||||||
|
|
||||||
- if (!Listeners)
|
|
||||||
- Listeners = cupsArrayNew(NULL, NULL);
|
|
||||||
-
|
|
||||||
- if (!Listeners)
|
|
||||||
- {
|
|
||||||
- cupsdLogMessage(CUPSD_LOG_ERROR,
|
|
||||||
- "Unable to allocate %s at line %d - %s.",
|
|
||||||
- line, linenum, strerror(errno));
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL)
|
|
||||||
{
|
|
||||||
cupsdLogMessage(CUPSD_LOG_ERROR,
|
|
||||||
diff --git a/scheduler/main.c b/scheduler/main.c
|
|
||||||
index a6e2c3a..b935c52 100644
|
|
||||||
--- a/scheduler/main.c
|
|
||||||
+++ b/scheduler/main.c
|
|
||||||
@@ -2113,6 +2113,21 @@ service_checkin(void)
|
|
||||||
service_add_listener(fd, 0);
|
|
||||||
}
|
|
||||||
#endif /* HAVE_LAUNCHD */
|
|
||||||
+
|
|
||||||
+ if (cupsArrayCount(Listeners) == 0)
|
|
||||||
+ {
|
|
||||||
+ /*
|
|
||||||
+ * No listeners!
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_EMERG, "No listener sockets present.");
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Commit suicide...
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ cupsdEndProcess(getpid(), 0);
|
|
||||||
+ }
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/scheduler/main.c b/scheduler/main.c
|
|
||||||
index e1fa357..53ca94a 100644
|
|
||||||
--- a/scheduler/main.c
|
|
||||||
+++ b/scheduler/main.c
|
|
||||||
@@ -1760,6 +1760,11 @@ select_timeout(int fds) /* I - Number of descriptors returned */
|
|
||||||
/*
|
|
||||||
* Check for any job activity...
|
|
||||||
*/
|
|
||||||
+ if (JobHistoryUpdate && timeout > JobHistoryUpdate)
|
|
||||||
+ {
|
|
||||||
+ timeout = JobHistoryUpdate;
|
|
||||||
+ why = "update job history";
|
|
||||||
+ }
|
|
||||||
|
|
||||||
for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
|
|
||||||
job;
|
|
@ -1,177 +0,0 @@
|
|||||||
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
|
|
||||||
index 02b9d9d..669cb65 100644
|
|
||||||
--- a/cgi-bin/admin.c
|
|
||||||
+++ b/cgi-bin/admin.c
|
|
||||||
@@ -619,6 +619,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
|
||||||
*oldinfo; /* Old printer information */
|
|
||||||
const cgi_file_t *file; /* Uploaded file, if any */
|
|
||||||
const char *var; /* CGI variable */
|
|
||||||
+ char *ppd_name = NULL; /* Pointer to PPD name */
|
|
||||||
char uri[HTTP_MAX_URI], /* Device or printer URI */
|
|
||||||
*uriptr, /* Pointer into URI */
|
|
||||||
evefile[1024] = ""; /* IPP Everywhere PPD file */
|
|
||||||
@@ -1124,12 +1125,12 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
|
||||||
|
|
||||||
if (!file)
|
|
||||||
{
|
|
||||||
- var = cgiGetVariable("PPD_NAME");
|
|
||||||
- if (!strcmp(var, "everywhere"))
|
|
||||||
+ ppd_name = cgiGetVariable("PPD_NAME");
|
|
||||||
+ if (!strcmp(ppd_name, "everywhere"))
|
|
||||||
get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile));
|
|
||||||
- else if (strcmp(var, "__no_change__"))
|
|
||||||
+ else if (strcmp(ppd_name, "__no_change__"))
|
|
||||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
|
|
||||||
- NULL, var);
|
|
||||||
+ NULL, ppd_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
|
|
||||||
@@ -1219,7 +1220,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
|
||||||
|
|
||||||
cgiCopyTemplateLang("printer-modified.tmpl");
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
+ else if (ppd_name && (strcmp(ppd_name, "everywhere") == 0 || strstr(ppd_name, "driverless")))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Set the printer options...
|
|
||||||
@@ -1229,6 +1230,16 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
|
||||||
do_set_options(http, 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /*
|
|
||||||
+ * If we don't have an everywhere model, show printer-added
|
|
||||||
+ * template with warning about drivers going away...
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ cgiStartHTML(title);
|
|
||||||
+ cgiCopyTemplateLang("printer-added.tmpl");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
cgiEndHTML();
|
|
||||||
}
|
|
||||||
diff --git a/scheduler/printers.c b/scheduler/printers.c
|
|
||||||
index 3bfe4a8..248bdba 100644
|
|
||||||
--- a/scheduler/printers.c
|
|
||||||
+++ b/scheduler/printers.c
|
|
||||||
@@ -950,6 +950,8 @@ cupsdLoadAllPrinters(void)
|
|
||||||
*value, /* Pointer to value */
|
|
||||||
*valueptr; /* Pointer into value */
|
|
||||||
cupsd_printer_t *p; /* Current printer */
|
|
||||||
+ int found_raw = 0; /* Flag whether raw queue is installed */
|
|
||||||
+ int found_driver = 0; /* Flag whether queue with classic driver is installed */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1025,6 +1027,30 @@ cupsdLoadAllPrinters(void)
|
|
||||||
|
|
||||||
cupsdSetPrinterAttrs(p);
|
|
||||||
|
|
||||||
+ if ((p->device_uri && strncmp(p->device_uri, "ipp:", 4) && strncmp(p->device_uri, "ipps:", 5) && strncmp(p->device_uri, "implicitclass:", 14)) ||
|
|
||||||
+ !p->make_model ||
|
|
||||||
+ (p->make_model && strstr(p->make_model, "IPP Everywhere") == NULL && strstr(p->make_model, "driverless") == NULL))
|
|
||||||
+ {
|
|
||||||
+ /*
|
|
||||||
+ * Warn users about printer drivers and raw queues will be deprecated.
|
|
||||||
+ * It will warn users in the following scenarios:
|
|
||||||
+ * - the queue doesn't use ipp, ipps or implicitclass backend, which means
|
|
||||||
+ * it doesn't communicate via IPP and is raw or uses a driver for sure
|
|
||||||
+ * - the queue doesn't have make_model - it is raw
|
|
||||||
+ * - the queue uses a correct backend, but the model is not IPP Everywhere/driverless
|
|
||||||
+ */
|
|
||||||
+ if (!p->make_model)
|
|
||||||
+ {
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Queue %s is a raw queue, which is deprecated.", p->name);
|
|
||||||
+ found_raw = 1;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Queue %s uses a printer driver, which is deprecated.", p->name);
|
|
||||||
+ found_driver = 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (strncmp(p->device_uri, "file:", 5) && p->state != IPP_PRINTER_STOPPED)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
@@ -1415,6 +1441,12 @@ cupsdLoadAllPrinters(void)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (found_raw)
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_WARN, "Raw queues are deprecated and will stop working in a future version of CUPS. See https://github.com/OpenPrinting/cups/issues/103");
|
|
||||||
+
|
|
||||||
+ if (found_driver)
|
|
||||||
+ cupsdLogMessage(CUPSD_LOG_WARN, "Printer drivers are deprecated and will stop working in a future version of CUPS. See https://github.com/OpenPrinting/cups/issues/103");
|
|
||||||
+
|
|
||||||
cupsFileClose(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c
|
|
||||||
index ca6d386..daf24d5 100644
|
|
||||||
--- a/systemv/lpadmin.c
|
|
||||||
+++ b/systemv/lpadmin.c
|
|
||||||
@@ -632,7 +632,7 @@ main(int argc, /* I - Number of command-line arguments */
|
|
||||||
|
|
||||||
num_options = cupsRemoveOption("ppd-name", num_options, &options);
|
|
||||||
}
|
|
||||||
- else if (ppd_name || file)
|
|
||||||
+ else if ((ppd_name && strncmp(ppd_name, "driverless:", 11)) || file)
|
|
||||||
{
|
|
||||||
_cupsLangPuts(stderr, _("lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS."));
|
|
||||||
}
|
|
||||||
diff --git a/templates/choose-model.tmpl b/templates/choose-model.tmpl
|
|
||||||
index e916cf8..9c9b71f 100644
|
|
||||||
--- a/templates/choose-model.tmpl
|
|
||||||
+++ b/templates/choose-model.tmpl
|
|
||||||
@@ -39,7 +39,7 @@
|
|
||||||
<TD>
|
|
||||||
<SELECT NAME="PPD_NAME" SIZE="10">
|
|
||||||
{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Current Driver - {current_make_and_model}</OPTION>:}
|
|
||||||
-{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model} - IPP Everywhere ™</OPTION>:}
|
|
||||||
+{show_ipp_everywhere?<OPTION VALUE="everywhere" SELECTED>{current_make_and_model?{current_make_and_model} -:} IPP Everywhere ™</OPTION>:}
|
|
||||||
{[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
|
|
||||||
}</SELECT>
|
|
||||||
</TD>
|
|
||||||
diff --git a/templates/printer-added.tmpl b/templates/printer-added.tmpl
|
|
||||||
index 0ccf6d3..9ebc835 100644
|
|
||||||
--- a/templates/printer-added.tmpl
|
|
||||||
+++ b/templates/printer-added.tmpl
|
|
||||||
@@ -1,4 +1,15 @@
|
|
||||||
-<H2 CLASS="title">Add Printer</H2>
|
|
||||||
+<H2 CLASS="title">Add Printer {printer_name}</H2>
|
|
||||||
|
|
||||||
<P>Printer <A HREF="/printers/{printer_name}">{printer_name}</A> has been added
|
|
||||||
successfully.
|
|
||||||
+
|
|
||||||
+<blockquote>
|
|
||||||
+<b>Note:<b>Printer drivers and raw queues are deprecated and will stop working in a future version of CUPS.
|
|
||||||
+</blockquote>
|
|
||||||
+
|
|
||||||
+<FORM ACTION="admin/" METHOD="POST">
|
|
||||||
+<INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}">
|
|
||||||
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="set-printer-options">
|
|
||||||
+<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">
|
|
||||||
+<INPUT TYPE="SUBMIT" VALUE="Set Printer Options">
|
|
||||||
+</FORM>
|
|
||||||
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
|
|
||||||
index 4498a8c..8776874 100755
|
|
||||||
--- a/test/run-stp-tests.sh
|
|
||||||
+++ b/test/run-stp-tests.sh
|
|
||||||
@@ -1049,10 +1049,10 @@ fi
|
|
||||||
|
|
||||||
# Warning log messages
|
|
||||||
count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | $GREP -v 'libusb error' | $GREP -v ColorManager | $GREP -v 'Avahi client failed' | wc -l | awk '{print $1}'`
|
|
||||||
-if test $count != 8; then
|
|
||||||
- echo "FAIL: $count warning messages, expected 8."
|
|
||||||
+if test $count != 9; then
|
|
||||||
+ echo "FAIL: $count warning messages, expected 9."
|
|
||||||
$GREP '^W ' $BASE/log/error_log
|
|
||||||
- echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
|
|
||||||
+ echo " <p>FAIL: $count warning messages, expected 9.</p>" >>$strfile
|
|
||||||
echo " <pre>" >>$strfile
|
|
||||||
$GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
|
|
||||||
echo " </pre>" >>$strfile
|
|
@ -1,124 +0,0 @@
|
|||||||
diff --git a/cups/http-support.c b/cups/http-support.c
|
|
||||||
index a4bc079..9ee2309 100644
|
|
||||||
--- a/cups/http-support.c
|
|
||||||
+++ b/cups/http-support.c
|
|
||||||
@@ -1430,6 +1430,12 @@ _httpSetDigestAuthString(
|
|
||||||
* Use old RFC 2069 Digest method...
|
|
||||||
*/
|
|
||||||
|
|
||||||
+ if (cg->digestoptions == _CUPS_DIGESTOPTIONS_DENYMD5)
|
|
||||||
+ {
|
|
||||||
+ DEBUG_puts("3_httpSetDigestAuthString: MD5 Digest is disabled.");
|
|
||||||
+ return (0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* H(A1) = H(username:realm:password) */
|
|
||||||
snprintf(temp, sizeof(temp), "%s:%s:%s", username, http->realm, password);
|
|
||||||
hashsize = (size_t)cupsHashData("md5", (unsigned char *)temp, strlen(temp), hash, sizeof(hash));
|
|
||||||
diff --git a/cups/md5passwd.c b/cups/md5passwd.c
|
|
||||||
index 9af5de2..5c9a64e 100644
|
|
||||||
--- a/cups/md5passwd.c
|
|
||||||
+++ b/cups/md5passwd.c
|
|
||||||
@@ -19,6 +19,9 @@
|
|
||||||
/*
|
|
||||||
* 'httpMD5()' - Compute the MD5 sum of the username:group:password.
|
|
||||||
*
|
|
||||||
+ * The function was used for HTTP Digest authentication. Since CUPS 2.4.0
|
|
||||||
+ * it produces an empty string. Please use @link cupsDoAuthentication@ instead.
|
|
||||||
+ *
|
|
||||||
* @deprecated@
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -28,22 +31,13 @@ httpMD5(const char *username, /* I - User name */
|
|
||||||
const char *passwd, /* I - Password string */
|
|
||||||
char md5[33]) /* O - MD5 string */
|
|
||||||
{
|
|
||||||
- unsigned char sum[16]; /* Sum data */
|
|
||||||
- char line[256]; /* Line to sum */
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Compute the MD5 sum of the user name, group name, and password.
|
|
||||||
- */
|
|
||||||
+ (void)username;
|
|
||||||
+ (void)realm;
|
|
||||||
+ (void)passwd;
|
|
||||||
|
|
||||||
- snprintf(line, sizeof(line), "%s:%s:%s", username, realm, passwd);
|
|
||||||
- cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
|
||||||
+ md5[0] = '\0';
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Return the sum...
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
|
||||||
+ return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -52,6 +46,9 @@ httpMD5(const char *username, /* I - User name */
|
|
||||||
* with the server-supplied nonce value, method, and
|
|
||||||
* request-uri.
|
|
||||||
*
|
|
||||||
+ * The function was used for HTTP Digest authentication. Since CUPS 2.4.0
|
|
||||||
+ * it produces an empty string. Please use @link cupsDoAuthentication@ instead.
|
|
||||||
+ *
|
|
||||||
* @deprecated@
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -61,35 +58,22 @@ httpMD5Final(const char *nonce, /* I - Server nonce value */
|
|
||||||
const char *resource, /* I - Resource path */
|
|
||||||
char md5[33]) /* IO - MD5 sum */
|
|
||||||
{
|
|
||||||
- unsigned char sum[16]; /* Sum data */
|
|
||||||
- char line[1024]; /* Line of data */
|
|
||||||
- char a2[33]; /* Hash of method and resource */
|
|
||||||
-
|
|
||||||
+ (void)nonce;
|
|
||||||
+ (void)method;
|
|
||||||
+ (void)resource;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * First compute the MD5 sum of the method and resource...
|
|
||||||
- */
|
|
||||||
+ md5[0] = '\0';
|
|
||||||
|
|
||||||
- snprintf(line, sizeof(line), "%s:%s", method, resource);
|
|
||||||
- cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
|
||||||
- cupsHashString(sum, sizeof(sum), a2, sizeof(a2));
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * Then combine A1 (MD5 of username, realm, and password) with the nonce
|
|
||||||
- * and A2 (method + resource) values to get the final MD5 sum for the
|
|
||||||
- * request...
|
|
||||||
- */
|
|
||||||
-
|
|
||||||
- snprintf(line, sizeof(line), "%s:%s:%s", md5, nonce, a2);
|
|
||||||
- cupsHashData("md5", (unsigned char *)line, strlen(line), sum, sizeof(sum));
|
|
||||||
-
|
|
||||||
- return ((char *)cupsHashString(sum, sizeof(sum), md5, 33));
|
|
||||||
+ return (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 'httpMD5String()' - Convert an MD5 sum to a character string.
|
|
||||||
*
|
|
||||||
+ * The function was used for HTTP Digest authentication. Since CUPS 2.4.0
|
|
||||||
+ * it produces an empty string. Please use @link cupsDoAuthentication@ instead.
|
|
||||||
+ *
|
|
||||||
* @deprecated@
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -98,5 +82,9 @@ httpMD5String(const unsigned char *sum, /* I - MD5 sum data */
|
|
||||||
char md5[33])
|
|
||||||
/* O - MD5 sum in hex */
|
|
||||||
{
|
|
||||||
- return ((char *)cupsHashString(sum, 16, md5, 33));
|
|
||||||
+ (void)sum;
|
|
||||||
+
|
|
||||||
+ md5[0] = '\0';
|
|
||||||
+
|
|
||||||
+ return (NULL);
|
|
||||||
}
|
|
@ -0,0 +1,44 @@
|
|||||||
|
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
|
||||||
|
index e0f1136..02ff51d 100644
|
||||||
|
--- a/cgi-bin/admin.c
|
||||||
|
+++ b/cgi-bin/admin.c
|
||||||
|
@@ -636,7 +636,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
- ptr = cgiGetTextfield("DEVICE_URI");
|
||||||
|
+ ptr = cgiGetVariable("DEVICE_URI");
|
||||||
|
fprintf(stderr, "DEBUG: do_am_printer: DEVICE_URI=\"%s\"\n",
|
||||||
|
ptr ? ptr : "(null)");
|
||||||
|
|
||||||
|
@@ -697,7 +697,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ((var = cgiGetTextfield("DEVICE_URI")) != NULL)
|
||||||
|
+ if ((var = cgiGetVariable("DEVICE_URI")) != NULL)
|
||||||
|
{
|
||||||
|
if ((uriptr = strrchr(var, '|')) != NULL)
|
||||||
|
{
|
||||||
|
@@ -1130,7 +1130,7 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||||
|
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
|
||||||
|
NULL, cgiGetTextfield("PRINTER_INFO"));
|
||||||
|
|
||||||
|
- strlcpy(uri, cgiGetTextfield("DEVICE_URI"), sizeof(uri));
|
||||||
|
+ strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Strip make and model from URI...
|
||||||
|
diff --git a/cgi-bin/var.c b/cgi-bin/var.c
|
||||||
|
index 6ad945d..a4993ff 100644
|
||||||
|
--- a/cgi-bin/var.c
|
||||||
|
+++ b/cgi-bin/var.c
|
||||||
|
@@ -288,7 +288,7 @@ cgiGetTextfield(const char *name) /* I - Name of form field */
|
||||||
|
value = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return (value);
|
||||||
|
+ return (value ? strdup(value) : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
diff --git a/config-scripts/cups-compiler.m4 b/config-scripts/cups-compiler.m4
|
|
||||||
index 733b06c..bb770f0 100644
|
|
||||||
--- a/config-scripts/cups-compiler.m4
|
|
||||||
+++ b/config-scripts/cups-compiler.m4
|
|
||||||
@@ -123,21 +123,35 @@ if test -n "$GCC"; then
|
|
||||||
OPTIM="-fPIC $OPTIM"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- # The -fstack-protector option is available with some versions of
|
|
||||||
- # GCC and adds "stack canaries" which detect when the return address
|
|
||||||
- # has been overwritten, preventing many types of exploit attacks.
|
|
||||||
- AC_MSG_CHECKING(whether compiler supports -fstack-protector)
|
|
||||||
+ # The -fstack-protector-strong and -fstack-protector options are available
|
|
||||||
+ # with some versions of# GCC and adds "stack canaries" which detect
|
|
||||||
+ # when the return address has been overwritten, preventing many types of exploit attacks.
|
|
||||||
+ # First check for -fstack-protector-strong, then for -fstack-protector...
|
|
||||||
+ AC_MSG_CHECKING([whether compiler supports -fstack-protector-strong])
|
|
||||||
OLDCFLAGS="$CFLAGS"
|
|
||||||
- CFLAGS="$CFLAGS -fstack-protector"
|
|
||||||
- AC_TRY_LINK(,,
|
|
||||||
+ CFLAGS="$CFLAGS -fstack-protector-strong"
|
|
||||||
+ AC_TRY_LINK(,,[
|
|
||||||
if test "x$LSB_BUILD" = xy; then
|
|
||||||
# Can't use stack-protector with LSB binaries...
|
|
||||||
OPTIM="$OPTIM -fno-stack-protector"
|
|
||||||
else
|
|
||||||
- OPTIM="$OPTIM -fstack-protector"
|
|
||||||
+ OPTIM="$OPTIM -fstack-protector-strong"
|
|
||||||
fi
|
|
||||||
- AC_MSG_RESULT(yes),
|
|
||||||
- AC_MSG_RESULT(no))
|
|
||||||
+ AC_MSG_RESULT(yes)
|
|
||||||
+ ], [
|
|
||||||
+ AC_MSG_CHECKING([whether compiler supports -fstack-protector])
|
|
||||||
+ CFLAGS="$OLDCFLAGS -fstack-protector"
|
|
||||||
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()], [
|
|
||||||
+ AS_IF([test "x$LSB_BUILD" = xy], [
|
|
||||||
+ # Can't use stack-protector with LSB binaries...
|
|
||||||
+ OPTIM="$OPTIM -fno-stack-protector"
|
|
||||||
+ ], [
|
|
||||||
+ OPTIM="$OPTIM -fstack-protector"
|
|
||||||
+ ])
|
|
||||||
+ ], [
|
|
||||||
+ AC_MSG_RESULT([no])
|
|
||||||
+ ])
|
|
||||||
+ ])
|
|
||||||
CFLAGS="$OLDCFLAGS"
|
|
||||||
|
|
||||||
if test "x$LSB_BUILD" != xy; then
|
|
@ -1,115 +0,0 @@
|
|||||||
diff --git a/cups/auth.c b/cups/auth.c
|
|
||||||
index db45bbb..b6fec6b 100644
|
|
||||||
--- a/cups/auth.c
|
|
||||||
+++ b/cups/auth.c
|
|
||||||
@@ -90,6 +90,7 @@ static void cups_gss_printf(OM_uint32 major_status, OM_uint32 minor_status,
|
|
||||||
# define cups_gss_printf(major, minor, message)
|
|
||||||
# endif /* DEBUG */
|
|
||||||
#endif /* HAVE_GSSAPI */
|
|
||||||
+static int cups_is_local_connection(http_t *http);
|
|
||||||
static int cups_local_auth(http_t *http);
|
|
||||||
|
|
||||||
|
|
||||||
@@ -174,10 +175,10 @@ cupsDoAuthentication(
|
|
||||||
DEBUG_printf(("2cupsDoAuthentication: Trying scheme \"%s\"...", scheme));
|
|
||||||
|
|
||||||
#ifdef HAVE_GSSAPI
|
|
||||||
- if (!_cups_strcasecmp(scheme, "Negotiate"))
|
|
||||||
+ if (!_cups_strcasecmp(scheme, "Negotiate") && !cups_is_local_connection(http))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
- * Kerberos authentication...
|
|
||||||
+ * Kerberos authentication to remote server...
|
|
||||||
*/
|
|
||||||
|
|
||||||
int gss_status; /* Auth status */
|
|
||||||
@@ -201,7 +202,9 @@ cupsDoAuthentication(
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* HAVE_GSSAPI */
|
|
||||||
- if (_cups_strcasecmp(scheme, "Basic") && _cups_strcasecmp(scheme, "Digest"))
|
|
||||||
+ if (_cups_strcasecmp(scheme, "Basic") &&
|
|
||||||
+ _cups_strcasecmp(scheme, "Digest") &&
|
|
||||||
+ _cups_strcasecmp(scheme, "Negotiate"))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Other schemes not yet supported...
|
|
||||||
@@ -215,7 +218,7 @@ cupsDoAuthentication(
|
|
||||||
* See if we should retry the current username:password...
|
|
||||||
*/
|
|
||||||
|
|
||||||
- if ((http->digest_tries > 1 || !http->userpass[0]) && (!_cups_strcasecmp(scheme, "Basic") || (!_cups_strcasecmp(scheme, "Digest"))))
|
|
||||||
+ if (http->digest_tries > 1 || !http->userpass[0])
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Nope - get a new password from the user...
|
|
||||||
@@ -295,7 +298,7 @@ cupsDoAuthentication(
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (http->authstring)
|
|
||||||
+ if (http->authstring && http->authstring[0])
|
|
||||||
{
|
|
||||||
DEBUG_printf(("1cupsDoAuthentication: authstring=\"%s\".", http->authstring));
|
|
||||||
|
|
||||||
@@ -916,6 +919,14 @@ cups_gss_printf(OM_uint32 major_status,/* I - Major status code */
|
|
||||||
# endif /* DEBUG */
|
|
||||||
#endif /* HAVE_GSSAPI */
|
|
||||||
|
|
||||||
+static int /* O - 0 if not a local connection */
|
|
||||||
+ /* 1 if local connection */
|
|
||||||
+cups_is_local_connection(http_t *http) /* I - HTTP connection to server */
|
|
||||||
+{
|
|
||||||
+ if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
|
|
||||||
+ return 0;
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 'cups_local_auth()' - Get the local authorization certificate if
|
|
||||||
@@ -958,7 +969,7 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
|
||||||
* See if we are accessing localhost...
|
|
||||||
*/
|
|
||||||
|
|
||||||
- if (!httpAddrLocalhost(http->hostaddr) && _cups_strcasecmp(http->hostname, "localhost") != 0)
|
|
||||||
+ if (!cups_is_local_connection(http))
|
|
||||||
{
|
|
||||||
DEBUG_puts("8cups_local_auth: Not a local connection!");
|
|
||||||
return (1);
|
|
||||||
@@ -1032,11 +1043,6 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
|
||||||
}
|
|
||||||
# endif /* HAVE_AUTHORIZATION_H */
|
|
||||||
|
|
||||||
-# ifdef HAVE_GSSAPI
|
|
||||||
- if (cups_auth_find(www_auth, "Negotiate"))
|
|
||||||
- return (1);
|
|
||||||
-# endif /* HAVE_GSSAPI */
|
|
||||||
-
|
|
||||||
# if defined(SO_PEERCRED) && defined(AF_LOCAL)
|
|
||||||
/*
|
|
||||||
* See if we can authenticate using the peer credentials provided over a
|
|
||||||
diff --git a/scheduler/client.c b/scheduler/client.c
|
|
||||||
index 89c76bf..40708d9 100644
|
|
||||||
--- a/scheduler/client.c
|
|
||||||
+++ b/scheduler/client.c
|
|
||||||
@@ -2244,18 +2244,13 @@ cupsdSendHeader(
|
|
||||||
}
|
|
||||||
else if (auth_type == CUPSD_AUTH_NEGOTIATE)
|
|
||||||
{
|
|
||||||
-#if defined(SO_PEERCRED) && defined(AF_LOCAL)
|
|
||||||
- if (httpAddrFamily(httpGetAddress(con->http)) == AF_LOCAL)
|
|
||||||
- strlcpy(auth_str, "PeerCred", sizeof(auth_str));
|
|
||||||
- else
|
|
||||||
-#endif /* SO_PEERCRED && AF_LOCAL */
|
|
||||||
strlcpy(auth_str, "Negotiate", sizeof(auth_str));
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (con->best && auth_type != CUPSD_AUTH_NEGOTIATE && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
|
|
||||||
+ if (con->best && !con->is_browser && !_cups_strcasecmp(httpGetHostname(con->http, NULL, 0), "localhost"))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
- * Add a "trc" (try root certification) parameter for local non-Kerberos
|
|
||||||
+ * Add a "trc" (try root certification) parameter for local
|
|
||||||
* requests when the request requires system group membership - then the
|
|
||||||
* client knows the root certificate can/should be used.
|
|
||||||
*
|
|
@ -1,16 +0,0 @@
|
|||||||
diff --git a/scheduler/log.c b/scheduler/log.c
|
|
||||||
index 17331ff02..41ddb4cb9 100644
|
|
||||||
--- a/scheduler/log.c
|
|
||||||
+++ b/scheduler/log.c
|
|
||||||
@@ -569,11 +569,7 @@ cupsdLogJob(cupsd_job_t *job, /* I - Job */
|
|
||||||
* Format and write the log message...
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#ifdef HAVE_SYSTEMD_SD_JOURNAL_H
|
|
||||||
- if (job && strcmp(ErrorLog, "syslog"))
|
|
||||||
-#else
|
|
||||||
if (job)
|
|
||||||
-#endif /* HAVE_SYSTEMD_SD_JOURNAL_H */
|
|
||||||
snprintf(jobmsg, sizeof(jobmsg), "[Job %d] %s", job->id, message);
|
|
||||||
else
|
|
||||||
strlcpy(jobmsg, message, sizeof(jobmsg));
|
|
@ -1,10 +1,10 @@
|
|||||||
diff -up cups-2.2b2/config-scripts/cups-ssl.m4.no-export-ssllibs cups-2.2b2/config-scripts/cups-ssl.m4
|
diff -up cups-2.2b2/config-scripts/cups-tls.m4.no-export-ssllibs cups-2.2b2/config-scripts/cups-tls.m4
|
||||||
--- cups-2.2b2/config-scripts/cups-ssl.m4.no-export-ssllibs 2016-06-27 15:06:22.299980753 +0200
|
--- cups-2.2b2/config-scripts/cups-tls.m4.no-export-ssllibs 2016-06-27 15:06:22.299980753 +0200
|
||||||
+++ cups-2.2b2/config-scripts/cups-ssl.m4 2016-06-27 15:08:00.953154042 +0200
|
+++ cups-2.2b2/config-scripts/cups-tls.m4 2016-06-27 15:08:00.953154042 +0200
|
||||||
@@ -102,5 +102,5 @@ AC_SUBST(IPPALIASES)
|
@@ -102,5 +102,5 @@ AC_SUBST([IPPALIASES])
|
||||||
AC_SUBST(SSLFLAGS)
|
AC_SUBST([TLSFLAGS])
|
||||||
AC_SUBST(SSLLIBS)
|
AC_SUBST([TLSLIBS])
|
||||||
|
|
||||||
-EXPORT_SSLLIBS="$SSLLIBS"
|
-EXPORT_TLSLIBS="$TLSLIBS"
|
||||||
+EXPORT_SSLLIBS=""
|
+EXPORT_TLSLIBS=""
|
||||||
AC_SUBST(EXPORT_SSLLIBS)
|
AC_SUBST([EXPORT_TLSLIBS])
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/scheduler/cups.service.in b/scheduler/cups.service.in
|
|
||||||
index a3fa0e8..baff51b 100644
|
|
||||||
--- a/scheduler/cups.service.in
|
|
||||||
+++ b/scheduler/cups.service.in
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
[Unit]
|
|
||||||
Description=CUPS Scheduler
|
|
||||||
Documentation=man:cupsd(8)
|
|
||||||
-After=network.target sssd.service ypbind.service nslcd.service
|
|
||||||
+After=network.target nss-user-lookup.target nslcd.service
|
|
||||||
Requires=cups.socket
|
|
||||||
|
|
||||||
[Service]
|
|
@ -1,31 +0,0 @@
|
|||||||
diff --git a/scheduler/colorman.c b/scheduler/colorman.c
|
|
||||||
index 8af4e5c..9bfdb0c 100644
|
|
||||||
--- a/scheduler/colorman.c
|
|
||||||
+++ b/scheduler/colorman.c
|
|
||||||
@@ -1083,7 +1083,7 @@ colord_create_profile(
|
|
||||||
|
|
||||||
dbus_message_iter_get_basic(&args, &profile_path);
|
|
||||||
cupsdLogMessage(CUPSD_LOG_DEBUG, "Created profile \"%s\".", profile_path);
|
|
||||||
- cupsArrayAdd(profiles, strdup(profile_path));
|
|
||||||
+ cupsArrayAdd(profiles, profile_path);
|
|
||||||
|
|
||||||
out:
|
|
||||||
|
|
||||||
diff --git a/scheduler/job.c b/scheduler/job.c
|
|
||||||
index 0223bee..47d4c72 100644
|
|
||||||
--- a/scheduler/job.c
|
|
||||||
+++ b/scheduler/job.c
|
|
||||||
@@ -1496,11 +1496,11 @@ cupsdDeleteJob(cupsd_job_t *job, /* I - Job */
|
|
||||||
job->num_files = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ unload_job(job);
|
|
||||||
+
|
|
||||||
if (job->history)
|
|
||||||
free_job_history(job);
|
|
||||||
|
|
||||||
- unload_job(job);
|
|
||||||
-
|
|
||||||
cupsArrayRemove(Jobs, job);
|
|
||||||
cupsArrayRemove(ActiveJobs, job);
|
|
||||||
cupsArrayRemove(PrintingJobs, job);
|
|
@ -1,20 +0,0 @@
|
|||||||
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
|
|
||||||
index e0dbc4a..5e9a985 100644
|
|
||||||
--- a/scheduler/ipp.c
|
|
||||||
+++ b/scheduler/ipp.c
|
|
||||||
@@ -9891,11 +9891,10 @@ restart_job(cupsd_client_t *con, /* I - Client connection */
|
|
||||||
cupsdLogJob(job, CUPSD_LOG_DEBUG,
|
|
||||||
"Restarted by \"%s\" with job-hold-until=%s.",
|
|
||||||
username, attr->values[0].string.text);
|
|
||||||
- cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
|
|
||||||
-
|
|
||||||
- cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE,
|
|
||||||
- NULL, job, "Job restarted by user with job-hold-until=%s",
|
|
||||||
- attr->values[0].string.text);
|
|
||||||
+ cupsdSetJobHoldUntil(job, attr->values[0].string.text, 1);
|
|
||||||
+ cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
|
|
||||||
+ "Job restarted by user with job-hold-until=%s",
|
|
||||||
+ attr->values[0].string.text);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
@ -1,12 +0,0 @@
|
|||||||
diff --git a/scheduler/cups.socket.in b/scheduler/cups.socket.in
|
|
||||||
index 613b977a6..1deee826a 100644
|
|
||||||
--- a/scheduler/cups.socket.in
|
|
||||||
+++ b/scheduler/cups.socket.in
|
|
||||||
@@ -4,6 +4,7 @@ PartOf=org.cups.cupsd.service
|
|
||||||
|
|
||||||
[Socket]
|
|
||||||
ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@
|
|
||||||
+RemoveOnStop=on
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=sockets.target
|
|
@ -1,38 +0,0 @@
|
|||||||
diff -up cups-1.5b1/conf/cups.password-auth.system-auth cups-1.5b1/conf/cups.password-auth
|
|
||||||
--- cups-1.5b1/conf/cups.password-auth.system-auth 2011-05-23 17:27:27.000000000 +0200
|
|
||||||
+++ cups-1.5b1/conf/cups.password-auth 2011-05-23 17:27:27.000000000 +0200
|
|
||||||
@@ -0,0 +1,4 @@
|
|
||||||
+#%PAM-1.0
|
|
||||||
+# Use password-auth common PAM configuration for the daemon
|
|
||||||
+auth include password-auth
|
|
||||||
+account include password-auth
|
|
||||||
diff -up cups-1.5b1/conf/cups.system-auth.system-auth cups-1.5b1/conf/cups.system-auth
|
|
||||||
--- cups-1.5b1/conf/cups.system-auth.system-auth 2011-05-23 17:27:27.000000000 +0200
|
|
||||||
+++ cups-1.5b1/conf/cups.system-auth 2011-05-23 17:27:27.000000000 +0200
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+#%PAM-1.0
|
|
||||||
+auth include system-auth
|
|
||||||
+account include system-auth
|
|
||||||
diff -up cups-1.5b1/conf/Makefile.system-auth cups-1.5b1/conf/Makefile
|
|
||||||
--- cups-1.5b1/conf/Makefile.system-auth 2011-05-12 07:21:56.000000000 +0200
|
|
||||||
+++ cups-1.5b1/conf/Makefile 2011-05-23 17:27:27.000000000 +0200
|
|
||||||
@@ -90,10 +90,16 @@ install-data:
|
|
||||||
done
|
|
||||||
-if test x$(PAMDIR) != x; then \
|
|
||||||
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(PAMDIR); \
|
|
||||||
- if test -r $(BUILDROOT)$(PAMDIR)/cups ; then \
|
|
||||||
- $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
|
|
||||||
+ if test -f /etc/pam.d/password-auth; then \
|
|
||||||
+ $(INSTALL_DATA) cups.password-auth $(BUILDROOT)$(PAMDIR)/cups; \
|
|
||||||
+ elif test -f /etc/pam.d/system-auth; then \
|
|
||||||
+ $(INSTALL_DATA) cups.system-auth $(BUILDROOT)$(PAMDIR)/cups; \
|
|
||||||
else \
|
|
||||||
- $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
|
|
||||||
+ if test -r $(BUILDROOT)$(PAMDIR)/cups ; then \
|
|
||||||
+ $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups.N ; \
|
|
||||||
+ else \
|
|
||||||
+ $(INSTALL_DATA) $(PAMFILE) $(BUILDROOT)$(PAMDIR)/cups ; \
|
|
||||||
+ fi ; \
|
|
||||||
fi ; \
|
|
||||||
fi
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
diff -up cups-2.3.3op2/backend/ipp.c.validate-retry cups-2.3.3op2/backend/ipp.c
|
|
||||||
--- cups-2.3.3op2/backend/ipp.c.validate-retry 2021-03-11 12:55:46.461135739 +0100
|
|
||||||
+++ cups-2.3.3op2/backend/ipp.c 2021-03-11 13:29:09.312859343 +0100
|
|
||||||
@@ -256,6 +256,7 @@ main(int argc, /* I - Number of comm
|
|
||||||
get_job_attrs = 0, /* Does printer support Get-Job-Attributes? */
|
|
||||||
send_document = 0, /* Does printer support Send-Document? */
|
|
||||||
validate_job = 0, /* Does printer support Validate-Job? */
|
|
||||||
+ validation_retried = 0, /* Indicate whether Validate-Job was retried */
|
|
||||||
copies, /* Number of copies for job */
|
|
||||||
copies_remaining; /* Number of copies remaining */
|
|
||||||
const char *content_type, /* CONTENT_TYPE environment variable */
|
|
||||||
@@ -1559,7 +1560,15 @@ main(int argc, /* I - Number of comm
|
|
||||||
ipp_status == IPP_STATUS_ERROR_BAD_REQUEST)
|
|
||||||
break;
|
|
||||||
else if (job_auth == NULL && ipp_status > IPP_STATUS_ERROR_BAD_REQUEST)
|
|
||||||
+ {
|
|
||||||
+ if (!validation_retried)
|
|
||||||
+ {
|
|
||||||
+ validation_retried = 1;
|
|
||||||
+ sleep(10);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
goto cleanup;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
@ -1 +1,3 @@
|
|||||||
%_cups_serverbin %(/usr/bin/cups-config --serverbin)
|
%_cups_serverbin %(/usr/bin/pkg-config --variable=cups_serverbin cups)
|
||||||
|
%_cups_datadir %(/usr/bin/pkg-config --variable=cups_datadir cups)
|
||||||
|
%_cups_serverroot %(/usr/bin/pkg-config --variable=cups_serverroot cups)
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue