NEWS - OpenPrinting CUPS Filters v1.28.16 - 2022-08-24
------------------------------------------------------

CHANGES IN V1.28.16

	- imagetoraster, imagetopdf, libcupsfilters: Added support for
	  reading the resolution of an image from its EXIF data when
	  loading it. This way we get the image reproduced in its
	  original size with "print-scaling=none" (Issue #362).
	- libcupsfilters: Replaced deprecated data types uint16 and
	  uint32. The function to read TIFF image files via libtiff in
	  cupsfilters/image-tiff.c uses the deprecated types uint16
	  and uint32. The replacements for these types are uint16_t
	  and uint32_t.

CHANGES IN V1.28.15

	- pdftops: In pdftops identify old LaserJets more precisely
	  for working around PostScript interpreter bugs, older
	  printers need Poppler, newer models need Ghostscript
	  (Ubuntu bug #1967816).

CHANGES IN V1.28.14

	- pdftopdf: Correct the output when suppressing auto-rotation
	  (option "nopdfAutoRotate"). Depending on the situation pages
	  got cropped in the wrong orientation or de-centered.
	- pdftopdf: Correct the output when the
	  "orientation-requested" or the "landscape" option is
	  supplied. Output could be de-centered (Issue #456),
	  portrait-oriented pages be wrongly cropped and division of
	  the output page into cells for N-up done in the wrong
	  orientation.
	- rastertopdf: In PCLm output mode the filter failed to
	  generate PCLm if the printer has no
	  "pclm-source-resolution-default" IPP attribute.

CHANGES IN V1.28.13

	- pdftopdf: Fix N-up printing when paper is taken
	  long-edge-first by the printer.
	- pdftopdf: Fix cropping ("print-scaling=none" and
	  "print-scaling=fill") when paper is taken long-edge-first by
	  the printer (Issue #454).
	- pdftops: Use Poppler for all Apple LaserWriter models (Issue
	  #452).

CHANGES IN V1.28.12

	- imagetoraster, imagetopdf: Fixed comparison of the image
	  size with the page size for print-scaling=auto. The image
	  size in pixels was compared with the page size in PostScript
	  points (1/72 inch).
	- imagetoraster, imagetopdf: Fixed the "print-scaling=none"
  	  (crop-to-fit) mode, also use crop-to-fit always when
  	  requested, do not fall back to fit-to-page when the image
  	  size differs significantly from the page size (Issue #362).
	- libcupsfilters: Changed the default PPI resolution for
	  images as input files from 128 to 200 (Pull request #446).
	- implicitclass: Do not check availability of "gs" and
	  "pdftops" executables, instead, check by the presence of
	  "gstoraster" and "pdftoraster" filters whether we have
	  configured cups-filters for Ghostscript and/or Poppler use.
	- libcupsfilters: In the PPD generator for the driverless
	  utility and cups-browsed add "*cupsFilter2: ..." lines for
	  all supported driverless data formats (PDF, Apple/PWG
	  Raster, PCLm), and add lines for legacy data formats (PCL,
	  PostScript) only if no driverless formats available.
	- libcupsfilters: Always use encryption for ipps. RFC7472
	  requires that 'ipps' must be used over HTTPS, but the
	  driverless utility does not enforce encryption (Pull request
	  #433).
	- serial: Add a 10-msec sleep and at the end add a tcdrain().
	  For some unknown reason, every printing file need sleep a
	  little time to make sure the serial printer receive data is
	  right (Pull request #431).
	- libcupsfilters: Fix resolver functions for DNS-SD-based
	  URIs, to make resolve_uri() also work when DEVICE_URI env
	  variable is set and to make ippfind_based_uri_converter()
	  not re-direct stdin.
	- pdftopdf: Set default for print-scaling to avoid "should
	  never happem" log messages and undefined behavior.
	- pdftopdf: Fix orientation-requested = 0. Consider
	  this as "automatic selection and not as error.
	- pdftopdf: Fixed all combinations of print-scaling and
	  number-up for printers with asymmetric margins (top !=
	  bottom or left != right) and for input files containing
	  pages with different sizes and/or orientations. Fixes
	  backported from 2.x branch.
	- pdftopdf: Add 2% tolerance for input size larger than output
	  page when "print-scaling=auto" or "print-scaling=auto-fit"
	  is used and too large input pages should be scaled, fitting
	  documents not. This prevents a random-looking behavior if
	  input and output page size seem to be equal, but in reality
	  there are slight differences between size dimensions.

CHANGES IN V1.28.11

	- libcupsfilters: Let PPD generator take default ColorModel
	  from printer (CUPS issue #277).
	- Braille: In vectortopdf check inkscape version to call
	  inkscape with the correct command line (Issue #315, Pull
	  request #443).
	- Build system: Make missing DejaVuSans.ttf non-fatal in
	  ./configure as the font is only needed for test programs,
	  not for actual use of cups-filters (Issue #411).
	- libcupsfilters: In imagetoraster() fixed crash with SGray
          (Issue #435).
	- cups-browsed: Naming of local queues is matched to CUPS'
	  current naming of temporary queues (no leading or trailing
	  underscores), to avoid duplicates in print dialogs which
	  support CUPS' temporary queues.
	- libcupsfilters: Make cupsRasterParseIPPOptions() work correctly
	  with PPDs (Issue #436).
	- libcupsfilters: Let colord_get_profile_for_device_id() not
	  return empty file name, to avoid error messages in CUPS
	  error_log.
	- foomatic-rip: Debug message was wrongly sent to stdout and
	  not to log (Issue #422).

CHANGES IN V1.28.10

	- Sample PPDs: Add borderless page size definitions to Generic
	  PDF Printer, HP Color LaserJet CM3530 MFP PDF, and Ricoh PDF
	  Printer PPD files.
	- Sample PPDs: From the PDF PPD files removed the unneeded
	  "*cupsFilters2: ..." line. For CUPS it does not make any
	  difference.
	- libcupsfilters: Fixed pdftopdf filter to correctly support
	  page ranges without upper limit, like "10-" (Pull request
	  #399).
	- libcupsfilters: Use wildcard tag (IPP_TAG_ZERO) search for
	  "media-type" and "media-type-supported" in the PPD
	  generator (Pull request #398).
	- implicitclass, parallel: Added missing newlines at error
	  messages.
	- libfontembed: Removed unneeded fontembed/main.c and ttfread
	  executable. Eliminates the dependency on DejaVuSans.ttf
	  (Issue #386).
	- gstoraster: Refactor the filter a little to clarify handling
	  of page counts and set job-impressions for TotalPageCount in
	  PWG-Raster header (Pull request #394).
	- cups-browsed: Make NotifLeaseDuration configurable and renew
	  after half the lease duration not 60 sec before end. The
	  early renewal improves reliability on busy systems a
	  lot. For easier development and debugging short durations
	  from 300 sec on can get selected (Pull request #378).

CHANGES IN V1.28.9

	- libcupsfilters: Silenced compiler warnings
	- libcupsfilters: Removed duplicate code in the
	  apply_filters() function.
	- driverless: If there are no driverless IPP printers
	  available let "driverless" terminate with exit code 0 and
	  not 1, to follow CUPS' standard of backends in discovery
	  mode terminating with 0 if there are no appropriate printers
	  found (Issue #375).
	- gstoraster, foomatic-rip: Fixed Ghostscript command line for
	  counting pages as it took too long on PDFs from evince when
	  printing DjVu files (Issue #354, Pull request #371, Ubuntu
	  bug #1920730).
	- cups-browsed: Renamed ldap_connect() due to conflict in
	  new openldap (Issue #367, Pull request #370).
	- pdftoraster: Free color data after processing of each page
	  (Pull request #363).
	- cups-browsed: Always save "...-default" option entries
	  from printers.conf, regardless of presence or absense
	  of PPD file (Pull request #359).
	- cups-browsed: Start after network-online.target (Pull
	  request #360).
	- texttopdf: Set default margins when no PPD file is used
	  (Pull request #356).

CHANGES IN V1.28.8

	- libcupsfilters: Made check whether the driverless PPD to
	  generate should be a fax out PPD more reliable (Issue #343).
	- foomatic-rip: Options in the 5th command line argument of
	  the CUPS filter command line are separated only by white
	  space and not by comma, also make sure that an option "none"
	  is not considered a custom page size (Issue #348).
	- implicitclass: Raise timeout for cups-browsed's answer from
	  20s to 60s (Pull request #346).
	- libcupsfilters: In the PPD generator really give priority to
	  Apple Raster against PDF (Issue #331).

CHANGES IN V1.28.7

	- driverless: Removed the support quality check from Pull
	  request #235 as it takes significant time for each printer
	  being listed, making cups-driverd (`lpinfo -m`) timing out
	  when there are many printers (OpenPrinting CUPS issue #65).
	- libcupsfilters: In the PPD generator give priority to Apple
	  Raster against PDF (Issue #331).
	- libcupsfilters: Added NULL check when removing ".Borderless"
	  suffixes from page size names (Issue #314, Pull request
	  #328).
	- libcupsfilters: In the cupsRasterParseIPPOptions() map the
	  color spaces the same way as in the PPD generator (Issue
	  #326, Pull request #327).	
	- libcupsfilters: Fixed addition of grayscale mode in
	  generated PPD files, to avoid duplicate entries
	  (OpenPrinting CUPS issue #59).

CHANGES IN V1.28.6

	- libcupsfilters: In generated PPDs add a grayscale mode if
	  there are only color printing modes (from OpenPrinting
	  CUPS).
	- libcupsfilters: In generated PPDs add an "OutputBin" option
	  also if it has only one choice (OpenPrinting CUPS pull
	  request #18).
	- libcupsfilters: Generated PPDs could have an "Unknown"
	  default InputSlot (OpenPrinting CUPS issue #44).
	- cups-browsed: Removed unneeded IPP attribute additions
	  preventing the created local queues from preserving a
	  location or description the user assigns to them (Issue
	  #323).
	- cups-browsed: Removed all calls of the resolve_uri() function
	  of libcupsfilters, as these are not actually needed and in case
	  the supplied DNS-SD-based URI is not resolvable, the function
	  gets stuck for ~5 seconds.
	- cups-browsed: Fixed several memory leaks, mainly from the
	  code to merge printer IPP attributes for clusters (Pull
	  request #322).
	- cups-browsed: Silenced compiler warning.
	- foomatic-rip: Fix infinite loop and input from file on raw
	  printing (Pull request #318).
	- foomatic-rip: Remove temporary file created during pdf-to-ps
	  conversion (Pull request #313).

CHANGES IN V1.28.5

	- cups-browsed: UUID from IPP response was used after its
	  pointer was freed by ippDelete() (Pull request #311).

CHANGES IN V1.28.4

	- driverless: Avoid duplicate PPD list entries from the same
          device via UUID
	- driverless: Reduce ippfind calls by "driverless" and
	  "driverless-fax"called by CUPS. Let "driverless list" list
	  both print and fax PPDs and "driverless-fax list" do
	  nothing.
	- driverless: Avoid duplicate listings in printer discovery,
	  by "driverless-fax" not listing any URI as "driverless"
	  lists them all already.
	- driverless: Vastly improve performance by doing only one
	  ippfind call instead of two (IPP, IPPS) as ippfind accepts
	  more than one reg type on the command line.
	- Sample PPDs: Corrected manufacturer name in
	  Fuji_Xerox-DocuPrint_CM305_df-PDF.ppd.

CHANGES IN V1.28.3

	- libcupsfilters, cups-browsed: Fixed inconsistency between
	  resolvers for DNS-SD-based URIs, resolve_uri() and
	  ippfind_based_uri_converter(). Now both return a freeable
	  string.
	- libcupsfilters: Fix uninitialized buffer and parsing ippfind
	  output in ippfind_based_uri_converter() function (Issue
	  #308, Pull request #309).

CHANGES IN V1.28.2

	- driverless: Free allocated memory, use MAX_OUTPUT_LEN (Pull
	  request #304).
	- driverless: Make the two ippfind tasks(for IPP
	  and IPPS) run in parallel (Pull request #302, #305, #306).
	- braille: Support new liblouis tables not containing a
	  display name (Pull request #303)
	- Build system: Let ./configure not error out when there is
	  more than one DejaVuSans.ttf test font candidate (Issue
	  #300).
	- cups-browsed: Crash when a remote printer set as default
	  gets removed, due to missing variable in printf() call
	  (Issue #299).
	- libcupsfilters: Removed all signal handling and global
	  variables from get_printer_attributes() and
	  ippfind_based_uri_converter().  This is overkill for these
	  quick operations and causes problems when shutting down
	  cups-browsed (Issue #298).

CHANGES IN V1.28.1

	- COPYING: Fixed several typos
	- libcupsfilters: Fixed typo in log message of
	  get_printer_attributes functions.
	- cups-browsed: Fixed typos in configuration file and man page
	- libcupsfilters: Let the PPD generator not suffix page size
	  names with ".Borderless" if all page sizes would get this
	  suffix, for example for printers which generally print
	  borderless.
	- libcupsfilters: Added "faxPrefix" option for generated IPP
	  Fax Out PPDs, so that this option also appears in print
	  dialogs.
	- driverless: List addresses for local services correctly when
	  using "--std-ipp-uris" (with "localhost" hostname).
	- driverless: Make calls of the ippfind utility somewhat faster,
	  setting the timeout of ippfind to automatic.
	- libcupsfilters: Resolve DNS-SD-based URIs for local services
	  correctly (using hostname "localhost").
	- libcupsfilters: In get_printer_attributes() functions do not
	  try to convert URIs which are not DNS-SD-based (Issue #294).
	- libcupsfilters: In get_printer_attributes() functions also
	  support URIs with "dnssd://..." scheme.
	- libcupsfilters: Moved signal handling back into main
	  function of the get_printer_attributes() variants, it got
	  moved out accidentally.
	- driverless: For generating a PPD, independent whether via
	  "driverless URI" or "driverless cat URI", always allow CUPS
	  driver URIs (prefixed with "driverless: " or
	  "driverless-fax:") and pure IPP URIs.
	- driverless: Accept clean IPP URIs also for 'driverless cat
	  ...' (Issue #295, Pull request #296).
	- driverless-fax: Do not use fixed path for call of driverless
	  itself (Pull request #293).

CHANGES IN V1.28.0

	- driverless, driverless-fax, libcupsfilters: Added IPP Fax
	  Out support. Now printer setup tools list an additional fax
	  "driver".  A fax queue is created by selecting this
	  driver. Jobs have to be sent with "-o phone=12345" to supply
	  the destination phone number (Pull request #280).
	- libfontembed: Silenced warning with gcc 10.x (Pull request
	  #287).
	- cups-browsed: Added ./configure options
	  --enable-saving-created-queues and
	  --with-remote-cups-local-queue-naming (Pull request: #253,
	  #285).
	- cups-browsed: Fixed several memory leaks, mainly from the
	  code to merge printer IPP attributes for clusters (Pull
	  request #281, #283).
	- driverless: Added "--std-ipp-uris" command line option to
	  show listed URIs in standard hostname-based form (not the
	  CUPS DNS-SD-service-name-based form. Only for manual call of
	  the utility, for debugging purposes (Pull request #277).
	- libfontembed: Removed assert() calls which cause crashes
	  when unsupported emoji fonts are installed (Issue #254, Pull
	  request #276).
	- driverless: Added support for IPPS (use "ipps://..." URIs if
	  possible, Issue #251, Pull request #270, #273).
	- gstoraster, gstopdf: When converting PostScript to PDF use
	  the "pdfwrite" output device with "-dPDFSETTINGS=/default"
	  instead of with "-dPDFSETTINGS=/printer". This reproduces
	  bitmaps in the PostScript file with their original image
	  quality (Issue #272).
	- cups-browsed: Limit log file size and add backup file for
	  previous log entries. Introduced the configuration option
	  DebugLogFileSize in cups-browsed.conf to set the actual
	  limit in kilobytes or 0 to get the old behavior of an
	  unlimited size for the log file (Issue #260, Pull request
	  #267).
	- gstoraster, gstopdf: Do not apply margins when output format
	  is PDF, as then we convert an incoming PostScript file to
	  PDF (pre-pdftopdf) and do not prepare the pages for the
	  printer (post-pdftopdf, Issue #250).
	- cups-browsed: Do not write any log messages directly to
	  stderr, there were some concerning timeouts on queue
	  creation (Issue #260).
	- Build system: Fix cross-compilation without DejaVu test font
	  in configure.ac (Issue #262, Pull request #263).
	- libcupsfilters: Respect the fact that PPD keywords
	  are case-sensitive when adding "*cupsManualCopies: True" in
	  PPD file (Issue #242).
	- libcupsfilters: Older versions of libcups (< 2.3.1)
	  had the enum name for fold-accordion finishings mistyped.
	  Added a workaround.
	- cups-browsed: Remove left-over local queues from the
	  previous session more quickly when CUPS legacy browsing is
	  turned on.
	- cups-browsed: Left-over local queues from the previous
	  session for which the corresponding remote printer did not
	  appear again did not get removed as they were considered
	  externally overwritten.
	- gstoraster, gstopdf: Add option "-dDoNumCopies" to
	  Ghostscript command line if we are outputting PDF (called
	  via gstopdf wrapper) and the number of copies supplied to
	  CUPS is 1 (4th command line argument). In this case we
	  convert incoming PostScript to PDF and need to respect
	  embedded PostScript commands to implement the number of
	  copies (Issue #255, CUPS Issue #5796, OpenSUSE bug
	  #1173345).
	- imagetoraster: Potential null dereference fix (when no valid
	  PPD is supplied, Pull request #256).
	- cups-browsed: Call cupsGetNamedDest() only if
	  "OnlyUnsupportedByCUPS No"
	- Sample PPDs: Corrected ColorModel default for Generic PWG
	  Raster PPD to Color (Pull request #247).
	- cups-browsed: Mark the temp queue as cups-browsed-generated
          during setting printer-is-shared (Pull request #246).
	- cups-browsed: Remove mentions of README and AUTHORS files in
          the man page (Pull request #244).
	- pclmtoraster: Added new filter to extract Raster data from
	  raster-only PDF files, here for the special case of PCLm
	  files (Pull request #243, #257).
	- Sample PPDs: In Generic-PDF_Printer-PDF.ppd add option to
	  switch between color and grayscale printing (Pull request
	  #237).

CHANGES IN V1.27.5

	- cups-browsed: Do not remove the created local queues on
	  shutdown, to avoid their re-creation on restart, so that
	  desktops get no cluttered with notifications of new queues
	  being created. One can return to the old behavior via
	  "KeepGeneratedQueuesOnShutdown No" in cups-browsed.conf
	  (Ubuntu bug #1869981, #1878241).
	- cups-browsed: Do not accept DNS-SD broadcasts of IPPS type
	  of "remote" CUPS queues of another CUPS instance on the
	  local machine. This way we get a local queue pointing to
	  such a printer only in unencrypted version (IPP). For some
	  reason printing from one CUPS server to another on the same
	  machine works only unencrypted.
	- foomatic-rip: Map two-sided-short-edge to DuplexTumble (Pull
          request #236)
	- Build system: In configure.ac use AS_IF instead of
          AC_CHECK_FILE for font check (Issue #239, Pull request #240)
	- cups-browsed: Cleaned up code for determining to which CUPS
	  server (host/port/domain socket) to connect, so that
	  connection via DomainSocket cups-browsed.conf directive,
	  CUPS_SERVER and IPP_PORT environment variables and all
	  defaults and methods of libcups, including CUPS' client.conf
	  work.
	- gstoraster, rastertopdf: Do not pass NULL to fprintf() (Pull
          request #230).
	- libcupsfilters: Silence compiler warning (Pull request #229).

CHANGES IN V1.27.4

	- libcupsfilters, cups-browsed: Fix memory issues in
          ppdgenerator and cups-browsed (Pull request #226).
	- pdftops: Mention cups-filters README, CUPS README in debug
          log (Pull request #225).
	- pdftopdf, gstoraster, foomatic-rip: Use "-dSAFER"
          Ghostscript option, instead of the deprecated
          "-dPARANOIDSAFER" (Pull request #224).
	- Build System: Replace '==' in configure.ac test with '=', as
	  the former is a bashism (Pull request #222).

CHANGES IN V1.27.3

	- cups-browsed: Allow sharing local queues pointing to remote
	  CUPS queues and re-sharing printers discovered via
	  BrowsePoll by default, using
	  AllowResharingRemoteCUPSPrinters and
	  NewBrowsePollQueuesShared directives in cups-browsed.conf
	  (Issue #101, Pull request #218).
	- driverless: Correctly unlink temporary file when generating
	  PPD file (Pull request #220).
	- cups-browsed: Fixed memory leaks (Pull request #219).
	- foomatic-rip: PDF page count side-loads the PDF file to
	  count the pages in, so it cannot be run in -dSAFER mode. Run
	  even in -dNOSAFER mode to override the -dSAFER default of
	  newer Ghostscript versions. This should not cause a security
	  problem as we do not take an input file which could do
	  arbitrary side-loads but we run hard-coded PostScript
	  commands instead (Issue #216).
	- libfontembed: Add checks to the test programs to not
	  segfault if the test font file is not found (Pull request
	  #214).
	- Build System: Let ./configure fail if the supplied test font
	  file path (or the default) does not exist (Pull request
	  #214), also use the "find" command to find the test font
	  file DejaVuSans.ttf under /usr/share/fonts, as every
	  distribution has it somewhere else.

CHANGES IN V1.27.2

	- foomatic-rip: In some PostScript input files it was possible
	  that option settings did not get inserted or lines inserted
	  on the wron place (Issue #208, Pull request #210).
	- foomatic-rip: For the PDF page count call Ghostscript in
	  sandbox mode and fix pointer arithmetics (Pull request
	  #212).
	- foomatic-rip: Zero-page-job handling changes made the last
	  page of PostScript files not printed, also turning one-page
	  jobs into zero-page jobs (Issue #200, Issue #206, Issue
	  #208, Pull request #209, Pull request #210, Pull request
	  #211).
	- cups-browsed: check_printer_with_option() function:
	  Initialize the value, add further checks, freeing memory and
	  stop allocating magic numbers (Pull request #204).
	- cups-browsed: Additional checks against crashes in the
	  is_local_hostname() function (Ubuntu bug #1863716)

CHANGES IN V1.27.1

	- libcupsfilters: Let the PPD generator not put any dashes
	  into the PPD option and choice names when translating them
	  from IPP attribute names, to avoid that on the
	  back-translation by CUPS no double-dashes are
	  generated. This broke paper tray selections with tray names
	  like "tray-1", "tray-2", ... (Issue #192, Issue #201, Debian
	  bug #949315).
	- foomatic-rip: Fixed segfault when PRINTER environment
	  variable is not supplied.
	- pdftopdf, pdftops, gstoraster, gstopdf, gstopxl,
	  rastertoescpx, rastertopclx, foomatic-rip: Handle zero-page
	  jobs (Issue #117, Pull request #196, Pull request #197, Pull
	  request #198, Pull request #200).
	- texttopdf: Added support for CJK (double-width) fonts (Issue
	  #135, Pull request #199).
	- cups-browsed: Switched default for "CreateIPPPrinterQueues"
	  from "local-only" to "All". The configure script options
	  "--enable-auto-setup-local-only" and
	  "--enable-auto-setup-driverless-only" can be used to change
	  this default (Debian bug #921252).
	- rastertoescpx: Fixed wrong freeing of a buffer.
	- pdftops: Added options "crop-to-fit" and "fill" to the
	  pdftopdf options which the pstops called by pdftops should
	  not apply a second time.
	- pdftops: Added missing "-sstdout=%stderr" to Ghostscript
	  command line, to assure that all messages are redirected to
	  stderr and do not mix up with the output data.

CHANGES IN V1.27.0

	- cups-browsed: Eliminate the use of the local CUPS daemon's
	  (the CUPS we are attached to) port number completely, so
	  that for attaching to an arbitrary local CUPS daemon
	  listening on an arbitrary port (or even not listening on
	  localhost at all) it is enough to tell cups-browsed the
	  domain socket the CUPS daemon is listening on.
	- cups-browsed, libcupsfilters: Identify DNS-SD-reported
	  printers as of the local CUPS daemon via UUID and not via
	  the port on which the local CUPS is listening, as we do not
	  always have this port available.
	- cups-browsed: Leave the port for legacy CUPS browsing and
	  broadcasting on 631, do not use a possible alternative port
	  of the CUPS we are attached to. The legacy CUPS servers we
	  communicate with are always remote ones.
	- libcupsfilters: in the PPD generator prioritize
	  print-color-mode-supported against
	  pwg-raster-document-type-supported (Issue #186, Pull request
	  #188)
	- rastertopdf, rastertops, texttopdf, pdftoraster,
	  mupdftoraster: Handle zero-page jobs, corrections on
	  zero-page job handling (Issue #117)
	- cups-browsed: When restarting after a crash make sure that
	  local queue names have same upper/lower case as before.
	- cups-browsed: Small code improvements to reduce crash
	  probability.

CHANGES IN V1.26.2

	- cups-browsed: Added crash guards to avoid crashes in case
	  the dummy printer entry for a deleted master entry is used.
	- cups-browsed: Set the port of the local CUPS daemon to be
	  used according to the IPP_PORT environment variable.
	- cups-browsed: Eliminated the use of the cupsGetPPD2()
	  function of libcups completely, also the remaining calls
	  in the record_printer_options() and update_cups_queues()
	  functions, the former causing incomplete recording of
	  option settings and the latter use of CUPS-generated
	  PPDs not working when CUPS is running on a non-standard
	  port.
	- cups-browsed: Eliminated the use of the cupsGetPPD2()
	  function of libcups in queue_overwritten(). The function
	  actually loads the queue's PPD file if the queue is on a
	  local CUPS on port 631. Due to a bug the function fails if
	  an alternative port is used. This lets queue_overwritten()
	  always assume that the PPD got removed and therefore the
	  queue got overwritten. So queues got released from
	  cups-browsed if it was printed on them or if they were
	  supposed to be removed on shutdown.
	- foomatic-rip: Fixed compilation with -fno-common. Starting
	  from the upcoming GCC 10, the default of the -fcommon option
	  will change to -fno-common. This causes compilation errors
	  in foomatic-rip due to missing "external" declarations.
	  (Pull request #184).

CHANGES IN V1.26.1

	- build system: Install the "implicitclass" backend with
	  "-rwx------" permissions, so that CUPS executes it as root,
	  as the "ipp" CUPS backend also has to be executed as root
	  (Issue #183).
	- build system: Fixed setting permissions when installing the
	  "cups-brf" backend.
	- libcupsfilters: When using the
          "media-{bottom,left,right,top}-margin-supported" IPP
          attributes (needed if we have no "media-col-database"), use
          the minimum and not the maximum margins, this allows
          accessing more of the printer's capabilities, especially for
          legacy printers which do not provide sufficient information
          (Issue #22).

CHANGES IN V1.26.0

	- cups-browsed: When generating local queues for printers for
	  which the local CUPS daemon would provide temporary queues
	  use the PPDs generated by libcupsfilters and not the ones
	  generated by CUPS. The PPD generation of libcupsfilters also
	  works with IPP-1.x-only printers, printers which do not
	  support to query "media-col-database" and printers which
	  support driverless printing only via PCLm. This can be
	  changed via the "UseCUPSGeneratedPPDs" directive in
	  cups-browsed.conf (Issue #22).
	- libcupsfilters: Re-structured the get_printer_attributes()
	  function to remove the recursive calls for the fallbacks, to
	  check required attributes in the response only if requested,
	  and to fully integrate the method of getting a suitable
	  response for a full printer capability list also if the
	  printer is only IPP 1.1 or does not support the
	  "media-col-database" attribute (Issue #22, Issue #163).
	- libcupsfilters, cups-browsed, driverless: Moved the funtions
	  get_printer_attributes() and resolve_uri() from cups-browsed
	  into libcupsfilters, to share them with the driverless
	  utility (Issue #22).
	- implicitclass: Fixed wrong stdout redirection from the
	  filters to the IPP backend and hard-coded path for "ipp"
	  backend call (Possible fix for Issue #163, Issue #181).
	- cups-browsed, driverless: Use DNS-SD-service-name-based URIs
	  instead of host-name-based ones, as CUPS also does. In
	  cups-browsed one can switch back to the conventional
	  host-name-based URIs via the new "DNSSDBasedDeviceURIs"
	  configuration option.  Note that cups-browsed always uses
	  conventional URIs for printers discovered via legacy CUPS
	  browsing or LDAP.
	- cups-browsed: When removing a CUPS queue, do not consider an
	  error (and retry) if the queue does not actually exist. Also
	  ignore errors when checking whether there are still
	  jobs. This way when a new queue gets created and the
	  generation of the PPD file fails the attempt to remove this
	  non-existing queueu when removing the printer entry does not
	  cause any problem.
	- cups-browsed: Improved the fallback mechanism of the
	  get_printer_attributes() function. Instead of considering
	  the request failed by the content of the response only when
	  not more than the two language atrributes come out, we check
	  through a list of required attributes whether they are all
	  there.  In addition, we actually fail when all callbacks
	  have failed (Issue #22).
	- cups-browsed: Introduced new configuration options
	  "UpdateCUPSQueuesMaxPerCall" and
	  "PauseBetweenCUPSQueueUpdates" to limit the amount of local
	  CUPS queues created, modified, or removed in a single event
	  callback. Before, when there were thousands of printers in
	  the network, cups-browsed got blocked for other tasks, like
	  assigning a destination printer for a cluster print job
	  (Issue #163).

CHANGES IN V1.25.13

	- implicitclass: When passing on the job via the "ipp" CUPS
	  backend, set argv[0] to the destination printer URI (Pull
	  request #173).
	- cups-browsed: Added another fallback to the
	  get-printer-attributes IPP request: Now after failing the
	  standard request ("all", "media-col-database") with both IPP
	  2.0 and IPP 1.1, try simply "all", without
	  "media-col-database" (Pull request #173).
	- cups-browsed: Do not set printer-is-shared for remote CUPS
	  queue when making a temporary queue permanent (Pull request
	  #180).
	- cups-browsed: Fix leaks of ipp_t struct and load balancing
	  on the servers (Pull request #179).
	- cups-browsed, implicitclass: Prioritize Apple Raster against
	  PWG Raster when selecting the PDL for the destination
	  printer for a job sent to a cluster, also cleaned up the PDL
	  selector code and added PostScript support.
	- libcupsfilters: Updated the PPD generator adding all changes
	  of the PPD generator of CUPS: Support for "job-account-id",
	  "job-accounting-user-id", "job-password", finishing options
	  "trim-..." added, finishing options and
	  "finishing-col-database" support synced with CUPS.
	- libcupsfilters: In the PPD generator get the mode for
	  handling the back sides of the sheets when printing duplex
	  preferrably from the "urf-supported" attribute.
	- libcupsfilters: Fixed bug that the PPD generator did not
	  output the "*CloseUI: *ColorModel" line when it did not
	  determine a default setting for "ColorModel".
	- cups-browsed: Added some missing memory allocations leading
	  to a segfault (Issue #175).

CHANGES IN V1.25.12

	- libcupsfilters: Use the text names "Draft", "Normal", and
	  "High" instead of 3, 4, and 5 as choice names for the
	  "cupsPrintQuality" option as CUPS does (Issue #171).
	- libcupsfilters: If a printer supports both Apple Raster and
	  PWG Raster let the generated PPD use Apple Raster as there
	  are several printers which report PWG Raster support but do
	  not actually print PWG Raster (Pull reguest #168, Issue
	  #171, CUPS issue #5238).
	- cups-browsed: Fix unset location check to use DNS-SD field
	  (Pull request #172).
	- libcupsfilters, beh, implicitclass, foomatic-rip,
	  imagetopdf, mupdftoraster, pdftops, sys5ippprinter,
	  cups-browsed, driverless: Silenced all compiler warnings to
	  make the build process of cups-filters completely free of
	  warnings.
	- pdftops: Fixed crash when using filter without PPD file.
	- pdftops: If printing grayscale jobs with Ghostscript as PDF
	  renderer, add "-sProcessColorModel=DeviceGray" to
	  Ghostscript command line.
	- pdftops: Do not use the ugly "pdftops -level1 ..."
	  workaround to get grayscale PostScript output from
	  Poppler. It leads to huge output files with Poppler's
	  "pdftops" utility and does not work at all with
	  "pdftocairo".  Poppler itself does not support PostScript
	  output converted to grayscale. Issue a warning with the hint
	  to use Ghostscript or MuPDF as PDF renderer (Issue #169).
	- libcupsfilters: In the cupsRasterParseIPPOptions()
	  accept also "Mono", "Monochrome", and "Gray" as color
	  space names.

CHANGES IN V1.25.11

	- cups-browsed: Really accept entries without printer name
	  reported on a job status request (Issue #163).
	- cups-browsed: Strip IPP attribute values reported by the
	  printer on a get-printer-attributes request from white
	  space (Pull request #166).

CHANGES IN V1.25.10

	- libcupsfilters: Added NULL checks when handling page size
	  names as some of the page sizes in CUPS' PWG media list have
	  a NULL PPD name (Ubuntu bug #1847488).

CHANGES IN V1.25.9

	- cups-browsed: Fix leaks in get_printer_attributes() function.
	- cups-browsed: Avoid infinite recursion on IPP 1.1 fallback.

CHANGES IN V1.25.8

	- cups-browsed: On a job status request accept also entries
	  without the printer name being reported (Issue #163).
	- cups-browsed: Fall back to IPP 1.1 if a
	  get-printer-attributes IPP request with IPP 2.x fails (Issue
	  #124, Issue #163).
	- gstoraster: Use ".setfilladjust2" instead of the
	  undocumented ".setfilladjust" PostScript command for
	  Center-of-Pixel method to fill paths (Issue #164).

CHANGES IN V1.25.7

	- implicitclass, libcupsfilters: Fixes to solve an assertion
	  error and printing to an Apple Raster printer (Issue #162,
	  Ubuntu bug #1845286, Ubuntu bug #1845548).
	- cups-browsed: Do not try to resolve the network interface
	  name on Avahi messages which are not interface-related (like
	  "All for now"or "Cache exhausted", Issue #163).
	- Build system: The helper script ln-srf to build on systems
	  with old ln was not included in the release tarballs (Issue
	  #161).
	- pdftoraster: Fixed some bugs in output bitmap generation (
	  writePageImage() function): Segfault on output of
	  up-side-down pages (back side when printing duplex on some
	  printers), margin offsets not taken into account on
	  monochrome jobs, CUPS_CSPACE_W color space not recognized as
	  monochrome (Ubuntu bug #1845286).

CHANGES IN V1.25.6

	- implicitclass: Make sure the destination printer gets always
	  set and do not pass on the cups-browsed-dest-printer when
	  sending the job to the final destination (Issue #152, Pull
	  request #159).
	- Build system: Support old ln versions without the -r option
	  (Pull request #154, #157).
	- texttotext: Link with libiconv if needed (Pull request
	  #155, #158).
	- foomatic-rip: Fix argument representation for raw queue
	  debug mesaage (Pull request #153).

CHANGES IN V1.25.5

	- bannertopdf: Added missing "#include <cstring>" to pdf.cxx
	  so that bannertopdf correctly builds with QPDF 9.0.0 (Issue
	  #134, Issue #151, Gentoo bug #693498).
	- rastertopdf: Let the getIPPColorProfileName() function not
	  return a pointer to a local variable (clang warning, Issue
	  #150).
	- 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
          #147).

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
	  through pdftopdf).
	- 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
	  "Custom.XXXxYYY" then.
	- 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
	  #136).
	- 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
	  requested.
	- 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).

CHANGES IN V1.25.1

	- imagetopdf: Fixed crash when no PPD file was supplied (Pull
	  request #133).
	- pdftoraster: Fixed offset issues leading to segmentation
	  faults (Issue #131, Pull request #132).
	- pdftoraster: Added anti-aliasing for better raster image
	  quality (Pull request #129).
	- pdftoraster: Added graceful handling of zero-page input
	  (Issue #117, Pull request #127).

CHANGES IN V1.25.0

	- pdftoijs, pdftoopvp: Removed these deprecated filters
	  completely as there is no demand for them any more. They
	  also used unstable, undocumented APIs of Poppler.
	- pdftoraster: Changed from using unstable, undocumented APIs
	  of Poppler to stable, documented ones, to improve
	  maintainability of this filter, and with it of the
	  cups-filters package. Thanks to Tanmay Anand for
	  contributing this as his Google Summer of Code 2019 project.
	- libcupsfilters: Added support for color spaces CMY and RGBW
	  when using filters without PPD file (mainly for development
	  and debugging, option "print-color-mode" with values
	  "cmy-XX" and "rgbw-XX" with XX being the number of bits per
	  color).

CHANGES IN V1.24.0

	- cups-browsed: Integration of Deepak Patankar's Google Summer
	  of Code 2018 project with the main goal of clustering
	  different printers and automatically selecting the
	  destination printers by job content and option/attribute
	  settings. All changes of this release are done by Deepak as
	  parts of his project.
	- cups-browsed, implicitclass: Support for mixed clusters of
	  remote CUPS queues and IPP network printers. For this PPD
	  files of remote CUPS queues are generated by cups-browsed
	  based on IPP queries, as for native IPP printers, the number
	  of jobs for load balancing is polled in a way that it works
	  also with native IPP printers, the implicitclass backend
	  sends jobs directky to the printer instead of re-queueing
	  them via CUPS.
	- cups-browsed: Merge IPP attributes of several printers to
	  combined attributes for the cluster to generate the
	  cluster's PPD file, including PPD constraints for option
	  combinations not fulfillable by any of the member printers,
	  and finding reasonable, non-conflicting default settings,
	- cups-browsed: Selection algorithm for the destination
	  printer for a job sent to the cluster. Based on the job
	  settings requested such as page size, media type, print
	  quality, ... the best most suitable printer in the cluster
	  for the job will be selected.
	- cups-browsed, implicitclass: Filter jobs to clusters already
	  locally. Due to the fact that a cluster's member printers
	  are not exclusively non-raw CUPS queues with the complete
	  filtering framework on the remote server, but also native
	  IPP printers, we need to support generic driverless printers
	  as destination. So we cannot pass on the input data
	  unfiltered but need to filter locally. We let the cluster's
	  PPD file emulate a PDF printer, letting the local CUPS queue
	  of the cluster run pdftopdf and any pre-filters to turn the
	  input into PDF and we let the implicitclass backend turn PDF
	  into a format understood by the destination printer,
	  supporting the 4 formats of driverless IPP printing: PDF,
	  PWG Raster, Apple Raster, PCLm.

CHANGES IN V1.23.0

	- pdftops, mupdftoraster: Let pdftops call mutool directly and
	  so that it directly outputs PostScript, eliminating the need
	  to call the mupdftoraster and rastertops filters.
	- mupdftoraster: Reduced the use of temporary files from 3 to
	  just one.
	- imagetopdf, imagetoraster, pdftopdf: Add support for
	  print-scaling option (Issue #108, Pull request #118).

CHANGES IN V1.22.6

	- rastertops: Fixed PageSize settings in the PostScript output
	  (Must be in points not in pixels).
	- pdftops, mupdftoraster: Produce actual grayscale/monochrome
	  PostScript (and not only instructions to print grayscale/
	  monochrome) for jobs to be printed in grayscale/monochrome
	  (Issue #96, Pull request #115).
	- mupdftoraster: Fixed filter not producing output at all.
	- Build system: ENABLE_DRIVERLESS got only defined with CUPS
	  1.6 and newer, not with older CUPS versions (Issue #111).
	- pdftopdf, imagetopdf, imagetoraster: Silenced compiler
          warnings.
	- cups-browsed, driverless: Replaced httpConnect() calls by
	  httpConnect2() calls as the former CUPS library function is
	  deprecated.
	- Build system: Compile everything using the CUPS libraries
	  with '-D_PPD_DEPRECATED=""' for the time being until the
	  deprecated PPD API calls get replaced, to stop the flooding
	  with PPD API deprecation warnings making more important
	  warnings being overlooked.
	- cups-browsed: When removing a local queue on shutdown or
	  when DNS-SD reports the printer as disappeared check whether
	  the local queue got overwritten by an external process as
	  sometimes the shutdown or disappearing event comes too close
	  for cups-browsed receiving a printer-modified notification
	  from CUPS before (Ubuntu bug #1731417).

CHANGES IN V1.22.5

	- foomatic-rip: Changed Ghostscript call to count pages in a
	  PDF file to use "runpdfbegin" and not the undocumented
	  Ghostscript internal "pdfdict", so that it works with
	  Ghostscript 9.27 and later (Debian bug #926576, Arch Linux
	  bug #62251).

CHANGES IN V1.22.4

	- cups-browsed: Fix broken trailing space removal on
	  "NickName" (Pull request #103).
	- pdftops: Emit PostScript Level 2 instead of Level 3 for
	  Brother PostScript printers as at least some of them
	  report to support level 3 but ontly work with Level 2
	  (Ubuntu bug #1306849, comment #42).
	- bannertopdf: When multiplying the page for N-up or Duplex
	  printing one page too much was generated (Issue #102).

CHANGES IN V1.22.3

	- libcupsfilters: Added error checks for processing GIF, to
	  avoid crashes or hangs on broken GIF files (Issues #81, #82,
	  Pull request #100).
	- cups-browsed: Added hint to the man page and configuration
	  file that with "DebugLogging stderr" the logging output goes
	  to journal or syslog if cups-browsed is running as system
	  service (Issue #28).

CHANGES IN V1.22.2

	- cups-browsed: Let distribution of jobs sent to queues with
	  "implicitclass" backend (usually clusters) be done by a
	  "job-state" CUPS notification and not by
	  "printer-state-changed" any more. The "job-state"
	  notification already contains the job ID. Before we had to
	  poll the job ID from CUPS via IPP which was sometimes
	  unreliable (Issue #97).
	- imagetopdf, imagetoraster, pdftopdf, libcupsfilters: Added
	  new page scaling options: "fill" scales the input page
	  (typically a photo) so that the output page (typically with
	  different aspect ratio) gets completely filled, aloowing for
