CHANGES-1.1.txt
---------------

CHANGES IN CUPS V1.1.23

	- Updated the Spanish man pages (STR #1041)
	- The lpstat man page contained a typo (STR #1040)
	- The scheduler's is_path_absolute() code could cause a
	  DoS (STR #1042)
	- The scheduler's device loading code used the wrong
	  size limits for the make/model and info parameters
	  (STR #1035)
	- The PNG loading code did not use a "long unsigned
	  integer" format specifier for the width and height
	  (STR #1032)
	- The web interface only showed the first 4 or 8
	  characters of "{variable-name}" for undefined template
	  variables (STR #1031)
	- The hpgltops filter did not handle a common PCL
	  command to enter HP-GL/2 mode (STR #1037)


CHANGES IN CUPS V1.1.23rc1

	- The lpr man page did not document the "-U" option (STR
	  #998)
	- The scheduler no longer sends the page-set option when
	  printing banner pages (STR #995)
	- Fixed a debug message in the imagetops filter (STR
	  #1012)
	- The lprm man page listed the "-" option in the wrong
	  order (STR #911)
	- The hpgltops filter contained two buffer overflows
	  that could potentially allow remote access to the "lp"
	  account (STR #1024)
	- The lppasswd command did not protect against file
	  descriptor or ulimit attacks (STR #1023)
	- The "lpc status" command used the wrong resource path
	  when querying the list of printers and jobs, causing
	  unnecessary authentication requests (STR #1018)
	- The httpWait() function did not handle signal
	  interruptions (STR #1020)
	- The USB backend used the wrong size status variable
	  when checking the printer status (STR #1017)
	- The scheduler did not delete classes from other
	  classes or implicit classes, which could cause a crash
	  (STR #1015)
	- The IPP backend now logs the remote print job ID at
	  log level NOTICE instead of INFO (so it shows up in
	  the error_log file...)


CHANGES IN CUPS V1.1.22

	- The lpstat man page incorrectly listed the "-s" option
	  as using the equivalent of the "-p" option to list the
	  printers; it uses the "-v" option to list the printers
	  (STR #986)
	- Now allow 0-length reads in the CUPS file API (STR
	  #985)
	- cupsDoFileRequest() now sets cupsLastError() to
	  IPP_ERROR on network errors (STR #953)
	- The pdftops filter didn't scale small pages up to the
	  output page size when the fitplot option was used (STR
	  #984)
	- Fixed the ipptest program usage message (STR #959)
	- Added Spanish man pages (STR #963)
	- Fixed the order of comparisons in the client.conf
	  reading code (STR #971)
	- cupsLangGet() incorrectly set the current locale (STR
	  #970)


CHANGES IN CUPS V1.1.22rc2

	- The pdftops filter didn't check the range of all
	  integer attributes (STR #972)
	- Documentation corrections (STR #944, STR #946)
	- Also sanitize device URI in argv[0] (STR #933)
	- cupsRasterReadHeader() didn't swap bytes for the
	  numeric fields properly (STR #930)


CHANGES IN CUPS V1.1.22rc1

	- Now sanitize the device URI that is reported in the
	  error_log file (STR #920)
	- Fixed some memory and file descriptor leaks in the job
	  dispatch code (STR #921)
	- Deleting a printer could cause a crash with browsing
	  enabled (STR #865, STR #881, STR #928)
	- Browsing would turn off if the scheduler got an EAGAIN
	  error (STR #924)
	- The mime.types file didn't recognize PostScript as a
	  PJL language name (STR #925)


CHANGES IN CUPS V1.1.21

	- The scheduler did not separate Digest authentication
	  parameters with commas (STR #882)
	- Fixed some problems with image printing to custom page
	  sizes (STR #891)
	- Removed the remaining scheduler code that did not use
	  the "close-on-exec" file descriptor flag to speed up
	  program invocations (STR #890)
	- The "lpr -r" command removed the print file even if it
	  was not printed. It now only removes the file if the
	  job is successfully created (STR #886)
	- Revamped the custom page size orientation fix (STR
	  #127)
	- The lp, lpq, lpr, and lpstat commands now report when
	  an environment variable is pointing to a non-existent
	  printer instead of just saying "no default
	  destination" (STR #879)
	- Queue names with 2 periods (e.g. "printer..2") were
	  not supported (STR #866)


CHANGES IN CUPS V1.1.21rc2

	- Fixed a denial-of-service bug in the CUPS browse
	  protocol support (STR #863)
	- The scheduler used a select() timeout of INT_MAX
	  seconds when there was nothing to do, which doesn't
	  work on IRIX (STR #864)
	- Updated the cupsaddsmb program to use the new Windows
	  2000 PostScript drivers instead of the Windows NT
	  printer drivers (STR #390)
	- The gziptoany filter did not produce copies for raw
	  print jobs (STR #808)
	- The cupsLangGet() function now uses nl_langinfo(),
	  when available, to get the current encoding (STR #856)
	- Added a ReloadTimeout directive to control how long
	  the scheduler waits for jobs to complete before
	  restarting the scheduler (STR #861)
	- Added a note to the default cupsd.conf file which
	  mentions that you must allow connections from
	  localhost for the command-line and web interfaces to
	  work (STR #850)
	- The IPP backend incorrectly used the local port when
	  communicating with a remote server; this caused
	  problems with some custom configurations (STR #852)
	- The cups-lpd mini-daemon wasn't using the right
	  default banner option (STR #851)
	- Updated the new httpDecode64_2() and httpEncode64_2()
	  functions to handle arbitrary binary data, not just
	  text (STR #860)
	- String options with quotes in their values were not
	  quoted properly by the scheduler (STR #839)
	- Configure script changes for GNU/Hurd (STR #838)
	- The lppasswd program was not installed properly by GNU
	  install when the installer was not root (STR #836)
	- Updated the cups-lpd man page (STR #843)
	- Fixed a typo in the cupsd man page (STR #833)
	- The USB backend now defaults to using the newer
	  /dev/usb/lpN filenames; this helps on systems which
	  use the devfs filesystem type on Linux (STR #818)
	- The config.h file did not define the HAVE_USERSEC_H
	  constant when the configure script detected the
	  usersec.h header file. This caused authentication
	  errors on AIX (STR #832)
	- The lp and lpr commands now report the temporary
	  filename and error if they are unable to create a
	  temporary file (STR #812)
	- Added ServerTokens directive to control the Server
	  header in HTTP responses (STR #792)
	- Added new httpDecode64_2(), httpEncode64_2(), and
	  httpSeparate2() functions which offer buffer size
	  arguments (STR #797)
	- The cupsGetFile() and cupsPutFile() code did not
	  support CDSA or GNUTLS (STR #794)
	- The httpSeparate() function did not decode all
	  character escapes (STR #795)
	- The cupstestppd program now checks for invalid Duplex
	  option choices and fails PPD files that use
	  non-standard values (STR #791)
	- Updated the printer name error message to indicate
	  that spaces are not allowed (STR #675)
	- The scheduler didn't handle HTTP GET form data
	  properly (STR #744)
	- The pstops filter now makes sure that the prolog code
	  is sent before the setup code (STR #776)
	- The pstops filter now handles print files that
	  incorrectly start @PJL commands without a language
	  escape (STR #734)
	- Miscellaneous build fixes for NetBSD (STR #788)
	- Added support for quoted system group names (STR #784)
	- Added "version" option to IPP backend to workaround
	  serious bug in Linksys's IPP implementation (STR #767)
	- Added Spanish translation of web interface (STR #772,
	  STR #802)
	- The LPD backend now uses geteuid() instead of getuid()
	  when it is available (STR #752)
	- The IPP backend did not report the printer state if
	  the wait option was set to "no" (STR #761)
	- The printer state was not updated for "STATE: foo,bar"
	  messages (STR #745)
	- Added new CUPS API convenience functions which accept
	  a HTTP connection to eliminate extra username/password
	  prompts. This resolves a previous authentication
	  caching issue (STR #729, STR #743)
	- The scheduler did not correctly throttle the browse
	  broadcasts, resulting in missing printers on client
	  machines (STR #754)
	- The scheduler did not pass the correct CUPS_ENCRYPTION
	  setting to CGI programs which caused problems on
	  systems which used non-standard encryption settings
	  (STR #773)
	- The lpq command showed 11st, 12nd, and 13rd instead of
	  11th, 12th, and 13th for the rank (STR #769)
	- "make install" didn't work on some platforms due to an
	  error in the man page makefiles (STR #775)
	- Changed some calls to snprintf() in the scheduler to
	  SetStringf() (STR #740)


CHANGES IN CUPS V1.1.21rc1

	- Fixed some "type-punned" warnings produced by GCC when
	  -fstrict-aliasing is specified (STR #679)
	- The PDF filter incorrectly calculated the bounding box
	  of a page (STR #682)
	- The IPP backend did not use SSL when printing over a
	  port other than 443 (STR #730)
	- The scheduler could crash when processing a Limit or
	  LimitExcept directive (STR #728)
	- The lpq, lpr, and lp commands did not differentiate
	  between the server being unresponsive and the lack of
	  a default printer (STR #728)
	- The PAM checks in the configure script did not stop
	  after the first match (STR #728)
	- The cups-config man page was incorrectly placed in
	  section 3 (STR #728)
	- The cupstestppd utility did not show a warning message
	  when a PPD file indicated BCP protocol support with
	  PJL (STR #720)
	- The scheduler did not return the correct exit code
	  when startup failed (STR #718)
	- The cupsRasterReadPixels() function checked for
	  EAGAIN, which caused problems on FreeBSD (STR #723)
	- The cupsGetDests() function did not use the current
	  encryption setting (STR #653)
	- The scheduler did not properly parse name-based
	  BrowseRelay directives in the cupsd.conf file (STR
	  #711)
	- The IPP backend now supports the following options in
	  the device URI: encryption, waitjob, and waitprinter
	  (STR #699)
	- The parallel, serial, socket, and USB backends did not
	  return a non-zero exit status when a job failed to
	  print in the middle of sending it (STR #715)
	- Location directives in the cupsd.conf file were
	  case-sensitive for printer and class names, so
	  queue-specific access control was not reliable (STR
	  #700)
	- cupsDoFileRequest() did not handle HTTP continue
	  status messages in all cases, causing sporatic
	  problems with IPP printers from some vendors (STR
	  #716)
	- The rastertodymo driver now supports the Zebra ZPL
	  language (STR #713)
	- The test suite no longer generates a printcap file,
	  which caused problems when testing as the root user
	  (STR #693)
	- The scheduler now updates the accepting state of an
	  implicit class based upon the accepting state of its
	  member printers (STR #697)
	- The pstops filter didn't properly skip leading PJL
	  commands (STR #664)
	- The reinterpret_cast keyword was not highlighted when
	  printing C/C++ source files in prettyprint mode (STR
	  #694)
	- Fixed a segfault problem with some of the client
	  programs (STR #668)
	- When using RunAsUser, the scheduler did not correctly
	  set the ownership of the log files, preventing log
	  file rotation (STR #686)
	- The image filters did not correctly load 1-bit PNG
	  files (STR #687)
	- The pdftops filter did not show all annotation objects
	  in a PDF file (STR #674)
	- The pdftops filter did not print the contents of
	  textual form elements, making it impossible to print a
	  filled-in form (STR #663)
	- Integrated the MacOS X/Darwin USB backend into the
	  CUPS baseline (STR #661)
	- The USB backend incorrectly reported "media tray
	  empty" (STR #660)
	- The scheduler did not use a case-insensitive
	  comparison when checking for group membership, which
	  caused problems with Win9x clients printing via SAMBA
	  (STR #647)
	- The scheduler did not report the addresses associated
	  with certain network errors, making troubleshooting
	  difficult (STR #648, #649)
	- The cupstestppd program did not allow a default choice
	  of "Unknown" as required by the PPD spec (STR #651)
	- The select() buffers are now allocated to be at least
	  as large as sizeof(fd_set) (STR #639)
	- The LPD backend now supports overriding the print job
	  username via the device URI (STR #631)
	- The scheduler did not handle an unknown MIME type when
	  checking for a CGI script (STR #603)
	- Added a timeout optimization to the scheduler's main
	  loop to allow CUPS to sleep more of the time (STR
	  #629)
	- The USB backend now retries printing to devices of the
	  form "usb://make/model" if any USB port shows up as
	  "busy" (STR #617)
	- The httpGetHostByName() function did not range check
	  IP address values (STR #608)
	- The httpUpdate() function could return HTTP_ERROR
	  instead of the HTTP status if the server closed the
	  connection before the client received the whole
	  response (STR #611)
	- The LPD mini-daemon did not allow the administrator to
	  force banner pages on (STR #605)
	- Added PAM support for Darwin/MacOS X (STR #550)
	- The web interface now provides a "Set As Default"
	  button to set the default printer or class on a server
	  (STR #577)
	- The HTTP authentication cache was broken (STR #517)
	- The cupstestppd utility now fails PPD files that have
	  a DefaultOption keyword for a non-existance option
	  name (STR #476)
	- Optimized the scanning of new PPD files on scheduler
	  startup (STR #424)
	- The EPM list file did not include the bin, lib, or
	  sbin directories (STR #598)
	- The web interface did not redirect administration
	  tasks to the primary server for a class or printer
	  (STR #491, #652)
	- The cups-lpd mini-daemon did not reject print jobs to
	  queues that were rejecting new print jobs (STR #515)
	- Some calls to the ctype functions did not account for
	  platforms that use a signed char type by default (STR
	  #518)
	- The scheduler could use excess amounts of CPU if a CGI
	  program was sending data faster than the client could
	  take it (STR #595)
	- Updated the Ghostscript 8.x integration stuff (STR
	  #484)
	- The lpd backend used a source port of 732 by default,
	  which is outside of the range defined by RFC 1179;
	  also added a new (default) "reserve=any" option for
	  any priviledged port from 1 to 1023 (STR #474)
	- The scheduler did not check for a valid Listen/Port
	  configuration (STR #499)
	- The cupsPrintFiles() function did not always set the
	  last IPP error message (STR #538)
	- The pstops filter did not write the PostScript header
	  line if the file began with a PJL escape sequence (STR
	  #574)
	- The printer-is-accepting-jobs status of remote
	  printers was not sent to clients via browsing or
	  polling (STR #571)
	- Browse packets did not indicate whether a printer
	  was accepting or rejecting jobs.
	- The web interface did not show the printer state
	  history information (STR #592)
	- The rastertoepson filter would crash under certain
	  cirsumstances (STR #583)
	- The USB backend did not handle serial numbers using
	  the (incorrect) SN keyword and did not terminate the
	  make and model name strings properly (STR #471, STR
	  #588)
	- The USB backend did not build on Solaris x86 (STR
	  #585)
	- The cupsDoAuthentication() function did not use the
	  method name for Digest authentication (STR #584)
	- The scheduler could crash if a print job could not be
	  printed and the PreserveJobHistory option was turned
	  off (STR #535)
	- cups-lpd now logs the temporary filenames that could
	  not be opened in order to make troubleshooting easier
	  (STR #565)
	- cupsGetJobs() now returns -1 on error (STR #569)
	- Added localization for Belarusian (STR #575)
	- The LPD backend used the full length of the hostname
	  when creating the data and control filenames, which
	  causes problems with older systems that can't handle
	  long filenames (STR #560)
	- The scheduler did not refresh the common printer data
	  after a fast reload; this prevented banner and other
	  information from being updated (STR #562)
	- The scheduler did not send common or history data to
	  the client when processing a CUPS-Get-Default request
	  (STR #559)
	- The httpFlush() function did not always flush the
	  remaining response data in requests (STR #558)
	- The scheduler could complete a job before it collected
	  the exit status from all filters and the backend (STR
	  #448)
	- The PPD conformance tests did not catch group
	  translation strings that exceeded the maximum allowed
	  size (STR #454)
	- Updated the client code in the scheduler to close the
	  client connection on errors rather than shutting down
	  the receive end of the socket; this caused resource
	  problems on some systems (STR #434)
	- cups-polld didn't compile on Tru64 5.1B (STR #436)
	- "lpc stat" crashed if the device URI was empty (STR
	  #548)
	- The scheduler did not compile without zlib (STR #433)
	- std:floor() cast needed on IRIX 6.5 with SGI C++
	  compiler (STR #497)
	- cupsRasterReadPixels() and cupsRasterWritePixels() did
	  not handle EAGAIN and EINTR properly (STR #473)
	- RequiresPageRegion should not be consulted for Manual
	  Feed (STR #514)
	- International characters were not substituted in
	  banner files properly (STR #468)
	- Updated pdftops to Xpdf 2.03 code to fix printing bugs
	  (STR #470)
	- The Digest authentication code did not include the
	  (required) "uri" attribute in the Authorization
	  response, preventing interoperation with Apache
	  (STR #408)
	- The web interface could lockup when displaying certain
	  URLs (STR #459)
	- The PostScript filters now convert underscores ("_")
	  to spaces for custom classification names (STR #555)


CHANGES IN CUPS V1.1.20

	- The pstops filter didn't properly handle collated,
	  duplexed copies of documents with an odd number of
	  pages on printers that did not do their own collated
	  copies (STR #389)
	- Tru64 doesn't define a prototype for hstrerror() (STR
	  #430)
	- Updated the pdftops filter to use the annotation flags
	  instead of the subtype to determine whether to print
	  an annotation (STR #425)
	- The French web interface localization did not use
	  absolute paths for the navigation bar (STR #428)
	- The CUPS test suite did not undefine the PRINTER and
	  LPDEST environment variables. This could lead to bogus
	  test results (STR #380)
	- The cupsLangDefault() function now works if you don't
	  have the base OS localization installed (STR #418)
	- The pdftops filter no longer needs to create temporary
	  files with tmpnam (STR #406)
	- The HTTP code did not use a case-insensitive
	  comparison when checking for the Basic authentication
	  method (STR #407)
	- The httpEncode() function always added a trailing "="
	  character, which is not required by the Base64
	  encoding specification (STR #407)
	- The signal handlers did not need to call sigset();
	  this caused a recursion problem on some versions of
	  IRIX (STR #422)
	- Moved the scheduler termination code into the mainline
	  to be consistent with the way other signals are
	  handled (STR #423)
	- The cupsaddsmb program didn't export the new CUPS
	  driver for Windows properly (STR #390)
	- The ppdOpen() functions did not issue an error when a
	  translation string exceeded the maximum allowed by the
	  Adobe PPD specification (STR #399)
	- The default landscape orientation was not the same as
	  that defined in the PPD file (STR #397)
	- Updated the pstoraster patch files and CUPS driver to
	  work with Ghostscript 8 (STR #402)
	- The hpgltops filter did not skip PJL commands (STR
	  #379)


CHANGES IN CUPS V1.1.20rc6

	- "lp -i jobid -H restart" would often return an error
	  even though the job restarted successfully (STR #362)
	- The scheduler did not check for invalid allow/deny
	  addresses such as "11.22.33.44/24". It now masks off
	  the extra address bits and logs a warning message in
	  the error_log file (STR #337)
	- The cupstestppd utility now checks for missing
	  ImageableArea and PaperDimension attributes for each
	  defined PageSize (STR #365)
	- The IPP code did not wait for a reply indefinitely on
	  HTTP connections in "blocking" mode (STR #377)
	- The web interfaces did not rewrite the default printer
	  URI properly (STR #299 and #369)
	- The LPD backend passed the C and L commands in the
	  wrong order (STR #378)
	- The Dymo label printer driver did not set the label
	  length properly (STR #373)
	- The scheduler did not support job IDs higher than
	  99999 (STR #371)
	- The Visual C++ project files did not work (STR #366)
	- The scheduler's cupsLangSeek() function did not reset
	  the "EOF" flag, preventing compressed files from being
	  typed properly in some cases (STR #368)
	- The cupsLangGet() cache was only used if the locale
	  name provided an explicit character set name (STR
	  #354)
	- The CUPS API convenience functions did not call
	  cupsLangFree() when they were done with the
	  localization data (STR #354)
	- The scheduler did not return the
	  job-hold-until-supported or job-hold-until-default
	  attributes (STR #356)
	- The cupsaddsmb program did not support the new CUPS
	  driver for Windows (STR #357)


CHANGES IN CUPS V1.1.20rc5

	- The scheduler did not initialize the browse socket
	  file descriptor properly when only SLP browsing was
	  enabled (STR #259)
	- The scheduler accessed the job attributes before they
	  were set (STR #347, fix to STR #335)
	- The cupsCancelJob() function did not return 0 when the
	  job could not be canceled (STR #340)


CHANGES IN CUPS V1.1.20rc4

	- The scheduler did not move the incoming job attributes
	  in the operation group to the job group (STR #335)
	- The cupsDoFileRequest() function did not check for an
	  early HTTP response while sending the file (STR #314)
	- The web interfaces did not quote #, ?, or . in printer
	  names, which caused some problems with the generated
	  URLs (STR #320)
	- CUPS couldn't be completely compiled with the -dDEBUG
	  option (STR #331)


CHANGES IN CUPS V1.1.20rc3

	- More SLP changes (STR #259)
	- Revamped the child signal handling code to completely
	  avoid deadlock issues on Solaris (STR #325)
	- The lpadmin command displayed an incorrect error
	  message when the "-u" option was provided with no
	  arguments (STR #313)
	- The web admin interface did not display an error
	  message if the PPD file could not be loaded (STR #308)
	- The ppdEmit() functions did not use the correct
	  orientation value position for custom page sizes (STR
	  #292)


CHANGES IN CUPS V1.1.20rc2

	- The serial backend set the IXANY option on the port
	  for XON/XOFF flow control; this caused problems with
	  printers that returned status info but were not ready
	  for more print data (STR #287)
	- The scheduler didn't support scripted index files
	  (index.php, index.pl, etc. - STR #290)
	- The scheduler did not correctly localize script files
	  with "GET" variables (STR #268)
	- Changes in job classification are now logged (STR
	  #289)
	- Fixed a few more SLP-related bugs (STR #259)
	- Updated the user/group configure checks for MacOS X
	  10.3 (STR #270)
	- Fixed an offset bug in the PDF filter (STR #284)
	- The cupsDoRequest() and cupsDoFileRequest() functions
	  did not map several HTTP status codes to their IPP
	  counterparts. This made detecting certain conditions
	  very difficult (STR #277)
	- Config, spool, and status files are now owned by the
	  scheduler user (usually root) with read permission for
	  the filter group (STR #283)
	- The HP-GL/2 filter did not support the SI command,
	  some values for the AD and SD commands, and did not
	  rotate labels properly via the DI command (STR #282)
	- The fax support did not update/set the job-hold-until
	  attribute when a fax job fails (STR #269)
	- The cupsLangGet() function didn't support locales of
	  the form "ll.charset" (STR #271)
	- The scheduler did not use the charset when getting the
	  language localization for a request; this caused extra
	  disk IO for every request (STR #271)
	- The scheduler did not support requests with more than
	  one language specified (STR #267)


CHANGES IN CUPS V1.1.20rc1

	- The scheduler now waits up to 60 seconds before
	  restarting to allow active jobs to complete printing
	  and pending requests to be processed (STR #226)
	- The web interface did not work on systems where time_t
	  is 64 bits (STR #262)
	- Added backend tweeks and content-length check from Red
	  Hat (STR #253)
	- The USB backend now uses the 8255 constants instead of
	  the standard constants when reporting printer status
	  bits on Linux (STR #254)
	- Added new cupsDoAuthentication(), cupsGetFd(),
	  cupsGetFile(), cupsPutFd(), and cupsPutFile() functions
	  to the CUPS API (STR #112)
	- The PDF filter always scaled and offset pages; this
	  caused problems under MacOS X, so now the "fitplot"
	  option controls whether PDF files are scaled to fit
	  within the printable area of the page (STR #250)
	- The LPD backend did not support the port number in a
	  URI (STR #247)
	- Some filters didn't properly support boolean options
	  (STR #249)
	- Landscape PDF files were not always offset by the
	  correct amount when rotating (STR #243)
	- The scheduler could hang in a call to localtime() when
	  logging messages from the signal handler (STR #242)
	- The PDF filter no longer prints form widgets; this
	  duplicates the behavior of Acrobat Reader (STR #241)
	- cupsGetPPD() didn't handle a late termination of a
	  HTTP connection with the server (STR #220)
	- ppdOpen() did not correctly check for "*PPD-Adobe-4."
	  on the first line of a PPD file. This caused incorrect
	  PASS results for some PPD files (STR #233)
	- cupsEncodeOptions() did not allow boolean options to
	  use "yes" and "on" for true values (STR #227)
	- The pstops filter only sent the TBCP exit sequence if
	  it was defined in the JCLEnd attribute in the PPD file
	  (STR #224)
	- Support for more than 1024 files was broken on Solaris
	  9 (STR #217)
	- The setgroups() calls now pass in 1 group (the
	  configured group) instead of 0 for compatibility with
	  BSD and Darwin (STR #213)
	- The scheduler's built-in broadcast throttling was
	  ineffective since incoming packets would cause the
	  next group of outgoing packets to be sent immediately
	  rather than waiting for the next time slot (STR #211)
	- Added a new ppdSetConformance() function to set the
	  conformance requirements for PPD files. Currently only
	  two levels are defined, PPD_CONFORM_RELAXED and
	  PPD_CONFORM_STRICT, and the default is the relaxed
	  level (STR #212)
	- The IPP backend did not correctly execute the
	  pictwpstops filter on OSX (STR #210)
	- The LPD backend did not set the banner class when the
	  "banner=yes" option was specified in the device URI
	  (STR #209)
	- The imagetoraster filter did not support all of the
	  page device attributes (STR #208)
	- The pdftops filter incorrectly auto-rotated pages when
	  the user already had specified the proper orientation
	  (STR #207)
	- Fixed AIX shared library support (STR #201)
	- Added support for live testing with Valgrind (STR
	  #193)
	- The CGI programs now collect the list of needed
	  attributes for the class, job, and printer template
	  files (STR #192)
	- The scheduler now passes the first port that is bound
	  to the local loopback or "any" addresses to the CGI
	  programs rather than the port that the browser
	  connected to (STR #103)
	- The cupstestppd program now checks for bad
	  JobPatchFile attributes and incorrect versions of the
	  Manufacturer attribute for HP printers (STR #155)
	- The filter makefile incorrectly installed
	  libcupsimage.a in the filter directory (STR #180)
	- The scheduler did not verify that the job history
	  files define the job-priority and
	  job-originating-user-name attributes (STR #178)
	- The pstops filter didn't handle poorly-formed binary
	  PostScript files that had CTRL-D's in them (STR #156)
	- The ppdOpen*() and cupsLangGet() functions did not
	  make a copy of the old locale strings when using the
	  POSIX locale when reading files, which apparently
	  caused problems with some implementations of the
	  standard C library. (STR #159)
	- The pdftops filter did not work properly with some
	  embedded Type1C fonts (STR #177)
	- Updated the pdftops filter to be based upon Xpdf
	  2.02pl1 (STR #191)
	- The scheduler did not reset the group list when
	  running CGI and filter processes (STR #185)
	- The scheduler no longer calls malloc and free from the
	  signal handlers (STR #190)
	- The USB backend now uses the manufacturer and model
	  strings if the description string is not available
	  (STR #174)
	- The ppdOpen functions still supported the
	  VariablePaperSize attribute, which was removed in v4.0
	  of the PPD spec.  This caused problems with PPD files
	  that relocated the PageSize option to a non-standard
	  group (STR #158)
	- The cups.list file referenced MAN1EXT, MAN3EXT, and
	  MAN5EXT, but none of those were actually defined (STR
	  #147)
	- Chunked requests could cause a Denial of Service if
	  the connection is terminated before the first byte of
	  chunk data is sent/received (STR #143)
	- Printers with special characters in their names were
	  not accessible from the web interface (STR #120)
	- The lpstat command now shows the correct interface
	  script or PPD file, if any, for a print queue (STR #89)
	- The lpstat command now shows the printer-state-message
	  and printer-state-reasons attributes whenever they are
	  not blank (STR #152)
	- The French and German option-conflict.tmpl template
	  files did not get installed (STR #148)
	- The cups.list.in file did not work when compiling
	  without shared libraries (STR #149)
	- The DSOFLAGS included the LDFLAGS, which causes
	  problems on at least HP-UX (STR #150)
	- The fax printer support did not keep track of the fax
	  capability bit (STR #144)
	- The appleLangDefault() function could leak a small
	  amount of memory (STR #145)
	- The ppdOpen() functions now mirror all normal
	  attributes to the attribute list; previously only
	  certain unassigned attributes would be added (STR
	  #139)
	- The ppdEmitJCL() function wrote JCL commands to stdout
	  instead of the passed file pointer (STR #142)
	- The httpGets() function could, in certain states,
	  block waiting for data (STR #132)
	- The cupsEmitJCL() function not outputs an empty @PJL
	  command after the PJL language escape to work around
	  bugs in certain PJL implementations (STR #131)
	- The cupsEmit*() functions didn't set the orientation
	  value properly (STR #127)
	- The cups.spec file didn't list the rc2.d init
	  directory or the cupstestppd file (STR #134)


CHANGES IN CUPS V1.1.19

	- The GNU TLS code incorrectly used
	  gnutls_check_pending() instead of
	  gnutls_record_check_pending() (STR #128)
	- The ppdEmit() functions output "PageSize Custom"
	  instead of "CustomPageSize True" in the DSC comments.
	  Also, the custom page size code did not use the
	  ParamCustomPageSize attributes (STR #127)
	- The cupstestppd command did not list the conflicting
	  options (STR #123)
	- The lpq command did not ensure that there was
	  whitespace between the fields in the job listing (STR
	  #117)
	- The German web templates had errors (STR #119)
	- The configure script didn't specify the static
	  libraries properly when configuring with the
	  --disable-shared option (STR #104)
	- The cups.list file used file dependencies for package
	  formats other than portable, RPM, and Debian (STR #98)
	- cupsLangGet() didn't use its language cache (STR #97)
	- "lpq -P" would segfault instead of showing a usage
	  message (STR #94)
	- Fixed compiler warnings in pdftops filter (STR #96)


CHANGES IN CUPS V1.1.19rc5

	- Jobs with banner pages that were printed to implicit
	  classes would get double banner pages for each
	  file/banner in the job (STR #68)
	- The mime.convs file was missing the filter definition
	  for Windows BMP (image/x-bitmap) files (STR #85)
	- The scheduler allowed some READ-ONLY job attributes to
	  be set, which could cause the scheduler to fail on the
	  next restart (STR #82)
	- The lp and lpr commands did not report when the
	  scheduler was not responding; instead, the user would
	  incorrectly see a "no default destination" error (STR
	  #70)
	- cupsLangGet() could fail on OSX due to a corrupt
	  language preference (STR #78)
	- Added more checks for HTTP request timeouts.
	- The scheduler dropped the first non-alpha character
	  after an open brace when doing attribute substitutions
	  in banner pages (STR #77)
	- The scheduler child might send SIGUSR1 to the parent
	  before the signal handler was installed; this didn't
	  prevent the scheduler from starting but produced an
	  annoying error message (STR #45)


CHANGES IN CUPS V1.1.19rc4

	- The lp command did not accept "-" for printing from
	  the standard input as required by POSIX 1003.1 (STR
	  #59)
	- Added the job-originating-host-name information for
	  the page_log file documentation in the SAM (STR #31)
	- The German web interface templates did not use the
	  right paths for job operations (STR #54)
	- The scheduler would consume all available CPU if
	  started with a pending job in the queue (STR #35)
	- The polling daemon allocated an extra localization
	  buffer but did not free it, causing cups-polld to
	  eventually use all available memory (STR #40)


CHANGES IN CUPS V1.1.19rc3

	- The scheduler could get in an infinite loop cancelling
	  jobs using "cancel -u user dest" (STR #48)
	- The "cancel -u user" command did nothing (it should
	  cancel all jobs on all printers owned by the named
	  user - STR #48)
	- The scheduler would write 0-length job control files
	  (STR #46)
	- Updated the French man pages (translation provided by
	  Gilles QUERRET)
	- The scheduler would delete all printers from
	  printers.conf if a job was active when a HUP signal
	  was handled (STR #47)
	- The cups-polld program would leak memory if it was
	  unable to send browse packets to the loopback
	  interface (STR #40)
	- The scheduler did not put the
	  job-originating-host-name attribute in the job
	  attributes group.
	- The text filter did not default to wrapping text as
	  defined by the IPP implementation document.
	- Scan backends first, PPDs second (STR #37)
	- Updated the Netatalk documentation in the SAM (STR #38
	  and #39)
	- The test suite sent text files to a non-PS print queue,
	  which requires ESP Ghostscript (provided separately).
	  Now send the JPEG test file (STR #33)
	- The test suite did not show the estimated disk space
	  requirements (STR #33)
	- The test suite did not set the MaxLogSize directive to
	  0 to prevent log file rotation (STR #33)
	- The test suite still setup the old CUPS Ghostscript
	  symlinks (STR #33)
	- The pstops filter did not report the correct number of
	  copies for the page_log file when printing collated
	  copies to a printer that doesn't support them in
	  hardware (STR #32)
	- cupsLangGet() needs to set the CTYPE locale to "C"
	  (POSIX) to avoid erroneous tolower/toupper values (fix
	  suggested by Bjoern Jacke)
	- Fixed a typo in the cups.list.in file.
	- Updated all of the Western European locales to default
	  to ISO-8859-15 (for Euro support, suggested by Bjoern
	  Jacke)
	- Updated the German message catalog (update provided by
	  Bjoern Jacke)


CHANGES IN CUPS V1.1.19rc2

	- cupsLangGet() now sets the encoding field based on the
	  trailing charset in the locale name, and doesn't look
	  for a message catalog in a specific locale.charset
	  directory.  This fixes STR #26 and is more in line
	  with the CUPS 1.2 implementation.
	- The configure script now aborts if the "ar" command or
	  compilers cannot be found.
	- The static cupsimage library was not built by default.
	- The path for the "ln" command was hardcoded in
	  Makedefs.in instead of being checked at configure time
	  (STR #28).
	- Banner pages containing unescaped { characters would
	  not work.
	- The printer-state-time collection attribute was
	  encoded as an enumeration instead of an integer.
	- The printer-is-accepting-jobs collection attribute was
	  was not added to the collection value.
	- The printer-state-sequence-number collection attribute
	  was not added to the collection value.
	- Fixed typo and const mismatch in IPP backend.
	- Updated the man pages for the new configuration
	  directives.
	- Updated the SAM for MacOS 10.2, the CUPS drivers for
	  windows, the available LPD backend options, and the
	  new configuration directives.
	- The imagetops filter didn't position images properly
	  on the page (STR #18)
	- The configure script didn't add CPPFLAGS to the
	  compiler options or LDFLAGS to the DSO options (STR
	  #13)
	- The scheduler would try to write a debug log message
	  when starting a job that contained a NULL string. 
	  Since not all versions of snprintf() support NULL
	  string pointers this caused some problems (STR #20)
	- The testipp program now supports reading of IPP
	  message files such as those used for the job history
	  in /var/spool/cups.


CHANGES IN CUPS V1.1.19rc1

	- Added CUPS support files for Java, Perl, and PHP
	  (located in the "scripting" subdirectory...)
	- The scheduler now supports fast-reloads of the
	  cupsd.conf file when it is updated via HTTP.
	- The scheduler always changed the ownership of log
	  files; it now only does so if they are not in the /dev
	  directory (i.e. don't want to change the ownership and
	  permissions of /dev/null...)
	- Added libpaper support (patch from Jeff Licquia)
	- Added a new istring() rule for MIME types files that
	  does a case-insensitive comparison of strings.
	- The cups-lpd mini-daemon now sends jobs to the default
	  queue when an empty queue name (or "lp" and there is
	  no "lp" queue) is sent.
	- The scheduler now supports fax queues identified by a
	  "*cupsFax: True" attribute in the PPD file. When a job
	  can't be sent, it is held for 5 minutes by default
	  while other jobs are attempted.  The FaxRetryLimit and
	  FaxRetryInterval directives control the number of
	  retries and the time between retries.
	- The scheduler now preserves the default options of PPD
	  files when modifying/upgrading an existing PPD file.
	  When installing a new printer, the scheduler sets the
	  default media size to Letter or A4 as appropriate for
	  your locale.
	- The scheduler no longer limits the number of
	  BrowseAddress, BrowsePoll, BrowseRelay, Listen, Port,
	  SSLListen, and SSLPort directives to 10.
	- The scheduler now supports print files that have been
	  compressed using gzip.
	- The scheduler used the stdio functions to read any job
	  ticket information in a PostScript print job. Since
	  some platforms limit the number of stdio files to 256,
	  job ticket information was ignored when the server had
	  a large number of clients connected to the system.
	- Filters and backends may now report the total number
	  of pages ("PAGE: total NNN") to the scheduler.
	- The LPD backend now supports timeout and
	  sanitize_title options (default to 300 and yes,
	  respectively) and has some additional changes to
	  reduce the chances of multiple copies being printed
	  when only one copy was requested.
	- Fixed a polygon drawing bug in the HP-GL/2 filter.
	- Added a robots.txt file to the standard install to
	  prevent search engines from indexing the CUPS server.
	- Added support for STATE: messages
	  (printer-state-reasons), printer-state-history, and
	  printer-state-time to the scheduler.
	- When using RunAsUser, the scheduler would initially
	  start any previously queued (pending) jobs with
	  RunAsUser disabled - all backends would be running as
	  root.
	- If a backend failed for a printer, CUPS would
	  incorrectly requeue the job for printing again.
	- Added support for IPP collections and files.
	- Added experimental support for generic CGI scripts and
	  programs, Java, Perl, PHP, and Python to the
	  scheduler. See the file "CGI.txt" for more
	  information.
	- The CUPS API now supports HTTP cookies and the Expect:
	  field.
	- The cancel command now correctly supports the "-u
	  user" option to cancel all jobs for the named user.
	- The Purge-Jobs operation now supports the my-jobs
	  boolean attribute and a new purge-jobs boolean
	  attribute to control whether job history data is
	  purged from the scheduler; the default is false for
	  my-jobs and true for purge-jobs to match the original
	  implementation.
	- The scheduler would not timeout printers when only
	  using SLP browsing.
	- If the scheduler was unable to execute a filter, it
	  would try to restart the job indefinitely until the
	  filter could be executed.
	- When writing BSD printcap files, the scheduler now
	  includes the rm and rp attributes, allowing the file
	  to be exported to LPD clients. [Patch from Dominic
	  Kubla]
	- The scheduler optimization to reference IPP attribute
	  data instead of performing a full copy caused problems
	  when the referenced data was deleted before it was
	  sent.  It now only references attributes that change
	  only when the scheduler is restarted.  The change also
	  reduced the memory footprint of a printer object to
	  2k.
	- The scheduler now holds signals while logging messages
	  to avoid potential deadlock issues when handling
	  signals on Solaris 8.
	- The lpadmin command now allows printer access control
	  by group name as well as user name.
	- "lpoptions -l" got in an infinite loop if no default
	  printer was available.
	- The scheduler now logs the job-originating-host-name
	  attribute in the page_log file, and uses "-" for any
	  empty fields (patch from Dominik Kubla).
	- The pdftops filter now scales PDF pages within the
	  printable area of the page.
	- The pstops filter didn't include the page-label and
	  classification boxes when printing EPS or non-
	  conformant PS files.
	- The imagetops filter didn't always correctly position
	  the image on the page when printing in landscape
	  orientation.
	- The ppdEmit() functions now support the
	  RequiresPageRegion attribute when sending InputSlot
	  and ManualFeed commands.
	- The PPD loading code now supports standard options
	  outside of OpenUI/CloseUI as required by the PPD spec.
	- The cupstestppd program has been upgraded to provide a
	  concise PASS/FAIL report, additional detailed
	  conformance testing, and support for gzip'd PPD files.
	- The PPD loading code is now much more strict when
	  loading a PPD file, and tracks more format errors.
	- The scheduler ignored child signals when gathering the
	  list of available devices, when it should have been
	  using the default signal handler.
	- The cupsEncodeOptions() function could encode an
	  option with a NULL last string.
	- The socket backend could report the wrong number of
	  backchannel bytes if an error occurred on the link.
	- The cups-polld program now only sleeps after getting
	  all printers and classes.  This allows for longer
	  intervals without excessive delays before classes show
	  up...
	- Added a new httpWait() function to support waiting for
	  data for a specific number of milliseconds.
	- httpGets() now times out after 1 second on
	  non-blocking HTTP connections.
	- The scheduler no longer accepts rangeOfInteger values
	  that are out of order (e.g. 5-1)
	- The sides attribute was incorrectly sent as a name
	  value; it is a keyword value.
	- The IPP backend now detects if the destination queue
	  has gone away and reports an error.
	- The scheduler and HTTP API now allocate their select()
	  sets to support larger numbers of clients on systems
	  that support it.
	- The scheduler now sets the CFProcessPath environment
	  variable under MacOS X.
	- The cupsLangDefault() function now uses the
	  CoreFoundation localization API under MacOS X.
	- The httpSeparate() function didn't handle file URIs of
	  the form "file:///path" properly.
	- The lpadmin command now supports a "protocol" option
	  for specifying the binary communications protocol to
	  use when printing binary PostScript data.
	- The scheduler did not properly parse the SystemGroup
	  directive, so only the first group would be used.
	- Revamped how strings are stored in the scheduler,
	  providing a substantial improvement in memory usage
	  for systems with large numbers of printers.
	- The PostScript filter now supports binary PostScript
	  files and files beginning with the PJL language escape
	  sequence.
	- The PPD API now provides additional information from
	  the PPD file.
	- The USB backend didn't compile on Solaris Intel.
	- The cupstestppd utility now supports the "-q" option
	  (quiet) for use in scripts, etc.
	- Merged several weight-reducing changes into the CUPS
	  baseline donated by Apple.
	- Added preliminary support for CDSA; patch provided by
	  Apple.
	- Implicit classes are now created from identical
	  printer classes on the network.
	- The lp command now supports a "-H restart" option to
	  restart previously printed jobs.  This functionality
	  only works if you have enabled the PreserveJobFiles
	  option.
	- The scheduler now supports URIs in HTTP request lines
	  to conform to the HTTP/1.1 specification.
	- The time-at-xyz attributes were not recognized in
	  banner files if prefixed by a question mark, e.g.
	  "{?time-at-creation}".
	- Added support for pre-filtering application/pictwps
	  files on MacOS clients before sending them to a server
	  via IPP.
	- The scheduler now allows file:/dev/null device URIs
	  even if FileDevices is set to No.
	- CUPS uses strerror() for hostname resolution errors,
	  when it should have used hstrerror().
	- The USB backend no longer tries to guess the serial
	  number of a device from the USB devices file; this
	  means that printers that don't report their serial
	  numbers in the device ID string will not be
	  individually selectable.
	- The pstops filter didn't handle page ranges properly
	  when a page contained an embedded document.
	- Added a translation of the web interface to German.
	- When printing using the OutputOrder=Reverse option
	  with duplexing, the output order is now truly
	  reversed; the order of sub-pages when printing N-up is
	  the same.
	- The pstops filter did not always output the extra
	  blank page when printing a document with an odd number
	  of pages with duplexing enabled.
	- The ippAddXYZ functions no longer allow the
	  application to add less than 1 value.
	- Fixed a URL rewrite bug in the web interface - local
	  access was sometimes redirected away from localhost...
	- The ppdOpen() functions could get in an infinite loop
	  if the PPD file contained a keyword or text that was
	  too large for the buffer.
	- Added preliminary support for GNU TLS; patch provided
	  by Jeff Licquia.
	- Now timeout IPP attribute reads after 1 second inside
	  an attribute definition.
	- Now timeout connections that have been shutdown (due
	  to errors) after 30 seconds instead of the Timeout
	  setting (300 seconds by default).  This provides
	  faster recovery from DoS attacks.
	- A denial-of-service attack warning message was being
	  written to the log files by the scheduler for every
	  detection.  This caused a DoS of its own in some
	  situations. The warning message is now written no more
	  than once per minute.
	- Fixed the CIE colorspace support code in the image and
	  PS RIPs.
	- The job-quota-period, job-page-limit, and job-k-limit
	  attributes were not flagged as integers, so setting
	  quotas would not work.
	- Added an additional response check in the scheduler to
	  more quickly recover from denial-of-service attacks.
	- The cupstestppd file was incorrectly installed in the
	  /usr/sbin directory instead of /usr/bin.
	- The EPM list file did not include the cupstestppd
	  program or man page files.


CHANGES IN CUPS V1.1.18

	- Fixed a bug in the Set-Job-Attributes code in the
	  scheduler that would cause it to crash or continuously
	  write a job control file.
	- SECURITY FIX: The scheduler now provides a FileDevice
	  directive to control whether new printers can be added
	  using device URIs of the form "file:/filename".  The
	  default is to not allow printers with these device
	  URIs.
	- The scheduler did not compute the cost of filters
	  properly, nor did it choose a multi-filter solution
	  with a lower cost than a single filter solution.
	- Now install CUPS PPD file test utility (cupstestppd)
	  to support basic conformance testing of PPD files.
	- The scheduler now logs an error message when it sees a
	  non-conforming PPD file.
	- Upgraded pdftops filter to Xpdf 2.01 with fixes for
	  TrueType fonts.
	- Added a MaxClientsPerHost configuration directive to
	  provide limited protection against Denial of Service
	  attacks.
	- SECURITY FIX: Potential underflow/overflow bug in web
	  interface.
	- SECURITY FIX: Race condition in certificate creation.
	- SECURITY FIX: Bad URIs in browse packets could be used
	  to exploint the web interface underflow/overflow bug.
	- SECURITY FIX: Some types of Denial of Service attacks
	  were not handled properly, so once the attack was over
	  the scheduler did not close the connections
	  immediately on all platforms.
	- SECURITY FIXES: Added integer overflow/underflow
	  checks for all image formats.
	- The pstops filter didn't reset the showpage operator
	  back to its original at the end of a job; this
	  prevented the concatenation of documents (used
	  primarily for CUPS 1.2...)
	- The cupsGetPPD() function didn't always set the
	  cupsLastError() value when an error occurred.
	- The IPP media, output-bin, and sides attributes took
	  precedence over the corresponding PPD options, which
	  caused inconsistent behavior under MacOS X with some
	  PPD files.
	- The cupsaddsmb utility specified the wrong number of
	  arguments to the adddriver command when adding the
	  Win9x PostScript drivers.
	- The web interface did not always report the correct
	  error message.
	- The scheduler did not clear the POSIX signal action
	  structure when waiting for the child to send it a
	  SIGUSR1 signal; this could cause the signal handler
	  not to be called properly, preventing the parent
	  process from returning.


CHANGES IN CUPS V1.1.17

	- The "manual_copies" option did not work when the LPD
	  backend had to retry a print job.
	- The image filters did not convert GIF images properly.
	- The RunAsUser option was incompatible with the new
	  daemon-mode code in 1.1.16.
	- Fixed a problem with the Set-Job-Attributes and
	  PostScript job ticket code in the scheduler - the
	  "last" attribute pointer was never updated, which
	  could cause the scheduler to crash when applying job
	  ticket data.
	- Fixed a problem in the scheduler that caused it to
	  continue processing HTTP requests on a connection
	  after it was shutdown.
	- The scheduler now allows accounts authenticated via
	  PAM to not have a corresponding UNIX account, but
	  group membership still requires the account name to be
	  listed in the UNIX group file(s)...
	- The scheduler used a fixed-size (16k) buffer for
	  encoding job options for filters; it now dynamically
	  allocates and expands the buffer as needed depending
	  on the options that are sent in a job.
	- The pdftops filter didn't support all of the MacOS
	  characters for MacRoman encoded fonts.
	- The cupsEncodeOptions() and cupsParseOptions()
	  functions now conform to the grammer defined by the
	  current draft of the PAPI specification.  The main
	  difference is that option=yes and option=no are no
	  longer treated as boolean options.
	- The IPP backend didn't honor the encryption settings
	  in /etc/cups/client.conf.
	- Fixed a potential bug in the HTTP code which was
	  caused by servers sending the status line and
	  newline(s) in separate packets.
	- User-defined classification strings are now printed
	  verbatim - previously the classification box would be
	  empty.
	- Re-added Spanish to the list of PPD languages that
	  CUPS supports.
	- CUPS API library user and temp file updates for
	  Windows.
	- The image filters did not properly handle grayscale
	  printing of Sun Raster images.
	- The scheduler never reset the NumJobs variable before
	  loading the job list (previously this only happened on
	  a full start, so the problem was never apparent...)
	- The HTTP and IPP read/write code didn't handle EINTR
	  (interrupted system call) errors.
	- When under high load, the scheduler could abort due to
	  the wrong errno value after a select() call.  This was
	  caused by the child signal handler.
	- Added new load tests to the test target to verify that
	  cupsd can handle hundreds of simultaneous jobs without
	  error.
	- The Solaris USB backend now supports the new device
	  URI syntax.
	- The ppdOpen*() functions now reset the numeric locale
	  settings while loading a PPD file.
	- Fixed the libtool build rules.
	- The manpage make rules didn't use $(MAKE) and
	  $(MFLAGS) for the language subdirectories.
	- Now set the LC_TIME locale category to get the
	  properly localized time string.
	- Fixed a problem in the scheduler that would cause the
	  web interface problems when adding, modifying, or
	  configuring a printer or class.
	- The backends now ignore SIGPIPE so that failed job
	  filters will not stop a print queue.
	- The lpstat command did not allow for destination lists
	  ("lpstat -v printer1,printer2")
	- Fixed parsing of long filter status messages in the
	  scheduler.
	- Added some startup performance enhancements to the
	  scheduler so that the printer object information is
	  regenerated fewer times and the MIME type database is
	  not filled with lots of empty filters for raw/direct
	  queues.
	- The LPD backend now sends the job title as the print
	  filename.
	- Added support for variable sizes in the EPSON dot
	  matrix printer drivers.  This allows for pages as
	  short as 1/2" (1 row of labels) and does not do an
	  automatic form feed.
	- French translation updates.
	- The filters did not quote the page label string when
	  embedding it in PostScript output.
	- The serial backend now enumerates serial ports under
	  MacOS X.
	- The pdftops filter contained font rasterizer code that
	  wasn't being used and that depended on X11.  This code
	  has been removed.


CHANGES IN CUPS V1.1.16

	- The cancel and lprm commands now both display an error
	  message and return a non-zero exit status if an
	  attempt is made to cancel a job on a non-existent
	  printer.
	- The lpoptions command incorrectly complained if a
	  request to delete a non-existent printer was made.
	- If the client.conf file defines an alternate server
	  name, the "configure printer" action in the web
	  interface might not work.
	- The lpstat command now supports a "-W" option so that
	  you can display completed jobs as well as
	  not-completed (pending) jobs.
	- The lp and lpr commands did not return an error when
	  one or more files in a set of files for printing could
	  not be printed.
	- The lp, lpadmin, and lpstat commands now consistently
	  return with a non-zero exit status when an error
	  occurs.
	- The scheduler would not accept print jobs sent to a
	  stopped remote printer.
	- The texttops filter incorrectly converted the page
	  numbers in the prettyprint header to double-byte
	  characters when printing a non-Unicode text file. This
	  caused an extra space to appear between each digit in
	  the page number.
	- The scheduler did not use a case-insensitive
	  comparison when adding filters for a printer.
	- Upgraded the pdftops filter to Xpdf 1.01.
	- The scheduler no longer passes the page-border and
	  number-up-layout attributes to filters when printing
	  banner pages.
	- The LPD backend now uses a 30-second timeout when
	  sending commands and control files, and a 30-second
	  timeout when retrieving responses from an LPD server. 
	  If a timeout occurs, it retries indefinitely.  This
	  helps to make LPD printing over VPNs work more
	  reliably.
	- The USB backend now supports device URIs based on the
	  printer serial number and/or model number under Linux.
	  This avoids the "wrong device filename" problem when
	  using more than one USB printer.
	- Now just shutdown the receiving end of a client
	  connection when sending an error that requires the
	  server to disconnect from the client afterwards.  This
	  fixes a problem when doing remote administration with
	  encryption enabled.
	- The scheduler did not send a printer-state-message
	  attribute if the string was empty; it now always sends
	  this attribute.  This caused the printer message to be
	  displayed for other printers in the web interface.
	- The LPD backend now supports a "manual_copies" option,
	  e.g.: "lpd://server/queue?manual_copies=no", in order
	  to handle copies for raw jobs to printers that don't
	  implement the LPD protocol properly...
	- The "mirror" option was not being handled by the
	  PostScript or image filters.
	- Updated the cupsaddsmb command to support the new CUPS
	  driver for Windows NT/2k/XP.
	- Filter status lines longer than 1023 characters could
	  cause the scheduler to get into an infinite loop.
	- The scheduler didn't reset the job state to pending
	  when modifying an active printer.
	- Now limit the maximum number of recursion steps when
	  searching for a filter for a job, in case a user
	  defines a circular filter rule.
	- The PostScript filter would embed an invalid
	  requirements comment in some cases.
	- Added support for embedded job tickets in PostScript
	  files.
	- The PostScript filter now detects EPS files and should
	  better handle printing EPS files.
	- The cancel command now ignores a trailing destination
	  name when cancelling a specific job ID (Solaris
	  compatibility).
	- The scheduler now rejects jobs with copies outside the
	  range of 1 to MaxCopies, inclusive.
	- Added new MaxCopies directive to set the maximum
	  number of copies that a user can request.
	- The scheduler didn't block signals while it processed
	  others and when it forked processes.
	- The scheduler checked for new jobs to print when
	  stopping a job.  This caused jobs to restart before a
	  shutdown.
	- Updated the CUPS startup script to better support
	  different timezones and to support the RedHat/Mandrake
	  init script functions, if available.
	- The scheduler did not properly handle backslashes in
	  banner files; it incorrectly assumed that "\c" should
	  always be replaced by "c", instead of only looking for
	  "\{" and replacing it by "{".
	- The texttops filter didn't handle prettyprint=no.
	- The text and HP-GL/2 filters didn't check for other
	  common duplex option names like cupsMarkOptions() did.
	- "lpoptions -x printer" no longer clears the "default
	  printer" status of the printer.
	- cupsTempFd() now stops trying to create a temporary
	  file after 1000 tries, and aborts on any error other
	  than EEXIST.  This should prevent lp/lpr hangs due to
	  a bad or missing temporary directory.
	- The lpadmin command did not send the right URI to the
	  scheduler when setting options on classes.  This
	  caused a client-error-bad-request error.
	- The CUPS API convenience functions would attempt to
	  connect to the remote server name in a
	  "printer@server" printer name instead of dealing with
	  the default (usually local) server.  Aside from
	  causing user confusion, the remote server name might
	  not be resolved properly, causing further problems.
	- "lp -q" would cause the "lp" command to segfault, as
	  the program would try to print the option letter that
	  caused the error using the wrong index into the
	  command-line; bugfix from Debian.
	- Fixed a minor inconsistancy in the encoding of boolean
	  attributes from printer options in
	  cupsEncodeOptions().
	- Added a FilterNice directive which sets the priority
	  of job filter processes that are run by the scheduler.
	- Added Solaris x86 USB printer support.
	- The USB backend now reports both the ulpt and unlpt
	  devices under *BSD.
	- The "lpstat -o" command would truncate the
	  "printer-jobid" string if it was longer than 21
	  characters.
	- The PJL-based MIME type rules now look in the first
	  1024 bytes instead of just the first 512 bytes to find
	  the language mode.
	- The image file types are now listed explicitly in the
	  mime.convs file so that additional image file formats
	  do not use the standard CUPS image filters by default.
	- Updated the Software Programmers Manual to include
	  all of the CUPS API functions.
	- ppdOpen*() no longer sorts choices for an option.
	- The web interface now enforces constraints in PPD
	  files when configuring a printer.
	- When stopping a printer, the scheduler didn't set the
	  printer state before stopping the current job.
	- The cupsaddsmb utility now lists all data files for
	  Win9x and WinMe clients when installing that Windows
	  driver.
	- Jobs submitted to a class now bounce immediately to
	  the next available printer rather than waiting until
	  that printer is available.
	- Filters and backends now also get the CLASS
	  environment variable set when a job is printed to a
	  printer class instead of a normal printer.
	- Added French translations of the web interface, CUPS
	  Overview, Software Administrators Manual, and Software
	  Users Manual contributed by Marian REYT-LLABRES.
	- Added several "hint" messages for common configuration
	  problems that are stored in the error_log file.
	- httpSeparate() now unquotes %xx characters in the
	  username:password field of a URI.
	- When starting the scheduler in daemon mode, the parent
	  process now waits for the child to signal it is ready
	  to accept connections.
	- Added -F option to cupsd to run cupsd in the
	  foreground but detach from the controlling terminal
	  and current directory.
	- The scheduler did not reload jobs when receiving a HUP
	  signal; this would cause problems since the pointers
	  into the file type database would no longer be valid
	  for existing jobs.
	- The scheduler did not save the network interface list
	  update time, thus no caching of the network data was
	  actually provided.
	- Updated the SuSE PAM configuration file.
	- The LPD backend now supports a "reserve" option and no
	  longer reserves a priviledged port by default.
	- The cupsaddsmb command now continues past printers
	  that do not have a PPD file to export.
	- The lpstat command didn't treat printer names as
	  case-insensitive.
	- The lpstat command now reports the printer location
	  attribute with "lpstat -l -p".
	- Fixed a bug in the vsnprintf() emulation function,
	  which was used on old versions of HP-UX, IRIX, and
	  Solaris.
	- The number-up option was incorrectly being used when
	  printing banner pages.
	- Added support for Greek and Slovak PPD files.
	- CUPS now supports printer names containing any
	  printable character, e.g. "123-abc", "foo-bar", etc.
	- The null filter was not supported in mime.convs due to
	  a bug in the filter validation code.
	- Changes in the default printer and printer attributes
	  were not always reflected in the generated printcap
	  file.
	- Implicit classes did not inherit the location or
	  description from member printers.
	- The httpGetHostByName() function did not handle
	  hostnames that started with a number.
	- Updated the filters to use the %cupsRotation comment
	  instead of %%Orientation to auto-rotate pages, since
	  the use of %%Orientation is inconsistent.
	- Added the RootCertDuration directive to control how
	  often the root authentication certificate is updated.
	- Increased the size of the IPP write buffer to 32k to
	  allow for larger attribute values and to provide more
	  efficient output of large numbers of attributes.
	- The polling daemon now retries the initial connection
	  to the remote server; this fixes a problem when the
	  remote server is unavailable when the scheduler starts
	  up...
	- The scheduler didn't validate Digest users against the
	  system group(s), so Digest and BasicDigest
	  authentication didn't work for administration
	  operations.
	- The scheduler now passes the SHLIB_PATH environment
	  variable to child processes (HP-UX shared libraries)
	- The scheduler now maps accesses from the loopback
	  interface to "localhost".
	- The cups-lpd mini-daemon sent a status code byte in
	  response to queue state commands, but those commands
	  only return textual data.


CHANGES IN CUPS V1.1.15-1

	- The lpc and lprm sources didn't include the CUPS
	  string function header, which is required on systems
	  that don't have their own snprintf() function.
	- The French manpage Makefile tried to install the
	  language subdirectories when it (obviously) didn't
	  have to.


CHANGES IN CUPS V1.1.15

	- Updated the CUPS license agreement for the new MacOS
	  license exception.
	- The printer-info attribute now defaults to the printer
	  name if no value has been set.
	- ppdOpen() and friends now add an "Auto" InputSlot
	  option if none is provided to automatically select the
	  correct tray.
	- Updated the ppdEmit() and ppdEmitFd() functions to
	  (re)mark the correct PageSize or PageRegion option
	  depending on the selected ManualFeed or InputSlot
	  options.
	- ppdEmitFd() didn't handle custom page sizes.
	- Darwin uses <pam/pam_appl.h> instead of
	  <security/pam_appl.h>.
	- The jobs.cgi web interface now handles all job
	  operations, allowing the administrator to allow "job
	  administrators" or operators to manage jobs (but not
	  queues) on the server.
	- The cupsDoFileRequest() function now checks if the
	  filename passed into the function is a directory, and
	  returns the IPP_NOT_POSSIBLE error if so.
	- New SCSI printer backend.
	- Cleaned up handling of locales with trailing character
	  set definitions.
	- Fixed handling of invalid PPD attributes inside
	  OpenUI/CloseUI.
	- Fixed a problem with SSL and the job, printer, and
	  admin CGIs on ports other than 443.
	- The scheduler didn't handle AuthClass properly.
	- Added French translation of man pages.
	- Updated the text filter to support the const_cast,
	  dynamic_cast, and static_cast keywords in ISO C++.
	- Now use strlcat() and strlcpy() (or emulation
	  functions) for easier string/buffer protection.
	- The auto-generated printcap/printers.conf files now
	  have a small comment header explaining where the file
	  comes from...
	- The PostScript filter now supports 6, 9, and 16-up
	  output, as well as new page-border and
	  number-up-layout options.
	- The lpoptions command didn't set options properly when
	  using the default printer.
	- Added ConfigFilePerm and LogFilePerm directives.
	- Increased maximum size of MIME types to IPP_MAX_NAME
	  to allow for longer printer names.
	- No longer create remote printers when loading job
	  history data.
	- The printer-make-and-model attribute wasn't set when
	  the PPD file didn't contain a NickName attribute.
	- Now handle PPD files with translation strings longer
	  than 80 bytes - they are truncated if they go over...
	- The scheduler didn't handle signals until after it
	  loaded the configuration files the first time; this
	  caused problems on some installations that would
	  restart the scheduler as the system booted into run
	  level 3.
	- Now throttle broadcasts like we do for polling.
	- Fixed a bug in the reading of PPD files using CR's
	  instead of CR LF's or LF's.
	- The scheduler would crash if cupsd.conf contained a
	  BrowseProtocols line with no protocols listed.
	- The HTML job operation templates now link back to the
	  destination printer or class.
	- The serial backend now detects USB serial devices.
	- The LPD mini-daemon (cups-lpd) now passes the
	  job-originating-host-name attribute to the scheduler
	  (cupsd).
	- Updated the IPP backend to reconnect after downgrading
	  from IPP/1.1 to 1.0, and when sending requests to HP
	  JetDirect interfaces that don't support HTTP
	  Keep-Alive like they should.
	- Now pass NLSPATH and DYLD_LIBRARY_PATH environment
	  variables, if defined, to CGI and job processes.
	- Removed the pstoraster filter (based on GNU
	  Ghostscript 5.50) and now provide the raster "driver"
	  and patch file necessary to use the current GNU
	  Ghostscript 7.05 release.
	- Removed unnecessary fonts and updated the Courier and
	  Symbol fonts to the latest versions to better support
	  non-ISOLatin1 text.
	- The text filter now always embeds the Courier and
	  Symbol fonts to ensure that they contain the full set
	  of glyphs.
	- The lp and lpr commands now only override the SIGINT
	  handler if it is not being ignored (patch from Robert
	  Ambrose for some interactive software that catches
	  SIGINT and will gracefully cancel the print...)
	- The PostScript image filter (imagetops) now supports
	  printing CMYK images using the CMYK colorspace.
	- The image filters now support CMYK JPEG files, and
	  correctly handles the inverted files from Photoshop
	  (which seems to save RGBW data, not CMYK...)
	- Added a "check" target to the top-level makefile to
	  conform with GNU standards (same as "test").
	- The IPP code didn't always map the POSIX locale "C" to
	  the proper IPP language code.
	- The cupsaddsmb program was updated to use the
	  setdriver command instead of addprinter.
	- Banner pages were not handled properly for implicit
	  classes.
	- When tunneling to a remote system using SSH, the
	  printer URIs for local printers on the remote system
	  did not reflect the correct port number.
	- The Allow, Deny, BrowseAllow, BrowseDeny, and
	  BrowseAddress directives now support the network
	  interface names "@LOCAL" and "@IF(name)" for access
	  control and browsing based on the current interface
	  addresses instead of fixed names or IP addresses.
	- The texttops filter did not properly recognize the
	  "nowrap" (wrap=false) option.
	- The InstallableOptions group name in a PPD file is now
	  translated separately (CUPS_MSG_OPTIONS_INSTALLED) so
	  that UIs can accurately detect the presence of this
	  group.
	- The scheduler no longer keeps job history data for
	  remote printers on the client (just on the server.)
	- The parallel and USB backends now retry if the backend
	  detects that the printer is not connected to the
	  system (rather than stopping the queue...)
	- The network backends now retry if the backend detects
	  that the printer is not connected to the network or is
	  unreachable (rather than stopping the queue...)
	- The cupsGetDests() function no longer lists options
	  and instances for printers that no longer exist.
	- The scheduler now converts the document language to
	  the correct LANG string.
	- The cupsaddsmb program now supports alternative CUPS
	  and SAMBA server names.
	- The PostScript filter now supports the Orientation
	  comment and rotates the page as needed automatically.
	- Revamped the makefiles slightly to use automatically
	  generated dependencies.
	- Build fixes for OS X.
	- The TIFF reading code depended on the newest version
	  of libtiff; now conditionally compile that portion of
	  the loader.
	- The PPD code now decodes all JCL options in the
	  JCLSetup group, not just those options that start with
	  the prefix "JCL".
	- The backends now read print data using the read()
	  system call to ensure that the current page is printed
	  while the next page is being processed.
	- The pdftops filter did not support shading type 3
	  (radial fill) for the "sh" operator.
	- The cups-polld program now throttles the local
	  broadcasts of polled printers and classes so that the
	  local system is not overwhelmed with hundreds of
	  printers and classes all at once.
	- Updated the serial backend to support 230,400 baud for
	  the Linux PPC port.
	- The cupsGetJobs() function wouldn't report completed
	  jobs that did not have a document-format attribute
	  value.
	- The cupsEncodeOptions() function now maintains a table
	  of known boolean and numeric options, and encodes all
	  other options as strings.
	- Now add a newline before the end-of-page code in the
	  PostScript filter; this fixes a problem with files
	  that don't end with a newline.
	- The image filters looked for the "orientation" option
	  instead of the correctly named "orientation-requested"
	  option.
	- The cupsEncodeOptions() function now handles mixed
	  integers and ranges.
	- New translation guide for developers to provide native
	  language support for CUPS.


CHANGES IN CUPS V1.1.14

	- The ippRead() function did not verify that the
	  attribute name length or string with language value
	  was not larger than the read buffer.
	- The scheduler set the signal handlers before loading
	  the configuration files the first time; this prevented
	  the RunAsUser directive from blocking server reloads.
	- Added Swedish message catalog.
	- The parallel backend now recognizes the /dev/printers
	  device directory under Linux 2.4.x.
	- MacOS X fixes.
	- The cupsaddsmb utility sent the server name after the
	  user information when executing the rpcclient program.
	  This caused problems with some versions of SAMBA
	  2.2.x.
	- The IPP backend did not pass the requesting user name
	  when checking on the print job status. This prevented
	  it from waiting for the job to complete when
	  communicating with some IPP implementations that
	  require it.


CHANGES IN CUPS V1.1.13

	- The lpstat command did not report jobs submitted to
	  regular printer classes.
	- The texttops filter didn't use sufficient precision
	  when positioning text with some values of cpi and lpi.
	  This could cause the alignment of text to stray.
	- cupsGetDests() didn't merge the options from the
	  /etc/cups/lpoptions file with ~/.lpoptions - options
	  in ~/.lpoptions overrode them completely.
	- Added support for KOI8-R and KOI8-U character sets,
	  and added several Russian message catalogs.
	- The scheduler put the wrong timezone offset in the log
	  files (e.g. +0500 instead of -0500 for EST...)
	- The scheduler did not ignore trailing whitespace in
	  *.convs files.
	- The scheduler now forces all processes to exit (kill
	  -9) when it is stopped.  This prevents parallel and
	  USB devices from running in the background after cupsd
	  goes away.
	- The cupsParseOptions() function didn't skip trailing
	  whitespace after quoted values.
	- More changes to support CUPS on OS/2.
	- Added Simplified Chinese message catalog.
	- Added PAM support for IRIX.
	- The cupsGetPPD() function didn't remove the @server
	  portion of the printer name, and since it would
	  connect immediately to the remote server instead of
	  the local server, the printer would not be found.
	- Classification and page labels were not rotated to
	  match the page orientation.
	- Now set the TCP "no delay" option on network
	  connections to improve performance/response time.
	- Improved the IRIX printing tools support with patches
	  from Andrea Suatoni.
	- Added a new PrintcapGUI directive to specify the GUI
	  option panel program to use for the IRIX printing
	  tools support.
	- The cupsGetDests() function did not check to see if a
	  user-defined default printer (set via lpoptions) still
	  existed.
	- The pstops filter no longer assumes that the default
	  dictionary is writable when doing N-up processing.
	- The pstops filter now supports printing N-up with the
	  page-set option.
	- The imagetoraster filter now supports direct printing
	  of CMYK image data without conversion/correction.
	- The IPP backend now reports printer state/error
	  conditions when possible (toner low, media empty,
	  etc.)
	- The lpstat command now supports the (undocumented)
	  IRIX -l option ("-lprintername") for a compact job
	  listing for a printer.
	- The lpstat command now includes printer date/time
	  information in the output (always Jan 01 00:00) to
	  make third-party tools happy.
	- The text filter now supports non-integer cpi and lpi
	  values.
	- The Margins field in the CUPS raster header was not
	  initialized by the pstoraster filter.
	- Added --with-optim="flags" option to configure script.
	- Updated the Italian message translations.
	- Updated the cups.list file to install the correct
	  files.
	- The pstoraster filter accessed the third element of a
	  2 element array.
	- The scheduler did not setup a status pipe for polling
	  processes, so error messages went to whatever file
	  descriptor 2 was pointing to when they were started.
	- The httpMD5Final() function didn't put a colon between
	  the password and nonce strings.
	- The pstops filter did not default to Binary data for
	  "%%BeginData:".
	- The pstops filter did not stop processing when a line
	  containing a CTRL-D is seen.
	- The scheduler no longer replaces the JobSheets values
	  from the printers.conf and classes.conf files with the
	  classification level, if set.  This way the original
	  banner settings are preserved when classification
	  levels are changed or turned off.
	- The serial backend didn't drain the output queue, nor
	  did it restore the original settings.
	- Updated the default system group under MacOS X.
	- If no SystemGroup was defined in cupsd.conf, the
	  system default group was not used.
	- The cups-lpd mini-daemon now supports LPD clients that
	  send multiple control files.
	- httpConnectEncrypt() now always uses encryption for
	  connections on port 443, since port 443 is reserved
	  for the "https" scheme.
	- Group authentication via certificates did not work
	  from the web interface for accounts other than
	  "root".	
	- The serial port backend did not clear the OPOST
	  option, which could cause problems with some printers.
	- The cups-lpd mini-daemon didn't lookup the client IP
	  address properly.
	- The parallel backend now identifies the polled and
	  interrupt-driven devices under *BSD.
	- The scheduler allowed the "always" encryption mode
	  inside a Location, which is not valid.
	- The CUPS startup script now checks for the timezone
	  information under Linux.
	- Now also map the sides attribute to the JCLDuplex
	  option (if present) in PPD files.
	- Updated pdftops to Xpdf 0.93a.
	- Added support for MD5 passwords under Slackware.
	- Added new AuthType BasicDigest that does Basic
	  authentication using the MD5 password file managed by
	  the lppasswd command.
	- The banner page attribute substitution code now
	  retains {name} sequences in banner files when the
	  named attribute is undefined.  Use {?name} to
	  conditionally substitute an IPP attribute.
	- The scheduler now ensures that the ServerRoot
	  directory and configuration files are owned by and
	  writable by the User and Group in cupsd.conf.
	- The USB backend now lists all USB printer devices
	  regardless of whether a printer is connected or not. 
	  This allows new USB printers to be connected without
	  restarting cupsd.
	- Added some more minor performance tweeks to the IPP
	  protocol code to reduce copying and array indexing.
	- The cupsaddsmb utility now uses the -c option with
	  smbclient and rpcclient to avoid the read length limit
	  for commands on the standard input.
	- Added an include file to the CRD handling code in
	  pstoraster so that it would compile properly on 64-bit
	  pointer platforms...


CHANGES IN CUPS V1.1.12

	- Added "Polish" to the list of known languages for PPD
	  files.
	- Added missing directory definition to cups-config.
	- The CUPS-Move-Job operation did not set the
	  destination type for the new destination.
	- The CUPS-Add-Printer operation did not support the
	  allow=all or deny=none values to clear the per-user
	  printer ACLs.
	- The SetPrinterAttrs() function did not handle invalid
	  PPD files that were missing the required NickName
	  attribute.  It now looks for NickName, ModelName, and
	  then substitutes the string "Bad PPD File" for the
	  printer-make-and-model attribute.


CHANGES IN CUPS V1.1.11

	- Added support for embedded TrueType fonts in PDF
	  files.
	- Added support for PostScript functions in PDF
	  files.
	- Added new "cupsaddsmb" utility for exporting
	  CUPS printer drivers to SAMBA/Windows clients.
	- Added preliminary support for Darwin/MacOS X.
	- The CUPS-Add-Printer operation no longer allows
	  arbitrary scheme names in device URIs to be used - it
	  now restricts the available schemes to those found in
	  the device list (lpinfo -m).
	- The ippRead() and ipp_read_file() functions could not
	  handle more than IPP_MAX_VALUES (100) values in a
	  1setOf attribute.  These functions have been updated
	  to dynamically allocate more memory as needed, and the
	  IPP_MAX_VALUES constant now represents the allocation
	  increment.  [this caused some versions of the
	  GIMP-print drivers to fail since the number of media
	  options exceeded 100...]
	- The scheduler could crash when BrowseShortNames
	  was set to "No".
	- The scheduler did not prevent MaxClients from being
	  set to 0, which could cause the scheduler to go in an
	  infinite loop when accepting a request.
	- Made some performance optimizations in the ippRead()
	  functions to make IPP request/response processing
	  faster.
	- The accept/reject/enable/disable command did not
	  support properly support the "-h" or default
	  server name.
	- The scheduler did not save the quota configuration
	  when the job-quota-period attribute was set to 0.
	- The LPDEST and PRINTER environment variables did not
	  support printer instances.
	- The text filter now handles more types of boldface and
	  underline formatting.
	- The cupsTempFd() function did not fail if the
	  temporary directory did not exist; this would cause it
	  to loop indefinitely instead of returning an error
	  (-1).
	- Stopping (disabling) a printer class did not stop jobs
	  from printing to printers in that class.
	- The cupsGetDests() function was sending the
	  requested-attributes attribute as a name instead of a
	  keyword; this caused a serious performance problem on
	  slower systems since more information had to be
	  transferred from server to client.
	- The web interfaces did not always quote < and & in
	  things like the job title.  This had the potential for
	  browser-based security violations (on the browser's
	  machine); bug report from SuSE.
	- The scheduler now treats unauthenticated usernames as
	  case-insensitive when doing quota and allow/deny
	  processing.
	- The lp command sent the "request ID is ..." message
	  to stderr instead of stdout...
	- The PostScript filter (pstops) now handles EPS files,
	  adding a showpage command to the files as needed.
	- The configure script checked for the <stdlib.h> header
	  file before the JPEG libraries; since the JPEG headers
	  can define HAVE_STDLIB_H, the configure check would
	  cause the JPEG check to fail on some systems.
	- The scheduler now supports localized banner files,
	  using the subdirectory approach, e.g. the "es"
	  subdirectory under /usr/share/cups/banners is used for
	  the Spanish banner files.
	- Updated the scheduler so it knows the correct
	  language abbreviation to use for all supported
	  PPD LanguageVersion values.  The new code also
	  supports country codes as well, so "English-GB"
	  maps to the "en_GB" locale.
	- The cups-lpd mini-daemon did not support
	  anonymous printing (no username specified).
	  While the username is REQUIRED by RFC-1179,
	  MacOS clients do not send the REQUIRED username
	  information when printing via LPD.
	- Added many warning and informational messages
	  to cups-lpd where they were missing.
	- Added Czech message file contributed by SuSE.
	- The cups-lpd mini-daemon now returns a non-zero
	  status if an invalid destination or job ID is
	  provided.
	- The scheduler did not honor the KeepAlive setting in
	  cupsd.conf.
	- Increased the size of the file read/write buffers to
	  32k.
	- *BSD static library creation fixes.
	- Use mkstemps() instead of tmpnam() in pdftops whenever
	  possible.
	- Added httpGetHostByName() function as a wrapper around
	  gethostbyname() - some implementations of this
	  function do not support IP addresses (e.g. MacOS X.)
	- Added casts to all printf's of file lengths, since
	  there is currently no standard way of formatting long
	  long values.
	- The client filename field was not cleared in all
	  instances, resulting in old form data being submitted
	  to CGIs.
	- The httpConnect*() functions now try all available
	  addresses for a host when connecting for the first
	  time.
	- The pstoraster filter would "lose" all drawing
	  commands when the PageSize was set but the printer
	  bitmap was  not reallocated.  This was most noticeable
	  with the output from StarOffice 6 beta and would
	  result in a blank page being output...
	- The IPP backend was sending a PAGE comment even when
	  printing the output from a filter (it should only send
	  page comments when printing files directly...)
	- The pdftops filter didn't properly map glyph names of
	  embedded Asian TrueType fonts.
	- Changed the CUPS startup script to look for a program
	  named "cupsd", not just any program with "cupsd" in
	  the name (this caused the apcupsd UPS monitoring
	  daemon to be stopped/restarted...)
	- The CUPS-Move-Job operation did not change the
	  internal destination name for held jobs, so moved (but
	  held) jobs would still show up as queued on the
	  original destination.
	- The cups-polld program didn't send the
	  requested-attributes attribute in the
	  CUPS-Get-Printers and CUPS-Get-Classes requests, which
	  made it use more CPU and bandwidth than required.
	- The scheduler and CUPS API incorrectly added a
	  job-sheets-default attribute for remote printers. This
	  caused banner pages to be omitted from client system
	  prints.


CHANGES IN CUPS V1.1.10-1

	- Minor fixes to the filter, systemv, and template
	  makefiles to install files properly.


CHANGES IN CUPS V1.1.10

	- Added a driver for DYMO label printers.
	- Added new ClassifyOverride directive to allow users
	  to override the classification of individual jobs.
	- Added new BrowseProtocols directive to control which
	  browse protocols are used (currently CUPS and SLP).
	- Added SLPv2 support (thanks to Matt Peterson for
	  contributing the initial implementation for CUPS.)
	- Adding a raw printer on a remote CUPS server now
	  correctly redirects PPD file requests to the remote
	  server.
	- The serial backend now limits writes to 1/10th
	  second worth of data to avoid buffer overflows
	  with some types of flow control.
	- The scheduler did not properly process PUT requests,
	  so configuration files could not be uploaded to the
	  server.
	- The scheduler did not strip trailing whitespace on
	  lines in the configuration files.
	- The httpWrite() function did not transition the PUT
	  request to the HTTP_STATUS state to get the status
	  from the server.
	- The scheduler did not properly handle trailing null
	  ("-") filters when testing a driver that sent data
	  to the file: pseudo-backend.
	- The IPP backend now only sends a document-format of
	  "application/vnd.cups-raw" when printing to another
	  CUPS server using a local printer driver or interface
	  script.  Previously the job's document format was
	  used, which was incorrect.
	- The lpadmin command didn't use the ppd-name attribute
	  with the -m option; this prevented the use of the
	  "raw" model from the command-line.
	- The pstoraster filter output draft (1-bit) 6-color
	  output in the wrong order; this resulted in yellow
	  being printed instead of black on Stylus Photo
	  printers.
	- The pdftops filter did not have the Japanese and
	  Chinese text support compiled into it.
	- The IPP and AppSocket backends did not clear the
	  "waiting for print job to complete" status message,
	  which caused some confusion... :)
	- The serial backend now opens the port in "no delay"
	  mode to avoid DCD detection problems with some OS's.


CHANGES IN CUPS V1.1.9-1

	- The configure script did not substitute the
	  correct user and group names.
	- The configure script did not use the full path
	  to the install-sh script when it was used.
	- The pstoraster filter did not correctly support
	  DuplexTumble mode for printers that used flip
	  duplexing.
	- The cups.list.in file was missing from the
	  distribution.
	- The New DeskJet series driver did not use the
	  correct OrderDependency for the Duplex option.
	- Use read() instead of fread() to read piped
	  print files in lpr/lp.  This avoids a bug in the
	  HP-UX 10.20 fread() function.
	- Updated the pstoraster filter to use the MIPS_FIXADE
	  system call under IRIX to fix bus error problems on
	  R12000 processors (Ghostscript is not 64-bit clean...)
	- Some Xerox PPD files (most notably the Phaser 790)
	  have illegal whitespace in the option keyword in the
	  OpenUI line.  This caused the PageRegion option to not
	  be recognized properly for the Phaser 790.


CHANGES IN CUPS V1.1.9

	- Revamped the configure script to use a modular
	  approach for the various tests.
	- Added --with-openssl-* options to properly reference
	  the OpenSSL libraries in DSOs.
	- Added --with-cups-user and --with-cups-group
	  options to specify the default user and group for
	  CUPS.
	- Added AIX shared library support.
	- Added AIX device discovery for the serial and
	  parallel ports.
	- Now use install program or script to install
	  directories, files, and symlinks.
	- Updated pstops filter to use strict handling of EPS
	  files embedded in a PostScript document.  The %%EOF
	  handling in 1.1.8 caused some dvips files not to
	  print.
	- Fixed yet another memory allocation bug in pstoraster
	  that would cause it to crash.  This fix also ensures
	  that all memory allocations are done on (at least) a
	  64-bit boundary.
	- Fixed Digest authentication - httpGetSubField() didn't
	  skip the Digest keyword.
	- The scheduler did not properly handle Digest
	  authentication with the new multiple-group support.
	- The scheduler did not allow usernames that were
	  not in the UNIX password file to be used for Digest
	  authentication from passwd.md5.
	- The scheduler could not scan PPD files that only used
	  a carriage return (i.e. MacOS PPD files); the new code
	  is also about 40% faster, so servers with thousands of
	  PPD files should start much faster now.
	- The scheduler now stores the PPD file size and
	  modification times in the ppds.dat file, so it can now
	  incrementally update the PPD database from the model
	  directory, resulting in significantly faster startup
	  times.
	- The lpinfo command did not return a non-zero status
	  code if an error occurred.
	- Fixed a bug in the scheduler's UpdateJob() function.
	  Basically, all jobs shared the same status buffer, and
	  the "buffer start" pointer could point to 1 byte
	  before the beginning of the buffer.  The new
	  implementation uses a separate buffer for each job and
	  eliminates the buffer start bug.
	- The IPP backend would send N copies of a document if
	  the receiving device didn't support the copies
	  attribute, even if the upstream driver already added
	  the necessary commands to generate the copies.  This
	  was most noticeable with HP printers where N * N
	  copies would come out instead of N.
	- The PostScript filter (pstops) did not properly handle
	  duplex printing on inkjet printers that provide this
	  option.  Copies would be put on the front and back
	  sides of the duplexed page, and the filter did not
	  output an even number of pages.
	- The backends always caught SIGTERM after they
	  connected to the printer.  This prevented raw jobs
	  from being cancelled early.
	- The cupsSetDests() function now removes any printers,
	  instances, and options that are not defined by the
	  user or server.  This should prevent old system-wide
	  options from being used in individual user accounts.
	- Updated the EPSON printer driver and added PPDs for
	  the newer EPSON Stylus printers that only support the
	  "ESC i" graphics command.
	- The lpadmin command didn't allow you to add remote
	  printers to a local class.
	- The lpadmin command didn't allow you to set the
	  options (quotas, etc.) for a class.
	- The scheduler did not load or save the
	  job-sheets-default attribute for classes.
	- The scheduler did not automatically recreate remote
	  printers that were part of a class.
	- It was possible for a printer class to list the same
	  printer more than once.
	- The scheduler now makes a backup copy of classes.conf
	  and printers.conf before writing the new file.
	- The lppasswd program incorrectly asked for a new
	  password when deleting an existing MD5 password
	  account.
	- The scheduler did not match "/printers/name.ppd"
	  against a location of "/printers/name".
	- The client code did not always handle HTTP encryption
	  upgrades properly.
	- The client code now caches the last Digest password so
	  it can retry using a new resource path or nonce value,
	  which are included in the MD5 sum sent to the server. 
	  This should eliminate unnecessary password prompts
	  when using Digest authentication.
	- The lppasswd command didn't have a man page.
	- Updated the PJL detection rules to allow the universal
	  escape to occur anywhere in the first 128 bytes of the
	  file.
	- The cups-polld program would poll servers continuously
	  with no delay if there was an error contacting the
	  server.
	- The IPP backend would send an empty job-name or
	  requesting-user-name attribute if the corresponding
	  job attribute was an empty string.  While this is
	  allowed by the IPP specification, some HP JetDirect
	  implementations return a client-error-bad-request
	  error if an empty name attribute value is received.
	  The new code only sends these attributes if they are
	  not the empty string.
	- At least some versions of the HP JetDirect firmware
	  do not correctly implement IPP.  Added additional
	  checks to the IPP backend to eliminate extra,
	  unsupported attributes which should normally be
	  ignored by a compliant IPP device.
	- The scheduler did not copy the complete list of
	  supported file types into the
	  document-format-supported attribute. This caused
	  clients to not send the local file type (such as
	  application/vnd.cups-raw for raw print files) and the
	  corresponding bad output in some cases.
	- The scheduler did not fully copy attributes from a
	  set-job-attributes request - string attributes were
	  only referenced, which could cause cupsd to crash
	  or behave irratically.
	- The lp command didn't send the right value for the
	  job-hold-until attribute when "-H resume" was
	  specified.
	- The IPP backend now returns as soon as a job is
	  completed or reported as "pending-held".
	- Added new ImplicitAnyClasses and HideImplicitMembers
	  directives to the cupsd.conf file to make implicit
	  classes more usable/transparent to the user.
	- Clients can now (with the appropriate authentication)
	  retrieve and update the server configuration files
	  using HTTP GET and PUT requests.
	- The web interface didn't allow you to modify the
	  location or description of the printer.
	- The pdftops filter now uses its own temporary file
	  function to work with PDF files using LZW compression
	  (which use the uncompress program or gunzip)
	- The SystemGroup directive now supports specification of
	  multiple groups.
	- Added new Include directive to cupsd.conf, a la
	  Apache.
	- Added new pseudo-driver/PPD called "raw" that can be
	  used to create/convert a raw queue.  This also allows
	  raw queues to be created in the web interface.
	- The pdftops filter didn't handle image objects that
	  used JPEG and Flate compression together.
	- The pstops filter counted pages wrong when using the
	  N-up and even/odd printing options.  This prevented
	  the page-ranges option from working properly.
	- Added another fix to pstoraster for a bus error
	  condition caused by a lack of parenthesis in the
	  Ghostscript code.
	- Added new "natural-scaling" option which scales the
	  natural size of the image (percent of natural image
	  size instead of percent of page size.)
	- The lppasswd program is now setuid to the CUPS user
	  instead of root.
	- The PPD functions did not allow for PPD files that
	  defined the page sizes and margins before the page
	  size options.
	- The mime.types file now checks for the PJL "LANGUAGE =
	  Postscript" command for PostScript files.
	- The scheduler did not truncate file: output files.
	- The PPD file reading code did not handle options with
	  raw quotes (") in the human-readable names.
	- The pdftops filter now remaps the space character when
	  (bad) PDF files contain a .notdef glyph for the space
	  character.


CHANGES IN CUPS V1.1.8

	- Updated spec file to generate separate cups-pstoraster
	  package for pstoraster.
	- The spec file wasn't setting LOGDIR in the install.
	- The scheduler might restart a stopped printer after
	  stopping a print job. Thanks to Florent
	  Guiliani for finding this bug!
	- The init script showed run level 0 for the Red Hat
	  chkconfig program.  This is incorrect because Red Hat
	  doesn't use run level 0 for shutdown scripts.
	- The IPP backend did not handle the
	  client-error-not-found error when checking the status
	  of the job that was sent.  This caused remote queues
	  to stop on client machines when the server had job
	  history disabled.
	- Added httpConnectEncrypt() function to avoid
	  performance penalty for setting up encrypted
	  connections initially.
	- Use httpConnectEncrypt() in all client apps and in the
	  CUPS API to ensure consistent usage of encryption
	  throughout.
	- Jobs weren't queued to remote classes (fix from
	  Richard Begg.)
	- AIX changes from Richard Begg.
	- Fixed the pstops fix for GNOME output - no longer use
	  the page numbers in the %%Page: comment since GNOME
	  puts a filename instead (!?@!#?!).  There is still an
	  issue with N-up printing since GNOME defines its fonts
	  in the first page instead of the document setup section
	  (pages must be independent according to the DSC spec)
	  People with GNOME printing problems should consult bug
	  #54489...
	- The imagetops filter produced PAGE: messages when
	  generating PostScript for a non-PostScript printer
	  (only affects page-label and Classification
	   options.)
	- The updated pdftops filter was looking for an options
	  file called xpdf.conf instead of pdftops.conf.


CHANGES IN CUPS V1.1.7

	- Configuration script changes, including new
	  "--with-docdir=/dir" option to relocate CUPS
	  documentation and web content according to your
	  favorite version of the FHS.
	- Documentation updates for encryption, SLP, etc.
	- New Software Test Plan and automated test script to
	  test CUPS prior to installation.
	- All scheduler configuration files are now case
	  insensitive to match Apache.
	- Added support for Apache ListenBackLog, Require,
	  Satisfy, <Limit>, <LimitExcept>, and LimitRequestSize
	  directives.
	- Added support for all Apache log levels...
	- Added support for "double" HostNameLookups.
	- Added new "RunAsUser" directive to support non-root
	  configurations on the standard (priviledged) ports.
	- Added support for non-root invocation of the lpd
	  backend (does no reserve a priviledged port, which
	  might not work with some LPD servers...)
	- Added new PrintcapFormat directive to control the
	  output format of the printcap file (BSD or Solaris
	  formats are supported at present.)
	- The CUPS directory service routines now handle
	  ECONNREFUSED errors gracefully rather than shutting
	  all browsing off.
	- ippErrorString() now returns the recommended error
	  messages from the IPP/1.1 Model and Semantics
	  document.
	- Fixed a minor IPP compliance issue with responses
	  to requests without the attributes-charset or
	  attributes-natural-language attributes.
	- Sun fix: need httpFlush() call for chunked IPP
	  requests in cupsDoFileRequest().
	- httpConnect() now looks up "localhost" by name and
	  by address (127.0.0.1) for users the go to the
	  trouble of removing the required localhost entry
	  in /etc/hosts or on their DNS server...
	- Added support for Linux 2.4.x devfs parallel port
	  filenames (/dev/parallel/N).
	- cupsDo[File]Request() and cupsGetPPD() no longer
	  block trying to reconnect to a crashed or inaccessable
	  server.
	- Added new ppdEmitJCL() function to better handle
	  PJL commands from PPD files.
	- A bug in UpdateJob() would cause the scheduler to
	  consume 100% CPU until another request was submitted.
	- The cancel command did not support the "-" option to
	  cancel all jobs on all printers.
	- The cancel and lprm commands did not support cancelling
	  the next/current job in the queue.
	- The pdftops and pstoraster filters were using unsafe
	  temporary file functions; while this is not a problem
	  in normal configurations (the CUPS temporary directory
	  is restricted), they now use the cupsTempFd() function.
	- The mime.types file was missing the recognition rule
	  for Sun Raster images.
	- The admin CGI was passing a printer make string to
	  ippSetCGIVars() that was being replaced in that
	  function.
	- "lpoptions -l" would resave the options...
	- The EPSON drivers now send the "end packet mode"
	  command when printing to USB devices.
	- The scheduler initialized certificates before loading
	  the cupsd.conf file.
	- The scheduler used /dev/random to collect random data,
	  which could block if insufficient entropy information
	  had been collected by the kernel.  Now use
	  /dev/urandom.
	- Fixed a bug in the whitespace skipping code in
	  httpGetSubField().
	- The LPD backend now supports a new "order" option:
	  "lpd://server/queue?order=control,data" (default) and
	  "lpd://server/queue?order=data,control".
	- The scheduler enforced a 30 second timeout on all
	  clients regardless of the Timeout directive and if a
	  CGI was currently running.
	- cupsParseOptions() now sets boolean options to
	  option=true or option=false.
	- The "percent complete" calculations in the LPD backend
	  could overflow on large files, causing the percentage
	  to wrap to 0 every 40MB or so.
	- Fixed a memory reallocation bug in pstoraster that
	  could cause it to crash.
	- The LPD backend now sanitizes the job title to avoid
	  potential problems on remote LPD servers.
	- The lp command did not send the requesting-user-name
	  attribute when altering a job.
	- The pstops filter did not handle PostScript files with
	  lines longer than 8191 bytes.
	- The scheduler no longer uses inet_addr() to convert IP
	  addresses in dot format (mmm.nnn.ooo.ppp) to the
	  32-bit format, since it will not work for IPv6
	  addresses.
	- New "Classification" directive to force labeling of
	  the current classification on each page.
	- New "page-label" attribute to add per-page labels
	  ("For Official Use Only", "Draft", etc.)
	- The scheduler now sets the HTTPS environment variable
	  for CGI programs when a client connects using
	  encryption.
	- Fixed a recursion bug in the scheduler that could
	  cause cupsd to crash when a printer was removed.
	- The LPDEST and PRINTER environment variables didn't
	  support instances.
	- Dropped the "file" backend from the device list that
	  is reported, since it is only available for *testing*
	  and should never be used in a production environment.
	  The file: device can still be used, but it won't show
	  up in the list of devices from lpinfo or the web
	  interface.
	- Added support for /dev/lpa# parallel ports under *BSD.
	- Added META variables to the CGI header template to
	  prevent caching of the results.
	- Fixed an unaligned memory buffer for the pstoraster
	  clist states; this caused bus errors for some
	  combinations of printers, drivers, and options.
	- Re-added black reduction for colorful colors; this
	  helps to prevent dark colors from getting desaturated.
	  (only used when converting RGB to CMYK)
	- Added two new directives - MaxJobsPerPrinter and
	  MaxJobsPerUser - to allow an administrator to set
	  the maximum number of pending jobs in a queue or
	  submitted by a user.
	- The scheduler no longer stops a printer if it can't
	  create the status pipe or run the filters or backend.
	  This will allow heavily loaded servers to service
	  clients or start print jobs as the load allows.
	- Fixed a bug in the Set-Job-Attributes code that could
	  crash the scheduler (patch from Martin Zielinski)
	- cupsSetDests() did not quote option values with
	  embedded spaces.
	- Added support for the Enable-Printer and
	  Disable-Printer extension operations (same as
	  CUPS-Accept-Jobs and CUPS-Reject-Jobs.)
	- The AppSocket and IPP backends now wait for the print
	  job to be finished before exiting; this should prevent
	  the loss of print jobs with older JetDirect firmware
	  and make consecutive print jobs print faster.
	- The BMP loading code did not handle resolution values
	  of 0.  This is a problem with BMP image files produced
	  by the GIMP.
	- The HTTP Upgrade code (upgrade to TLS encryption)
	  bypassed the authentication checks.
	- The HTTP Upgrade code did not send a 426 status code
	  to the client and end the current request. This caused
	  a race condition between the client and server for the
	  upgrade to TLS.
	- Fixed a bug in the EOF and Trailer detection code in
	  the pstops filter.
	- The imagetoraster filter did not add the margins to
	  the custom page size in the raster header.
	- The imagetops filter did not adjust the custom page
	  size to the size of the printed image.
	- The imagetops filter did not include DSC comments
	  which are required by some printers.
	- The imagetops filter did not insert newlines in
	  Base85 encoded output, causing files to contain
	  lines longer than 255 characters (violation of the
	  DSC).
	- Added support for the DeskJet 900 series duplexer
	  and CRET color modes in the HP driver.
	- Added support for PPD-defined margins in the HP
	  driver.
	- Fixed the debugging output from pstoraster - the
	  font list was not terminated by a newline.
	- Some versions of the HP-UX pam_unix authentication
	  module apparently do not pass the appdata_ptr argument
	  to the conversation function, preventing the scheduler
	  from authenticating users using PAM under HP-UX.  A
	  workaround using a static variable has been added to
	  address this problem.
	- Fixed a bug in the scheduler SortPrinters() function
	  that could cause printers to disappear or the
	  scheduler to crash when adding a printer.
	- Changed the pstops filter to not do per-page filtering
	  if the file does not conform to at least version 3.0
	  of the document structuring conventions.  This seems
	  to "fix" printing with broken apps.
	- The image filters did not handle older TIFF files that
	  lacked the samples-per-pixel and bits-per-pixel tags.
	- Added new cupsGetJobs() and cupsFreeJobs() functions
	  to manage print jobs.
	- cupsEncodeOptions() would encode names of 0 length and
	  cupsAddOption() and cupsParseOptions() would add names
	  of 0 length.
	- The scheduler might block waiting for status messages
	  after starting a new print job. Thanks to Florent
	  Guiliani for finding this bug!


CHANGES IN CUPS V1.1.6-3

	- The configure script put the JPEG library before the
	  TIFF library; this caused problems in some
	  configurations since the TIFF library also supports
	  JPEG compression of TIFF images.
	- Updated the configure script and makefiles to handle
	  admin man pages with the "1m" extension (HP-UX, IRIX,
	  Solaris, Tru64) and in odd directories (IRIX)
	- The updated cupsTempFile() function did not return
	  the filename when called with a filename buffer of
	  NULL (previously it used a static buffer.)
	- FreeBSD uses /dev/unlptN, but NetBSD and OpenBSD use
	  /dev/ulptN.
	- DeletePrinter() didn't remove the printer from any
	  classes it was a member of.
	- DeletePrinterFromClass() didn't preserve the
	  implicit status of a class.
	- DeletePrinterFromClasses() didn't remove printers
	  from implicit classes.
	- StartJob() didn't send the job-sheets, job-priority,
	  and job-hold-until attributes to remote printers.
	- LoadAllJobs() was looking for job-sheets-completed
	  instead of job-media-sheets-completed.  This would
	  prevent accumulation of page data after a restart
	  of the scheduler.
	- The pstops and imagetops filters now generate copies
	  using the appropriate method for a Level 1, 2, or 3
	  printer since some Level 2/3 printers don't support
	  the /#copies variable anymore.
	- The man page for cups-lpd did not mention the "-o"
	  option.
	- The IPP backend didn't handle version-not-supported
	  errors and revert to IPP/1.0 (previously it only checked
	  for a bad-request error)
	- Caldera fix: lpc now reports unimplemented commands as
	  unimplemented, not invalid.
	- Caldera fix: lpq didn't recognize BSD lpq "-a" option.
	- Caldera fix: lpr didn't recognize BSD lpr "-1", "-2",
	  "-3", "-4", "-q", or "-U" options.
	- RedHat fixes: patches to GNU Ghostscript
	- SuSE fix: temp file creation patch to GNU Ghostscript
	  (pstoraster).
	- SuSE fix: remove cgi-bin/abort.c and cgi-bin/email.c,
	  which are not used.
	- SuSE fix: missing NULL check in cgi_initialize_post().
	- SuSE fix: potential buffer overflows in
	  cgi_initialize_string().
	- SuSE fix: potential buffer overflows in
	  ippSetCGIVars()
	- SuSE fix: more NULL checks in ppdOpen(); also make
	  sure that all memory is freed on error to avoid memory
	  leaks.
	- SuSE fix: Exit from child if setgid() or setuid()
	  fails.
	- SuSE fix: Added setgroups() calls after setgid() and
	  setuid() calls.
	- SuSE fix: potential buffer overflows in httpEncode64()
	  calls.
	- SuSE fix: potential buffer overflows in httpSeparate()
	- SuSE fix: potential buffer overflows in ippWrite() for
	  bad input.
	- SuSE fix: potential nul skip in ppd_decode() for
	  missing hex digits.


CHANGES IN CUPS V1.1.6-2

	- Added changes to support NetBSD startup scripts.
	- Added separate compiler options for pstoraster
	  (Ghostscript) to avoid compiler-induced errors
	  from Ghostscript's twisted code.
	- The mime.types file contained syntax errors.
	- Updated the *BSD USB device filenames to use
	  the /dev/unlptN files so that the USB device
	  is not reset prior to printing (causes print
	  corruption on many printers)
	- Added new cupsTempFd() function to avoid serious
	  security bug in glibc fopen() function.  The glibc
	  fopen() function unlinks a file before creating it,
	  which opens up possible symlink attacks.
	- Now reject 0-length names in add-printer and add-class
	  requests.
	- Fix for pstoraster when ZLIB is not available.
	- cupsGetPPD() didn't reconnect when a HTTP connection
	  was lost.
	- SuSE fix: httpConnect() didn't check that the
	  value from gethostbyname() was a valid IPv4 address.
	- SuSE fix: httpConnect() didn't allow file descriptor 0
	  to be used for a socket.
	- SuSE fix: ippRead() didn't confirm that all values in
	  a set were numeric or string types.
	- SuSE fix: lppasswd race condition fixes.
	- SuSE fix: directive names could overflow buffer when
	  reading *.conf files.
	- SuSE fix: HEAD requests for PPD files did not use the
	  same logic as GET requests.
	- SuSE fix: possible buffer overflow when adding
	  /index.html to requested directory name.
	- SuSE fix: possible buffer overflow when converting
	  IPP attributes to string options for filters.
	- SuSE fix: creating file: device output with mode 0666
	  instead of mode 0600.
	- SuSE fix: creating job info files with mode 0640
	  instead of 0600.
	- SuSE fix: don't rely on snprintf() for including
	  system name in log filenames.
	- SuSE fix: add bounds checking when copying quoted
	  and hex strings.


CHANGES IN CUPS V1.1.6-1

	- Added configure check for getting the correct
	  strftime() format string; %c is not Y2k safe,
	  and %KC and NULL are not universally supported.


CHANGES IN CUPS V1.1.6

	- Fixed another possible DoS attack in httpGets()
	- Added check for "LANGUAGE = PCL" and "LANGUAGE =
	  POSTSCRIPT" in mime.types.
	- Resolution options were not being passed into the
	  filter programs properly.
	- The default compiler options for GCC no longer include
	  "-g3", which apparently is deprecated in newer
	  versions of GCC.
	- CheckJobs() could cause cupsd to crash if a job is
	  cancelled in StartJob().
	- The printers.conf and classes.conf files are now
	  written with restricted permissions.
	- The round-robin algorithm used by FindAvailablePrinter()
	  had problems; fixes contributed by Joel Fredrikson.
	- If LoadAllJobs() is unable to determine the file type
	  of a print job, assume "application/vnd.cups-raw".
	- The web interface now provides a job_printer_name
	  value for any corresponding job_printer_uri value.
	- The cups-lpd mini-daemon now logs the client address
	  and hostname as well as all commands and errors in the
	  syslog file.
	- The IPP backend now detects the supported file formats
	  and only specifies the document format if it is
	  supported.  This makes IPP printing to network print
	  servers and cards more reliable without affecting the
	  capabilities of CUPS servers.
	- The time_at_xyz attributes are now converted to human-
	  readable dates and times for the web interfaces.
	- The HP and EPSON sample drivers now correctly catch
	  signals and eject the current page when a job is
	  cancelled.
	- Fixed bug in CGI code - did not ignore control
	  characters (e.g. newlines) in form data.  This caused
	  sporatic web interface problems.
	- The file type logging code in the scheduler referenced
	  the optional document-format attribute; the new code
	  uses the resolved MIME type instead.
	- The client.conf parsing code now removes trailing
	  whitespace.
	- The MaxJobs directive was being treated as a boolean
	  instead of an integer.
	- The scheduler would not timeout remote printers if
	  BrowseInterval was set to 0.
	- The lpadmin command now supports setting of options
	  and user-level access control.
	- Added "-E" option to all printing commands to force
	  encryption.
	- The client code did not consume the response to the
	  OPTIONS request when switching to secure mode.
	- The scheduler did not output a Content-Length field
	  when responding to an OPTIONS request.
	- Added documentation on using cups-lpd with xinetd
	  to the man page.
	- The socket backend now starts retries at 5 seconds and
	  increases the interval to 30 seconds.  This should
	  provide faster printing when multiple jobs/files are
	  queued for a printer.
	- The filters and backends no longer buffer output to
	  stderr.  This should provide much more accurate status
	  reporting.


CHANGES IN CUPS V1.1.5-2

	- Fixed configure check for OpenSSL to work with RSA
	  code.
	- Added configure check for <sys/ioctl.h>, and use this
	  check in backend/serial.c.
	- Updated configure script handling of data,
	  configuration, and state directories to use datadir,
	  sysconfdir, and localstatedir variables.
	- NetBSD uses different serial port filenames than
	  FreeBSD and OpenBSD.
	- The pdftops filter didn't need some X-specific files.
	- The scheduler makefile doesn't do a chown anymore when
	  installing (cupsd did this automatically on startup
	  anyways)


CHANGES IN CUPS V1.1.5-1

	- There was a typo in the top-level Makefile
	- The top-level Makefile did not install an init script
	  for run level 5. 
	- The configure script did not add the "crypto" library
	  when checking for the OpenSSL library. 
	- The OKIDATA PPD files were missing. 
	- The config.h.in file defined the wrong version number. 
	- The serial backend did not define "funky_hex" under *BSD. 
	- Updated the Visual C++ project files and some of the
	  CUPS API sources to compile under Windows again. 


CHANGES IN CUPS V1.1.5

	- Security updates - new default configuration does
	  not broadcast printer information and only allows
	  access from the local system.
	- EXPERIMENTAL encryption support - CUPS now optionally
	  supports TLS/SSL encryption via the OpenSSL library.
	- Documentation updates.
	- Makefile/configure script updates.
	- The RPM spec file didn't work out-of-the-box under
	  RedHat or Mandrake.
	- Minor code cleanup to remove extraneous compiler
	  warnings.
	- cupsTempFile() was using %p for the temporary
	  filename; this should have been %08x (just 8 digit
	  hex)
	- Deleting a printer with active print jobs would still
	  crash the server.
	- ippWrite() and ipp_write_file() didn't send the
	  correct value length for name-with-language and
	  text-with-language attributes.
	- Updated IPP code to support copied strings (that
	  should not be freed); this provides slightly more
	  efficient IPP server performance.
	- Updated PDF filter to Xpdf 0.91.
	- httpGets() could go into an infinite loop if a line
	  longer than the input buffer size was sent by a
	  client. This could be used in a Denial-of-Service
	  attack.
	- The lpstat and CUPS API functions now request only the
	  data required when getting the list of printer or
	  class information.  This should improve performance
	  with large numbers of printers on slower machines.
	- The scheduler was always enforcing the FilterLimit,
	  even if FilterLimit was set to 0.
	- Updated the Linux USB backend to support Mandrake's
	  /dev/usb/usblp# filenames.
	- The PRINTER and LPDEST environment variables did not
	  override the lpoptions default printer.
	- The PPD read functions incorrectly included trailing
	  characters (usually whitespace) after quoted string
	  attributes.
	- The multiple-document-handling attribute handling code
	  did not check for the correct value for collated
	  copies (separate-documents-uncollated-copies).
	- The EPSON driver did not work with OKIDATA printers in
	  EPSON emulation mode (needed change-emulation command)
	- The HP-GL/2 filter did not scale the plot properly in
	  scale mode 2.
	- Added PPD files for 9-pin and 24-pin OKIDATA printers.
	- The httpSeparate() function didn't handle passwords
	  that started with a number.
	- ippDelete() could free the character set string
	  multiple times in name-with-language and
	  text-with-language attributes.
	- The scheduler would access freed memory right after
	  freeing it (for debug messages); these parts of the
	  code have been reordered to avoid this situation
	  which was causing sporatic errors and crashes.
	- The ppdClose() function didn't free all of the strings
	  in the ppd_file_t structure.
	- The LoadAllJobs() function in the scheduler did not
	  close the spool directory.
	- Changed all sprintf's that use string formats to
	  snprintf's, even if the destination buffer is
	  larger than the source string(s); this protects
	  against buffer overflows caused outside of CUPS...
	- Changed all strcpy's to strncpy's between local and
	  global variables, even if the destination buffer is
	  larger than the source string; this protects
	  against buffer overflows caused outside of CUPS...
	- The CUPS certificate functions didn't use the
	  CUPS_SERVERROOT environment variable when set.
	- The directory services code was copying instead of
	  comparing the remote printer info, resulting in
	  unnecessary updates of the printer attributes for
	  remote printers.
	- Added new mime.types rules to allow automatic raw
	  printing of PCL and ESC/P files; PJL headers are
	  parsed to differentiate between PostScript and
	  PCL job files.  This should eliminate a lot of
	  the reports of SAMBA printing problems due to
	  the missing "-oraw" or "-l" options.
	- The mimeLoadType() function didn't handle the
          3-argument contains() function.
	- The LoadPPDs() function in the scheduler didn't
	  properly set the alloc_ppds variable or handle a PPD
	  database containing 0 printers.
	- The scheduler FindAvailablePrinter() function didn't
	  use the same queuing logic as the CheckJobs()
	  function.  This caused classes to stall if a remote
	  printer was always busy.
	- Jobs are now assigned to printers in a class
	  round-robin style.  This should prevent the first
	  server in the class from bearing the brunt of the
	  jobs.
	- The scheduler's LoadAllJobs() function didn't always
	  restore remote printers for queued jobs on startup.
	- The serial backend didn't support the higher baud
	  rates with the old termios interface. It now supports
	  57600 and 115200 baud.
	- The serial backend now supports different types of
	  flow control; previously it ignored the flow=XYZ
	  option in the device URI.
	- The serial backend now supports DTR/DSR flow control,
	  which is popular on dot-matrix printers (access with
	  "flow=dtrdsr" in the device URI)
	- Added new job-originating-host-name attribute for
	  jobs.  The new attribute provides the hostname or
	  IP address of the machine that submitted the job.
	- The set-job-attributes code no longer allows read-only
	  job attributes to be changed.
	- Expanded the click area for the navigation bar in the
	  web interface.
	- Updated the lp and cancel commands to support all of
	  the Solaris print options (some are simply ignored
	  since they do not map)
	- Updated the scheduler to limit the number of file
	  descriptors to the maximum select() set size.  This
          was causing problems on Solaris systems where the
          max FD count was increased beyond 1024.
	- The scheduler's LoadDevices() function was getting
	  interrupted by the SIGCHLD signal handler; now ignore
	  child signals while loading devices.
	- Added quota and allow/deny user support for printers
	  and classes.
	- Removed black/CMY adjustment code from the PS and
	  image file RIPs; it was interfering with some CUPS
	  driver dithering code.
	- The lpc program stopped listing the queue statuses
	  after the first active printer.
	- The cups-lpd program used an output format that the
	  Solaris printing system did not understand.
        - Updated the lpq program to use the Solaris format
	  except under Tru64 UNIX.
	- Some DEC PPD files incorrectly use "Off" for the null
	  value in UI constraints. Added "Off" to the list of
	  accepted null values.
	- Changed the *BSD define constants to __*BSD__ in all
	  of the backends.
	- Added support for "lpstat printername", which is an
	  undocumented feature in Solaris.
	- The HP-GL/2 filter now only sets the plot size if it
	  is set in the plot file.
	- The lpmove command wasn't sending the requesting
	  user name, causing it to always fail.
	- Updated the cupsTempFile() code to use GetTempPath()
	  under Windows.
	- The cups-lpd mini-daemon didn't limit the number of
	  data files accepted, didn't use cupsTempFile(),
	  didn't handle control file job information in any
	  order, and didn't free job options after printing
	  a file.
	- The scheduler copy_banner() function did not
	  explicitly set the owner and permissions of the banner
	  files, which could prevent the banner pages from
	  printing on some systems.
	- The lpstat program wasn't listing remote classes.
	- The scheduler did not verify that the printer-uri
	  attribute was specified in all requests that required
	  it.


CHANGES IN CUPS v1.1.4

	- Makefile and configure script fixes.
	- **** Changed the default Printcap setting **** to
	  /etc/printcap. There are just too many people asking
	  why application XYZ doesn't see their printers!
	- The web admin interface now displays an error if it
	  can't get the list of printer drivers from cupsd.
	- The IPP backend was putting the copies option before
	  the other job options were set. This caused the IPP
	  request to contain attribute groups in the wrong
	  order, which prevented remote printing.
	- Added checks in scheduler to free memory used for
	  IPP requests and language information when closing
	  a client connection.
	- Fixed the duplex option in the HP LaserJet driver.  It
	  should now work with all LaserJet printers (and
	  compatibles)
	- The add-printer web interface didn't initialize the
	  "old info" data pointer, which caused random crashes
	  on many OS's.
	- Fixed many page sizes defined in the Level 1
	  compatibility file "gs_statd.ps" to match reality.
	- Fixed another bug in the setpagedevice "code" in
	  Ghostscript.  It should now accept all standard
	  Adobe attributes on all platforms.
	- Fixed pstoraster so that it reallocates memory for
	  color depth changes as well as size/resolution
	  changes.  This removes an ordering constraint on
	  the color, page size, and resolution options in
	  PPD files.
	- The IPP backend didn't use the job's character set
	  when the destination printer supported it.  This
	  caused problems when printing text files to other
	  CUPS servers.
	- Updated the logic used to determine when to rebuild
	  the PPD file database.  The scheduler now checks the
	  dates and the number of PPD files (was just checking
	  the dates.)
	- Updated the ippSetCGIVars() function (used by the
	  web interfaces) to only filter valid string values.
	- The PostScript filter was scaling 2-up pages
	  incorrectly.  This caused the edges of some pages to
	  be clipped.


CHANGES IN CUPS v1.1.3

	- Makefile fixes.
	- RPM spec file changes.
	- Documentation updates.
	- Enabled pstoraster debug messages for everything
	  (only logged when LogLevel set to "debug"...)
	- Changed the Input/OutputAttributes fix in
	  pstoraster so that it works on all platforms.
	- The HP-GL/2 filter didn't set the right green
	  color value in encoded polylines or text.
	- Updated the "fitplot" code to handle plot sizes
	  specified as "PSwidth,length" and "PSlength,width".
	- Updated the Linux parallel and USB backends to open
	  the device files prior to looking in /proc for
	  autoprobe info. This makes sure that loadable device
	  driver modules are in fact loaded...
	- Added new FilterLimit directive to limit the number
	  of processing jobs/filters on a system.
	- set-job-attributes didn't change the job-state to
	  held/pending when the job-hold-until attribute was
	  specified.
	- set-job-attributes didn't save the new job attributes.
	- Now change the "requesting-user-name" attribute in
	  requests from remote systems to "remroot" when an
	  unauthenticated "root" user is sent. This can be
	  changed using the new RemoteRoot directive in
	  cupsd.conf.
	- The cancel-job, hold-job, release-job, and restart-job
	  operations didn't log the authenticated username.
	- The cups-lpd mini-daemon now checks for a
	  document-format option before forcing raw mode with
	  filter mode 'l'.
	- The cups-lpd mini-daemon now supports "-o" options
	  on the command-line (passed by inetd) to set global
	  defaults for all print queues.
	- The pstops filter assumed that a file with a Trailer
	  comment would also have an EOF comment.
	- Added new cupsSetPasswordCB(), cupsSetServer(),
	  cupsSetUser(), and ippSetPort() functions to better
	  support client applications (especially GUIs...)
	- The CUPS-add-class and CUPS-add-printer operations
	  didn't reset the printer-name attribute on remote
	  print queues that had to be renamed when a local
	  printer was defined with the same name.
	- The lpoptions command now supports a "-r" option to
	  remove options for a printer or instance.
	- The lpadmin and admin.cgi programs no longer allow
	  class and printer names to begin with a number; this
	  caused the command-line utilities to become confused.
	- The Linux USB backend now looks for both the parallel
	  and usblp driver names in the device list.
	- Added a new FontPath directive to cupsd.conf, and also
	  a "--with-fontpath" option for the configure script to
	  specify alternate font paths for pstoraster.
	- The CUPS-move-job operation didn't update the
	  job-printer-uri attribute.
	- The scheduler only looked up printers and classes by
	  name in IPP requests, instead of using the full URI.
	  This caused problems with KUPS and friends with
	  remote printers.
	- The scheduler now handles better localization of
	  hostnames (e.g. server is host.foo.com, remote is
	  host.subfoo.foo.com, localized is not host.subfoo...)
	- The scheduler logging functions now use a common
	  log file checking/rotation function (courtesy of
	  Crutcher Dunnavant at Red Hat)
	- The scheduler could accept more client connections
	  than it allocated for if more than one Port or Listen
	  line was present in cupsd.conf.
	- Other minor scheduler performance tweeks.
	- The lpq and lprm commands didn't support the default
	  printer set using lpoptions.
	- The lpoptions command now supports a "-l" option to
	  list the printer-specific options and their current
	  settings.
	- The web printer and class lists now show a link to the
	  default printer or class at the top of the page.
	- The text filter now supports pretty printing of shell
	  and perl scripts as well as C/C++ source files.
	- The top and bottom margins were reversed for landscape
	  text printing.
	- The lpq and lprm commands didn't understand printer
	  instances.
	- The scheduler only selected on the first 100 file
	  descriptors instead of the maximum file descriptor
	  limit.
	- The scheduler client, listener, and mainline functions
	  now share code to disable and enable monitoring for
	  new client connections.
	- The imagetoraster filter didn't support all of the
	  required pagedevice parameters.
	- The serial backend now checks for 100 serial ports
	  under Linux.
	- The scheduler used sscanf() to pull out the remote
	  printer location, description, and make/model strings,
	  but if any of these options was empty then sscanf()
	  would stop processing.
	- Added "debug2" log level to provide a little less
	  verbose debugging information at the "debug" level.
	- The scheduler would crash if you stopped a printer
	  that was currently printing a job.
	- The scheduler incorrectly allowed jobs in the cancelled,
	  aborted, or completed state to be cancelled.
	- The image filters did not load TIFF images properly
	  for bottom-to-top and right-to-left orientations.
	- Added new cupsEncodeOptions() function to encode
	  CUPS options as IPP job attributes.
	- The IPP backend, LPD mini-daemon, client commands,
	  and CUPS API did not properly encode multiple
	  option values separated by commas.
	- Added new scheduler malloc logging in debug mode
	  (provides summary of total arena size, allocated,
	   and free bytes once a minute)
	- The EPM-based distributions didn't install the
	  correct symlinks for a few man pages.
	- Fixed a memory leak in the scheduler - wasn't
	  freeing old filters when deleting or renaming
	  printers.
	- The scheduler now queries the primary IP address
	  for the name of the server and maps any incoming
	  requests from that address to the server name.
	  This fixes web admin mapping problems from
	  server.domain.com to localhost.
	- The web printer modify interface now remembers
	  the previous device and driver settings (except
	  for serial ports.)
	- The job-k-octets attribute is now stored as part of
	  the job attributes; this preserves the information
	  after a job is completed when job file history is
	  turned off.
	- Dropped option sub-group parsing code for the moment,
	  since many Xerox PPD files abuse this feature in PPD
	  files and don't follow the hierarchy rules.
	- Added new wrapper code around options so that duplex
	  options for some HP printers don't prevent prints.
	- Added support for Digital UNIX/Tru64 UNIX/OSF/1 format
	  for "lpstat -v" output.
	- Now show the URI for remote printers instead of
	  /dev/null in "lpstat -v" output.
	- Creating classes and adding printers to a class with
	  the lpadmin command didn't work.
	- The banner pages and test page should now format
	  correctly in both portrait and landscape orientations.
	- Updated banner page substitution so that { can appear
	  by itself without quoting.


CHANGES IN CUPS v1.1.2

	- Makefile/configure fixes
	- RPM spec file and EPM list file fixes
	- The cupsTempFile() function now uses a different
	  algorithm for generating temp files and "reserves"
	  them to avoid possible security exploitation.
	- Now use /dev/random (if available) to seed the random
	  number generator for certificates.
	- The /var/spool/cups and /var/spool/cups/tmp directories
	  were incorrectly owned by root; they are now owned by
	  the filter user, typically "lp".
	- The scheduler now resets the permissions on the spool
	  and temp directories as needed to match the filter
	  user.
	- Now expose ppdCollect() as an externally callable
	  function.
	- The image filters now support filtering from the
	  standard input.
	- The imagetoraster filter now collects all printer
	  options and job patch files and applies them to the
	  page header as needed.
	- Added format and banner options to LPD backend.
	- The send-document operation didn't start a job
	  immediately when last-document was true.
	- The set-job-attributes operation didn't correctly
	  replace the current job-hold-until value.
	- Removed the option wrapper code from ppdEmit() and
	  friends since it caused problems with Ghostscript
	  and many PS printers.
	- Was setting TZ environment variable twice for job
	  filters.
	- Added syslog logging in cups-lpd to aide in
	  debugging problems.
	- The HP-UX parallel port backend did not list the
	  available parallel ports on some systems (printf
	  calling problem...)
	- The lp and lpr commands overrode user options if
	  -d/-P were specified after -o.
	- The scheduler would crash with a */* filter.
	- Added support for a "default" filter for unknown file
	  types.  The example provided in the mime.types and
	  mime.convs file prints unknown files as if "-oraw" was
	  specified for the job.  This functionality is disabled
	  by default.
	- The "compatibility" mode fix for older backends did not
	  work for smbspool.  Added a workaround for it.
	- The HP-GL/2 filter didn't perform the right pen scaling
	  with some files and the "fitplot" option.
	- New Software Performance Specification document that
	  describes the memory, disk, and CPU usage of all the
	  CUPS software.


CHANGES IN CUPS v1.1.1

	- The pstoraster Makefile still referenced one of the
	  old PDF filter files.
	- The filter Makefile used INSTALL_DATA instead of
	  INSTALL_LIB to install the CUPS image library.
	- The administration CGI didn't work properly with
	  network devices.
	- The BrowseACL variable was not updated after the
	  cupsd.conf file was loaded.
	- The lpd mini-daemon didn't support printer instances.
	- Now use a default umask of 077 for child processes.
	- Now put temp files in /var/spool/cups/tmp for child
	  processes and the root user, unless TMPDIR or TempDir
	  is defined otherwise.
	- cupsGetPPD() no longer uses easy-to-guess filenames.
	- The CUPS-Delete-Class and CUPS-Delete-Printer
	  operations now save classes.conf file as needed.
	- The lppasswd command wouldn't add a user.
	- The ppdOpen() function could cause a segfault if a
	  0-length PPD file was read.
	- The image filters were not handling images with
	  different X and Y resolutions properly.
	- The imagetoraster filter defaulted to RGB output
	  instead of black output like pstoraster.
	- The pstops filter didn't handle binary data properly.
	- The pstops filter didn't handle copies properly for
	  PS files lacking DSC comments.
	- The pstops filter now appends %%EOF to the end of
	  documents if they don't have it.
	- The cupsGetPPD() function didn't work with remote
	  printers lacking the @server in the name.
	- The configure script didn't work right when only
	  --prefix was specified.
	- The ppdEmit() code now wraps all printer commands so
	  that buggy PostScript printers will still print a file
	  after receiving an option that isn't available.
	- Fixed the DeskJet margin bug, and disabled 600dpi
	  color mode until it can be fixed.
	- The cupsAddDest() function didn't sort instances
	  correctly in all cases.
	- The time-at-xyz attributes now expand to the date and
	  time in banner files.


CHANGES IN CUPS v1.1

	- Documentation updates.
	- Configuration script updates.
	- Didn't map charset and language value strings to lowercase
	  and _ to - as required by SLP and IPP.
	- ppdLoadXYZ() didn't add the list of available fonts to the
	  ppd_file_t structure.
	- The text filter common code was freeing the PPD file data
	  before it was used.
	- The text filter now embeds missing fonts.
	- The CGI interface now maps local access to the server to
	  the localhost address.
	- The HP-GL/2 filter didn't use the specified (or default)
	  color ranges, resulting in strange colors.
	- The HP-GL/2 filter didn't default to no input window, which
	  caused unnecessary clipping of plots.
	- Integrated Xpdf's pdftops filter into CUPS, which is a
	  lightweight and reliable replacement for Ghostscript's
	  PDF support.
	- Removed all PDF support from Ghostscript.
	- Updated HP driver to set top margin; this seems to fix
	  the offset problem seen on HP DeskJet printers.
	- Fixed dependencies on the ZLIB and JPEG libraries in
	  pstoraster.
	- The lpr command wasn't using the lpoptions defined by
	  the user.
	- The lpr command would segfault if the CUPS server was
	  not running.
	- The top-level makefile was not installing the CUPS
	  initialization script.  It now does so if it sees there
	  is an init.d directory in /sbin, /etc/rc.d, or /etc.
	- "lpstat -v all" didn't work.
	- pstoraster would crash on some platforms doing the
	  setpagedevice operator.
	- The web administration interface now allows you to set
	  the default banner pages.
	- Images can now be positioned on the page using the new
	  "position" option.
	- The AccessLog, ErrorLog, and PageLog directives now
	  support "%s" to insert the server name.
	- Added a new BrowseShortNames directive to allow for
	  short remote printer names ("printer" instead of
	  "printer@server") when possible.
	- The scheduler could crash if given an invalid PPD file
	  with no PageSize attributes.
	- Updated the serial, parallel, and usb backends to do
	  multiple writes and ignore ioctl() errors as needed;
	  this should fix problems with serial printing on old
	  serial drivers and with the UltraSPARC parallel port
	  driver under Solaris 2.7.
	- Now propagate LD_LIBRARY_PATH to child processes from
	  cupsd.
	- New DataDir directive for installing in alternate
	  locations.
	- New CUPS_SERVERROOT and CUPS_DATADIR environment
	  variables to specify installation directories as
	  needed.
	- Queued remote jobs recreate remote printers as needed
	  when the scheduler is started.
	- Deleting a printer also purges all jobs on that
	  printer.
	- Old job and control files that don't belong to a
	  printer are automatically deleted.
	- Wasn't updating time-at-processing and
	  time-at-completed attributes in job.
	- Didn't send required multiple-operation-time-out
	  attribute in response to a get-printer-attributes
	  request.
	- cups-lpd now supports options set with lpoptions.
	- The job-hold-until attribute is now provided with all
	  jobs. For jobs that are not currently held the value
	  is "no-hold".
	- The scheduler was not sending "unknown" values in IPP
	  responses.
	- The lpoptions command now accumulates options from
	  previous runs rather than replacing all options for a
	  printer.
	- The IPP backend now switches to IPP/1.0 if a 1.1
	  request fails.
	- The lpadmin and admin.cgi programs now validate new
	  printer and class names.
	- The access_log file now includes the number of IPP bytes
	  received in a POST request.


CHANGES IN CUPS v1.1b5

	- Documentation updates.
	- The pstoraster filter didn't compile without the JPEG library.
	- The cupsd server didn't support the HTTP OPTIONS request
	  method.
	- Dropped the "CLOSE" method supported by the cupsd server.
	  (not defined in HTTP specification)
	- Makefile/configure script fixes.
	- Missing the job-restart template.
	- Added IPP test suite for testing.
	- Missing IPP documentation from binary distributions.
	- Fixed multiple-document handling code when last-document
	  not specified.
	- Added more checks to IPP requests to prevent bad requests
	  from getting through.
	- Not all of the Ghostscript error output was being sent to
	  stderr.
	- The PostScript filter now added PJL commands to set the
	  job name and display string, if supported.
	- The scheduler would crash if the browse socket could not
	  be bound. Now disables browsing if port 631 (reserved for
	  IPP) is being used by a misbehaving daemon.
	- The USB backend now looks for the older Linux 2.2.x USB
	  printer device filenames as well as the newer ones.
	- The IPP backend now uses the UTF-8 charset exclusively,
	  since apparently only CUPS handles more than US-ASCII and
	  UTF-8...
	- Wasn't quoting ( in PostScript banners...
	- Send-document requests with no document-format attribute
	  could cause cupsd to crash.
	- Old jobs in the spool directory might cause cupsd to
	  crash.
	- CUPS now supports all of the recommended job-hold-until
	  keywords as well as name values of the form "HH:MM" and
	  "HH:MM:SS".
	- Added placeholder pointer for TLS encryption to the HTTP
	  connection structure.
	- Fixed the "fast poll" bug reported by DISA - the
	  status pipe wasn't being closed for multi-file jobs.
	- Revamped put_params code in pstoraster to fix bitmap
	  allocation bug with FrameMaker output.
	- Ripped out filename, etc. code from pstoraster as it
	  is a potential security hole.
	- Added support for RIP_CACHE environment variable in the
	  new pstoraster.
	- Fixed USB device filenames for Linux; now support new
	  pre-2.4 devices (/dev/usb/lp#) and 2.2 devices
	  (/dev/usblp#)
	- Fixed accept-jobs crash with classes.
	- Didn't include dot-matrix EPSON drivers in previous
	  release.


CHANGES IN CUPS v1.1b4

	- Documentation updates.
	- Many makefile and configuration script fixes (should
	  now compile better under *BSD.)
	- The MediaPosition attribute was being mishandled by
	  GhostScript, causing the RIP to fail whenever a paper
	  tray was selected.
	- The scheduler now logs the final line of log information
	  from a filter, even if it doesn't end with a newline; this
	  primarily affects GhostScript error output.
	- The scheduler was saving implicit classes, so after a few
	  restarts you'll end up with AnyPrinter, AnyAnyPrinter, etc.
	- The JPEG autodetection didn't work with some JPEG files that
	  came from digital cameras (JPEG but not JFIF); the new
	  magic types should work with all images that the JPEG library
	  can handle.
	- Fixed a bug in the new contains() MIME type rule that could
	  cause cupsd to crash.
	- Switched to using strtol() in the MIME type code so that you
	  can use hex, octal, or decimal constants as desired in the
	  mime.types file.
	- Banner files are now treated as templates, allowing any type
	  of file to be used as a banner.
	- Added a 30-second timeout to backend device reports so that a
	  hung backend will not prevent the scheduler from starting.
	- Backends are once again terminated when jobs are stopped; the
	  CUPS-supplied backends will stay alive until the downstream
	  filters have had a chance to clear out old page data.
	- The charset lookup in the CUPS localization support was wrong
	  (iso8859-x instead of iso-8859-x)
	- Changed the "cpNNNN" code page files to "windows-NNNN" to match
	  the IANA registrations.
	- New PostScript banner pages.
	- Added Windows BMP and Alias PIX image file support to the image
	  filter.
	- The PNG reading coded didn't free all of its buffers.
	- Added Digest authentication support to the client and server
	  code.
	- Added Solaris options to System V commands.
	- Now support the output-bin job template attribute.
	- Now log the job-billing attribute in the page_log file, and
	  keep track of the total number of pages in the
	  job-media-sheets-completed attribute.
	- The penwidth option is now in micrometers to support more
	  accurate width specification.
	- The image filters now support interlaced and transparent PNG
	  files.
	- Didn't handle Keep-Alive for HTTP/1.0 clients.
	- The BrowsePoll support didn't handle when BrowseInterval
	  was set to 0 (now uses 30 seconds if BrowseInterval is 0)
	- The DeskJet driver now supports 600 DPI color for printers
	  that support it.
	- New lpinfo and lpmove commands.
	- The lpq command now supports the Digital UNIX output format.
	- The LPD mini-daemon now supports all required LPD operations.
	- Implemented timeouts for multi-file documents.
	- New cupsPrintFiles() function in the CUPS API library to
	  print multiple files using create-job and send-document
	  requests (1 job ID for multiple files)
	- The lp command now sends multiple files as a single job,
	  matching the behavior of the System V command.
	- The "cancel -a" command now purges job history files.


CHANGES IN CUPS v1.1b3

	- Documentation updates.
	- The startup script redirected stderr before stdout,
	  which caused problems with some versions of Bourne
	  shell and Bash.
	- Fixed a bug in the scheduler's PPD language reading
	  code.
	- Fixed a bug in the scheduler's check for the
	  manufacturer in the PPD.
	- The pstoraster filter didn't allow some input and
	  output attributes to be set.
	- Added banner page support.
	- Added missing PAM configuration file.
	- Configuration script fixes for Linux and *BSD.
	- The log file code was using the wrong sign for the
	  timezone offset.
	- The default printcap file is now empty (no printcap
	  file is generated).
	- The scheduler did not start jobs destined for remote
	  printers when they became available.
	- The scheduler now sends jobs to remote printers
	  immediately. (when sending jobs to a class, the remote
	  printer is only used when it becomes available)
	- The scheduler now supports printing of banner pages
	  via the job-sheets attribute (banner files go in
	  /usr/share/cups/banners)
	- The cupsd process now forks itself into the background
	  (override with -f)
	- Added several *BSD enhancements.
	- Added UNSUPPORTED libtool option to configuration
	  script to allow the use of libtool.  Note that this is
	  UNSUPPORTED by us, but added by request of the *BSD
	  folks.
	- The parallel, serial, and usb backends now retry the
	  opening of their ports.  This allows multiple print
	  queues to be associated with a single physical port,
	  and will allow CUPS to support several types of
	  parallel port auto-switches in the near future.
	- Set-Job-Attributes now supports adding, changing, and
	  deleting job template attributes, and no longer allows
	  job-printer-uri to be set (see CUPS-Move-Job)
	- Added CUPS-Move-Job operation to support moving of jobs.
	- The CGI template functionality now supports multiple
	  languages (still only have templates for English)
	- The CUPS-Get-Printers and CUPS-Get-Classes operations
	  now support filtering as defined in the IDD.
	- The Get-Jobs, CUPS-Get-Printers, and CUPS-Get-Classes
	  operations no longer limit themselves to 1000 jobs,
	  printers, or classes (believe it or not, this is
	  needed for some sites)
	- The web interfaces now support language-specific
	  templates.
	- The web admin interface now supports class management.
	- The web admin interface now shows a list of
	  manufacturers before selecting the PPD/driver for a
	  specific printer.
	- The web admin interface now supports configuration of
	  the default printer options in the PPD file.
	- The web interface now uses printer/class
	  authentication for the test page instead of admin
	  authentication.
	- Updated the RPM spec file for the current release.
	- Updated language support for Windows code pages.
	- 8-bit character set files can now use multiple fonts
	  (needed for Arabic, Greek, Hebrew, etc.)
	- Added basic right-to-left text support in the text
	  filter.
	- The POSIX locale now uses ISO-8859-1 instead of
	  US-ASCII.
	- Fixed PDF printing problems.
	- Fixed PostScript RIP page device dictionary elements
	  that weren't getting passed in cups_get_params().
	- Added a new "contains" rule for the magic file typing.
	- The "printable" rule now accepts characters from 128 to 255
	  (needed for Microsoft character sets)
	- Added support for ~/.cupsrc as well as /etc/cups/client.conf
	  so that the default server can be configured on a per-user
	  basis without environment variables.
	- Added LPD mini-daemon to support incoming LPD jobs.


CHANGES IN CUPS v1.1b2

	- Documentation updates.
	- The lp command didn't always load the user-defined
	  destinations, preventing it from seeing the default
	  printer.
	- Many configure script and makefile fixes.
	- The Microsoft code page files were missing from the
	  distribution.
	- Added a workaround for the HP IPP client (which is sending
	  an invalid printer-uri in requests)
	- Fixed the encoding of text-with-language and name-with-language
	  to match the IPP spec.
	- Added support for unknown value tags in the IPP routines
	  (previously they would be ignored)
	- Integrated GNU GhostScript 5.50 into the pstoraster filter.
	- Client hostname resolution was broken on little-endian
	  machines.
	- Now look at client.conf file for client's default server
	  and printer.
	- The cupsServer() function did not close the client.conf file
	  if it contained a ServerName directive.
	- Added BrowseAllow, BrowseDeny, BrowseOrder, BrowsePoll, and
	  BrowseRelay directives.
	- BrowseInterval 0 disables advertising of local printers, but
	  still receives information on remote printers.
	- New browse polling daemon (for polling servers on different
	  networks)
	- New PPD cache file for faster startup times with large numbers
	  of PPD files.
	- The Host: field was incorrectly required for HTTP/1.0 clients.
	- New set-job-attributes operation now supported.
	- The mime_load_types() and mime_load_convs() functions did not
	  close their input files.


CHANGES IN CUPS v1.1b1

	- NEW web-based administration interface.
	- NEW EPSON printer drivers.
	- NEW user-defined printers and options.
	- NEW persistent jobs and job history
	- NEW IPP/1.1 support
	- NEW template-based web interfaces.
	- NEW CUPS-get-devices and CUPS-get-ppds operations.
	- NEW support for create-job and send-file operations.
	- NEW certificate-based authentication for local
	      administration.
	- NEW USB backend.
	- The lpr command now produces human-readable error messages.
	- The lpq command now produces BSD standard format output
	  instead of OSF/1 output.  This should resolve the SAMBA
	  print queue problems that have been reported.
	- The IPP backend did not always detect when the "raw" option
	  was being used.
	- The "lpstat -p" command would stop after the first active
	  printer.
	- The "lpstat -v" command would stop before the first remote
	  printer.
