[Printing-architecture] OpenPrinting News
till.kamppeter at gmail.com
Tue Sep 3 21:16:37 UTC 2019
here is the newest development of the last month.
Google Summer of Code 2019
Coding ended and the final evaluations are completed, the completed
projects officially announced by Google.
For the Linux Foundation we got 12 student slots in the beginning and
after 1 stucent dropping out before coding started we had 11 students
working. 2 failed in the second and 2 in the final evaluations, leaving
7 having completed their GSoC projects.
This is the worst year in terms of failing students for us.
For OpenPrinting there started 5 students and and 1 failed in the final
evaluation. The other 4 completed the program successfully.
Here are the projects with their submitted work product links:
1. Generic Framework to turn legacy drivers consisting of CUPS filters
and PPDs into Printer Applications
Student: Dheeraj Yadav
Mentor: Till Kamppeter
Dheeraj will soon work with Sahil to get his Printer Application
framework documented on the new OpenPrinting web site.
2. Improve the pdftoraster filter to not use undocumented/unstable APIs
Student: Tanmay Anand
Mentor: Sahil Arora
Tanmay completed his original project already in the first month. We
asked him whether he would take a project for the rest of the time and
he accepted. So he worked also on the adapter backend for the GTK3 print
dialog to use the Common Print Dialog Backends (CPDB). Mentor for this
project is Dongxu Li. He did not complete this at the end of the GSoC
but promised to complete it after GSoC.
3. IPP: ipptool test suite updates for IPP errata updates
Student: Sharad Shukla
Mentors: Smith Kennedy, Ira McDonald, Danny Brennan
Sharad will soon complete his not yet completed assignment of the
bannertopdf filter also supporting the old bannertops input format.
4. ipptool test suite for IPP System Service
Student: Aakash Lahoti
Mentors: Smith Kennedy, Ira McDonald, Danny Brennan
5. Turn the scp-dbus-service of system-config-printer into C
Student: Sobhan Mondal
Mentors: Zdenek Dohnal
FAILED (final evaluation)
Sobhan promised to complete his work after GSoC.
The project results will also get added to the new OpenPrinting web site.
Mike Sweet has posted on the
and he is of the same opinion as me that the DNS-SD records of local
services via the loopback ("lo") device should carry the "localhost"
host name and not the network host name of the machine:
If Avahi returns 127.0.0.1 as one of the addresses for a .local lookup,
that will cause some serious security problems when machine A (a.local.)
looks up machine B ("b.local.") and gets its own loopback address. By
returning localhost ("localhost.") that security issue is avoided.
Keep in mind as well that when CUPS tries to connect to a
printer/server, it tries all of the addresses returned by a lookup in
parallel until one of the connections succeeds. Since CUPS also
validates the Host: header in requests (and block any attempt to
communicate with cupsd over the loopback interface if the hostname is
not "localhost" or "localhost."), this will result in a successful
connection but a failed request, breaking printing.
So you really do need to return "localhost" for services registered on
the loopback interface.
No reaction from Trent Lloyd yet.
OpenPrinting web site
Now with the GSoC completed we are resuming our work on the web site
with Sahil leading the project.
Most of the site is in place, most important part to add now are the
results of the 5 GSoC projects of this year.
Also we need to link to the OpenPrinting database interface web app:
We will continue using this web app and the MySQL database (which we now
feed from the foomatic-db repository on GitHub) as it is not worthwhile
(possible?) to implement a replacement on it running on GitHub.
The web app needs to get the outfit of our new web site:
CUPS 2.3.0 is finally out! And the licensing resolved! With more than
one year or 3 Ubuntu releases of delay it appeared on Fri, August 23,
the day after Ubuntu Eoan (19.10) Feature Freeze. The license solution
is that the Apache 2.0 license gets an exception added which allows
linking with (L)GPL software, so cups-filters and other software using
the CUPS library does not need any license change.
For new features see Mike's slides of the last OpenPrinting Summit:
Changes in CUPS v2.3.1
- Fixed spelling of "fold-accordion".
Changes in CUPS v2.3.0
- CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows
- Added a GPL2/LGPL2 exception to the new CUPS license terms.
- Documentation updates (Issue #5604)
- Localization updates (Issue #5637)
- Fixed a bug in the scheduler job cleanup code (Issue #5588)
- Fixed builds when there is no TLS library (Issue #5590)
- Eliminated some new GCC compiler warnings (Issue #5591)
- Removed dead code from the scheduler (Issue #5593)
- "make" failed with GZIP options (Issue #5595)
- Fixed potential excess logging from the scheduler when removing job
files (Issue #5597)
- Fixed a NULL pointer dereference bug in `httpGetSubField2` (Issue
- Added FIPS-140 workarounds for GNU TLS (Issue #5601, Issue #5622)
- The scheduler no longer provides a default value for the description
- The scheduler now logs jobs held for authentication using the error
level so it is clear what happened (Issue #5604)
- The `lpadmin` command did not always update the PPD file for changes
to the `cupsIPPSupplies` and `cupsSNMPSupplies` keywords (Issue #5610)
- The scheduler now uses both the group's membership list as well as the
various OS-specific membership functions to determine whether a user
belongs to a named group (Issue #5613)
- Added USB quirks rule for HP LaserJet 1015 (Issue #5617)
- Fixed some PPD parser issues (Issue #5623, Issue #5624)
- The IPP parser no longer allows invalid member attributes in
collections (Issue #5630)
- The configure script now treats the "wheel" group as a potential
system group (Issue #5638)
- Fixed a USB printing issue on macOS (rdar://31433931)
- Fixed IPP buffer overflow (rdar://50035411)
- Fixed memory disclosure issue in the scheduler (rdar://51373853)
- Fixed DoS issues in the scheduler (rdar://51373929)
- Fixed an issue with unsupported "sides" values in the IPP backend
- The scheduler would restart continuously when idle and printers were
not shared (rdar://52561199)
- Fixed an issue with `EXPECT !name WITH-VALUE ...` tests.
- Fixed a command ordering issue in the Zebra ZPL driver.
- Fixed a memory leak in `ppdOpen`.
No changes on 2.2.x branch.
Currently released is 1.25.4.
Many releases happened during the short time to get bug fixes into the
upcoming Ubuntu 19.10 (Eoan).
Bug fix release, mainly for cups-browsed not to die on left over locally
generated queues of unclaen shutdown of the previous session.
Bug fix release for the page geometry and CUPS Raster output issues in
the imagetoraster, imagetopdf, and pdftoraster filters.
Bug fix release, especially to fix a compatibility issue with CUPS 2.2.12.
Improved cups-browsed's handling of the DNS-SD records of advertised
local and remote IPP print services. Especially make sure that local
queues do not get already removed when the service on a single network
interface disappears (for example Wi-Fi turned off) while still present
on other interfaces. Also let local services preferably be accessed
through the loopback ("localhost") interface to avoid data leaks into
CHANGES IN V1.25.5
- rastertopdf: Let the getIPPColorProfileName() function not
return a pointer to a local variable (clang warning, Issue
- cups-browsed: If a locally generated queue (usually with
"implicitclass://..." URI) left over from a previous
(crashed) session is picked up on startup, do not set the
URI as the remote printer's URI and do not cause a fatal
error on a failed get-printer-attributes IPP request (Issue
#148, Debian bug #939316).
- pdftopdf: Do not preserve encryption, since the output
already goes into the printer (Issue #146, Pull request
CHANGES IN V1.25.4
- imagetoraster: Do not call imagetops and pstoraster for
classifications and page labels as these filters are not
included any more with cups-filters. Classifications and
page labels are currently not supported for direct image
printing, only for PDF or PostScript input (which goes
- imagetoraster, imagetopdf: Fixed auto-rotation of images to
fit output page best (Issue #145).
- pdftoraster: If the PPD contains several equally-sized page
size entries which match the size of the input page and one
is the size selected by the user via the "PageSize" or
"media" option (or the default selection in the PPD) then
prefer this one instead of simply the first matching one.
- pdftoraster: If the input page size cannot be matched with
one of the PPD's page sizes it is considered a custom size,
fill the page size name field of the CUPS Raster header with
- pdftoraster: Match the input page size with a page size in
the PPD only if the differences of the dimensions are less
than 1%, also match the input page size against the
imageable area of the PPD's page sizes if no match with the
full page size is found (Issue #138).
CHANGES IN V1.25.3
- Sample PPDs: In HP-Color_LaserJet_CM3530_MFP-PDF.ppd renamed
"custom" choice of the option "stapleoption" to "customsize"
as from CUPS 2.2.12 on "custom" is not accepted any more as a
choice name in a PPD file.
- cups-browsed: Fixed check whether the remote printer
understands PWG Raster (Issue #141).
CHANGES IN V1.25.2
- foomatic-rip: Fixed segmentation fault when running
foomatic-rip by hand and the PRINTER environment variable is
not set (Pull request #139).
- cups-browsed: Added note to cups-browsed.conf and man page
about IP-based URIs depending on the network interface used.
- cups-browsed: For each DNS-SD-discovered printer register
each DNS-SD discovery instance with network interface,
family, and IPP type. When DNS-SD messages of instances
disappearing show up, only unregister this instance and
remove the printer only if no instance is left. This
prevents a local queue of a still available printer being
removed when Wi-Fi (= one interface) is turned off (Issue
- cups-browsed: If a remote printer is served from the local
machine, prefer the "localhost"/loopback interface URI.
- cups-browsed: If a remote printer is discovered more than
once, use the new instance only if it has no downgrades and
at least one upgrade compared to the old one. Features
currently compared are IPP/IPPS, loopback interface or not,
and discovery via CUPS legacy/LDAP/DNS-SD.
- cups-browsed: If an Avahi-discovered entry comes through the
"lo" interface, always use the host name "localhost". Use
IP addresses instead of host names only if explicitly
- cups-browsed: Consider remote printer entries also as from
the same printer if one has the local machine's network name
and the other "localhost" as host name (Issue #136).
No further news.
Common Print Dialog Backends
When packaging CUPS 2.2.12 for Ubuntu Eoan (19.10) the automatic tests
of Ubuntu's build servers failed cpdb-libs and after several days of
debugging I found out that libcups is not initializing some glbal
variables with default host name, port, domain socket file for the local
CUPS server in some cases. This prevented the CUPS backend from
accessing the printer's capabilities via get-printer-attributes IPP
request and I had to apply a workaround in the cpdb-backend-cups project.
Upstream bug report on CUPS:
Released cpdb-backend-cups 1.1.1 with the fix:
- Added "ippPort()" call to the beginning of the program, to initialize
libcups (Issue #2)
More information about the Printing-architecture