From edfc437426e7dd540b35ea7cd436b886e5c46866 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Sat, 16 Aug 2014 12:49:53 -0500
Subject: cups: 1.7.0 refs #961

---
 abs/extra/cups/PKGBUILD                  |  37 ++++++-----
 abs/extra/cups/cups-dbus-utf8.patch      | 106 +++++++++++++++++++++++++++++++
 abs/extra/cups/cups-systemd-socket.patch |   4 +-
 3 files changed, 127 insertions(+), 20 deletions(-)
 create mode 100644 abs/extra/cups/cups-dbus-utf8.patch

diff --git a/abs/extra/cups/PKGBUILD b/abs/extra/cups/PKGBUILD
index 63bb641..08a3e19 100644
--- a/abs/extra/cups/PKGBUILD
+++ b/abs/extra/cups/PKGBUILD
@@ -1,16 +1,15 @@
-# $Id$
+# $Id: PKGBUILD 199750 2013-11-15 15:38:18Z andyrtr $
 # Maintainer: Andreas Radke <andyrtr@archlinux.org>
 
 pkgbase="cups"
 pkgname=('libcups' 'cups')
-pkgver=1.7.1
-pkgrel=4
+pkgver=1.7.0
+pkgrel=2
 arch=('i686' 'x86_64')
 license=('GPL')
 url="http://www.cups.org/"
-makedepends=('libtiff>=4.0.0' 'libpng>=1.5.7' 'acl' 'pam' 'xdg-utils' 'krb5' 'openssl'
-             'cups-filters' 'bc' 'colord' 'xinetd' 'gzip' 'autoconf' 'libusb' 'dbus' 
-             'avahi'  'hicolor-icon-theme' 'systemd' 'inetutils' 'libpaper' 'valgrind')
+makedepends=('libtiff>=4.0.0' 'libpng>=1.5.7' 'acl' 'pam' 'xdg-utils' 'krb5' 'gnutls>=2.8.3' 'cups-filters' 'bc'
+             'colord' 'xinetd' 'gzip' 'autoconf' 'libusb' 'dbus-core' 'avahi'  'hicolor-icon-theme' 'systemd')
 source=(#http://mirror.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.bz2
         http://www.cups.org/software/${pkgver}/cups-${pkgver}-source.tar.bz2
         cups.logrotate cups.pam
@@ -20,6 +19,7 @@ source=(#http://mirror.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.b
         cups-no-gzip-man.patch
         # FC
         cups-systemd-socket.patch
+        cups-dbus-utf8.patch
         cups-res_init.patch
         cups-avahi-address.patch
         cups-enum-all.patch
@@ -31,13 +31,14 @@ source=(#http://mirror.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.b
         cupsd-no-crash-on-avahi-threaded-poll-shutdown.patch
         get-ppd-file-for-statically-configured-ipp-shared-queues.patch
         ppd-poll-with-client-conf.patch)
-md5sums=('55277c40fd4b7183dc3671d39c5c42b7'
+md5sums=('5ab496a2ce27017fcdb3d7ec4818a75a'
          'f861b18f4446c43918c8643dcbbd7f6d'
          '96f82c38f3f540b53f3e5144900acf17'
          '3ba9e3410df1dc3015463d615ef91b3b'
          'cc4101beccb5ed6deb1c92707a575925'
          '90c30380d4c8cd48a908cfdadae1ea24'
-         'cf2f881967b0531ec49bcb5d0e9573a8'
+         '555a1c71151ce990e176315b46e3de2f'
+         'a2a88b3a3257c3b5fd3edcc169e6aca4'
          '8fe27d4248cacbc02824e7937cab4088'
          'df0c367c0022e3c7d8e01827e8a6c5e7'
          'f30c2a161caaf27854581507cde8cac6'
@@ -68,6 +69,9 @@ prepare() {
 
   # various bugfixes (upstream reports/SVN or Fedora/Debian
 
+  # Ensure attributes are valid UTF-8 in dbus notifier
+  patch -Np1 -i ${srcdir}/cups-dbus-utf8.patch
+
   # Fixed crash which sometimes happens on shutdown of the CUPS daemon, caused by a wrong shutdown sequence for shutting down the Avahi threaded poll.
 #  patch -Np1 -i ${srcdir}/cupsd-no-crash-on-avahi-threaded-poll-shutdown.patch
   # Applications could not get the PPD file for statically-configured IPP-shared print queues
@@ -108,10 +112,9 @@ build() {
      --enable-pam=yes \
      --enable-raw-printing \
      --enable-dbus --with-dbusdir=/etc/dbus-1 \
-     --enable-ssl=yes --enable-openssl \
+     --enable-ssl=yes --enable-gnutls \
      --enable-threads \
      --enable-avahi\
-     --enable-libpaper \
      --with-php=/usr/bin/php-cgi \
      --with-optim="$CFLAGS"
   make
@@ -119,14 +122,15 @@ build() {
 
 check() {
   cd ${pkgbase}-${pkgver}
-#./run-stp-tests.sh: line 782:  6307 Aborted                 (core dumped) $VALGRIND ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f > /tmp/cups-$user/log/debug_log 2>&1
-#FAIL: 87 error messages, expected 33.
+  #httpAddrGetList(workstation64): FAIL
+  #1 TESTS FAILED!
+  #make[1]: *** [testhttp] Error 1
   make -k check || /bin/true
 }
 
 package_libcups() {
 pkgdesc="The CUPS Printing System - client libraries and headers"
-depends=('openssl' 'libtiff>=4.0.0' 'libpng>=1.5.7' 'krb5' 'avahi')
+depends=('gnutls>=2.8.3' 'libtiff>=4.0.0' 'libpng>=1.5.7' 'krb5' 'avahi')
 backup=(etc/cups/client.conf)
 
   cd ${pkgbase}-${pkgver}
@@ -158,8 +162,7 @@ backup=(etc/cups/cupsd.conf
         etc/logrotate.d/cups
         etc/pam.d/cups
         etc/xinetd.d/cups-lpd)
-depends=('acl' 'pam' "libcups>=${pkgver}" 'cups-filters' 'bc' 'colord'
-         'libusb' 'dbus' 'systemd' 'libpaper' 'hicolor-icon-theme')
+depends=('acl' 'pam' "libcups>=${pkgver}" 'cups-filters' 'bc' 'colord' 'libusb' 'dbus-core' 'libsystemd' 'hicolor-icon-theme')
 optdepends=('xdg-utils: xdg .desktop file support')
 
   cd ${pkgbase}-${pkgver}
@@ -180,8 +183,8 @@ optdepends=('xdg-utils: xdg .desktop file support')
 
   # install ssl directory where to store the certs, solves some samba issues
   install -dm700 -g lp ${pkgdir}/etc/cups/ssl
-  # remove directory from package, it will be recreated at each server start
-  rm -rf ${pkgdir}/run
+  # remove directory from package, we create it in cups rc.d file
+  rm -rf ${pkgdir}/var/run
 
   # install some more configuration files that will get filled by cupsd
   touch ${pkgdir}/etc/cups/printers.conf
diff --git a/abs/extra/cups/cups-dbus-utf8.patch b/abs/extra/cups/cups-dbus-utf8.patch
new file mode 100644
index 0000000..0bcd4a1
--- /dev/null
+++ b/abs/extra/cups/cups-dbus-utf8.patch
@@ -0,0 +1,106 @@
+diff -up cups-1.6.1/notifier/dbus.c.dbus-utf8 cups-1.6.1/notifier/dbus.c
+--- cups-1.6.1/notifier/dbus.c.dbus-utf8	2012-01-20 19:00:32.000000000 +0000
++++ cups-1.6.1/notifier/dbus.c	2012-10-31 11:04:47.686973616 +0000
+@@ -31,6 +31,9 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <assert.h>
++#include <locale.h>
++#include <wchar.h>
+ 
+ #ifdef HAVE_DBUS
+ #  include <dbus/dbus.h>
+@@ -157,10 +160,82 @@ enum
+  * Local functions...
+  */
+ 
+-static int	acquire_lock(int *fd, char *lockfile, size_t locksize);
++static int		acquire_lock(int *fd, char *lockfile, size_t locksize);
++static const char	*validate_utf8(const char *str);
+ 
+ 
+ /*
++ * 'validate_utf8()' - Convert to valid UTF-8
++ */
++
++static const char *
++validate_utf8 (const char *str)
++{
++  static char *buffer = NULL;
++  static size_t buflen = 0;
++  char *p;
++  size_t str_len;
++  unsigned int i;
++  mbstate_t instate, outstate;
++
++  if (str == NULL)
++  {
++    free (buffer);
++    return (NULL);
++  }
++
++  /* Is it already valid? */
++  if (mbstowcs (NULL, str, 0) != (size_t) -1)
++    return str;
++
++  /* Make sure our buffer is at least as large as the input string */
++  str_len = strlen (str);
++  if (str_len > buflen)
++  {
++    if (buffer == NULL)
++      /* Set encoding type to UTF-8 the first time we need to */
++      setlocale (LC_CTYPE, "en_US.UTF-8");
++
++    buflen = str_len + 1;
++    buffer = realloc (buffer, buflen);
++  }
++
++  memset (&instate, '\0', sizeof (mbstate_t));
++  memset (&outstate, '\0', sizeof (mbstate_t));
++  p = buffer;
++  i = 0;
++  while (i < str_len)
++  {
++    wchar_t wc;
++    size_t used, written;
++    mbstate_t orig_instate = instate;
++    used = mbrtowc (&wc, str + i, str_len - i, &instate);
++    switch (used)
++    {
++    case (size_t) -2:
++    case (size_t) -1:
++      wc = L'?'; /* so replacement is never longer than original char */
++      instate = orig_instate;
++      /* fallthru */
++    case 0:
++      used = 1;
++    }
++
++    written = wcrtomb (p, wc, &outstate);
++    if (written != -1)
++    {
++      p += written;
++      assert (p - buffer < buflen);
++    }
++
++    i += used;
++  }
++
++  *p = '\0';
++  return buffer;
++}
++
++/*
+  * 'main()' - Read events and send DBUS notifications.
+  */
+ 
+@@ -366,7 +441,7 @@ main(int  argc,				/* I - Number of comm
+     attr = ippFindAttribute(msg, "notify-text", IPP_TAG_TEXT);
+     if (attr)
+     {
+-      const char *val = ippGetString(attr, 0, NULL);
++      const char *val = validate_utf8 (ippGetString(attr, 0, NULL));
+       if (!dbus_message_iter_append_string(&iter, &val))
+         goto bail;
+     }
diff --git a/abs/extra/cups/cups-systemd-socket.patch b/abs/extra/cups/cups-systemd-socket.patch
index ad13a6d..cfbe933 100644
--- a/abs/extra/cups/cups-systemd-socket.patch
+++ b/abs/extra/cups/cups-systemd-socket.patch
@@ -117,14 +117,12 @@ diff -up cups-1.7rc1/data/cups.service.in.systemd-socket cups-1.7rc1/data/cups.s
 diff -up cups-1.7rc1/data/cups.socket.in.systemd-socket cups-1.7rc1/data/cups.socket.in
 --- cups-1.7rc1/data/cups.socket.in.systemd-socket	2013-07-12 11:16:53.259546235 +0200
 +++ cups-1.7rc1/data/cups.socket.in	2013-07-12 11:16:53.259546235 +0200
-@@ -0,0 +1,10 @@
+@@ -0,0 +1,8 @@
 +[Unit]
 +Description=CUPS Printing Service Sockets
 +
 +[Socket]
 +ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@
-+ListenStream=@DEFAULT_IPP_PORT@
-+BindIPv6Only=ipv6-only
 +
 +[Install]
 +WantedBy=sockets.target
-- 
cgit v0.12