diff --git a/.cups-filters.metadata b/.cups-filters.metadata new file mode 100644 index 0000000..be64a12 --- /dev/null +++ b/.cups-filters.metadata @@ -0,0 +1 @@ +f574678c1436d91216858edc9d2baea03579e998 SOURCES/cups-filters-1.20.0.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1746351 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/cups-filters-1.20.0.tar.xz diff --git a/SOURCES/0001-foomatic-rip-Changed-Ghostscript-call-to-count-pages.patch b/SOURCES/0001-foomatic-rip-Changed-Ghostscript-call-to-count-pages.patch new file mode 100644 index 0000000..69adc6f --- /dev/null +++ b/SOURCES/0001-foomatic-rip-Changed-Ghostscript-call-to-count-pages.patch @@ -0,0 +1,22 @@ +From 297cc2decc53e0b08eb03049fce375db33df2131 Mon Sep 17 00:00:00 2001 +From: Till Kamppeter +Date: Sun, 7 Apr 2019 16:34:16 +0200 +Subject: [PATCH] foomatic-rip: Changed Ghostscript call to count pages in a + PDF file so that it works with GS 9.27. + +diff --git a/filter/foomatic-rip/pdf.c b/filter/foomatic-rip/pdf.c +index 9c3979bb..bc739bd8 100644 +--- a/filter/foomatic-rip/pdf.c ++++ b/filter/foomatic-rip/pdf.c +@@ -47,9 +47,8 @@ static int pdf_count_pages(const char *filename) + size_t bytes; + + snprintf(gscommand, CMDLINE_MAX, "%s -dNODISPLAY -q -c " +- "'/pdffile (%s) (r) file def pdfdict begin pdffile pdfopen begin " +- "(PageCount: ) print pdfpagecount == flush currentdict pdfclose " +- "end end quit'", ++ "'/pdffile (%s) (r) file runpdfbegin (PageCount: ) print " ++ "pdfpagecount = quit'", + gspath, filename); + + FILE *pd = popen(gscommand, "r"); diff --git a/SOURCES/cups-browsed-socket-leak.patch b/SOURCES/cups-browsed-socket-leak.patch new file mode 100644 index 0000000..cf18dfa --- /dev/null +++ b/SOURCES/cups-browsed-socket-leak.patch @@ -0,0 +1,18 @@ +diff --git a/utils/cups-browsed.c b/utils/cups-browsed.c +index c6c257e..2cc64dd 100644 +--- a/utils/cups-browsed.c ++++ b/utils/cups-browsed.c +@@ -2747,6 +2747,13 @@ on_printer_state_changed (CupsNotifier *object, + if (i == q->last_printer) + break; + } ++ ++ /* Close remote connection */ ++ if (http) { ++ httpClose(http); ++ http = NULL; ++ } ++ + /* Find the ID of the current job */ + request = ippNewRequest(IPP_GET_JOBS); + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, diff --git a/SOURCES/cups-browsed.8.patch b/SOURCES/cups-browsed.8.patch new file mode 100644 index 0000000..583c758 --- /dev/null +++ b/SOURCES/cups-browsed.8.patch @@ -0,0 +1,14 @@ +diff -up cups-filters-1.20.0/utils/cups-browsed.8.manpage cups-filters-1.20.0/utils/cups-browsed.8 +--- cups-filters-1.20.0/utils/cups-browsed.8.manpage 2018-11-12 14:14:48.436062013 +0100 ++++ cups-filters-1.20.0/utils/cups-browsed.8 2018-11-12 14:19:10.188091043 +0100 +@@ -100,8 +100,8 @@ and command line tools. + + \fBcups-browsed.conf\fP(5) + .PP +-/usr/share/doc/\fBcups-browsed\fP/README.gz ++/usr/share/doc/cups-filters/README.gz + .SH AUTHOR +-The authors of \fBcups-browsed\fP are listed in /usr/share/doc/\fBcups-browsed\fP/AUTHORS. ++The authors of \fBcups-browsed\fP are listed in /usr/share/doc/cups-filters/AUTHORS. + .PP + This manual page was written for the Debian Project, but it may be used by others. diff --git a/SOURCES/cups-filters-brftopagedbrf-install.patch b/SOURCES/cups-filters-brftopagedbrf-install.patch new file mode 100644 index 0000000..ba6aceb --- /dev/null +++ b/SOURCES/cups-filters-brftopagedbrf-install.patch @@ -0,0 +1,172 @@ +diff -up cups-filters-1.20.0/configure.ac.brftopagedbrf-install cups-filters-1.20.0/configure.ac +--- cups-filters-1.20.0/configure.ac.brftopagedbrf-install 2018-01-29 19:14:59.000000000 +0100 ++++ cups-filters-1.20.0/configure.ac 2018-04-27 11:19:33.987213243 +0200 +@@ -856,6 +856,7 @@ AC_CONFIG_FILES([ + filter/braille/filters/cups-braille.sh + filter/braille/filters/imagetobrf + filter/braille/filters/texttobrf ++ filter/braille/filters/brftopagedbrf + filter/braille/filters/vectortopdf + filter/braille/filters/vectortobrf + filter/braille/filters/musicxmltobrf +diff -up cups-filters-1.20.0/filter/braille/filters/brftopagedbrf.in.brftopagedbrf-install cups-filters-1.20.0/filter/braille/filters/brftopagedbrf.in +--- cups-filters-1.20.0/filter/braille/filters/brftopagedbrf.in.brftopagedbrf-install 2018-04-27 11:19:41.038152279 +0200 ++++ cups-filters-1.20.0/filter/braille/filters/brftopagedbrf.in 2018-04-27 11:21:47.344068714 +0200 +@@ -0,0 +1,146 @@ ++#!/bin/bash ++ ++# ++# Copyright (c) 2015-2017 Samuel Thibault ++# ++# Permission is hereby granted, free of charge, to any person obtaining a copy ++# of this software and associated documentation files (the "Software"), to deal ++# in the Software without restriction, including without limitation the rights ++# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++# copies of the Software, and to permit persons to whom the Software is ++# furnished to do so, subject to the following conditions: ++# ++# ++# The above copyright notice and this permission notice shall be included in ++# all copies or substantial portions of the Software. ++# ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++# THE SOFTWARE. ++# ++ ++# Make sure we have enough options ++if [ $# != 5 -a $# != 6 ]; then ++ echo "ERROR: $0 jobid user name nb options [filename]" >&2 ++ exit 1 ++fi ++ ++NB=$4 ++OPTIONS=$5 ++FILE=$6 ++ ++. @CUPS_DATADIR@/braille/cups-braille.sh ++ ++shopt -s extglob ++ ++# Construct list of pages from PAGERANGES ++ ++PAGES=" " # Explicit list of pages ++AFTER= # All pages including and after this ++BEFORE= # All pages before and including this ++ ++[ -n "$PAGERANGES" ] || PAGERANGES="1-" ++ ++while [ -n "${PAGERANGES}" ] ++do ++ PAGERANGE=${PAGERANGES/,*} ++ PAGERANGE=${PAGERANGE%%*( )} ++ PAGERANGE=${PAGERANGE##*( )} ++ if [ -n "${PAGERANGES/*,*}" ] ++ then ++ # last range ++ PAGERANGES="" ++ else ++ # Remove leading range ++ PAGERANGES="${PAGERANGES#*,}" ++ fi ++ ++ if [ -n "${PAGERANGE/*-*}" ] ++ then ++ # single-page ++ PAGES="$PAGES$PAGERANGE " ++ ++ elif [ -z "${PAGERANGE%%*-}" ] ++ then ++ # To the end ++ FIRST=${PAGERANGE%%-*} ++ if [ -z "$AFTER" ] || [ "$FIRST" -lt "$AFTER" ] ++ then ++ AFTER="$FIRST" ++ fi ++ ++ elif [ -z "${PAGERANGE##-*}" ] ++ then ++ # From the beginning ++ LAST=${PAGERANGE##*-} ++ if [ -z "$BEFORE" ] || [ "$LAST" -gt "$BEFORE" ] ++ then ++ BEFORE="$LAST" ++ fi ++ ++ else ++ # page range ++ FIRST=${PAGERANGE/-*} ++ LAST=${PAGERANGE/*-} ++ PAGES="$PAGES$(seq "$FIRST" "$LAST" | tr $'\012' ' ')" ++ ++ fi ++done ++ ++# Determine whether to print this page ++doprint() { ++ PAGE="$1" ++ if [ -n "$BEFORE" ] && [ "$PAGE" -le "$BEFORE" ] ++ then ++ echo 1 ++ return ++ elif [ -n "$AFTER" ] && [ "$PAGE" -ge "$AFTER" ] ++ then ++ echo 1 ++ return ++ fi ++ case "$PAGES" in ++ *\ $PAGE\ *) ++ echo 1 ++ return ++ ;; ++ esac ++ echo 0 ++} ++ ++if [ -z "$FILE" ] ++then ++ cat ++else ++ cat "$FILE" ++fi | ( ++ P=1 ++ DOPRINT=$(doprint $P) ++ while IFS=$'\n' read -r LINE ++ do ++ while [ -z "${LINE/*$'\014'*}" ] ++ do ++ # Possibly print before FF ++ HEAD=${LINE%%$'\014'*} ++ [ $DOPRINT == 0 ] || printf %s "$HEAD"$'\014' ++ ++ # Next page ++ P=$(($P + 1)) ++ DOPRINT=$(doprint $P) ++ ++ # Drop head of line ++ LINE=${LINE#*$'\014'} ++ done ++ ++ # Remainder of line ++ [ $DOPRINT == 0 ] || printf "%s\n" "$LINE" ++ done ++) ++ ++echo "INFO: Ready" >&2 ++exit 0 +diff -up cups-filters-1.20.0/Makefile.am.brftopagedbrf-install cups-filters-1.20.0/Makefile.am +--- cups-filters-1.20.0/Makefile.am.brftopagedbrf-install 2017-12-15 02:15:32.000000000 +0100 ++++ cups-filters-1.20.0/Makefile.am 2018-04-27 11:19:33.987213243 +0200 +@@ -591,6 +591,7 @@ nodist_pkgfilter_SCRIPTS = \ + filter/braille/filters/vectortopdf \ + filter/braille/filters/vectortobrf \ + filter/braille/filters/texttobrf \ ++ filter/braille/filters/brftopagedbrf \ + filter/braille/filters/musicxmltobrf + endif + diff --git a/SOURCES/cups-filters-cleareof.patch b/SOURCES/cups-filters-cleareof.patch new file mode 100644 index 0000000..8b9731f --- /dev/null +++ b/SOURCES/cups-filters-cleareof.patch @@ -0,0 +1,11 @@ +diff -up cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c.cleareof cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c +--- cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c.cleareof 2018-09-21 13:38:05.882666106 +0200 ++++ cups-filters-1.20.3/filter/foomatic-rip/foomaticrip.c 2018-09-21 13:38:55.330277816 +0200 +@@ -663,6 +663,7 @@ int print_file(const char *filename, int + rip_die(EXIT_PRNERR_NORETRY_BAD_SETTINGS, + "Couldn't dup stdout of pdf-to-ps\n"); + ++ clearerr(stdin); + ret = print_file("", 0); + + wait_for_process(renderer_pid); diff --git a/SOURCES/cups-filters-covscan.patch b/SOURCES/cups-filters-covscan.patch new file mode 100644 index 0000000..9a225c3 --- /dev/null +++ b/SOURCES/cups-filters-covscan.patch @@ -0,0 +1,678 @@ +diff --git a/backend/beh.c b/backend/beh.c +index 9ba6613..7514e33 100644 +--- a/backend/beh.c ++++ b/backend/beh.c +@@ -223,6 +223,8 @@ call_backend(char *uri, /* I - URI of final destination */ + */ + + strncpy(scheme, uri, sizeof(scheme)); ++ if (strlen(uri) > 1023) ++ scheme[1023] = '\0'; + if ((ptr = strchr(scheme, ':')) != NULL) + *ptr = '\0'; + +diff --git a/backend/implicitclass.c b/backend/implicitclass.c +index 3ce4d10..1593191 100644 +--- a/backend/implicitclass.c ++++ b/backend/implicitclass.c +@@ -104,6 +104,8 @@ main(int argc, /* I - Number of command-line args */ + } + ptr1 ++; + strncpy(queue_name, ptr1, sizeof(queue_name)); ++ if (strlen(ptr1) > 1023) ++ queue_name[1023] = '\0'; + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, + "localhost", ippPort(), "/printers/%s", queue_name); + job_id = argv[1]; +@@ -162,6 +164,8 @@ main(int argc, /* I - Number of command-line args */ + /* Read destination host name (or message) and check whether it is + complete (second double quote) */ + strncpy(dest_host, ptr1, sizeof(dest_host)); ++ if (strlen(ptr1) > 1023) ++ dest_host[1023] = '\0'; + ptr1 = dest_host; + if ((ptr2 = strchr(ptr1, '"')) != NULL) { + *ptr2 = '\0'; +diff --git a/cupsfilters/colormanager.c b/cupsfilters/colormanager.c +index 70074a3..a4a929d 100644 +--- a/cupsfilters/colormanager.c ++++ b/cupsfilters/colormanager.c +@@ -272,6 +272,9 @@ _get_colord_profile(const char *printer_name, /* Dest name */ + free(qualifier); + } + ++ if (icc_profile != NULL) ++ free(icc_profile); ++ + return is_profile_set; + + } +@@ -325,8 +328,11 @@ _get_ppd_icc_fallback (ppd_file_t *ppd, char **qualifier) + if (attr->value[0] != '/') + snprintf(full_path, sizeof(full_path), + "%s/profiles/%s", CUPSDATA, attr->value); +- else ++ else { + strncpy(full_path, attr->value, sizeof(full_path)); ++ if (strlen(attr->value) > 1023) ++ full_path[1023] = '\0'; ++ } + + /* check the file exists */ + if (access(full_path, 0)) { +diff --git a/cupsfilters/image-sgilib.c b/cupsfilters/image-sgilib.c +index 0b70c13..bf2dd80 100644 +--- a/cupsfilters/image-sgilib.c ++++ b/cupsfilters/image-sgilib.c +@@ -282,7 +282,7 @@ sgiOpenFile(FILE *file, /* I - File to open */ + sgip->mode = SGI_WRITE; + + putshort(SGI_MAGIC, sgip->file); +- putc((sgip->comp = comp) != 0, sgip->file); ++ putc(((sgip->comp = comp) != 0) ? '1': '0', sgip->file); + putc(sgip->bpp = bpp, sgip->file); + putshort(3, sgip->file); /* Dimensions */ + putshort(sgip->xsize = xsize, sgip->file); +diff --git a/cupsfilters/image-sun.c b/cupsfilters/image-sun.c +index 609b194..989d039 100644 +--- a/cupsfilters/image-sun.c ++++ b/cupsfilters/image-sun.c +@@ -114,6 +114,7 @@ _cupsImageReadSunRaster( + ras_depth == 0 || ras_depth > 32) + { + fputs("DEBUG: Raster image cannot be loaded!\n", stderr); ++ fclose(fp); + return (1); + } + +diff --git a/cupsfilters/ppdgenerator.c b/cupsfilters/ppdgenerator.c +index 052e3c5..3bc4d8a 100644 +--- a/cupsfilters/ppdgenerator.c ++++ b/cupsfilters/ppdgenerator.c +@@ -937,6 +937,10 @@ load_opt_strings_catalog(const char *location, cups_array_t *options) + } + } + cupsFileClose(fp); ++ if (choice_name != NULL) ++ free(choice_name); ++ if (opt_name != NULL) ++ free(opt_name); + if (filename == tmpfile) + unlink(filename); + } +diff --git a/cupsfilters/raster.c b/cupsfilters/raster.c +index 8203690..67d6b9b 100644 +--- a/cupsfilters/raster.c ++++ b/cupsfilters/raster.c +@@ -151,11 +151,14 @@ cupsRasterParseIPPOptions(cups_page_header2_t *h, /* I - Raster header */ + strcasestr(s, "right") || + strcasestr(s, "side") || + strcasestr(s, "main")) +- media_source = strdup(s); ++ { ++ if (media_source == NULL) ++ media_source = strdup(s); ++ } + else + media_type = strdup(s); + } +- if (size_found) ++ if (page_size == NULL && size_found) + page_size = strdup(size_found->pwg); + } + } +@@ -1079,6 +1082,13 @@ cupsRasterParseIPPOptions(cups_page_header2_t *h, /* I - Raster header */ + h->cupsRenderingIntent[0] = '\0'; + #endif /* HAVE_CUPS_1_7 */ + ++ if (media_source != NULL) ++ free(media_source); ++ if (media_type != NULL) ++ free(media_type); ++ if (page_size != NULL) ++ free(page_size); ++ + return (0); + } + +diff --git a/filter/bannertopdf.c b/filter/bannertopdf.c +index b78ea37..2b9bd76 100644 +--- a/filter/bannertopdf.c ++++ b/filter/bannertopdf.c +@@ -513,6 +513,15 @@ static int generate_banner_pdf(banner_t *banner, + pdf_duplicate_page(doc, 1, copies); + + pdf_write(doc, stdout); ++ ++ opt_t * opt_current = known_opts; ++ opt_t * opt_next = NULL; ++ while (opt_current != NULL) ++ { ++ opt_next = opt_current->next; ++ free(opt_current); ++ opt_current = opt_next; ++ } + free(buf); + pdf_free(doc); + return 0; +diff --git a/filter/foomatic-rip/foomaticrip.c b/filter/foomatic-rip/foomaticrip.c +index 2a642ed..13d2035 100644 +--- a/filter/foomatic-rip/foomaticrip.c ++++ b/filter/foomatic-rip/foomaticrip.c +@@ -666,6 +666,11 @@ int print_file(const char *filename, int convert) + ret = print_file("", 0); + + wait_for_process(renderer_pid); ++ if (in != NULL) ++ fclose(in); ++ if (out != NULL) ++ fclose(out); ++ + return ret; + } + +@@ -683,6 +688,8 @@ int print_file(const char *filename, int convert) + + case UNKNOWN_FILE: + _log("Cannot process \"%s\": Unknown filetype.\n", filename); ++ if (file != NULL) ++ fclose(file); + return 0; + } + +@@ -811,10 +818,14 @@ int main(int argc, char** argv) + + if (getenv("PPD")) { + strncpy(job->ppdfile, getenv("PPD"), 2048); ++ if (strlen(getenv("PPD")) > 2047) ++ job->ppdfile[2047] = '\0'; + spooler = SPOOLER_CUPS; +- if (getenv("CUPS_SERVERBIN")) +- strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"), +- sizeof(cupsfilterpath)); ++ if (getenv("CUPS_SERVERBIN")) { ++ strncpy(cupsfilterpath, getenv("CUPS_SERVERBIN"), sizeof(cupsfilterpath)); ++ if (strlen(getenv("CUPS_SERVERBIN")) > PATH_MAX-1) ++ cupsfilterpath[PATH_MAX-1] = '\0'; ++ } + } + + /* Check status of printer color management from the color manager */ +@@ -834,10 +845,14 @@ int main(int argc, char** argv) + allow duplicates, and use the last specified one */ + while ((str = arglist_get_value(arglist, "-p"))) { + strncpy(job->ppdfile, str, 2048); ++ if (strlen(str) > 2047) ++ job->ppdfile[2047] = '\0'; + arglist_remove(arglist, "-p"); + } + while ((str = arglist_get_value(arglist, "--ppd"))) { + strncpy(job->ppdfile, str, 2048); ++ if (strlen(str) > 2047) ++ job->ppdfile[2047] = '\0'; + arglist_remove(arglist, "--ppd"); + } + +@@ -1020,6 +1035,7 @@ int main(int argc, char** argv) + cmd[0] = '\0'; + + snprintf(gstoraster, sizeof(gstoraster), "gs -dQUIET -dDEBUG -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOINTERPOLATE -dNOMEDIAATTRS -sDEVICE=cups -dShowAcroForm %s -sOutputFile=- -", cmd); ++ free(icc_profile); + } + + /* build Ghostscript/CUPS driver command line */ +diff --git a/filter/foomatic-rip/options.c b/filter/foomatic-rip/options.c +index 325a0a6..798ddf9 100644 +--- a/filter/foomatic-rip/options.c ++++ b/filter/foomatic-rip/options.c +@@ -1031,12 +1031,10 @@ int option_set_value(option_t *opt, int optionset, const char *value) + /* TODO only set the changed option, not all of them */ + choice = option_find_choice(fromopt, + option_get_value(fromopt, optionset)); +- + composite_set_values(fromopt, optionset, choice->command); +- } +- else { ++ free(newvalue); ++ } else + val->value = newvalue; +- } + + if (option_is_composite(opt)) { + /* set dependent values */ +@@ -1914,6 +1912,8 @@ int ppd_supports_pdf() + if (startswith(cmd, "gs")) + { + strncpy(cmd_pdf, cmd, 4096); ++ if (strlen(cmd) > 4095) ++ cmd_pdf[4095] = '\0'; + return 1; + } + +diff --git a/filter/foomatic-rip/spooler.c b/filter/foomatic-rip/spooler.c +index 236551f..4f27563 100644 +--- a/filter/foomatic-rip/spooler.c ++++ b/filter/foomatic-rip/spooler.c +@@ -94,6 +94,8 @@ void init_cups(list_t *arglist, dstr_t *filelist, jobparams_t *job) + CUPS puts the print queue name into the PRINTER environment variable + when calling filters. */ + strncpy(job->printer, getenv("PRINTER"), 256); ++ if (strlen(getenv("PRINTER")) > 255) ++ job->printer[255] = '\0'; + + free(cups_options); + } +diff --git a/filter/pdftops.c b/filter/pdftops.c +index 55d2ec1..a648444 100644 +--- a/filter/pdftops.c ++++ b/filter/pdftops.c +@@ -427,6 +427,8 @@ main(int argc, /* I - Number of command-line args */ + if ((val = cupsGetOption("make-and-model", num_options, options)) != NULL) + { + strncpy(make_model, val, sizeof(make_model)); ++ if (strlen(val) > 127) ++ make_model[127] = '\0'; + for (ptr = make_model; *ptr; ptr ++) + if (*ptr == '-') *ptr = ' '; + } +diff --git a/filter/pdftoraster.cxx b/filter/pdftoraster.cxx +index 4cd656a..0c63ab8 100644 +--- a/filter/pdftoraster.cxx ++++ b/filter/pdftoraster.cxx +@@ -558,8 +558,10 @@ static void parseOpts(int argc, char **argv) + if (!cm_disabled) + cmGetPrinterIccProfile(getenv("PRINTER"), &profile, ppd); + +- if (profile != NULL) +- colorProfile = cmsOpenProfileFromFile(profile,"r"); ++ if (profile != NULL) { ++ colorProfile = cmsOpenProfileFromFile(profile,"r"); ++ free(profile); ++ } + + #ifdef HAVE_CUPS_1_7 + if ((attr = ppdFindAttr(ppd,"PWGRaster",0)) != 0 && +diff --git a/filter/rastertoescpx.c b/filter/rastertoescpx.c +index 5a3e5df..a0ec416 100644 +--- a/filter/rastertoescpx.c ++++ b/filter/rastertoescpx.c +@@ -1141,7 +1141,10 @@ EndPage(ppd_file_t *ppd, /* I - PPD file */ + } + } + else ++ { + free(DotBuffers[0]); ++ DotBuffers[0] = NULL; ++ } + + /* + * Output a page eject sequence... +@@ -1440,7 +1443,7 @@ CompressData(ppd_file_t *ppd, /* I - PPD file information */ + + printf("\033i"); + putchar(ctable[PrinterPlanes - 1][plane]); +- putchar(type != 0); ++ putchar((type != 0) ? '1': '0'); + putchar(BitPlanes); + putchar(bytes & 255); + putchar(bytes >> 8); +@@ -1470,7 +1473,7 @@ CompressData(ppd_file_t *ppd, /* I - PPD file information */ + bytes *= 8; + + printf("\033."); +- putchar(type != 0); ++ putchar((type != 0) ? '1': '0'); + putchar(ystep); + putchar(xstep); + putchar(rows); +@@ -1907,6 +1910,10 @@ main(int argc, /* I - Number of command-line arguments */ + if (fd != 0) + close(fd); + ++ for (int i = 0; i < 7; i++) ++ if (DotBuffers[i] != NULL) ++ free(DotBuffers[i]); ++ + return (page == 0); + } + +diff --git a/filter/rastertops.c b/filter/rastertops.c +index d5d955b..531eb70 100644 +--- a/filter/rastertops.c ++++ b/filter/rastertops.c +@@ -282,6 +282,8 @@ write_flate(cups_raster_t *ras, /* I - Image data */ + if (fwrite(out, 1, have, stdout) != have) + { + (void)deflateEnd(&strm); ++ if (convertedpix != NULL) ++ free(convertedpix); + return Z_ERRNO; + } + } while (strm.avail_out == 0); +diff --git a/filter/sys5ippprinter.c b/filter/sys5ippprinter.c +index ad75551..9a92c8e 100644 +--- a/filter/sys5ippprinter.c ++++ b/filter/sys5ippprinter.c +@@ -570,6 +570,8 @@ exec_filter(const char *filter, /* I - Filter to execute */ + dup2(fd, 2); + close(fd); + } ++ else ++ close(fd); + fcntl(2, F_SETFL, O_NDELAY); + } + +@@ -578,6 +580,8 @@ exec_filter(const char *filter, /* I - Filter to execute */ + dup2(fd, 3); + close(fd); + } ++ else ++ close(fd); + fcntl(3, F_SETFL, O_NDELAY); + + if ((fd = open("/dev/null", O_RDWR)) > 4) +@@ -585,6 +589,8 @@ exec_filter(const char *filter, /* I - Filter to execute */ + dup2(fd, 4); + close(fd); + } ++ else ++ close(fd); + fcntl(4, F_SETFL, O_NDELAY); + + /* +@@ -654,8 +660,11 @@ exec_filters(cups_array_t *filters, /* I - Array of filters to run */ + { + next = (char *)cupsArrayNext(filters); + +- if (filter[0] == '/') ++ if (filter[0] == '/') { + strncpy(program, filter, sizeof(program)); ++ if (strlen(filter) > 1023) ++ program[1023] = '\0'; ++ } + else + { + if ((cups_serverbin = getenv("CUPS_SERVERBIN")) == NULL) +diff --git a/utils/cups-browsed.c b/utils/cups-browsed.c +index a2a4a08..19a2ac8 100644 +--- a/utils/cups-browsed.c ++++ b/utils/cups-browsed.c +@@ -2245,7 +2245,10 @@ is_disabled(const char *printer, const char *reason) { + pstate = (ipp_pstate_t)ippGetInteger(attr, 0); + else if (!strcmp(ippGetName(attr), "printer-state-message") && + ippGetValueTag(attr) == IPP_TAG_TEXT) { +- free(pstatemsg); ++ if (pstatemsg != NULL) { ++ free(pstatemsg); ++ pstatemsg = NULL; ++ } + p = ippGetString(attr, 0, NULL); + if (p != NULL) pstatemsg = strdup(p); + } +@@ -2262,16 +2265,22 @@ is_disabled(const char *printer, const char *reason) { + case IPP_PRINTER_IDLE: + case IPP_PRINTER_PROCESSING: + ippDelete(response); +- free(pstatemsg); ++ if (pstatemsg != NULL) { ++ free(pstatemsg); ++ pstatemsg = NULL; ++ } + return NULL; + case IPP_PRINTER_STOPPED: + ippDelete(response); + if (reason == NULL) + return pstatemsg; +- else if (strcasestr(pstatemsg, reason) != NULL) ++ else if (pstatemsg != NULL && (strcasestr(pstatemsg, reason) != NULL)) + return pstatemsg; + else { +- free(pstatemsg); ++ if (pstatemsg != NULL) { ++ free(pstatemsg); ++ pstatemsg = NULL; ++ } + return NULL; + } + } +@@ -2280,12 +2289,18 @@ is_disabled(const char *printer, const char *reason) { + debug_printf("No information regarding enabled/disabled found about the requested printer '%s'\n", + printer); + ippDelete(response); +- free(pstatemsg); ++ if (pstatemsg != NULL) { ++ free(pstatemsg); ++ pstatemsg = NULL; ++ } + return NULL; + } + debug_printf("ERROR: Request for printer info failed: %s\n", + cupsLastErrorString()); +- free(pstatemsg); ++ if (pstatemsg != NULL) { ++ free(pstatemsg); ++ pstatemsg = NULL; ++ } + return NULL; + } + +@@ -3040,6 +3055,8 @@ on_printer_state_changed (CupsNotifier *object, + dest_host = p->ip ? p->ip : p->host; + dest_port = p->port; + strncpy(dest_name, remote_cups_queue, sizeof(dest_name)); ++ if (strlen(remote_cups_queue) > 1023) ++ dest_name[1023] = '\0'; + dest_index = i; + debug_printf("Printer %s on host %s, port %d is idle, take this as destination and stop searching.\n", + remote_cups_queue, p->host, p->port); +@@ -3056,8 +3073,9 @@ on_printer_state_changed (CupsNotifier *object, + min_jobs = num_jobs; + dest_host = p->ip ? p->ip : p->host; + dest_port = p->port; +- strncpy(dest_name, remote_cups_queue, +- sizeof(dest_name)); ++ strncpy(dest_name, remote_cups_queue, sizeof(dest_name)); ++ if (strlen(remote_cups_queue) > 1023) ++ dest_name[1023] = '\0'; + dest_index = i; + } + debug_printf("Printer %s on host %s, port %d is printing and it has %d jobs.\n", +@@ -3566,8 +3584,9 @@ create_remote_printer_entry (const char *queue_name, + IPP_TAG_KEYWORD)) != NULL) { + debug_printf(" Attr: %s\n", ippGetName(attr)); + for (i = 0; i < ippGetCount(attr); i ++) { +- strncpy(valuebuffer, ippGetString(attr, i, NULL), +- sizeof(valuebuffer)); ++ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer)); ++ if (strlen(ippGetString(attr, i, NULL)) > 65535) ++ valuebuffer[65535] = '\0'; + debug_printf(" Keyword: %s\n", valuebuffer); + if (valuebuffer[0] > '1') + break; +@@ -3598,8 +3617,9 @@ create_remote_printer_entry (const char *queue_name, + debug_printf(" Value: %s\n", valuebuffer); + if (valuebuffer[0] == '\0') { + for (i = 0; i < ippGetCount(attr); i ++) { +- strncpy(valuebuffer, ippGetString(attr, i, NULL), +- sizeof(valuebuffer)); ++ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer)); ++ if (strlen(ippGetString(attr, i, NULL)) > 65535) ++ valuebuffer[65535] = '\0'; + debug_printf(" Keyword: %s\n", valuebuffer); + if (valuebuffer[0] != '\0') + break; +@@ -3629,8 +3649,9 @@ create_remote_printer_entry (const char *queue_name, + debug_printf(" Value: %s\n", valuebuffer); + if (valuebuffer[0] == '\0') { + for (i = 0; i < ippGetCount(attr); i ++) { +- strncpy(valuebuffer, ippGetString(attr, i, NULL), +- sizeof(valuebuffer)); ++ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer)); ++ if (strlen(ippGetString(attr, i, NULL)) > 65535) ++ valuebuffer[65535] = '\0'; + debug_printf(" Keyword: %s\n", valuebuffer); + if (valuebuffer[0] != '\0') + break; +@@ -3663,8 +3684,9 @@ create_remote_printer_entry (const char *queue_name, + debug_printf(" Value: %s\n", p->queue_name, valuebuffer); + if (valuebuffer[0] == '\0') { + for (i = 0; i < ippGetCount(attr); i ++) { +- strncpy(valuebuffer, ippGetString(attr, i, NULL), +- sizeof(valuebuffer)); ++ strncpy(valuebuffer, ippGetString(attr, i, NULL), sizeof(valuebuffer)); ++ if (strlen(ippGetString(attr, i, NULL)) > 65535) ++ valuebuffer[65535] = '\0'; + debug_printf(" Keyword: %s\n", valuebuffer); + if (valuebuffer[0] != '\0') + break; +@@ -4498,6 +4520,8 @@ gboolean update_cups_queues(gpointer unused) { + } else { + /* Device URI: ipp(s)://:631/printers/ */ + strncpy(device_uri, p->uri, sizeof(device_uri)); ++ if (strlen(p->uri) > HTTP_MAX_URI-1) ++ device_uri[HTTP_MAX_URI-1] = '\0'; + debug_printf("Print queue %s is for an IPP network printer, or we do not get notifications from CUPS, using direct device URI %s\n", + p->queue_name, device_uri); + } +@@ -4606,6 +4630,8 @@ gboolean update_cups_queues(gpointer unused) { + } else if (!strncmp(line, "*Default", 8)) { + cont_line_read = 0; + strncpy(keyword, line + 8, sizeof(keyword)); ++ if ((strlen(line) + 8) > 1023) ++ keyword[1023] = '\0'; + for (keyptr = keyword; *keyptr; keyptr ++) + if (*keyptr == ':' || isspace(*keyptr & 255)) + break; +@@ -7144,7 +7170,7 @@ read_configuration (const char *filename) + in the configuration file is used. */ + while ((i < cupsArrayCount(command_line_config) && + (value = cupsArrayIndex(command_line_config, i++)) && +- strncpy(line, value, sizeof(line))) || ++ strncpy(line, value, sizeof(line)) && ((strlen(value) > HTTP_MAX_BUFFER-1)? line[HTTP_MAX_BUFFER-1] = '\0': 1)) || + cupsFileGetConf(fp, line, sizeof(line), &value, &linenum)) { + if (linenum < 0) { + /* We are still reading options from the command line ("-o ..."), +@@ -7371,6 +7397,7 @@ read_configuration (const char *filename) + if (filter->cregexp) + regfree(filter->cregexp); + free(filter); ++ filter = NULL; + } + } else if ((!strcasecmp(line, "BrowseInterval") || !strcasecmp(line, "BrowseTimeout")) && value) { + int t = atoi(value); +@@ -7386,8 +7413,11 @@ read_configuration (const char *filename) + debug_printf("Invalid %s value: %d\n", + line, t); + } else if (!strcasecmp(line, "DomainSocket") && value) { +- if (value[0] != '\0') ++ if (value[0] != '\0') { ++ if (DomainSocket != NULL) ++ free(DomainSocket); + DomainSocket = strdup(value); ++ } + } else if ((!strcasecmp(line, "HttpLocalTimeout") || !strcasecmp(line, "HttpRemoteTimeout")) && value) { + int t = atoi(value); + if (t >= 0) { +@@ -7555,6 +7585,10 @@ read_configuration (const char *filename) + } + } + cupsArrayAdd (clusters, cluster); ++ if (start != NULL) { ++ free(start); ++ start = NULL; ++ } + continue; + cluster_fail: + if (cluster) { +@@ -7568,6 +7602,11 @@ read_configuration (const char *filename) + cupsArrayDelete (cluster->members); + } + free(cluster); ++ cluster = NULL; ++ } ++ if (start != NULL) { ++ free(start); ++ start = NULL; + } + } else if (!strcasecmp(line, "LoadBalancing") && value) { + if (!strncasecmp(value, "QueueOnClient", 13)) +@@ -7575,7 +7614,7 @@ read_configuration (const char *filename) + else if (!strncasecmp(value, "QueueOnServers", 14)) + LoadBalancingType = QUEUE_ON_SERVERS; + } else if (!strcasecmp(line, "DefaultOptions") && value) { +- if (strlen(value) > 0) ++ if (DefaultOptions == NULL && strlen(value) > 0) + DefaultOptions = strdup(value); + } else if (!strcasecmp(line, "AutoShutdown") && value) { + char *p, *saveptr; +@@ -7949,10 +7988,12 @@ int main(int argc, char*argv[]) { + daemon, not with remote ones. */ + if (getenv("CUPS_SERVER") != NULL) { + strncpy(local_server_str, getenv("CUPS_SERVER"), sizeof(local_server_str)); ++ if (strlen(getenv("CUPS_SERVER")) > 1023) ++ local_server_str[1023] = '\0'; + } else { + #ifdef CUPS_DEFAULT_DOMAINSOCKET + if (DomainSocket == NULL) +- DomainSocket = CUPS_DEFAULT_DOMAINSOCKET; ++ DomainSocket = strdup(CUPS_DEFAULT_DOMAINSOCKET); + #endif + if (DomainSocket != NULL) { + struct stat sockinfo; /* Domain socket information */ +@@ -8293,6 +8334,11 @@ fail: + if (debug_logfile == 1) + stop_debug_logging(); + ++ if (DefaultOptions != NULL) ++ free(DefaultOptions); ++ if (DomainSocket != NULL) ++ free(DomainSocket); ++ + return ret; + + help: +diff --git a/utils/driverless.c b/utils/driverless.c +index 7fc6dae..fe61e58 100644 +--- a/utils/driverless.c ++++ b/utils/driverless.c +@@ -227,12 +227,16 @@ list_printers (int mode) + + if (txt_usb_mfg[0] != '\0') { + strncpy(make, txt_usb_mfg, sizeof(make)); ++ if (strlen(txt_usb_mfg) > 511) ++ make[511] = '\0'; + ptr = device_id + strlen(device_id); + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), + "MFG:%s;", txt_usb_mfg); + } + if (txt_usb_mdl[0] != '\0') { + strncpy(model, txt_usb_mdl, sizeof(model)); ++ if (strlen(txt_usb_mdl) > 255) ++ model[255] = '\0'; + ptr = device_id + strlen(device_id); + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), + "MDL:%s;", txt_usb_mdl); +@@ -243,15 +247,22 @@ list_printers (int mode) + *ptr == ')') + *ptr = '\0'; + strncpy(model, txt_product + 1, sizeof(model)); ++ if ((strlen(txt_product) + 1) > 255) ++ model[255] = '\0'; + } else + strncpy(model, txt_product, sizeof(model)); + } else if (txt_ty[0] != '\0') { + strncpy(model, txt_ty, sizeof(model)); ++ if (strlen(txt_ty) > 255) ++ model[255] = '\0'; + if ((ptr = strchr(model, ',')) != NULL) + *ptr = '\0'; + } +- if (txt_pdl[0] != '\0') ++ if (txt_pdl[0] != '\0') { + strncpy(pdl, txt_pdl, sizeof(pdl)); ++ if (strlen(txt_pdl) > 255) ++ pdl[255] = '\0'; ++ } + + if (!device_id[0] && strcasecmp(model, "Unknown")) { + if (make[0]) diff --git a/SOURCES/cups-filters-createall.patch b/SOURCES/cups-filters-createall.patch new file mode 100644 index 0000000..8079537 --- /dev/null +++ b/SOURCES/cups-filters-createall.patch @@ -0,0 +1,21 @@ +diff -up cups-filters-1.16.1/utils/cups-browsed.conf.in.createall cups-filters-1.16.1/utils/cups-browsed.conf.in +--- cups-filters-1.16.1/utils/cups-browsed.conf.in.createall 2018-01-02 17:17:51.555941155 +0100 ++++ cups-filters-1.16.1/utils/cups-browsed.conf.in 2018-01-02 17:19:49.651048564 +0100 +@@ -359,7 +359,7 @@ BrowseRemoteProtocols @BROWSEREMOTEPROTO + + # LocalQueueNamingRemoteCUPS DNS-SD + # LocalQueueNamingRemoteCUPS MakeModel +-# LocalQueueNamingRemoteCUPS RemoteName ++LocalQueueNamingRemoteCUPS RemoteName + # LocalQueueNamingIPPPrinter DNS-SD + # LocalQueueNamingIPPPrinter MakeModel + +@@ -453,7 +453,7 @@ BrowseRemoteProtocols @BROWSEREMOTEPROTO + # CreateIPPPrinterQueues AppleRaster + # CreateIPPPrinterQueues Everywhere AppleRaster + # CreateIPPPrinterQueues Driverless +-# CreateIPPPrinterQueues All ++CreateIPPPrinterQueues All + + + # If cups-browsed is automatically creating print queues for native diff --git a/SOURCES/pdftopdf-nocrypt.patch b/SOURCES/pdftopdf-nocrypt.patch new file mode 100644 index 0000000..24caf5c --- /dev/null +++ b/SOURCES/pdftopdf-nocrypt.patch @@ -0,0 +1,20 @@ +diff --git a/filter/pdftopdf/qpdf_pdftopdf_processor.cc b/filter/pdftopdf/qpdf_pdftopdf_processor.cc +index 73e4f06..0752a99 100644 +--- a/filter/pdftopdf/qpdf_pdftopdf_processor.cc ++++ b/filter/pdftopdf/qpdf_pdftopdf_processor.cc +@@ -623,6 +623,7 @@ void QPDF_PDFTOPDF_Processor::emitFile(FILE *f,ArgOwnership take) // {{{ + if (!extraheader.empty()) { + out.setExtraHeaderText(extraheader); + } ++ out.setPreserveEncryption(false); + out.write(); + } + // }}} +@@ -642,6 +643,7 @@ void QPDF_PDFTOPDF_Processor::emitFilename(const char *name) // {{{ + if (!extraheader.empty()) { + out.setExtraHeaderText(extraheader); + } ++ out.setPreserveEncryption(false); + out.write(); + } + // }}} diff --git a/SPECS/cups-filters.spec b/SPECS/cups-filters.spec new file mode 100644 index 0000000..29e0e9e --- /dev/null +++ b/SPECS/cups-filters.spec @@ -0,0 +1,911 @@ +# we build CUPS also with relro +%global _hardened_build 1 + +Summary: OpenPrinting CUPS filters and backends +Name: cups-filters +Version: 1.20.0 +Release: 19%{?dist} + +# For a breakdown of the licensing, see COPYING file +# GPLv2: filters: commandto*, imagetoraster, pdftops, rasterto*, +# imagetopdf, pstopdf, texttopdf +# backends: parallel, serial +# GPLv2+: filters: gstopxl, textonly, texttops, imagetops, foomatic-rip +# GPLv3: filters: bannertopdf +# GPLv3+: filters: urftopdf, rastertopdf +# LGPLv2+: utils: cups-browsed +# MIT: filters: gstoraster, pdftoijs, pdftoopvp, pdftopdf, pdftoraster +License: GPLv2 and GPLv2+ and GPLv3 and GPLv3+ and LGPLv2+ and MIT and BSD with advertising + +Url: http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters +Source0: http://www.openprinting.org/download/cups-filters/cups-filters-%{version}.tar.xz + +Patch01: cups-filters-createall.patch +Patch02: cups-filters-brftopagedbrf-install.patch +# covscan fixes from upstream +Patch03: cups-filters-covscan.patch +# 1626996 - cups-filters: Sticky EOF behavior in glibc breaks descriptor concatenation using dup2 +Patch04: cups-filters-cleareof.patch +# 1609264 - links in man page is wrong - it shows 'cups-browsed' in path, but we +# have 'cups-filters' in path, because it is shipped in 'cups-filters' package +# instead of 'cups-browsed' as Ubuntu does. I can repack the project later, +# so cups-browsed would have separate sub package, so the link would be correct +Patch05: cups-browsed.8.patch +# change in ghostscript broke printing for several printer models, the fix is to use +# different ghostscript option, taken from upstream +# bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=1712814 +Patch06: 0001-foomatic-rip-Changed-Ghostscript-call-to-count-pages.patch +# rebuild and patch for FIPS compliance, backported from upstream (#1605101) +Patch07: pdftopdf-nocrypt.patch +# 1776270 - cups-browsed leaks sockets +Patch08: cups-browsed-socket-leak.patch + +Requires: cups-filters-libs%{?_isa} = %{version}-%{release} + +# gcc and gcc-c++ is not in buildroot by default + +# gcc for backends (implicitclass, parallel, serial, backend error handling) +# cupsfilters (colord, color manager...), filter (banners, +# commandto*, braille, foomatic-rip, imagetoraster, imagetopdf, gstoraster e.g.), +# fontembed, cups-browsed +BuildRequires: gcc +# gcc-c++ for pdftoopvp, pdftopdf +BuildRequires: gcc-c++ + +BuildRequires: cups-devel +BuildRequires: pkgconfig +# pdftopdf +BuildRequires: pkgconfig(libqpdf) +# pdftops +BuildRequires: poppler-utils +# pdftoijs, pdftoopvp, pdftoraster, gstoraster +BuildRequires: pkgconfig(poppler) +BuildRequires: poppler-cpp-devel +BuildRequires: libjpeg-devel +BuildRequires: libtiff-devel +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(zlib) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: ghostscript +# libijs +BuildRequires: pkgconfig(ijs) +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(fontconfig) +BuildRequires: pkgconfig(lcms2) +# cups-browsed +BuildRequires: avahi-devel +BuildRequires: pkgconfig(avahi-glib) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: systemd + +# Make sure we get postscriptdriver tags. +BuildRequires: python3-cups + +# Testing font for test scripts. +BuildRequires: dejavu-sans-fonts + +# autogen.sh +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: libtool + +Requires: cups-filesystem +# poppler required for banner printing and with ghostscript needed when project +# is configured with --with-pdftops=hybrid +Requires: poppler-utils +Requires: ghostscript + +# texttopdf +Requires: liberation-mono-fonts + +# pstopdf +Requires: bc grep sed which + +# cups-browsed +# it needs cups.service for running +Requires: cups +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +# older installations can still have ghostscript-cups and foomatic-filters +# installed, but they are replaced by cups-filters now. We need to obsolete +# them to have them uninstalled (#1632268) +Obsoletes: ghostscript-cups +Obsoletes: foomatic-filters + +%package libs +Summary: OpenPrinting CUPS filters and backends - cupsfilters and fontembed libraries +# LGPLv2: libcupsfilters +# MIT: libfontembed +License: LGPLv2 and MIT + +%package devel +Summary: OpenPrinting CUPS filters and backends - development environment +License: LGPLv2 and MIT +Requires: cups-filters-libs%{?_isa} = %{version}-%{release} + +%description +Contains backends, filters, and other software that was +once part of the core CUPS distribution but is no longer maintained by +Apple Inc. In addition it contains additional filters developed +independently of Apple, especially filters for the PDF-centric printing +workflow introduced by OpenPrinting. + +%description libs +This package provides cupsfilters and fontembed libraries. + +%description devel +This is the development package for OpenPrinting CUPS filters and backends. + +%prep +%setup -q + +%patch01 -p1 -b .createall +# 1572450 - cupsd: Filter "brftopagedbrf" not found. +%patch02 -p1 -b .brftopagedbrf-install +# covscan fixes from upstream +%patch03 -p1 -b .covscan +# 1626996 - cups-filters: Sticky EOF behavior in glibc breaks descriptor concatenation using dup2 +%patch04 -p1 -b .cleareof +# 1609264 - man pages: wrong links in man cups-browsed +%patch05 -p1 -b .manpage +# 1712814 - Removed option from Ghostscript causes breakage of printing by foomatic-rip filter +%patch06 -p1 -b .foomatic-rip-crash +# 1605101 - qpdf: should not re-implement crypto +%patch07 -p1 -b .pdftopdf-nocrypt +# 1776270 - cups-browsed leaks sockets +%patch08 -p1 -b .cups-browsed-socket-leak + +%build +# work-around Rpath +./autogen.sh + +# --with-pdftops=hybrid - use Poppler's pdftops instead of Ghostscript for +# Brother, Minolta, and Konica Minolta to work around +# bugs in the printer's PS interpreters +# --with-rcdir=no - don't install SysV init script +# --enable-auto-setup-driverless - enable automatic setup of IPP network printers +# with driverless support +# --enable-driverless - enable PPD generator for driverless printing in +# /usr/lib/cups/driver, it is for manual setup of +# driverless printers with printer setup tool +# --disable-static - do not build static libraries (becuase of Fedora Packaging +# Guidelines) +# --enable-dbus - enable DBus Connection Manager's code +# --disable-silent-rules - verbose build output +# --disable-mutool - mupdf is retired in Fedora, use qpdf + +%configure --disable-static \ + --disable-silent-rules \ + --with-pdftops=hybrid \ + --enable-dbus \ + --with-rcdir=no \ + --disable-mutool \ + --enable-driverless \ + --enable-auto-setup-driverless + +make %{?_smp_mflags} + +%install +make install DESTDIR=%{buildroot} + +# Don't ship libtool la files. +rm -f %{buildroot}%{_libdir}/lib*.la + +# Not sure what is this good for. +rm -f %{buildroot}%{_bindir}/ttfread + +rm -f %{buildroot}%{_pkgdocdir}/INSTALL +mkdir -p %{buildroot}%{_pkgdocdir}/fontembed/ +cp -p fontembed/README %{buildroot}%{_pkgdocdir}/fontembed/ + +# systemd unit file +mkdir -p %{buildroot}%{_unitdir} +install -p -m 644 utils/cups-browsed.service %{buildroot}%{_unitdir} + +# LSB3.2 requires /usr/bin/foomatic-rip, +# create it temporarily as a relative symlink +ln -sf %{_cups_serverbin}/filter/foomatic-rip %{buildroot}%{_bindir}/foomatic-rip + +# Don't ship urftopdf for now (bug #1002947). +rm -f %{buildroot}%{_cups_serverbin}/filter/urftopdf +sed -i '/urftopdf/d' %{buildroot}%{_datadir}/cups/mime/cupsfilters.convs + +# Don't ship pdftoopvp for now (bug #1027557). +rm -f %{buildroot}%{_cups_serverbin}/filter/pdftoopvp +rm -f %{buildroot}%{_sysconfdir}/fonts/conf.d/99pdftoopvp.conf + + +%check +make check + +%post +%systemd_post cups-browsed.service + +%preun +%systemd_preun cups-browsed.service + +%postun +%systemd_postun_with_restart cups-browsed.service + +%post libs -p /sbin/ldconfig + +%postun libs -p /sbin/ldconfig + + +%files +%{_pkgdocdir}/README +%{_pkgdocdir}/AUTHORS +%{_pkgdocdir}/NEWS +%config(noreplace) %{_sysconfdir}/cups/cups-browsed.conf +%attr(0755,root,root) %{_cups_serverbin}/filter/* +%attr(0755,root,root) %{_cups_serverbin}/backend/parallel +# Serial backend needs to run as root (bug #212577#c4). +%attr(0700,root,root) %{_cups_serverbin}/backend/serial +%attr(0755,root,root) %{_cups_serverbin}/backend/implicitclass +%attr(0755,root,root) %{_cups_serverbin}/backend/beh +%attr(0755,root,root) %{_cups_serverbin}/backend/cups-brf +%{_bindir}/foomatic-rip +%{_bindir}/driverless +%{_cups_serverbin}/backend/driverless +%{_cups_serverbin}/driver/driverless +%{_datadir}/cups/banners +%{_datadir}/cups/braille +%{_datadir}/cups/charsets +%{_datadir}/cups/data/* +# this needs to be in the main package because of cupsfilters.drv +%{_datadir}/cups/ppdc/pcl.h +%{_datadir}/cups/ppdc/braille.defs +%{_datadir}/cups/ppdc/fr-braille.po +%{_datadir}/cups/ppdc/imagemagick.defs +%{_datadir}/cups/ppdc/index.defs +%{_datadir}/cups/ppdc/liblouis.defs +%{_datadir}/cups/ppdc/liblouis1.defs +%{_datadir}/cups/ppdc/liblouis2.defs +%{_datadir}/cups/ppdc/liblouis3.defs +%{_datadir}/cups/ppdc/liblouis4.defs +%{_datadir}/cups/ppdc/media-braille.defs +%{_datadir}/cups/drv/cupsfilters.drv +%{_datadir}/cups/drv/generic-brf.drv +%{_datadir}/cups/drv/generic-ubrl.drv +%{_datadir}/cups/drv/indexv3.drv +%{_datadir}/cups/drv/indexv4.drv +%{_datadir}/cups/mime/cupsfilters.types +%{_datadir}/cups/mime/cupsfilters.convs +%{_datadir}/cups/mime/cupsfilters-ghostscript.convs +%{_datadir}/cups/mime/cupsfilters-poppler.convs +%{_datadir}/cups/mime/braille.convs +%{_datadir}/cups/mime/braille.types +%{_datadir}/ppd/cupsfilters +%{_sbindir}/cups-browsed +%{_unitdir}/cups-browsed.service +%{_mandir}/man8/cups-browsed.8.gz +%{_mandir}/man5/cups-browsed.conf.5.gz +%{_mandir}/man1/foomatic-rip.1.gz +%{_mandir}/man1/driverless.1.gz + +%files libs +%dir %{_pkgdocdir}/ +%{_pkgdocdir}/COPYING +%{_pkgdocdir}/fontembed/README +%{_libdir}/libcupsfilters.so.* +%{_libdir}/libfontembed.so.* + +%files devel +%{_includedir}/cupsfilters +%{_includedir}/fontembed +%{_datadir}/cups/ppdc/escp.h +%{_libdir}/pkgconfig/libcupsfilters.pc +%{_libdir}/pkgconfig/libfontembed.pc +%{_libdir}/libcupsfilters.so +%{_libdir}/libfontembed.so + +%changelog +* Mon Nov 25 2019 Zdenek Dohnal - 1.20.0-19 +- 1776270 - cups-browsed leaks sockets + +* Mon Sep 02 2019 Zdenek Dohnal - 1.20.0-18 +- 1605101 - qpdf: should not re-implement crypto + +* Wed Aug 07 2019 Zdenek Dohnal - 1.20.0-17 +- 1738533 - rpm -V failed for /etc/cups/cups-browsed.conf + +* Fri Jun 28 2019 Marek Kasik - 1.20.0-16 +- Rebuild due to soname bump in poppler-0.66.0-21 +- Resolves: #1715836 + +* Thu May 23 2019 Zdenek Dohnal - 1.20.0-15 +- 1712814 - Removed option from Ghostscript causes breakage of printing by foomatic-rip filter + +* Mon Nov 12 2018 Zdenek Dohnal - 1.20.0-14 +- 1609264 - man pages: wrong links in man cups-browsed + +* Fri Sep 21 2018 Zdenek Dohnal - 1.20.0-13 +- 1602470 - covscan fixes from upstream +- 1632268 - cups-filters needs to obsolete ghostscript-cups and foomatic-filters +- 1626996 - cups-filters: Sticky EOF behavior in glibc breaks descriptor concatenation using dup2 + +* Tue Jul 24 2018 Zdenek Dohnal - 1.20.0-12 +- correcting license + +* Thu Jul 12 2018 Marek Kasik - 1.20.0-11 +- Rebuild for poppler-0.66.0 + +* Tue Jun 12 2018 Zdenek Dohnal - 1.20.0-10 +- requires ghostscript and poppler-utils + +* Tue Jun 12 2018 Zdenek Dohnal - 1.20.0-9 +- cups-browsed needs cups.service to run + +* Fri Apr 27 2018 Zdenek Dohnal - 1.20.0-8 +- 1572450 - cupsd: Filter "brftopagedbrf" not found. + +* Thu Apr 05 2018 Zdenek Dohnal - 1.20.0-7 +- dependency on poppler-utils is now only recommended + +* Mon Feb 19 2018 Zdenek Dohnal - 1.20.0-6 +- gcc and gcc-c++ is no longer in buildroot by default + +* Wed Feb 14 2018 David Tardon - 1.20.0-5 +- rebuild for poppler 0.62.0 + +* Fri Feb 09 2018 Igor Gnatenko - 1.20.0-4 +- Escape macros in %%changelog + +* Thu Feb 08 2018 Zdenek Dohnal - 1.20.0-3 +- remove old stuff https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/MRWOMRZ6KPCV25EFHJ2O67BCCP3L4Y6N/ + +* Wed Feb 07 2018 Fedora Release Engineering - 1.20.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Jan 30 2018 Zdenek Dohnal - 1.20.0-1 +- Rebase to 1.20.0 + +* Sat Jan 20 2018 Björn Esser - 1.19.0-2 +- Rebuilt for switch to libxcrypt + +* Tue Jan 16 2018 Zdenek Dohnal - 1.19.0-1 +- Rebase to 1.19.0 + +* Thu Jan 11 2018 Zdenek Dohnal - 1.17.9-5 +- adding build dependency on ghostscript because of its package changes + +* Tue Jan 02 2018 Zdenek Dohnal - 1.17.9-4 +- 1529680 - set CreateIPPPrintQueues to ALL and LocalRemoteCUPSQueueNaming to RemoteName + +* Mon Nov 20 2017 Zdenek Dohnal - 1.17.9-3 +- fixing patch for upstream issue 1413 + +* Wed Nov 08 2017 David Tardon - 1.17.9-2 +- rebuild for poppler 0.61.0 + +* Wed Oct 18 2017 Zdenek Dohnal - 1.17.9-1 +- rebase to 1.17.9 + +* Mon Oct 09 2017 Zdenek Dohnal - 1.17.8-4 +- removing Provides ghostscript-cups and foomatic-filters + +* Fri Oct 06 2017 David Tardon - 1.17.8-3 +- rebuild for poppler 0.60.1 + +* Fri Oct 06 2017 Zdenek Dohnal - 1.17.8-2 +- upstream 1413 - Propagation of location doesn't work + +* Tue Oct 03 2017 Zdenek Dohnal - 1.17.8-1 +- rebase to 1.17.8 + +* Tue Sep 19 2017 Zdenek Dohnal - 1.17.7-1 +- rebase to 1.17.7 + +* Fri Sep 08 2017 David Tardon - 1.17.2-2 +- rebuild for poppler 0.59.0 + +* Wed Sep 06 2017 Zdenek Dohnal - 1.17.2-1 +- rebase to 1.17.2 + +* Tue Aug 22 2017 Zdenek Dohnal - 1.16.3-1 +- rebase to 1.16.3 + +* Mon Aug 14 2017 Zdenek Dohnal - 1.16.1-1 +- rebase to 1.16.1 + +* Thu Aug 10 2017 Zdenek Dohnal - 1.16.0-2 +- rebuilt for qpdf-libs + +* Mon Aug 07 2017 Zdenek Dohnal - 1.16.0-1 +- rebase to 1.16.0 + +* Thu Aug 03 2017 David Tardon - 1.14.1-5 +- rebuild for poppler 0.57.0 + +* Wed Aug 02 2017 Fedora Release Engineering - 1.14.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1.14.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 03 2017 Jonathan Wakely - 1.14.1-2 +- Rebuilt for Boost 1.64 + +* Fri Jun 30 2017 Zdenek Dohnal - 1.14.1-1 +- rebase to 1.14.1 + +* Thu Jun 29 2017 Zdenek Dohnal - 1.14.0-3 +- update python Requires/BuildRequires accordingly to Fedora Guidelines for Python (python-cups -> python3-cups) + +* Wed May 31 2017 Zdenek Dohnal - 1.14.0-2 +- removing BuildRequires: mupdf + +* Wed May 17 2017 Zdenek Dohnal - 1.14.0-1 +- rebase to 1.14.0 + +* Fri Apr 28 2017 Zdenek Dohnal - 1.13.5-1 +- rebase to 1.13.5 + +* Tue Mar 28 2017 David Tardon - 1.13.4-2 +- rebuild for poppler 0.53.0 + +* Fri Feb 24 2017 Zdenek Dohnal - 1.13.4-1 +- rebase to 1.13.4 +- 1426567 - Added queues are not marked as remote ones + +* Fri Feb 10 2017 Fedora Release Engineering - 1.13.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Jan 27 2017 Jonathan Wakely - 1.13.3-3 +- Rebuilt for Boost 1.63 + +* Fri Jan 27 2017 Jonathan Wakely - 1.13.3-2 +- Rebuilt for Boost 1.63 + +* Thu Jan 19 2017 Zdenek Dohnal - 1.13.3-1 +- rebase to 1.13.3 + +* Mon Jan 02 2017 Zdenek Dohnal - 1.13.2-1 +- rebase to 1.13.2 + +* Mon Dec 19 2016 Zdenek Dohnal - 1.13.1-1 +- rebase to 1.13.1 + +* Fri Dec 16 2016 David Tardon - 1.13.0-2 +- rebuild for poppler 0.50.0 + +* Mon Dec 12 2016 Zdenek Dohnal - 1.13.0-1 +- rebase to 1.13.0 + +* Fri Dec 02 2016 Zdenek Dohnal - 1.12.0-2 +- adding new sources + +* Fri Dec 02 2016 Zdenek Dohnal - 1.12.0-1 +- rebase to 1.12.0 + +* Wed Nov 23 2016 David Tardon - 1.11.6-2 +- rebuild for poppler 0.49.0 + +* Fri Nov 11 2016 Zdenek Dohnal - 1.11.6-1 +- rebase to 1.11.6 + +* Mon Oct 31 2016 Zdenek Dohnal - 1.11.5-1 +- rebase to 1.11.5 + +* Fri Oct 21 2016 Marek Kasik - 1.11.4-2 +- Rebuild for poppler-0.48.0 + +* Tue Sep 27 2016 Zdenek Dohnal - 1.11.4-1 +- rebase to 1.11.4 + +* Tue Sep 20 2016 Zdenek Dohnal - 1.11.3-1 +- rebase to 1.11.3 + +* Tue Aug 30 2016 Zdenek Dohnal - 1.11.2-1 +- rebase to 1.11.2, adding cupsfilters-poppler.convs and cupsfilters-mupdf.convs into package + +* Wed Aug 03 2016 Jiri Popelka - 1.10.0-3 +- %%{_defaultdocdir}/cups-filters/ -> %%{_pkgdocdir} + +* Mon Jul 18 2016 Zdenek Dohnal - 1.10.0-2 +- adding new sources cups-filters-1.10.0 + +* Mon Jul 18 2016 Zdenek Dohnal - 1.10.0-1 +- rebase 1.10.0, include missing ppd.h + +* Mon Jul 18 2016 Marek Kasik - 1.9.0-2 +- Rebuild for poppler-0.45.0 + +* Fri Jun 10 2016 Jiri Popelka - 1.9.0-1 +- 1.9.0 + +* Tue May 3 2016 Marek Kasik - 1.8.3-2 +- Rebuild for poppler-0.43.0 + +* Thu Mar 24 2016 Zdenek Dohnal - 1.8.3-1 +- Update to 1.8.3, adding cupsfilters-ghostscript.convs to %%files + +* Fri Feb 12 2016 Jiri Popelka - 1.8.2-1 +- 1.8.2 + +* Wed Feb 03 2016 Fedora Release Engineering - 1.8.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jan 22 2016 Marek Kasik - 1.8.1-2 +- Rebuild for poppler-0.40.0 + +* Fri Jan 22 2016 Jiri Popelka - 1.8.1-1 +- 1.8.1 + +* Thu Jan 21 2016 Jiri Popelka - 1.8.0-1 +- 1.8.0 + +* Tue Jan 19 2016 Jiri Popelka - 1.7.0-1 +- 1.7.0 + +* Fri Jan 15 2016 Jonathan Wakely - 1.6.0-2 +- Rebuilt for Boost 1.60 + +* Thu Jan 14 2016 Jiri Popelka - 1.6.0-1 +- 1.6.0 + +* Fri Dec 18 2015 Jiri Popelka - 1.5.0-1 +- 1.5.0 + +* Tue Dec 15 2015 Jiri Popelka - 1.4.0-1 +- 1.4.0 + +* Wed Dec 09 2015 Jiri Popelka - 1.3.0-1 +- 1.3.0 + +* Fri Nov 27 2015 Jiri Popelka - 1.2.0-1 +- 1.2.0 + +* Wed Nov 11 2015 Peter Robinson 1.1.0-2 +- Rebuild (qpdf-6) + +* Tue Oct 27 2015 Jiri Popelka - 1.1.0-1 +- 1.1.0 (version numbering change: minor version = feature, revision = bugfix) + +* Sun Sep 13 2015 Jiri Popelka - 1.0.76-1 +- 1.0.76 + +* Tue Sep 08 2015 Jiri Popelka - 1.0.75-1 +- 1.0.75 + +* Thu Aug 27 2015 Jonathan Wakely - 1.0.74-2 +- Rebuilt for Boost 1.59 + +* Wed Aug 26 2015 Jiri Popelka - 1.0.74-1 +- 1.0.74 + +* Wed Aug 19 2015 Jiri Popelka - 1.0.73-1 +- 1.0.73 - new implicitclass backend + +* Fri Jul 24 2015 David Tardon - 1.0.71-3 +- rebuild for Boost 1.58 to fix deps + +* Thu Jul 23 2015 Orion Poplawski - 1.0.71-2 +- Add upstream patch for poppler 0.34 support + +* Wed Jul 22 2015 Marek Kasik - 1.0.71-2 +- Rebuild (poppler-0.34.0) + +* Fri Jul 03 2015 Jiri Popelka - 1.0.71-1 +- 1.0.71 + +* Mon Jun 29 2015 Jiri Popelka - 1.0.70-1 +- 1.0.70 + +* Mon Jun 22 2015 Tim Waugh - 1.0.69-3 +- Fixes for glib source handling (bug #1228555). + +* Wed Jun 17 2015 Fedora Release Engineering - 1.0.69-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Jun 11 2015 Jiri Popelka - 1.0.69-1 +- 1.0.69 + +* Fri Jun 5 2015 Marek Kasik - 1.0.68-2 +- Rebuild (poppler-0.33.0) + +* Tue Apr 14 2015 Jiri Popelka - 1.0.68-1 +- 1.0.68 + +* Wed Mar 11 2015 Jiri Popelka - 1.0.67-1 +- 1.0.67 + +* Mon Mar 02 2015 Jiri Popelka - 1.0.66-1 +- 1.0.66 + +* Mon Feb 16 2015 Jiri Popelka - 1.0.65-1 +- 1.0.65 + +* Fri Jan 23 2015 Marek Kasik - 1.0.61-3 +- Rebuild (poppler-0.30.0) + +* Thu Nov 27 2014 Marek Kasik - 1.0.61-2 +- Rebuild (poppler-0.28.1) + +* Fri Oct 10 2014 Jiri Popelka - 1.0.61-1 +- 1.0.61 + +* Tue Oct 07 2014 Jiri Popelka - 1.0.60-1 +- 1.0.60 + +* Sun Sep 28 2014 Jiri Popelka - 1.0.59-1 +- 1.0.59 + +* Thu Aug 21 2014 Jiri Popelka - 1.0.58-1 +- 1.0.58 + +* Sat Aug 16 2014 Fedora Release Engineering - 1.0.55-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Jiri Popelka - 1.0.55-2 +- Use %%_defaultdocdir instead of %%doc + +* Mon Jul 28 2014 Jiri Popelka - 1.0.55-1 +- 1.0.55 + +* Fri Jun 13 2014 Tim Waugh - 1.0.54-4 +- Really fix execmem issue (bug #1079534). + +* Wed Jun 11 2014 Jiri Popelka - 1.0.54-3 +- Remove (F21) pdf-landscape.patch + +* Wed Jun 11 2014 Tim Waugh - 1.0.54-2 +- Fix build issue (bug #1106101). +- Don't use grep's -P switch in pstopdf as it needs execmem (bug #1079534). +- Return work-around patch for bug #768811. + +* Mon Jun 09 2014 Jiri Popelka - 1.0.54-1 +- 1.0.54 + +* Sat Jun 07 2014 Fedora Release Engineering - 1.0.53-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Jun 03 2014 Jiri Popelka - 1.0.53-3 +- Remove BuildRequires pkgconfig(lcms). pkgconfig(lcms2) is enough. + +* Tue May 13 2014 Marek Kasik - 1.0.53-2 +- Rebuild (poppler-0.26.0) + +* Mon Apr 28 2014 Jiri Popelka - 1.0.53-1 +- 1.0.53 + +* Wed Apr 23 2014 Jiri Popelka - 1.0.52-2 +- Remove pdftoopvp and urftopdf in %%install instead of not building them. + +* Tue Apr 08 2014 Jiri Popelka - 1.0.52-1 +- 1.0.52 + +* Wed Apr 02 2014 Jiri Popelka - 1.0.51-1 +- 1.0.51 (#1083327) + +* Thu Mar 27 2014 Jiri Popelka - 1.0.50-1 +- 1.0.50 + +* Mon Mar 24 2014 Jiri Popelka - 1.0.49-1 +- 1.0.49 + +* Wed Mar 12 2014 Jiri Popelka - 1.0.48-1 +- 1.0.48 + +* Tue Mar 11 2014 Jiri Popelka - 1.0.47-2 +- Don't ship pdftoopvp (#1027557) and urftopdf (#1002947). + +* Tue Mar 11 2014 Jiri Popelka - 1.0.47-1 +- 1.0.47: CVE-2013-6473 CVE-2013-6476 CVE-2013-6474 CVE-2013-6475 (#1074840) + +* Mon Mar 10 2014 Jiri Popelka - 1.0.46-3 +- BuildRequires: pkgconfig(foo) instead of foo-devel + +* Tue Mar 4 2014 Tim Waugh - 1.0.46-2 +- The texttopdf filter requires a TrueType monospaced font + (bug #1070729). + +* Thu Feb 20 2014 Jiri Popelka - 1.0.46-1 +- 1.0.46 + +* Fri Feb 14 2014 Jiri Popelka - 1.0.45-1 +- 1.0.45 + +* Mon Jan 20 2014 Jiri Popelka - 1.0.44-1 +- 1.0.44 + +* Tue Jan 14 2014 Jiri Popelka - 1.0.43-2 +- add /usr/bin/foomatic-rip symlink, due to LSB3.2 (#1052452) + +* Fri Dec 20 2013 Jiri Popelka - 1.0.43-1 +- 1.0.43: upstream fix for bug #768811 (pdf-landscape) + +* Sat Nov 30 2013 Jiri Popelka - 1.0.42-1 +- 1.0.42: includes foomatic-rip (obsoletes foomatic-filters package) + +* Tue Nov 19 2013 Tim Waugh - 1.0.41-4 +- Adjust filter costs so application/vnd.adobe-read-postscript input + doesn't go via pstotiff (bug #1008166). + +* Thu Nov 14 2013 Jaromír Končický - 1.0.41-3 +- Fix memory leaks in cups-browsed (bug #1027317). + +* Wed Nov 6 2013 Tim Waugh - 1.0.41-2 +- Include dbus so that colord support works (bug #1026928). + +* Wed Oct 30 2013 Jiri Popelka - 1.0.41-1 +- 1.0.41 - PPD-less printing support + +* Mon Oct 21 2013 Tim Waugh - 1.0.40-4 +- Fix socket leaks in the BrowsePoll code (bug #1021512). + +* Wed Oct 16 2013 Tim Waugh - 1.0.40-3 +- Ship the gstoraster MIME conversion rule now we provide that filter + (bug #1019261). + +* Fri Oct 11 2013 Tim Waugh - 1.0.40-2 +- Fix PDF landscape printing (bug #768811). + +* Fri Oct 11 2013 Jiri Popelka - 1.0.40-1 +- 1.0.40 +- Use new "hybrid" pdftops renderer. + +* Thu Oct 03 2013 Jaromír Končický - 1.0.39-1 +- 1.0.39 +- Removed obsolete patches "pdf-landscape" and "browsepoll-notifications" + +* Tue Oct 1 2013 Tim Waugh - 1.0.38-4 +- Use IPP notifications for BrowsePoll when possible (bug #975241). + +* Tue Oct 1 2013 Tim Waugh - 1.0.38-3 +- Fixes for some printf-type format mismatches (bug #1014093). + +* Tue Sep 17 2013 Tim Waugh - 1.0.38-2 +- Fix landscape printing for PDFs (bug #768811). + +* Wed Sep 04 2013 Jiri Popelka - 1.0.38-1 +- 1.0.38 + +* Thu Aug 29 2013 Jaromír Končický - 1.0.37-1 +- 1.0.37. + +* Tue Aug 27 2013 Jaromír Končický - 1.0.36-5 +- Added build dependency - font required for running tests + +* Tue Aug 27 2013 Jaromír Končický - 1.0.36-4 +- Added checking phase (make check) + +* Wed Aug 21 2013 Tim Waugh - 1.0.36-3 +- Upstream patch to re-work filter costs (bug #998977). No longer need + text filter costs patch as paps gets used by default now if + installed. + +* Mon Aug 19 2013 Marek Kasik - 1.0.36-2 +- Rebuild (poppler-0.24.0) + +* Tue Aug 13 2013 Tim Waugh - 1.0.36-1 +- 1.0.36. + +* Tue Aug 13 2013 Tim Waugh - 1.0.35-7 +- Upstream patch to move in filters from ghostscript. + +* Tue Jul 30 2013 Tim Waugh - 1.0.35-6 +- Set cost for text filters to 200 so that the paps filter gets + preference for the time being (bug #988909). + +* Wed Jul 24 2013 Tim Waugh - 1.0.35-5 +- Handle page-label when printing n-up as well. + +* Tue Jul 23 2013 Tim Waugh - 1.0.35-4 +- Added support for page-label (bug #987515). + +* Thu Jul 11 2013 Jiri Popelka - 1.0.35-3 +- Rebuild (qpdf-5.0.0) + +* Mon Jul 01 2013 Jiri Popelka - 1.0.35-2 +- add cups-browsed(8) and cups-browsed.conf(5) +- don't reverse lookup IP address in URI (#975822) + +* Wed Jun 26 2013 Jiri Popelka - 1.0.35-1 +- 1.0.35 + +* Mon Jun 24 2013 Marek Kasik - 1.0.34-9 +- Rebuild (poppler-0.22.5) + +* Wed Jun 19 2013 Jiri Popelka - 1.0.34-8 +- fix the note we add in cups-browsed.conf + +* Wed Jun 12 2013 Jiri Popelka - 1.0.34-7 +- Obsolete cups-php (#971741) + +* Wed Jun 05 2013 Jiri Popelka - 1.0.34-6 +- one more cups-browsed leak fixed (#959682) + +* Wed Jun 05 2013 Jiri Popelka - 1.0.34-5 +- perl is actually not required by pstopdf, because the calling is in dead code + +* Mon Jun 03 2013 Jiri Popelka - 1.0.34-4 +- fix resource leaks and other problems found by Coverity & Valgrind (#959682) + +* Wed May 15 2013 Jiri Popelka - 1.0.34-3 +- ship ppdc/pcl.h because of cupsfilters.drv + +* Tue May 07 2013 Jiri Popelka - 1.0.34-2 +- pstopdf requires bc (#960315) + +* Thu Apr 11 2013 Jiri Popelka - 1.0.34-1 +- 1.0.34 + +* Fri Apr 05 2013 Fridolin Pokorny - 1.0.33-1 +- 1.0.33 +- removed cups-filters-1.0.32-null-info.patch, accepted by upstream + +* Thu Apr 04 2013 Fridolin Pokorny - 1.0.32-2 +- fixed segfault when info is NULL + +* Thu Apr 04 2013 Fridolin Pokorny - 1.0.32-1 +- 1.0.32 + +* Fri Mar 29 2013 Jiri Popelka - 1.0.31-3 +- add note to cups-browsed.conf + +* Thu Mar 28 2013 Jiri Popelka - 1.0.31-2 +- check cupsd.conf existence prior to grepping it (#928816) + +* Fri Mar 22 2013 Jiri Popelka - 1.0.31-1 +- 1.0.31 + +* Tue Mar 19 2013 Jiri Popelka - 1.0.30-4 +- revert previous change + +* Wed Mar 13 2013 Jiri Popelka - 1.0.30-3 +- don't ship banners for now (#919489) + +* Tue Mar 12 2013 Jiri Popelka - 1.0.30-2 +- move BrowsePoll from cupsd.conf to cups-browsed.conf in %%post + +* Fri Mar 08 2013 Jiri Popelka - 1.0.30-1 +- 1.0.30: CUPS browsing and broadcasting in cups-browsed + +* Wed Feb 13 2013 Fedora Release Engineering - 1.0.29-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jan 19 2013 Rex Dieter 1.0.29-3 +- backport upstream buildfix for poppler-0.22.x + +* Fri Jan 18 2013 Adam Tkac - 1.0.29-2 +- rebuild due to "jpeg8-ABI" feature drop + +* Thu Jan 03 2013 Jiri Popelka 1.0.29-1 +- 1.0.29 + +* Wed Jan 02 2013 Jiri Popelka 1.0.28-1 +- 1.0.28: cups-browsed daemon and service + +* Thu Nov 29 2012 Jiri Popelka 1.0.25-1 +- 1.0.25 + +* Fri Sep 07 2012 Jiri Popelka 1.0.24-1 +- 1.0.24 + +* Wed Aug 22 2012 Jiri Popelka 1.0.23-1 +- 1.0.23: old pdftopdf removed + +* Tue Aug 21 2012 Jiri Popelka 1.0.22-1 +- 1.0.22: new pdftopdf (uses qpdf instead of poppler) + +* Wed Aug 08 2012 Jiri Popelka 1.0.20-4 +- rebuild + +* Thu Aug 02 2012 Jiri Popelka 1.0.20-3 +- commented multiple licensing breakdown (#832130) +- verbose build output + +* Thu Aug 02 2012 Jiri Popelka 1.0.20-2 +- BuildRequires: poppler-cpp-devel (to build against poppler-0.20) + +* Mon Jul 23 2012 Jiri Popelka 1.0.20-1 +- 1.0.20 + +* Tue Jul 17 2012 Jiri Popelka 1.0.19-1 +- 1.0.19 + +* Wed May 30 2012 Jiri Popelka 1.0.18-1 +- initial spec file