Compare commits

...

2 Commits

Author SHA1 Message Date
eabdullin d3b7a6e2e5 import UBI cups-filters-1.20.0-34.el8 2024-05-22 14:30:44 +00:00
eabdullin d398e429d7 import UBI cups-filters-1.20.0-32.el8 2023-11-15 03:28:02 +00:00
5 changed files with 304 additions and 10 deletions

View File

@ -0,0 +1,46 @@
diff --git a/filter/gstoraster.c b/filter/gstoraster.c
index 0c9f37d..820acc8 100644
--- a/filter/gstoraster.c
+++ b/filter/gstoraster.c
@@ -73,29 +73,23 @@ static GsDocType
parse_doc_type(FILE *fp)
{
char buf[5];
- GsDocType doc_type;
- char *rc;
+ GsDocType type = GS_DOC_TYPE_UNKNOWN;
/* get the first few bytes of the file */
- doc_type = GS_DOC_TYPE_UNKNOWN;
rewind(fp);
- rc = fgets(buf,sizeof(buf),fp);
- if (rc == NULL)
- goto out;
-
- /* is PDF */
- if (strncmp(buf,"%PDF",4) == 0) {
- doc_type = GS_DOC_TYPE_PDF;
- goto out;
+/* skip until PDF/PS start header */
+ while (fgets(buf, sizeof(buf), fp) != 0) {
+ if (strncmp(buf, "%PDF", 4) == 0)
+ type = GS_DOC_TYPE_PDF;
+ if (strncmp(buf, "%!", 2) == 0)
+ type = GS_DOC_TYPE_PS;
+ if (type != GS_DOC_TYPE_UNKNOWN)
+ break;
}
- /* is PS */
- if (strncmp(buf,"%!",2) == 0) {
- doc_type = GS_DOC_TYPE_PS;
- goto out;
- }
-out:
- return doc_type;
+ rewind(fp);
+
+ return (type);
}
static void

View File

@ -0,0 +1,49 @@
From a07a43f885a4a7186310639b214c499e09e453c5 Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Tue, 13 Nov 2018 13:04:59 +0100
Subject: [PATCH] pdftopdf: Fixed printing multiple copies on driverless IPP
printers.
---
NEWS | 4 ++++
filter/pdftopdf/pdftopdf.cc | 24 +++++++++++++++++++-----
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/filter/pdftopdf/pdftopdf.cc b/filter/pdftopdf/pdftopdf.cc
index f474f08c6..880b664fd 100644
--- a/filter/pdftopdf/pdftopdf.cc
+++ b/filter/pdftopdf/pdftopdf.cc
@@ -783,11 +783,25 @@ void calculate(ppd_file_t *ppd,ProcessingParameters &param) // {{{
} else if ((ppd)&&(!ppd->manual_copies)) { // hw copy generation available
param.deviceCopies=param.numCopies;
if (param.collate) { // collate requested by user
- // check collate device, with current/final(!) ppd settings
- param.deviceCollate=printerWillCollate(ppd);
- if (!param.deviceCollate) {
- // printer can't hw collate -> we must copy collated in sw
- param.deviceCopies=1;
+ // Check output format (FINAL_CONTENT_TYPE env variable) whether it is
+ // of a driverless IPP printer (PDF, Apple Raster, PWG Raster, PCLm).
+ // These printers do always hardware collate if they do hardware copies.
+ // https://github.com/apple/cups/issues/5433
+ char *final_content_type = getenv("FINAL_CONTENT_TYPE");
+ if (final_content_type &&
+ (strcasestr(final_content_type, "/pdf") ||
+ strcasestr(final_content_type, "/vnd.cups-pdf") ||
+ strcasestr(final_content_type, "/pwg-raster") ||
+ strcasestr(final_content_type, "/urf") ||
+ strcasestr(final_content_type, "/PCLm"))) {
+ param.deviceCollate = true;
+ } else {
+ // check collate device, with current/final(!) ppd settings
+ param.deviceCollate=printerWillCollate(ppd);
+ if (!param.deviceCollate) {
+ // printer can't hw collate -> we must copy collated in sw
+ param.deviceCopies=1;
+ }
}
} // else: printer copies w/o collate and takes care of duplex/evenDuplex
} else { // sw copies
--
2.43.0

124
SOURCES/lftocrlf Normal file
View File

@ -0,0 +1,124 @@
#!/bin/bash
## Copyright (C) 2003-2006 Red Hat, Inc.
## Copyright (C) 2003-2006 Tim Waugh <twaugh@redhat.com>
## Changed on 2007/05/17, Opher Shachar, LADPC Ltd.
## Added support for page-ranges option.
## Added page accounting.
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
if [ $# == 0 ]; then
echo >&2 "ERROR: $0 job-id user title copies options [file]"
exit 1
fi
# Extract the papersize
SENDFF=`grep '^\*DefaultSendFF' "$PPD" | cut -d\ -f2`
COPIES=1
if [ $# -ge 4 ]; then
COPIES="$4"
fi
if [ $# -lt 6 ]; then
unset TMPFILE
trap -- 'rm -f "$TMPFILE"' EXIT
TMPFILE=$(mktemp ${TMPDIR:-/tmp}/lftocrlf.XXXXXX)
cat > "$TMPFILE"
else
TMPFILE="$6"
fi
PR=${5#*page-ranges=}
# Do options specify page-ranges?
if [[ "$PR" != "$5" ]]; then
PR=${PR%% *}
else
#unset PR
PR=1-999999
fi
if [[ "$PR" ]]; then
TMPFILE2=$(mktemp ${TMPDIR:-/tmp}/lftocrlf2.XXXXXX)
pagenum=0
EOF=
{
while [[ "$PR" ]]; do
pl=${PR%%,*} ;# take first subrange
PR=${PR#$pl};PR=${PR#,} ;# remove from range list
pu=${pl#*-} ;# extract upper and lower
pl=${pl%-*} ;# pages of subrange
# Allows interpreting 0-5,3-10 as 1-5,6-10 rejects 5-1 or 1-
(( pagenum >= pl )) && pl=$(( pagenum + 1 ))
(( pl > pu )) && continue
# Loop reading pages until at or over lower page of subrange.
while read -d `echo -ne '\f'` -r; do
(( pagenum++ ))
(( pagenum == pl )) && break
done
# Did we reach lower page of subrange or EOF?
if (( pagenum < pl )); then
[[ ! "$REPLY" ]] && break ;# empty last page - we're done.
(( pagenum++ ))
EOF=y
fi
# Output page and report to page log
if (( pagenum == pl )); then
echo -n "${REPLY}" >>"$TMPFILE2"
# If EOF then page has no final FF
[[ ! "$EOF" ]] && echo -ne '\f' >>"$TMPFILE2"
echo "PAGE: $pagenum $COPIES" >&2
fi
[[ "$EOF" ]] && break
# Is the current subrange a single page?
(( pagenum == pu )) && continue
while read -d `echo -ne '\f'` -r; do
(( pagenum++ ))
echo -ne "${REPLY}\f" >>"$TMPFILE2"
echo "PAGE: $pagenum $COPIES" >&2
(( pagenum == pu )) && break
done
# Could be that we reached EOF before page boundry
if (( pagenum < pu )); then
if [[ "$REPLY" ]]; then
(( pagenum++ ))
echo -n "${REPLY}" >>"$TMPFILE2"
echo "PAGE: $pagenum $COPIES" >&2
fi
break
fi
done
} <"$TMPFILE"
else
TMPFILE2="$TMPFILE"
pc=$(grep -co `echo -ne '\f'` "$TMPFILE2")
pc=$(( pc * $COPIES ))
echo "PAGE: $pc" >&2
fi
while [ "$COPIES" -gt 0 ]; do
# Just translate LF->CRLF at the moment, until the PPD has options added.
sed -e 's/$/'`echo -ne '\r'`'/g' "$TMPFILE2"
if [ "$SENDFF" == "True" ]
then
echo -ne \\014
fi
COPIES=$(($COPIES - 1))
done
# Cleanup
[[ "$TMPFILE" != "$TMPFILE2" ]] && rm -f "$TMPFILE2"
exit 0

47
SOURCES/lftocrlf.ppd Normal file
View File

@ -0,0 +1,47 @@
*PPD-Adobe: "4.3"
*%
*% Text-only printer definition
*%
*FormatVersion: "4.3"
*FileVersion: "1.1"
*LanguageVersion: English
*LanguageEncoding: ISOLatin1
*PCFileName: "LFTOCRLF.PPD"
*Manufacturer: "Generic"
*Product: "(Generic)"
*cupsVersion: 1.0
*cupsManualCopies: True
*cupsModelNumber: 2
*cupsFilter: "text/plain 0 lftocrlf"
*ModelName: "Generic LF-to-CRLF printer"
*ShortNickName: "Generic LF-to-CRLF printer"
*NickName: "Generic LF-to-CRLF printer"
*PSVersion: "(2017.000) 0"
*LanguageLevel: "2"
*ColorDevice: False
*DefaultColorSpace: Gray
*FileSystem: False
*Throughput: "8"
*LandscapeOrientation: Plus90
*VariablePaperSize: False
*TTRasterizer: Type42
*DefaultImageableArea: Letter
*ImageableArea Letter/US Letter: "18 36 594 756"
*DefaultPaperDimension: Letter
*PaperDimension Letter/Letter: "612 792"
*OpenUI *PageSize/Media Size: PickOne
*OrderDependency: 10 AnySetup *PageSize
*DefaultPageSize: Letter
*PageSize Letter/Letter: "<</PageSize[612 792]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageSize
*OpenUI *PageRegion: PickOne
*OrderDependency: 10 AnySetup *PageRegion
*DefaultPageRegion: Letter
*PageRegion Letter/Letter: "<</PageSize[612 792]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageRegion
*OpenUI *SendFF: Boolean
*DefaultSendFF: False
*SendFF True/True: ""
*SendFF False/False: ""
*CloseUI: *SendFF

View File

@ -11,7 +11,7 @@
Summary: OpenPrinting CUPS filters and backends
Name: cups-filters
Version: 1.20.0
Release: 29%{?dist}.2
Release: 34%{?dist}
# For a breakdown of the licensing, see COPYING file
# GPLv2: filters: commandto*, imagetoraster, pdftops, rasterto*,
@ -27,6 +27,8 @@ License: GPLv2 and GPLv2+ and GPLv3 and GPLv3+ and LGPLv2+ and MIT and BSD with
Url: http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters
Source0: http://www.openprinting.org/download/cups-filters/cups-filters-%{version}.tar.xz
Source1: testprint
Source2: lftocrlf.ppd
Source3: lftocrlf
Patch01: cups-filters-createall.patch
Patch02: cups-filters-brftopagedbrf-install.patch
@ -63,10 +65,15 @@ Patch14: 0001-cups-browsed-Always-save-.-default-option-entries-fr.patch
Patch15: cups-browsed-renew.patch
# 1981612 - [RHEL 8] pdftopdf doesn't handle "page-range=10-2147483647" correctly
Patch16: 0001-libcupsfilters-Fix-page-range-like-10-in-pdftopdf-fi.patch
# 2193390 - Edges cropped when printing PostScript document
# 2185675 - Edges cropped when printing PostScript document
Patch17: gstoraster-margins.patch
# CVE-2023-24805 cups-filters: remote code execution in cups-filters, beh CUPS backend
Patch18: beh-cve2023.patch
# RHEL-19433 Incorrect PS header handling in gstopdf
Patch19: 0001-gstoraster-Improved-detection-whether-input-is-PostS.patch
# RHEL-16034 pdftopdf results with (N > 1)^2 copies if a file is sent to IPP printer with collate
Patch20: 0001-pdftopdf-Fixed-printing-multiple-copies-on-driverles.patch
%if %{with braille}
Recommends: %{name}-braille%{?_isa} = %{version}-%{release}
@ -138,14 +145,12 @@ Requires: bc grep sed which
# cups-browsed
# it needs cups.service for running
Requires: cups
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
# recommends avahi and cups-ipptool - it is needed for driverless support,
# recommends cups-ipptool - it is needed for driverless support,
# but it is useless for older devices and cups servers
Recommends: avahi
Recommends: cups-ipptool
# older installations can still have ghostscript-cups and foomatic-filters
@ -237,10 +242,14 @@ The package provides filters and cups-brf backend needed for braille printing.
%patch15 -p1 -b .renew
# 1981612 - [RHEL 8] pdftopdf doesn't handle "page-range=10-2147483647" correctly
%patch16 -p1 -b .ranges
# 2193390 - Edges cropped when printing PostScript document
# 2185675 - Edges cropped when printing PostScript document
%patch17 -p1 -b .margins
# CVE-2023-24805 cups-filters: remote code execution in cups-filters, beh CUPS backend
%patch18 -p1 -b .cve2023
%patch18 -p1 -b .cve202324805
# RHEL-19433 Incorrect PS header handling in gstopdf
%patch19 -p1 -b .gstoraster-psdetect
# RHEL-16034 pdftopdf results with (N > 1)^2 copies if a file is sent to IPP printer with collate
%patch20 -p1 -b .pdftopdf-ncopies
%build
@ -281,6 +290,11 @@ make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
# Add textonly driver back, but as lftocrlf
# part of 2118406 - texttotext filter strips ESC causing PCL files to be printed improperly
install -p -m 0755 %{SOURCE3} %{buildroot}%{_cups_serverbin}/filter/lftocrlf
install -p -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/ppd/cupsfilters/lftocrlf.ppd
# Don't ship libtool la files.
rm -f %{buildroot}%{_libdir}/lib*.la
@ -349,6 +363,9 @@ make check
%attr(0755,root,root) %{_cups_serverbin}/filter/imagetopdf
%attr(0755,root,root) %{_cups_serverbin}/filter/imagetops
%attr(0755,root,root) %{_cups_serverbin}/filter/imagetoraster
# Add textonly driver back, but as lftocrlf
# part of 2118406 - texttotext filter strips ESC causing PCL files to be printed improperly
%attr(0755,root,root) %{_cups_serverbin}/filter/lftocrlf
%attr(0755,root,root) %{_cups_serverbin}/filter/pdftopdf
%attr(0755,root,root) %{_cups_serverbin}/filter/pdftops
%attr(0755,root,root) %{_cups_serverbin}/filter/pdftoraster
@ -443,11 +460,22 @@ make check
%endif
%changelog
* Mon May 15 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-29.2
* Mon Feb 26 2024 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-34
- RHEL-13211 redhat-lsb unnecessary pulls in cups and avahi dependencies
* Tue Dec 19 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-33
- RHEL-19433 Incorrect PS header handling in gstopdf
- RHEL-16034 pdftopdf results with (N > 1)^2 copies if a file is sent to IPP printer with collate
- RHEL-13211 redhat-lsb unnecessary pulls in cups and avahi dependencies
* Tue Aug 08 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-32
- 2118406 - texttotext filter strips ESC causing PCL files to be printed improperly
* Wed Jun 07 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-31
- CVE-2023-24805 cups-filters: remote code execution in cups-filters, beh CUPS backend
* Fri May 05 2023 Tomas Korbar <tkorbar@redhat.com> - 1.20.0-29.1
- 2193390 - Edges cropped when printing PostScript document
* Thu Apr 13 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-30
- 2185675 - Edges cropped when printing PostScript document
* Thu Sep 22 2022 Zdenek Dohnal <zdohnal@redhat.com> - 1.20.0-29
- 2128539 - build braille subpackage only on Fedora and CentOS Stream > 9