]> git.ipfire.org Git - people/amarx/ipfire-3.x.git/commitdiff
cups: Update to latest stable release 1.6.1.
authorKim Barthel <kbarthel@ipfire.org>
Sun, 2 Sep 2012 16:56:13 +0000 (18:56 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 4 Sep 2012 11:39:49 +0000 (13:39 +0200)
 Fixes #10195

48 files changed:
cups/cups.nm
cups/patches/001_cups-no-gzip-man.patch [new file with mode: 0644]
cups/patches/002_cups-system-auth.patch [moved from cups/patches/cups-1.1.16-system-auth.patch with 59% similarity]
cups/patches/003_cups-multilib.patch [moved from cups/patches/cups-multilib.patch with 62% similarity]
cups/patches/004_cups-banners.patch [new file with mode: 0644]
cups/patches/005_cups-serverbin-compat.patch [moved from cups/patches/cups-serverbin-compat.patch with 56% similarity]
cups/patches/006_cups-no-export-ssllibs.patch [new file with mode: 0644]
cups/patches/007_cups-direct-usb.patch [moved from cups/patches/cups-direct-usb.patch with 56% similarity]
cups/patches/008_cups-lpr-help.patch [moved from cups/patches/cups-lpr-help.patch with 66% similarity]
cups/patches/009_cups-peercred.patch [new file with mode: 0644]
cups/patches/010_cups-pid.patch [moved from cups/patches/cups-pid.patch with 64% similarity]
cups/patches/011_cups-eggcups.patch [moved from cups/patches/cups-eggcups.patch with 72% similarity]
cups/patches/012_cups-driverd-timeout.patch [moved from cups/patches/cups-driverd-timeout.patch with 54% similarity]
cups/patches/013_cups-strict-ppd-line-length.patch [moved from cups/patches/cups-strict-ppd-line-length.patch with 56% similarity]
cups/patches/014_cups-logrotate.patch [moved from cups/patches/cups-logrotate.patch with 77% similarity]
cups/patches/015_cups-usb-paperout.patch [moved from cups/patches/cups-usb-paperout.patch with 73% similarity]
cups/patches/016_cups-res_init.patch [new file with mode: 0644]
cups/patches/017_cups-filter-debug.patch [moved from cups/patches/cups-filter-debug.patch with 71% similarity]
cups/patches/018_cups-uri-compat.patch [moved from cups/patches/cups-uri-compat.patch with 77% similarity]
cups/patches/019_cups-cups-get-classes.patch [moved from cups/patches/cups-cups-get-classes.patch with 76% similarity]
cups/patches/020_cups-str3382.patch [moved from cups/patches/cups-str3382.patch with 82% similarity]
cups/patches/021_cups-0755.patch [new file with mode: 0644]
cups/patches/022_cups-hp-deviceid-oid.patch [moved from cups/patches/cups-hp-deviceid-oid.patch with 71% similarity]
cups/patches/023_cups-dnssd-deviceid.patch [new file with mode: 0644]
cups/patches/024_cups-ricoh-deviceid-oid.patch [moved from cups/patches/cups-ricoh-deviceid-oid.patch with 73% similarity]
cups/patches/025_cups-systemd-socket.patch [new file with mode: 0644]
cups/patches/026_cups-lspp.patch [moved from cups/patches/cups-x-lspp.patch with 62% similarity]
cups/patches/cups-0755.patch [deleted file]
cups/patches/cups-EAI_AGAIN.patch [deleted file]
cups/patches/cups-autotype-crash.patch [deleted file]
cups/patches/cups-avahi.patch [deleted file]
cups/patches/cups-banners.patch [deleted file]
cups/patches/cups-build.patch [deleted file]
cups/patches/cups-dnssd-deviceid.patch [deleted file]
cups/patches/cups-force-gnutls.patch [deleted file]
cups/patches/cups-getpass.patch [deleted file]
cups/patches/cups-hostnamelookups.patch [deleted file]
cups/patches/cups-no-export-ssllibs.patch [deleted file]
cups/patches/cups-no-gzip-man.patch [deleted file]
cups/patches/cups-page-label.patch [deleted file]
cups/patches/cups-peercred.patch [deleted file]
cups/patches/cups-res_init.patch [deleted file]
cups/patches/cups-serial.patch [deleted file]
cups/patches/cups-serialize-gnutls.patch [deleted file]
cups/patches/cups-snmp-quirks.patch [deleted file]
cups/patches/cups-str3754.patch [deleted file]
cups/patches/cups-texttops-rotate-page.patch [deleted file]
cups/systemd/cups.service

index 39225947d531d30c27a1dc27cd55995967284dc5..3b5672b8b3cdd7cddb48eb4538db9d7cb1078ad1 100644 (file)
@@ -4,8 +4,8 @@
 ###############################################################################
 
 name       = cups
-version    = 1.4.5
-release    = 7
+version    = 1.6.1
+release    = 1
 
 groups     = Applications/Printing
 url        = http://cups.org/software.php
diff --git a/cups/patches/001_cups-no-gzip-man.patch b/cups/patches/001_cups-no-gzip-man.patch
new file mode 100644 (file)
index 0000000..cabfcf1
--- /dev/null
@@ -0,0 +1,18 @@
+diff -up cups-1.6b1/config-scripts/cups-manpages.m4.no-gzip-man cups-1.6b1/config-scripts/cups-manpages.m4
+--- cups-1.6b1/config-scripts/cups-manpages.m4.no-gzip-man     2012-04-23 19:26:57.000000000 +0200
++++ cups-1.6b1/config-scripts/cups-manpages.m4 2012-05-25 14:57:01.959845267 +0200
+@@ -69,10 +69,10 @@ case "$uname" in
+               ;;
+       Linux* | GNU* | Darwin*)
+               # Linux, GNU Hurd, and OS X
+-              MAN1EXT=1.gz
+-              MAN5EXT=5.gz
+-              MAN7EXT=7.gz
+-              MAN8EXT=8.gz
++              MAN1EXT=1
++              MAN5EXT=5
++              MAN7EXT=7
++              MAN8EXT=8
+               MAN8DIR=8
+               ;;
+       *)
similarity index 59%
rename from cups/patches/cups-1.1.16-system-auth.patch
rename to cups/patches/002_cups-system-auth.patch
index 7ce17e5dfd8dee1f66e734cd84a7c4c452d93a3d..60117a9c833a6e3062ef62739addabf1930356f8 100644 (file)
@@ -1,22 +1,21 @@
-diff -up /dev/null cups-1.4.2/conf/cups.password-auth
---- /dev/null  2009-11-10 09:17:06.284031490 +0000
-+++ cups-1.4.2/conf/cups.password-auth 2009-11-10 11:15:42.750666738 +0000
+diff -up cups-1.5b1/conf/cups.password-auth.system-auth cups-1.5b1/conf/cups.password-auth
+--- cups-1.5b1/conf/cups.password-auth.system-auth     2011-05-23 17:27:27.000000000 +0200
++++ cups-1.5b1/conf/cups.password-auth 2011-05-23 17:27:27.000000000 +0200
 @@ -0,0 +1,4 @@
 +#%PAM-1.0
 +# Use password-auth common PAM configuration for the daemon
 +auth        include     password-auth
 +account     include     password-auth
-diff -up cups-1.4.2/conf/cups.system-auth cups-1.4.2/conf/cups
-diff -up /dev/null cups-1.4.2/conf/cups.system-auth
---- /dev/null  2009-11-10 09:17:06.284031490 +0000
-+++ cups-1.4.2/conf/cups.system-auth   2009-11-10 11:15:42.750666738 +0000
+diff -up cups-1.5b1/conf/cups.system-auth.system-auth cups-1.5b1/conf/cups.system-auth
+--- cups-1.5b1/conf/cups.system-auth.system-auth       2011-05-23 17:27:27.000000000 +0200
++++ cups-1.5b1/conf/cups.system-auth   2011-05-23 17:27:27.000000000 +0200
 @@ -0,0 +1,3 @@
 +#%PAM-1.0
 +auth  include         system-auth
 +account       include         system-auth
-diff -up cups-1.4.2/conf/Makefile.system-auth cups-1.4.2/conf/Makefile
---- cups-1.4.2/conf/Makefile.system-auth       2009-09-22 22:53:31.000000000 +0100
-+++ cups-1.4.2/conf/Makefile   2009-11-10 11:18:44.188791989 +0000
+diff -up cups-1.5b1/conf/Makefile.system-auth cups-1.5b1/conf/Makefile
+--- cups-1.5b1/conf/Makefile.system-auth       2011-05-12 07:21:56.000000000 +0200
++++ cups-1.5b1/conf/Makefile   2011-05-23 17:27:27.000000000 +0200
 @@ -90,10 +90,16 @@ install-data:
        done
        -if test x$(PAMDIR) != x; then \
similarity index 62%
rename from cups/patches/cups-multilib.patch
rename to cups/patches/003_cups-multilib.patch
index 21db4cb7a5e3323d45de176c54386844a3c5b89b..3c6bc397ab9d41d77ef98098542216e0b4b9b205 100644 (file)
@@ -1,6 +1,7 @@
---- cups-1.2.3/cups-config.in.multilib 2006-08-03 01:54:38.000000000 +0100
-+++ cups-1.2.3/cups-config.in  2006-08-30 15:47:35.000000000 +0100
-@@ -30,8 +30,10 @@
+diff -up cups-1.5b1/cups-config.in.multilib cups-1.5b1/cups-config.in
+--- cups-1.5b1/cups-config.in.multilib 2010-06-16 02:48:25.000000000 +0200
++++ cups-1.5b1/cups-config.in  2011-05-23 17:33:31.000000000 +0200
+@@ -22,8 +22,10 @@ prefix=@prefix@
  exec_prefix=@exec_prefix@
  bindir=@bindir@
  includedir=@includedir@
diff --git a/cups/patches/004_cups-banners.patch b/cups/patches/004_cups-banners.patch
new file mode 100644 (file)
index 0000000..aa19282
--- /dev/null
@@ -0,0 +1,12 @@
+diff -up cups-1.5b1/scheduler/banners.c.banners cups-1.5b1/scheduler/banners.c
+--- cups-1.5b1/scheduler/banners.c.banners     2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/scheduler/banners.c     2011-05-23 17:35:30.000000000 +0200
+@@ -110,6 +110,8 @@ cupsdLoadBanners(const char *d)            /* I - 
+     if ((ext = strrchr(dent->filename, '.')) != NULL)
+       if (!strcmp(ext, ".bck") ||
+           !strcmp(ext, ".bak") ||
++          !strcmp(ext, ".rpmnew") ||
++          !strcmp(ext, ".rpmsave") ||
+         !strcmp(ext, ".sav"))
+       continue;
similarity index 56%
rename from cups/patches/cups-serverbin-compat.patch
rename to cups/patches/005_cups-serverbin-compat.patch
index 44a78942bfa1b6fe54b3e9de40ce36478cb10ccf..0ca72fd370d53eb6f3f16656bb364c2a01dae9ae 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.4.4/scheduler/conf.c.serverbin-compat cups-1.4.4/scheduler/conf.c
---- cups-1.4.4/scheduler/conf.c.serverbin-compat       2010-04-23 19:56:34.000000000 +0100
-+++ cups-1.4.4/scheduler/conf.c        2010-09-15 13:20:41.339960335 +0100
-@@ -488,6 +488,9 @@ cupsdReadConfiguration(void)
+diff -up cups-1.5b1/scheduler/conf.c.serverbin-compat cups-1.5b1/scheduler/conf.c
+--- cups-1.5b1/scheduler/conf.c.serverbin-compat       2011-05-20 06:24:54.000000000 +0200
++++ cups-1.5b1/scheduler/conf.c        2011-05-23 17:20:33.000000000 +0200
+@@ -491,6 +491,9 @@ cupsdReadConfiguration(void)
    cupsdClearString(&ServerName);
    cupsdClearString(&ServerAdmin);
    cupsdSetString(&ServerBin, CUPS_SERVERBIN);
@@ -11,7 +11,7 @@ diff -up cups-1.4.4/scheduler/conf.c.serverbin-compat cups-1.4.4/scheduler/conf.
    cupsdSetString(&RequestRoot, CUPS_REQUESTS);
    cupsdSetString(&CacheDir, CUPS_CACHEDIR);
    cupsdSetString(&DataDir, CUPS_DATADIR);
-@@ -1318,7 +1321,12 @@ cupsdReadConfiguration(void)
+@@ -1378,7 +1381,12 @@ cupsdReadConfiguration(void)
      * Read the MIME type and conversion database...
      */
  
@@ -23,10 +23,10 @@ diff -up cups-1.4.4/scheduler/conf.c.serverbin-compat cups-1.4.4/scheduler/conf.
 +#endif
      snprintf(mimedir, sizeof(mimedir), "%s/mime", DataDir);
  
-     MimeDatabase = mimeLoadTypes(NULL, mimedir);
-diff -up cups-1.4.4/scheduler/conf.h.serverbin-compat cups-1.4.4/scheduler/conf.h
---- cups-1.4.4/scheduler/conf.h.serverbin-compat       2010-04-23 19:56:34.000000000 +0100
-+++ cups-1.4.4/scheduler/conf.h        2010-09-15 13:20:41.340959464 +0100
+     MimeDatabase = mimeNew();
+diff -up cups-1.5b1/scheduler/conf.h.serverbin-compat cups-1.5b1/scheduler/conf.h
+--- cups-1.5b1/scheduler/conf.h.serverbin-compat       2011-04-22 19:47:03.000000000 +0200
++++ cups-1.5b1/scheduler/conf.h        2011-05-23 15:34:25.000000000 +0200
 @@ -105,6 +105,10 @@ VAR char          *ConfigurationFile      VALUE(NULL)
                                        /* Root directory for scheduler */
                        *ServerBin              VALUE(NULL),
@@ -38,27 +38,27 @@ diff -up cups-1.4.4/scheduler/conf.h.serverbin-compat cups-1.4.4/scheduler/conf.
                        *StateDir               VALUE(NULL),
                                        /* Root directory for state data */
                        *RequestRoot            VALUE(NULL),
-diff -up cups-1.4.4/scheduler/env.c.serverbin-compat cups-1.4.4/scheduler/env.c
---- cups-1.4.4/scheduler/env.c.serverbin-compat        2009-06-15 18:13:52.000000000 +0100
-+++ cups-1.4.4/scheduler/env.c 2010-09-15 13:20:41.341959587 +0100
-@@ -87,8 +87,13 @@ cupsdInitEnv(void)
-   cupsdSetEnv("LD_LIBRARY_PATH", NULL);
-   cupsdSetEnv("LD_PRELOAD", NULL);
-   cupsdSetEnv("NLSPATH", NULL);
+diff -up cups-1.5b1/scheduler/env.c.serverbin-compat cups-1.5b1/scheduler/env.c
+--- cups-1.5b1/scheduler/env.c.serverbin-compat        2011-01-11 04:48:42.000000000 +0100
++++ cups-1.5b1/scheduler/env.c 2011-05-23 17:07:17.000000000 +0200
+@@ -218,8 +218,13 @@ cupsdUpdateEnv(void)
+   set_if_undefined("LD_PRELOAD", NULL);
+   set_if_undefined("NLSPATH", NULL);
+   if (find_env("PATH") < 0)
 +#ifdef __x86_64__
-+  cupsdSetEnvf("PATH", "%s/filter:%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR
-+                       ":/bin:/usr/bin", ServerBin, ServerBin_compat);
++    cupsdSetEnvf("PATH", "%s/filter:%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR
++                         ":/bin:/usr/bin", ServerBin, ServerBin_compat);
 +#else /* ! defined(__x86_64__) */
-   cupsdSetEnvf("PATH", "%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR
-                        ":/bin:/usr/bin", ServerBin);
+     cupsdSetEnvf("PATH", "%s/filter:" CUPS_BINDIR ":" CUPS_SBINDIR
+                        ":/bin:/usr/bin", ServerBin);
 +#endif
-   cupsdSetEnv("SERVER_ADMIN", ServerAdmin);
-   cupsdSetEnv("SHLIB_PATH", NULL);
-   cupsdSetEnv("SOFTWARE", CUPS_MINIMAL);
-diff -up cups-1.4.4/scheduler/ipp.c.serverbin-compat cups-1.4.4/scheduler/ipp.c
---- cups-1.4.4/scheduler/ipp.c.serverbin-compat        2010-04-23 19:56:34.000000000 +0100
-+++ cups-1.4.4/scheduler/ipp.c 2010-09-15 13:20:41.359835378 +0100
-@@ -2615,9 +2615,18 @@ add_printer(cupsd_client_t  *con,       /* I -
+   set_if_undefined("SERVER_ADMIN", ServerAdmin);
+   set_if_undefined("SHLIB_PATH", NULL);
+   set_if_undefined("SOFTWARE", CUPS_MINIMAL);
+diff -up cups-1.5b1/scheduler/ipp.c.serverbin-compat cups-1.5b1/scheduler/ipp.c
+--- cups-1.5b1/scheduler/ipp.c.serverbin-compat        2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/scheduler/ipp.c 2011-05-23 16:09:57.000000000 +0200
+@@ -2586,9 +2586,18 @@ add_printer(cupsd_client_t  *con,       /* I -
          * Could not find device in list!
        */
  
@@ -68,8 +68,8 @@ diff -up cups-1.4.4/scheduler/ipp.c.serverbin-compat cups-1.4.4/scheduler/ipp.c
 +      if (access(srcfile, X_OK))
 +      {
 +#endif /* __x86_64__ */
-       send_ipp_status(con, IPP_NOT_POSSIBLE, _("Bad device-uri scheme \"%s\"!"),
-                       scheme);
+       send_ipp_status(con, IPP_NOT_POSSIBLE,
+                         _("Bad device-uri scheme \"%s\"."), scheme);
        return;
 +#ifdef __x86_64__
 +      }
@@ -77,10 +77,10 @@ diff -up cups-1.4.4/scheduler/ipp.c.serverbin-compat cups-1.4.4/scheduler/ipp.c
        }
      }
  
-diff -up cups-1.4.4/scheduler/job.c.serverbin-compat cups-1.4.4/scheduler/job.c
---- cups-1.4.4/scheduler/job.c.serverbin-compat        2010-03-30 23:07:33.000000000 +0100
-+++ cups-1.4.4/scheduler/job.c 2010-09-15 13:20:41.366836134 +0100
-@@ -972,8 +972,32 @@ cupsdContinueJob(cupsd_job_t *job)        /* I 
+diff -up cups-1.5b1/scheduler/job.c.serverbin-compat cups-1.5b1/scheduler/job.c
+--- cups-1.5b1/scheduler/job.c.serverbin-compat        2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/scheduler/job.c 2011-05-23 16:18:57.000000000 +0200
+@@ -1047,8 +1047,32 @@ cupsdContinueJob(cupsd_job_t *job)      /* I 
         i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
    {
      if (filter->filter[0] != '/')
@@ -115,21 +115,21 @@ diff -up cups-1.4.4/scheduler/job.c.serverbin-compat cups-1.4.4/scheduler/job.c
      else
        strlcpy(command, filter->filter, sizeof(command));
  
-@@ -1119,6 +1143,28 @@ cupsdContinueJob(cupsd_job_t *job)      /* I 
-       cupsdClosePipe(job->print_pipes);
+@@ -1199,6 +1223,28 @@ cupsdContinueJob(cupsd_job_t *job)      /* I 
+     {
        cupsdClosePipe(job->back_pipes);
        cupsdClosePipe(job->side_pipes);
 +#ifdef __x86_64__
 +      if (access(command, F_OK))
 +      {
 +        snprintf(command, sizeof(command), "%s/backend/%s", ServerBin_compat,
-+                 method);
++                 scheme);
 +        if (!access(command, F_OK))
 +          {
 +            /* Not in the correct directory, but we found it in the compat
 +             * directory.  Issue a warning. */
 +            cupsdLogMessage(CUPSD_LOG_INFO,
-+                            "Backend '%s' not in %s/backend!", method,
++                            "Backend '%s' not in %s/backend!", scheme,
 +                            ServerBin);
 +          }
 +        else
@@ -137,17 +137,17 @@ diff -up cups-1.4.4/scheduler/job.c.serverbin-compat cups-1.4.4/scheduler/job.c
 +            /* Not in the compat directory either; make any error
 +               messages use the correct directory name then. */
 +            snprintf(command, sizeof(command), "%s/backend/%s", ServerBin,
-+                     method);
++                     scheme);
 +          }
 +      }
 +#endif /* __x86_64__ */
  
        close(job->status_pipes[1]);
        job->status_pipes[1] = -1;
-diff -up cups-1.4.4/scheduler/printers.c.serverbin-compat cups-1.4.4/scheduler/printers.c
---- cups-1.4.4/scheduler/printers.c.serverbin-compat   2010-04-23 21:53:38.000000000 +0100
-+++ cups-1.4.4/scheduler/printers.c    2010-09-15 13:21:39.627960657 +0100
-@@ -1059,9 +1059,19 @@ cupsdLoadAllPrinters(void)
+diff -up cups-1.5b1/scheduler/printers.c.serverbin-compat cups-1.5b1/scheduler/printers.c
+--- cups-1.5b1/scheduler/printers.c.serverbin-compat   2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/scheduler/printers.c    2011-05-23 17:09:04.000000000 +0200
+@@ -1030,9 +1030,19 @@ cupsdLoadAllPrinters(void)
            * Backend does not exist, stop printer...
            */
  
@@ -167,28 +167,24 @@ diff -up cups-1.4.4/scheduler/printers.c.serverbin-compat cups-1.4.4/scheduler/p
          }
          }
  
-@@ -3603,6 +3613,14 @@ add_printer_filter(
+@@ -3621,8 +3631,20 @@ add_printer_filter(
+     else
+       snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin, program);
  
-     if (stat(filename, &fileinfo))
-     {
 +#ifdef __x86_64__
++    if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !RunUser,
++                       cupsdLogFCMessage, p) == _CUPS_FILE_CHECK_MISSING) {
 +      snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin_compat,
-+             program);
-+      if (stat(filename, &fileinfo))
-+      {
++               program);
++      if (_cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !RunUser,
++                         cupsdLogFCMessage, p) == _CUPS_FILE_CHECK_MISSING)
 +        snprintf(filename, sizeof(filename), "%s/filter/%s", ServerBin,
 +                 program);
-+#endif /* __x86_64__ */
-       memset(&fileinfo, 0, sizeof(fileinfo));
-       snprintf(p->state_message, sizeof(p->state_message),
-@@ -3611,6 +3629,9 @@ add_printer_filter(
-       cupsdSetPrinterReasons(p, "+cups-missing-filter-warning");
-       cupsdLogMessage(CUPSD_LOG_ERROR, "%s", p->state_message);
-+#ifdef __x86_64__
-+      }
-+#endif /* __x86_64__ */
-     }
++    }
++#else /* ! defined(__x86_64__) */
+     _cupsFileCheck(filename, _CUPS_FILE_CHECK_PROGRAM, !RunUser,
+                    cupsdLogFCMessage, p);
++#endif 
+   }
  
-    /*
+  /*
diff --git a/cups/patches/006_cups-no-export-ssllibs.patch b/cups/patches/006_cups-no-export-ssllibs.patch
new file mode 100644 (file)
index 0000000..de277d8
--- /dev/null
@@ -0,0 +1,12 @@
+diff -up cups-1.5.3/config-scripts/cups-ssl.m4.no-export-ssllibs cups-1.5.3/config-scripts/cups-ssl.m4
+--- cups-1.5.3/config-scripts/cups-ssl.m4.no-export-ssllibs    2012-03-21 05:45:48.000000000 +0100
++++ cups-1.5.3/config-scripts/cups-ssl.m4      2012-05-15 16:47:13.753314620 +0200
+@@ -173,7 +173,7 @@ AC_SUBST(IPPALIASES)
+ AC_SUBST(SSLFLAGS)
+ AC_SUBST(SSLLIBS)
+-EXPORT_SSLLIBS="$SSLLIBS"
++EXPORT_SSLLIBS=""
+ AC_SUBST(EXPORT_SSLLIBS)
+ dnl
similarity index 56%
rename from cups/patches/cups-direct-usb.patch
rename to cups/patches/007_cups-direct-usb.patch
index 2724fad83d1df027e7777e7a96582662a7d647ca..4e25ce7db4556f8c5322e9b28d50f15f25c76913 100644 (file)
@@ -1,8 +1,8 @@
-diff -up cups-1.3.7/backend/usb-unix.c.direct-usb cups-1.3.7/backend/usb-unix.c
---- cups-1.3.7/backend/usb-unix.c.direct-usb   2008-03-26 16:02:45.000000000 +0000
-+++ cups-1.3.7/backend/usb-unix.c      2008-07-15 13:25:56.000000000 +0100
-@@ -94,6 +94,9 @@ print_device(const char *uri,                /* I - De
-              strncasecmp(hostname, "Minolta", 7);
+diff -up cups-1.5b1/backend/usb-unix.c.direct-usb cups-1.5b1/backend/usb-unix.c
+--- cups-1.5b1/backend/usb-unix.c.direct-usb   2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/backend/usb-unix.c      2011-05-23 17:52:14.000000000 +0200
+@@ -102,6 +102,9 @@ print_device(const char *uri,              /* I - De
+              _cups_strncasecmp(hostname, "Minolta", 7);
  #endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ */
  
 +    if (use_bc && !strncmp(uri, "usb:/dev/", 9))
@@ -11,7 +11,7 @@ diff -up cups-1.3.7/backend/usb-unix.c.direct-usb cups-1.3.7/backend/usb-unix.c
      if ((device_fd = open_device(uri, &use_bc)) == -1)
      {
        if (getenv("CLASS") != NULL)
-@@ -320,12 +323,7 @@ open_device(const char *uri,              /* I - Dev
+@@ -331,12 +334,7 @@ open_device(const char *uri,              /* I - Dev
    if (!strncmp(uri, "usb:/dev/", 9))
  #ifdef __linux
    {
similarity index 66%
rename from cups/patches/cups-lpr-help.patch
rename to cups/patches/008_cups-lpr-help.patch
index 1a682975b05986d04d5263c2233ce4923487f755..c42434dbcf93b135d6cd634cfb4ee5327017ff73 100644 (file)
@@ -1,8 +1,8 @@
-diff -up cups-1.4b1/berkeley/lpr.c.lpr-help cups-1.4b1/berkeley/lpr.c
---- cups-1.4b1/berkeley/lpr.c.lpr-help 2008-07-11 23:46:21.000000000 +0100
-+++ cups-1.4b1/berkeley/lpr.c  2008-11-11 16:20:32.000000000 +0000
-@@ -30,6 +30,31 @@
- #include <cups/i18n.h>
+diff -up cups-1.5b1/berkeley/lpr.c.lpr-help cups-1.5b1/berkeley/lpr.c
+--- cups-1.5b1/berkeley/lpr.c.lpr-help 2011-03-21 23:02:00.000000000 +0100
++++ cups-1.5b1/berkeley/lpr.c  2011-05-23 17:58:06.000000000 +0200
+@@ -24,6 +24,31 @@
+ #include <cups/cups-private.h>
  
  
 +static void
@@ -33,15 +33,7 @@ diff -up cups-1.4b1/berkeley/lpr.c.lpr-help cups-1.4b1/berkeley/lpr.c
  /*
   * 'main()' - Parse options and send files for printing.
   */
-@@ -54,7 +79,6 @@ main(int  argc,                              /* I - Number of comm
-   int         deletefile;             /* Delete file after print? */
-   char                buffer[8192];           /* Copy buffer */
--
-   _cupsSetLocale(argv);
-   deletefile  = 0;
-@@ -282,6 +306,12 @@ main(int  argc,                           /* I - Number of comm
+@@ -270,6 +294,12 @@ main(int  argc,                           /* I - Number of comm
            break;
  
        default :
@@ -52,5 +44,5 @@ diff -up cups-1.4b1/berkeley/lpr.c.lpr-help cups-1.4b1/berkeley/lpr.c
 +          }
 +
            _cupsLangPrintf(stderr,
-                           _("%s: Error - unknown option \'%c\'!\n"),
-                           argv[0], argv[i][1]);
+                           _("%s: Error - unknown option \"%c\"."), argv[0],
+                           argv[i][1]);
diff --git a/cups/patches/009_cups-peercred.patch b/cups/patches/009_cups-peercred.patch
new file mode 100644 (file)
index 0000000..a106abb
--- /dev/null
@@ -0,0 +1,11 @@
+diff -up cups-1.5b1/scheduler/auth.c.peercred cups-1.5b1/scheduler/auth.c
+--- cups-1.5b1/scheduler/auth.c.peercred       2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/scheduler/auth.c        2011-05-23 18:00:18.000000000 +0200
+@@ -52,6 +52,7 @@
+  * Include necessary headers...
+  */
++#define _GNU_SOURCE
+ #include "cupsd.h"
+ #include <grp.h>
+ #ifdef HAVE_SHADOW_H
similarity index 64%
rename from cups/patches/cups-pid.patch
rename to cups/patches/010_cups-pid.patch
index ab4ff849991784bf993264a3b0fc416ae9a18ff1..23ffd47064334964a3c36a11277ead1a0647afa8 100644 (file)
@@ -1,6 +1,7 @@
---- cups-1.1.21/scheduler/main.c.pid   2004-09-24 11:29:05.073748138 +0100
-+++ cups-1.1.21/scheduler/main.c       2004-09-24 11:44:35.826446564 +0100
-@@ -349,6 +349,8 @@
+diff -up cups-1.5b1/scheduler/main.c.pid cups-1.5b1/scheduler/main.c
+--- cups-1.5b1/scheduler/main.c.pid    2011-05-18 22:44:16.000000000 +0200
++++ cups-1.5b1/scheduler/main.c        2011-05-23 18:01:20.000000000 +0200
+@@ -311,6 +311,8 @@ main(int  argc,                            /* I - Number of comm
      * Setup signal handlers for the parent...
      */
  
@@ -9,7 +10,7 @@
  #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
      sigset(SIGUSR1, parent_handler);
      sigset(SIGCHLD, parent_handler);
-@@ -372,7 +374,7 @@
+@@ -334,7 +336,7 @@ main(int  argc,                            /* I - Number of comm
      signal(SIGHUP, SIG_IGN);
  #endif /* HAVE_SIGSET */
  
@@ -18,7 +19,7 @@
      {
       /*
        * OK, wait for the child to startup and send us SIGUSR1 or to crash
-@@ -384,7 +386,15 @@
+@@ -346,7 +348,15 @@ main(int  argc,                           /* I - Number of comm
          sleep(1);
  
        if (parent_signal == SIGUSR1)
similarity index 72%
rename from cups/patches/cups-eggcups.patch
rename to cups/patches/011_cups-eggcups.patch
index fde1e0796ab2e1cc3b4ae81afee6f74b97a0a4a5..981d92017267b56aa1646ddcbe202219e71596f1 100644 (file)
@@ -1,9 +1,9 @@
-diff -up cups-1.4b1/backend/ipp.c.eggcups cups-1.4b1/backend/ipp.c
---- cups-1.4b1/backend/ipp.c.eggcups   2008-10-15 19:27:45.000000000 +0100
-+++ cups-1.4b1/backend/ipp.c   2008-11-11 15:43:30.000000000 +0000
-@@ -51,6 +51,70 @@ static char pstmpname[1024] = "";   /* Tem
- static char   tmpfilename[1024] = ""; /* Temporary spool file name */
static int    job_cancelled = 0;      /* Job cancelled? */
+diff -up cups-1.5.3/backend/ipp.c.eggcups cups-1.5.3/backend/ipp.c
+--- cups-1.5.3/backend/ipp.c.eggcups   2012-05-05 01:00:01.000000000 +0200
++++ cups-1.5.3/backend/ipp.c   2012-05-15 16:50:41.142868986 +0200
+@@ -138,6 +138,70 @@ static cups_array_t       *state_reasons; /* A
+ static char           tmpfilename[1024] = "";
                                      /* Temporary spool file name */
  
 +#if HAVE_DBUS
 +#include <dbus/dbus.h>
@@ -72,8 +72,8 @@ diff -up cups-1.4b1/backend/ipp.c.eggcups cups-1.4b1/backend/ipp.c
  
  /*
   * Local functions...
-@@ -1058,6 +1122,15 @@ main(int  argc,                         /* I - Number of comm
-                       job_id);
+@@ -1520,6 +1584,15 @@ main(int  argc,                         /* I - Number of comm
+                            _("Print file accepted - job ID %d."), job_id);
      }
  
 +#if HAVE_DBUS
@@ -85,25 +85,25 @@ diff -up cups-1.4b1/backend/ipp.c.eggcups cups-1.4b1/backend/ipp.c
 +                                getenv ("PRINTER"));
 +#endif /* HAVE_DBUS */
 +
+     fprintf(stderr, "DEBUG: job-id=%d\n", job_id);
      ippDelete(response);
  
-     if (job_cancelled)
-diff -up cups-1.4b1/backend/Makefile.eggcups cups-1.4b1/backend/Makefile
---- cups-1.4b1/backend/Makefile.eggcups        2008-10-06 22:08:27.000000000 +0100
-+++ cups-1.4b1/backend/Makefile        2008-11-11 15:45:31.000000000 +0000
-@@ -188,7 +188,7 @@ dnssd:     dnssd.o ../cups/$(LIBCUPS) libbac
+diff -up cups-1.5.3/backend/Makefile.eggcups cups-1.5.3/backend/Makefile
+--- cups-1.5.3/backend/Makefile.eggcups        2012-04-23 19:42:12.000000000 +0200
++++ cups-1.5.3/backend/Makefile        2012-05-15 16:48:17.253871982 +0200
+@@ -212,7 +212,7 @@ dnssd:     dnssd.o ../cups/$(LIBCUPS) libbac
  
  ipp:  ipp.o ../cups/$(LIBCUPS) libbackend.a
        echo Linking $@...
 -      $(CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS)
-+      $(CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS) $(CUPSDLIBS)
++      $(CC) $(LDFLAGS) -o ipp ipp.o libbackend.a $(LIBS) $(SERVERLIBS)
        $(RM) http
        $(LN) ipp http
  
-diff -up cups-1.4b1/scheduler/subscriptions.c.eggcups cups-1.4b1/scheduler/subscriptions.c
---- cups-1.4b1/scheduler/subscriptions.c.eggcups       2008-08-01 22:11:55.000000000 +0100
-+++ cups-1.4b1/scheduler/subscriptions.c       2008-11-11 15:43:30.000000000 +0000
-@@ -1302,13 +1302,13 @@ cupsd_send_dbus(cupsd_eventmask_t event,
+diff -up cups-1.5.3/scheduler/subscriptions.c.eggcups cups-1.5.3/scheduler/subscriptions.c
+--- cups-1.5.3/scheduler/subscriptions.c.eggcups       2012-02-12 06:48:09.000000000 +0100
++++ cups-1.5.3/scheduler/subscriptions.c       2012-05-15 16:48:17.253871982 +0200
+@@ -1314,13 +1314,13 @@ cupsd_send_dbus(cupsd_eventmask_t event,
      what = "PrinterAdded";
    else if (event & CUPSD_EVENT_PRINTER_DELETED)
      what = "PrinterRemoved";
@@ -119,7 +119,7 @@ diff -up cups-1.4b1/scheduler/subscriptions.c.eggcups cups-1.4b1/scheduler/subsc
    else
      return;
  
-@@ -1344,7 +1344,7 @@ cupsd_send_dbus(cupsd_eventmask_t event,
+@@ -1356,7 +1356,7 @@ cupsd_send_dbus(cupsd_eventmask_t event,
    dbus_message_append_iter_init(message, &iter);
    if (dest)
      dbus_message_iter_append_string(&iter, dest->name);
similarity index 54%
rename from cups/patches/cups-driverd-timeout.patch
rename to cups/patches/012_cups-driverd-timeout.patch
index 222fb09e7fa193cbdbff6f2d8ef211eec0077662..cb9e5cf72600b04124cea44bfae4d8615616654a 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.3.7/scheduler/ipp.c.driverd-timeout cups-1.3.7/scheduler/ipp.c
---- cups-1.3.7/scheduler/ipp.c.driverd-timeout 2008-07-15 13:40:51.000000000 +0100
-+++ cups-1.3.7/scheduler/ipp.c 2008-07-15 13:40:51.000000000 +0100
-@@ -4293,7 +4293,7 @@ copy_model(cupsd_client_t *con,          /* I - 
+diff -up cups-1.5.0/scheduler/ipp.c.driverd-timeout cups-1.5.0/scheduler/ipp.c
+--- cups-1.5.0/scheduler/ipp.c.driverd-timeout 2011-10-10 17:03:41.801690962 +0100
++++ cups-1.5.0/scheduler/ipp.c 2011-10-10 17:03:41.861689834 +0100
+@@ -5723,7 +5723,7 @@ copy_model(cupsd_client_t *con,          /* I -
    close(temppipe[1]);
  
   /*
@@ -10,7 +10,7 @@ diff -up cups-1.3.7/scheduler/ipp.c.driverd-timeout cups-1.3.7/scheduler/ipp.c
    */
  
    total = 0;
-@@ -4315,7 +4315,7 @@ copy_model(cupsd_client_t *con,          /* I - 
+@@ -5743,7 +5743,7 @@ copy_model(cupsd_client_t *con,          /* I -
      FD_SET(temppipe[0], &input);
      FD_SET(CGIPipes[0], &input);
  
similarity index 56%
rename from cups/patches/cups-strict-ppd-line-length.patch
rename to cups/patches/013_cups-strict-ppd-line-length.patch
index d393728179bc0f6771949383e59d2f57917a7a43..b2697ec3185bf1c938c8698663d62f350b439bfe 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.3.5/cups/ppd.c~ cups-1.3.5/cups/ppd.c
---- cups-1.3.5/cups/ppd.c~     2007-11-30 19:29:50.000000000 +0000
-+++ cups-1.3.5/cups/ppd.c      2008-01-09 12:08:48.000000000 +0000
-@@ -2801,7 +2801,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
+diff -up cups-1.5b1/cups/ppd.c.strict-ppd-line-length cups-1.5b1/cups/ppd.c
+--- cups-1.5b1/cups/ppd.c.strict-ppd-line-length       2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/cups/ppd.c      2011-05-24 15:46:13.000000000 +0200
+@@ -2786,7 +2786,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
        *lineptr++ = ch;
        col ++;
  
@@ -10,7 +10,7 @@ diff -up cups-1.3.5/cups/ppd.c~ cups-1.3.5/cups/ppd.c
        {
         /*
            * Line is too long...
-@@ -2868,7 +2868,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
+@@ -2847,7 +2847,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
        {
          col ++;
  
@@ -19,7 +19,7 @@ diff -up cups-1.3.5/cups/ppd.c~ cups-1.3.5/cups/ppd.c
          {
           /*
              * Line is too long...
-@@ -2931,7 +2931,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
+@@ -2906,7 +2906,7 @@ ppd_read(cups_file_t    *fp,             /* I - Fil
        {
          col ++;
  
similarity index 77%
rename from cups/patches/cups-logrotate.patch
rename to cups/patches/014_cups-logrotate.patch
index 559cbdc229ba4a5edd83ad1959f55f7b1bc53970..a6485a9b7a142e931dc11d127be37b0c15bc1e4e 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.3.5/scheduler/log.c.logrotate cups-1.3.5/scheduler/log.c
---- cups-1.3.5/scheduler/log.c.logrotate       2008-02-14 12:21:25.000000000 +0000
-+++ cups-1.3.5/scheduler/log.c 2008-02-14 12:24:16.000000000 +0000
-@@ -29,6 +29,9 @@
+diff -up cups-1.5b1/scheduler/log.c.logrotate cups-1.5b1/scheduler/log.c
+--- cups-1.5b1/scheduler/log.c.logrotate       2011-05-14 01:04:16.000000000 +0200
++++ cups-1.5b1/scheduler/log.c 2011-05-24 15:47:20.000000000 +0200
+@@ -32,6 +32,9 @@
  #include "cupsd.h"
  #include <stdarg.h>
  #include <syslog.h>
@@ -11,7 +11,7 @@ diff -up cups-1.3.5/scheduler/log.c.logrotate cups-1.3.5/scheduler/log.c
  
  
  /*
-@@ -467,12 +470,10 @@ check_log_file(cups_file_t **lf, /* IO -
+@@ -71,12 +74,10 @@ cupsdCheckLogFile(cups_file_t **lf,        /* I
      return (1);
  
   /*
@@ -26,7 +26,7 @@ diff -up cups-1.3.5/scheduler/log.c.logrotate cups-1.3.5/scheduler/log.c
    {
     /*
      * Handle format strings...
-@@ -565,6 +566,34 @@ check_log_file(cups_file_t **lf,  /* IO -
+@@ -186,6 +187,34 @@ cupsdCheckLogFile(cups_file_t **lf,       /* I
    }
  
   /*
similarity index 73%
rename from cups/patches/cups-usb-paperout.patch
rename to cups/patches/015_cups-usb-paperout.patch
index fb69145a4a4675be3b23c6eeca383d46b4aaf18d..f1f73f0a32ce1b3819dcc0545de2b97001becbb0 100644 (file)
@@ -1,6 +1,6 @@
-diff -up cups-1.4b1/backend/usb-unix.c.usb-paperout cups-1.4b1/backend/usb-unix.c
---- cups-1.4b1/backend/usb-unix.c.usb-paperout 2008-11-12 09:30:03.000000000 +0000
-+++ cups-1.4b1/backend/usb-unix.c      2008-11-12 09:30:03.000000000 +0000
+diff -up cups-1.5b1/backend/usb-unix.c.usb-paperout cups-1.5b1/backend/usb-unix.c
+--- cups-1.5b1/backend/usb-unix.c.usb-paperout 2011-05-24 15:51:39.000000000 +0200
++++ cups-1.5b1/backend/usb-unix.c      2011-05-24 15:51:39.000000000 +0200
 @@ -30,6 +30,11 @@
  
  #include <sys/select.h>
@@ -13,7 +13,7 @@ diff -up cups-1.4b1/backend/usb-unix.c.usb-paperout cups-1.4b1/backend/usb-unix.
  
  /*
   * Local functions...
-@@ -324,7 +329,19 @@ open_device(const char *uri,              /* I - Dev
+@@ -334,7 +339,19 @@ open_device(const char *uri,              /* I - Dev
    if (!strncmp(uri, "usb:/dev/", 9))
  #ifdef __linux
    {
@@ -34,7 +34,7 @@ diff -up cups-1.4b1/backend/usb-unix.c.usb-paperout cups-1.4b1/backend/usb-unix.
    }
    else if (!strncmp(uri, "usb://", 6))
    {
-@@ -390,7 +407,14 @@ open_device(const char *uri,              /* I - Dev
+@@ -400,7 +417,14 @@ open_device(const char *uri,              /* I - Dev
          if (!strcmp(uri, device_uri))
        {
         /*
diff --git a/cups/patches/016_cups-res_init.patch b/cups/patches/016_cups-res_init.patch
new file mode 100644 (file)
index 0000000..94a81a4
--- /dev/null
@@ -0,0 +1,26 @@
+diff -up cups-1.6b1/cups/http-addr.c.res_init cups-1.6b1/cups/http-addr.c
+--- cups-1.6b1/cups/http-addr.c.res_init       2012-05-17 00:57:03.000000000 +0200
++++ cups-1.6b1/cups/http-addr.c        2012-05-25 15:51:51.323916352 +0200
+@@ -254,7 +254,8 @@ httpAddrLookup(
+     if (error)
+     {
+-      if (error == EAI_FAIL)
++      if (error == EAI_FAIL || error == EAI_AGAIN || error == EAI_NODATA ||
++          error == EAI_NONAME)
+         cg->need_res_init = 1;
+       return (httpAddrString(addr, name, namelen));
+diff -up cups-1.6b1/cups/http-addrlist.c.res_init cups-1.6b1/cups/http-addrlist.c
+--- cups-1.6b1/cups/http-addrlist.c.res_init   2012-04-23 19:26:57.000000000 +0200
++++ cups-1.6b1/cups/http-addrlist.c    2012-05-25 16:05:05.930377452 +0200
+@@ -540,7 +540,8 @@ httpAddrGetList(const char *hostname,      /*
+     }
+     else
+     {
+-      if (error == EAI_FAIL)
++      if (error == EAI_FAIL || error == EAI_AGAIN || error == EAI_NODATA ||
++          error == EAI_NONAME)
+         cg->need_res_init = 1;
+       _cupsSetError(IPP_INTERNAL_ERROR, gai_strerror(error), 0);
similarity index 71%
rename from cups/patches/cups-filter-debug.patch
rename to cups/patches/017_cups-filter-debug.patch
index 38053e63afd6e2b3fb2cc7ff5ed024470ad92b6f..96c82dab9333fe1eae827eaf7ecd5df8a5f0aee2 100644 (file)
@@ -1,14 +1,14 @@
-diff -up cups-1.4rc1/scheduler/job.c.filter-debug cups-1.4rc1/scheduler/job.c
---- cups-1.4rc1/scheduler/job.c.filter-debug   2009-06-23 18:10:57.125572911 +0100
-+++ cups-1.4rc1/scheduler/job.c        2009-06-23 18:11:31.495572481 +0100
-@@ -544,10 +544,28 @@ cupsdContinueJob(cupsd_job_t *job)       /* I 
+diff -up cups-1.6b1/scheduler/job.c.filter-debug cups-1.6b1/scheduler/job.c
+--- cups-1.6b1/scheduler/job.c.filter-debug    2012-05-25 16:06:01.000000000 +0200
++++ cups-1.6b1/scheduler/job.c 2012-05-25 16:07:46.309259511 +0200
+@@ -625,10 +625,28 @@ cupsdContinueJob(cupsd_job_t *job)       /* I
  
      if (!filters)
      {
 +      mime_filter_t *current;
 +
        cupsdLogJob(job, CUPSD_LOG_ERROR,
-                 "Unable to convert file %d to printable format!",
+                 "Unable to convert file %d to printable format.",
                  job->current_file);
  
 +      cupsdLogJob(job, CUPSD_LOG_ERROR,
similarity index 77%
rename from cups/patches/cups-uri-compat.patch
rename to cups/patches/018_cups-uri-compat.patch
index dd55b66080495b7759b06d9fe8cc6c3606f8a27b..2520a5bec6dcaa9dc3518ed0510a1fcced03e0a8 100644 (file)
@@ -1,9 +1,9 @@
-diff -up cups-1.4rc1/backend/usb-unix.c.uri-compat cups-1.4rc1/backend/usb-unix.c
---- cups-1.4rc1/backend/usb-unix.c.uri-compat  2009-07-15 10:48:46.992133677 +0100
-+++ cups-1.4rc1/backend/usb-unix.c     2009-07-15 10:49:05.305008114 +0100
+diff -up cups-1.5b1/backend/usb-unix.c.uri-compat cups-1.5b1/backend/usb-unix.c
+--- cups-1.5b1/backend/usb-unix.c.uri-compat   2011-05-24 15:59:05.000000000 +0200
++++ cups-1.5b1/backend/usb-unix.c      2011-05-24 16:02:03.000000000 +0200
 @@ -63,11 +63,34 @@ print_device(const char *uri,              /* I - De
    int         device_fd;              /* USB device */
-   size_t      tbytes;                 /* Total number of bytes written */
+   ssize_t     tbytes;                 /* Total number of bytes written */
    struct termios opts;                        /* Parallel port options */
 +  char                *fixed_uri = strdup (uri);
 +  char                *p;
@@ -37,7 +37,7 @@ diff -up cups-1.4rc1/backend/usb-unix.c.uri-compat cups-1.4rc1/backend/usb-unix.
    * Open the USB port device...
    */
 @@ -107,10 +130,10 @@ print_device(const char *uri,            /* I - De
-              strncasecmp(hostname, "Minolta", 7);
+              _cups_strncasecmp(hostname, "Minolta", 7);
  #endif /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ */
  
 -    if (use_bc && !strncmp(uri, "usb:/dev/", 9))
similarity index 76%
rename from cups/patches/cups-cups-get-classes.patch
rename to cups/patches/019_cups-cups-get-classes.patch
index 196f5f16663e5117c5d424a668023ca3071494c0..b0ffe1c40c171c799eb1ec78aa2641cda16e1653 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
---- cups-1.4rc1/cups/dest.c.cups-get-classes   2009-05-13 22:39:17.000000000 +0100
-+++ cups-1.4rc1/cups/dest.c    2009-07-28 22:17:40.285709944 +0100
-@@ -1735,6 +1735,7 @@ cups_get_sdests(http_t      *http,       /* I 
+diff -up cups-1.5.0/cups/dest.c.cups-get-classes cups-1.5.0/cups/dest.c
+--- cups-1.5.0/cups/dest.c.cups-get-classes    2011-05-20 04:49:49.000000000 +0100
++++ cups-1.5.0/cups/dest.c     2011-09-14 12:10:05.111635428 +0100
+@@ -534,6 +534,7 @@ _cupsGetDests(http_t      *http,   /* I - 
    char                uri[1024];              /* printer-uri value */
    int         num_options;            /* Number of options */
    cups_option_t       *options;               /* Options */
@@ -9,7 +9,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
  #ifdef __APPLE__
    char                media_default[41];      /* Default paper size */
  #endif /* __APPLE__ */
-@@ -1791,6 +1792,8 @@ cups_get_sdests(http_t      *http,       /* I 
+@@ -590,6 +591,8 @@ _cupsGetDests(http_t      *http,   /* I - 
    *    printer-uri [for IPP_GET_PRINTER_ATTRIBUTES]
    */
  
@@ -18,7 +18,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
    request = ippNewRequest(op);
  
    ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
-@@ -1848,6 +1851,23 @@ cups_get_sdests(http_t      *http,      /* I 
+@@ -647,6 +650,23 @@ _cupsGetDests(http_t      *http,  /* I - 
            attr->value_tag != IPP_TAG_URI)
            continue;
  
@@ -42,7 +42,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
          if (!strcmp(attr->name, "auth-info-required") ||
            !strcmp(attr->name, "device-uri") ||
            !strcmp(attr->name, "marker-change-time") ||
-@@ -1939,6 +1959,28 @@ cups_get_sdests(http_t      *http,      /* I 
+@@ -738,6 +758,28 @@ _cupsGetDests(http_t      *http,  /* I - 
            continue;
        }
  
@@ -52,7 +52,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
 +      * early if so.
 +      */
 +
-+      if (op == CUPS_GET_CLASSES)
++      if (op == CUPS_GET_CLASSES && num_dests > 0)
 +      {
 +      int diff;
 +      cups_find_dest (printer_name, NULL, num_dests, *dests, 0, &diff);
@@ -71,7 +71,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
        if ((dest = cups_add_dest(printer_name, NULL, &num_dests, dests)) != NULL)
        {
          dest->num_options = num_options;
-@@ -1955,6 +1997,16 @@ cups_get_sdests(http_t      *http,      /* I 
+@@ -754,6 +796,15 @@ _cupsGetDests(http_t      *http,  /* I - 
    }
  
   /*
@@ -81,8 +81,7 @@ diff -up cups-1.4rc1/cups/dest.c.cups-get-classes cups-1.4rc1/cups/dest.c
 +  */
 +
 +  if (get_classes)
-+    num_dests = cups_get_sdests (http, CUPS_GET_CLASSES, name,
-+                               num_dests, dests);
++    num_dests = _cupsGetDests (http, CUPS_GET_CLASSES, name, dests, 0, 0);
 +
 + /*
    * Return the count...
similarity index 82%
rename from cups/patches/cups-str3382.patch
rename to cups/patches/020_cups-str3382.patch
index 14e9b2778998f93f433b6f3a4c11b5be7989dc91..2e8736d04853ae833c13838ff5e51d3169a2fcb8 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.4.3/cups/tempfile.c.str3382 cups-1.4.3/cups/tempfile.c
---- cups-1.4.3/cups/tempfile.c.str3382 2010-01-18 19:47:12.000000000 +0100
-+++ cups-1.4.3/cups/tempfile.c 2010-03-31 13:26:52.000000000 +0200
-@@ -35,6 +35,7 @@
+diff -up cups-1.5b1/cups/tempfile.c.str3382 cups-1.5b1/cups/tempfile.c
+--- cups-1.5b1/cups/tempfile.c.str3382 2010-03-24 01:45:34.000000000 +0100
++++ cups-1.5b1/cups/tempfile.c 2011-05-24 16:04:47.000000000 +0200
+@@ -33,6 +33,7 @@
  #  include <io.h>
  #else
  #  include <unistd.h>
@@ -9,7 +9,7 @@ diff -up cups-1.4.3/cups/tempfile.c.str3382 cups-1.4.3/cups/tempfile.c
  #endif /* WIN32 || __EMX__ */
  
  
-@@ -56,7 +57,7 @@ cupsTempFd(char *filename,           /* I - Point
+@@ -54,7 +55,7 @@ cupsTempFd(char *filename,           /* I - Point
    char                tmppath[1024];          /* Windows temporary directory */
    DWORD               curtime;                /* Current time */
  #else
@@ -18,7 +18,7 @@ diff -up cups-1.4.3/cups/tempfile.c.str3382 cups-1.4.3/cups/tempfile.c
  #endif /* WIN32 */
  
  
-@@ -107,33 +108,25 @@ cupsTempFd(char *filename,               /* I - Point
+@@ -105,33 +106,25 @@ cupsTempFd(char *filename,               /* I - Point
  
      snprintf(filename, len - 1, "%s/%05lx%08lx", tmpdir,
               GetCurrentProcessId(), curtime);
diff --git a/cups/patches/021_cups-0755.patch b/cups/patches/021_cups-0755.patch
new file mode 100644 (file)
index 0000000..b0df3a0
--- /dev/null
@@ -0,0 +1,21 @@
+diff -up cups-1.6b1/Makedefs.in.0755 cups-1.6b1/Makedefs.in
+--- cups-1.6b1/Makedefs.in.0755        2012-05-23 01:58:31.000000000 +0200
++++ cups-1.6b1/Makedefs.in     2012-05-25 16:09:40.545463214 +0200
+@@ -40,14 +40,14 @@ SHELL              =       /bin/sh
+ # Installation programs...
+ #
+-INSTALL_BIN   =       $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
++INSTALL_BIN   =       $(LIBTOOL) $(INSTALL) -c -m 755 @INSTALL_STRIP@
+ INSTALL_COMPDATA =    $(INSTALL) -c -m 444 @INSTALL_GZIP@
+ INSTALL_CONFIG        =       $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@
+ INSTALL_DATA  =       $(INSTALL) -c -m 444
+ INSTALL_DIR   =       $(INSTALL) -d
+-INSTALL_LIB   =       $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
++INSTALL_LIB   =       $(LIBTOOL) $(INSTALL) -c -m 755 @INSTALL_STRIP@
+ INSTALL_MAN   =       $(INSTALL) -c -m 444
+-INSTALL_SCRIPT        =       $(INSTALL) -c -m 555
++INSTALL_SCRIPT        =       $(INSTALL) -c -m 755
+ #
+ # Default user, group, and system groups for the scheduler...
similarity index 71%
rename from cups/patches/cups-hp-deviceid-oid.patch
rename to cups/patches/022_cups-hp-deviceid-oid.patch
index 29f0781d4776c91756fee3494e829424c76e32ce..da5136a812950352c950e04228d71dd96ce0b72e 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.4.3/backend/snmp.c.hp-deviceid-oid cups-1.4.3/backend/snmp.c
---- cups-1.4.3/backend/snmp.c.hp-deviceid-oid  2009-12-08 02:13:42.000000000 +0000
-+++ cups-1.4.3/backend/snmp.c  2010-04-13 15:00:26.486148914 +0100
-@@ -194,6 +194,7 @@ static const int   UriOID[] = { CUPS_OID_p
+diff -up cups-1.5b1/backend/snmp.c.hp-deviceid-oid cups-1.5b1/backend/snmp.c
+--- cups-1.5b1/backend/snmp.c.hp-deviceid-oid  2011-05-20 05:49:49.000000000 +0200
++++ cups-1.5b1/backend/snmp.c  2011-05-24 17:24:48.000000000 +0200
+@@ -187,6 +187,7 @@ static const int   UriOID[] = { CUPS_OID_p
  static const int      LexmarkProductOID[] = { 1,3,6,1,4,1,641,2,1,2,1,2,1,-1 };
  static const int      LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 };
  static const int      LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 };
@@ -9,7 +9,7 @@ diff -up cups-1.4.3/backend/snmp.c.hp-deviceid-oid cups-1.4.3/backend/snmp.c
  static const int      XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 };
  static cups_array_t   *DeviceURIs = NULL;
  static int            HostNameLookups = 0;
-@@ -1003,6 +1004,9 @@ read_snmp_response(int fd)               /* I - SNMP 
+@@ -1006,6 +1007,9 @@ read_snmp_response(int fd)               /* I - SNMP 
        _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
                       packet.community, CUPS_ASN1_GET_REQUEST,
                       DEVICE_PRODUCT, XeroxProductOID);
diff --git a/cups/patches/023_cups-dnssd-deviceid.patch b/cups/patches/023_cups-dnssd-deviceid.patch
new file mode 100644 (file)
index 0000000..b3c2b8e
--- /dev/null
@@ -0,0 +1,38 @@
+diff -up cups-1.6b1/backend/dnssd.c.dnssd-deviceid cups-1.6b1/backend/dnssd.c
+--- cups-1.6b1/backend/dnssd.c.dnssd-deviceid  2012-05-21 18:05:58.000000000 +0200
++++ cups-1.6b1/backend/dnssd.c 2012-05-25 16:27:49.226874427 +0200
+@@ -1181,15 +1181,22 @@ query_callback(
+   if (device->device_id)
+     free(device->device_id);
++  if (device_id[0])
++  {
++    /* Mark this as the real device ID. */
++    ptr = device_id + strlen(device_id);
++    snprintf(ptr, sizeof(device_id) - (ptr - device_id), "FZY:0;");
++  }
++
+   if (!device_id[0] && strcmp(model, "Unknown"))
+   {
+     if (make_and_model[0])
+-      snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;",
++      snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;FZY:1;",
+              make_and_model, model);
+     else if (!_cups_strncasecmp(model, "designjet ", 10))
+-      snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s", model + 10);
++      snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s;FZY:1;", model + 10);
+     else if (!_cups_strncasecmp(model, "stylus ", 7))
+-      snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s", model + 7);
++      snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s;FZY:1;", model + 7);
+     else if ((ptr = strchr(model, ' ')) != NULL)
+     {
+      /*
+@@ -1199,7 +1206,7 @@ query_callback(
+       memcpy(make_and_model, model, ptr - model);
+       make_and_model[ptr - model] = '\0';
+-      snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s",
++      snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;FZY:1;",
+              make_and_model, ptr + 1);
+     }
+   }
similarity index 73%
rename from cups/patches/cups-ricoh-deviceid-oid.patch
rename to cups/patches/024_cups-ricoh-deviceid-oid.patch
index 6a5b6a903acebe5150d30ad4264e1c3078737dee..c148f9539b4c2db143afabd4aff6540b5d5a4c43 100644 (file)
@@ -1,7 +1,7 @@
-diff -up cups-1.4.3/backend/snmp.c.ricoh-deviceid-oid cups-1.4.3/backend/snmp.c
---- cups-1.4.3/backend/snmp.c.ricoh-deviceid-oid       2010-05-11 17:30:57.266120467 +0100
-+++ cups-1.4.3/backend/snmp.c  2010-05-11 17:31:16.267120141 +0100
-@@ -195,6 +195,7 @@ static const int   LexmarkProductOID[] = {
+diff -up cups-1.5b1/backend/snmp.c.ricoh-deviceid-oid cups-1.5b1/backend/snmp.c
+--- cups-1.5b1/backend/snmp.c.ricoh-deviceid-oid       2011-05-24 17:29:48.000000000 +0200
++++ cups-1.5b1/backend/snmp.c  2011-05-24 17:29:48.000000000 +0200
+@@ -188,6 +188,7 @@ static const int   LexmarkProductOID[] = {
  static const int      LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 };
  static const int      LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 };
  static const int      HPDeviceIdOID[] = { 1,3,6,1,4,1,11,2,3,9,1,1,7,0,-1 };
@@ -9,7 +9,7 @@ diff -up cups-1.4.3/backend/snmp.c.ricoh-deviceid-oid cups-1.4.3/backend/snmp.c
  static const int      XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 };
  static cups_array_t   *DeviceURIs = NULL;
  static int            HostNameLookups = 0;
-@@ -1002,6 +1003,9 @@ read_snmp_response(int fd)               /* I - SNMP 
+@@ -1005,6 +1006,9 @@ read_snmp_response(int fd)               /* I - SNMP 
                       packet.community, CUPS_ASN1_GET_REQUEST,
                       DEVICE_ID, LexmarkDeviceIdOID);
        _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
diff --git a/cups/patches/025_cups-systemd-socket.patch b/cups/patches/025_cups-systemd-socket.patch
new file mode 100644 (file)
index 0000000..83fabdb
--- /dev/null
@@ -0,0 +1,395 @@
+diff -up cups-1.6b1/config.h.in.systemd-socket cups-1.6b1/config.h.in
+--- cups-1.6b1/config.h.in.systemd-socket      2012-05-17 00:57:03.000000000 +0200
++++ cups-1.6b1/config.h.in     2012-05-28 11:16:35.657250584 +0200
+@@ -506,6 +506,13 @@
+ /*
++ * Do we have systemd support?
++ */
++
++#undef HAVE_SYSTEMD
++
++
++/*
+  * Various scripting languages...
+  */
+diff -up cups-1.6b1/config-scripts/cups-systemd.m4.systemd-socket cups-1.6b1/config-scripts/cups-systemd.m4
+--- cups-1.6b1/config-scripts/cups-systemd.m4.systemd-socket   2012-05-28 11:16:35.658250577 +0200
++++ cups-1.6b1/config-scripts/cups-systemd.m4  2012-05-28 11:16:35.658250577 +0200
+@@ -0,0 +1,36 @@
++dnl
++dnl "$Id$"
++dnl
++dnl   systemd stuff for CUPS.
++
++dnl Find whether systemd is available
++
++SDLIBS=""
++AC_ARG_WITH([systemdsystemunitdir],
++        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
++        [], [with_systemdsystemunitdir=$($PKGCONFIG --variable=systemdsystemunitdir systemd)])
++if test "x$with_systemdsystemunitdir" != xno; then
++        AC_MSG_CHECKING(for libsystemd-daemon)
++        if $PKGCONFIG --exists libsystemd-daemon; then
++              AC_MSG_RESULT(yes)
++              SDCFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
++              SDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
++              AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
++              AC_DEFINE(HAVE_SYSTEMD)
++      else
++              AC_MSG_RESULT(no)
++      fi
++fi
++
++if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then
++        SYSTEMD_UNITS="cups.service cups.socket cups.path"
++else
++        SYSTEMD_UNITS=""
++fi
++
++AC_SUBST(SYSTEMD_UNITS)
++AC_SUBST(SDLIBS)
++
++dnl
++dnl "$Id$"
++dnl
+diff -up cups-1.6b1/configure.in.systemd-socket cups-1.6b1/configure.in
+--- cups-1.6b1/configure.in.systemd-socket     2012-04-23 19:26:57.000000000 +0200
++++ cups-1.6b1/configure.in    2012-05-28 11:16:35.658250577 +0200
+@@ -33,6 +33,7 @@ sinclude(config-scripts/cups-pam.m4)
+ sinclude(config-scripts/cups-largefile.m4)
+ sinclude(config-scripts/cups-dnssd.m4)
+ sinclude(config-scripts/cups-launchd.m4)
++sinclude(config-scripts/cups-systemd.m4)
+ sinclude(config-scripts/cups-defaults.m4)
+ sinclude(config-scripts/cups-scripting.m4)
+@@ -66,6 +67,9 @@ AC_OUTPUT(Makedefs
+         conf/snmp.conf
+         cups-config
+         data/testprint
++          data/cups.service
++          data/cups.socket
++          data/cups.path
+         desktop/cups.desktop
+         doc/help/ref-cupsd-conf.html
+         doc/help/standard.html
+diff -up cups-1.6b1/cups/usersys.c.systemd-socket cups-1.6b1/cups/usersys.c
+--- cups-1.6b1/cups/usersys.c.systemd-socket   2012-04-23 19:26:57.000000000 +0200
++++ cups-1.6b1/cups/usersys.c  2012-05-28 11:16:35.659250570 +0200
+@@ -975,7 +975,7 @@ cups_read_client_conf(
+     struct stat       sockinfo;               /* Domain socket information */
+     if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) &&
+-      (sockinfo.st_mode & S_IRWXO) == S_IRWXO)
++      (sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH))
+       cups_server = CUPS_DEFAULT_DOMAINSOCKET;
+     else
+ #endif /* CUPS_DEFAULT_DOMAINSOCKET */
+diff -up cups-1.6b1/data/cups.path.in.systemd-socket cups-1.6b1/data/cups.path.in
+--- cups-1.6b1/data/cups.path.in.systemd-socket        2012-05-28 11:16:35.659250570 +0200
++++ cups-1.6b1/data/cups.path.in       2012-05-28 11:16:35.659250570 +0200
+@@ -0,0 +1,8 @@
++[Unit]
++Description=CUPS Printer Service Spool
++
++[Path]
++PathExistsGlob=@CUPS_REQUESTS@/d*
++
++[Install]
++WantedBy=multi-user.target
+diff -up cups-1.6b1/data/cups.service.in.systemd-socket cups-1.6b1/data/cups.service.in
+--- cups-1.6b1/data/cups.service.in.systemd-socket     2012-05-28 11:16:35.659250570 +0200
++++ cups-1.6b1/data/cups.service.in    2012-05-28 11:16:35.659250570 +0200
+@@ -0,0 +1,10 @@
++[Unit]
++Description=CUPS Printing Service
++
++[Service]
++ExecStart=@sbindir@/cupsd -f
++PrivateTmp=true
++
++[Install]
++Also=cups.socket cups.path
++WantedBy=printer.target
+diff -up cups-1.6b1/data/cups.socket.in.systemd-socket cups-1.6b1/data/cups.socket.in
+--- cups-1.6b1/data/cups.socket.in.systemd-socket      2012-05-28 11:16:35.660250563 +0200
++++ cups-1.6b1/data/cups.socket.in     2012-05-28 11:16:35.660250563 +0200
+@@ -0,0 +1,8 @@
++[Unit]
++Description=CUPS Printing Service Sockets
++
++[Socket]
++ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@
++
++[Install]
++WantedBy=sockets.target
+diff -up cups-1.6b1/data/Makefile.systemd-socket cups-1.6b1/data/Makefile
+--- cups-1.6b1/data/Makefile.systemd-socket    2011-08-27 11:23:01.000000000 +0200
++++ cups-1.6b1/data/Makefile   2012-05-28 11:16:35.660250563 +0200
+@@ -100,6 +100,12 @@ install-data:
+               $(INSTALL_DATA) $$file $(DATADIR)/ppdc; \
+       done
+       $(INSTALL_DIR) -m 755 $(DATADIR)/profiles
++      if test "x$(SYSTEMD_UNITS)" != "x" ; then \
++              $(INSTALL_DIR) -m 755 $(SYSTEMDUNITDIR); \
++              for file in $(SYSTEMD_UNITS); do \
++                      $(INSTALL_DATA) $$file $(SYSTEMDUNITDIR); \
++              done; \
++      fi
+ #
+@@ -143,6 +149,9 @@ uninstall:
+       -$(RMDIR) $(DATADIR)/data
+       -$(RMDIR) $(DATADIR)/banners
+       -$(RMDIR) $(DATADIR)
++      for file in $(SYSTEMD_UNITS); do \
++              $(RM) $(SYSTEMDUNITDIR)/$$file; \
++      done
+ #
+diff -up cups-1.6b1/Makedefs.in.systemd-socket cups-1.6b1/Makedefs.in
+--- cups-1.6b1/Makedefs.in.systemd-socket      2012-05-28 11:16:35.648250647 +0200
++++ cups-1.6b1/Makedefs.in     2012-05-28 11:16:35.660250563 +0200
+@@ -134,11 +134,13 @@ CXXFLAGS =       @CPPFLAGS@ @CXXFLAGS@
+ CXXLIBS               =       @CXXLIBS@
+ DBUS_NOTIFIER =       @DBUS_NOTIFIER@
+ DBUS_NOTIFIERLIBS =   @DBUS_NOTIFIERLIBS@
++SYSTEMD_UNITS   =       @SYSTEMD_UNITS@
+ DNSSD_BACKEND =       @DNSSD_BACKEND@
+ DSOFLAGS      =       -L../cups @DSOFLAGS@
+ DSOLIBS               =       @DSOLIBS@ $(COMMONLIBS)
+ DNSSDLIBS     =       @DNSSDLIBS@
+ LAUNCHDLIBS   =       @LAUNCHDLIBS@
++SDLIBS                =       @SDLIBS@
+ LDFLAGS               =       -L../cgi-bin -L../cups -L../filter -L../ppdc \
+                       -L../scheduler @LDARCHFLAGS@ \
+                       @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
+@@ -229,6 +231,7 @@ PAMFILE            =       @PAMFILE@
+ DEFAULT_LAUNCHD_CONF =        @DEFAULT_LAUNCHD_CONF@
+ DBUSDIR               =       @DBUSDIR@
++SYSTEMDUNITDIR  =       $(BUILDROOT)@systemdsystemunitdir@
+ #
+diff -up cups-1.6b1/scheduler/client.h.systemd-socket cups-1.6b1/scheduler/client.h
+--- cups-1.6b1/scheduler/client.h.systemd-socket       2012-03-22 21:30:20.000000000 +0100
++++ cups-1.6b1/scheduler/client.h      2012-05-28 11:16:35.661250556 +0200
+@@ -77,6 +77,9 @@ typedef struct
+   int                 fd;             /* File descriptor for this server */
+   http_addr_t         address;        /* Bind address of socket */
+   http_encryption_t   encryption;     /* To encrypt or not to encrypt... */
++#ifdef HAVE_SYSTEMD
++  int                 is_systemd;     /* Is this a systemd socket? */
++#endif /* HAVE_SYSTEMD */
+ } cupsd_listener_t;
+diff -up cups-1.6b1/scheduler/listen.c.systemd-socket cups-1.6b1/scheduler/listen.c
+--- cups-1.6b1/scheduler/listen.c.systemd-socket       2011-04-16 01:38:13.000000000 +0200
++++ cups-1.6b1/scheduler/listen.c      2012-05-28 11:16:35.661250556 +0200
+@@ -401,7 +401,11 @@ cupsdStopListening(void)
+        lis;
+        lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
+   {
+-    if (lis->fd != -1)
++    if (lis->fd != -1
++#ifdef HAVE_SYSTEMD
++        && !lis->is_systemd
++#endif /* HAVE_SYSTEMD */
++        )
+     {
+ #ifdef WIN32
+       closesocket(lis->fd);
+diff -up cups-1.6b1/scheduler/main.c.systemd-socket cups-1.6b1/scheduler/main.c
+--- cups-1.6b1/scheduler/main.c.systemd-socket 2012-05-28 11:16:35.612250897 +0200
++++ cups-1.6b1/scheduler/main.c        2012-05-28 12:49:32.698375139 +0200
+@@ -26,6 +26,8 @@
+  *   launchd_checkin()     - Check-in with launchd and collect the listening
+  *                           fds.
+  *   launchd_checkout()    - Update the launchd KeepAlive file as needed.
++ *   systemd_checkin()     - Check-in with systemd and collect the
++ *                           listening fds.
+  *   parent_handler()      - Catch USR1/CHLD signals...
+  *   process_children()    - Process all dead children...
+  *   select_timeout()      - Calculate the select timeout value.
+@@ -62,6 +64,10 @@
+ #  endif /* !LAUNCH_JOBKEY_SERVICEIPC */
+ #endif /* HAVE_LAUNCH_H */
++#ifdef HAVE_SYSTEMD
++#include <systemd/sd-daemon.h>
++#endif /* HAVE_SYSTEMD */
++
+ #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
+ #  include <malloc.h>
+ #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
+@@ -78,6 +84,9 @@
+ static void           launchd_checkin(void);
+ static void           launchd_checkout(void);
+ #endif /* HAVE_LAUNCHD */
++#ifdef HAVE_SYSTEMD
++static void           systemd_checkin(void);
++#endif /* HAVE_SYSTEMD */
+ static void           parent_handler(int sig);
+ static void           process_children(void);
+ static void           sigchld_handler(int sig);
+@@ -528,6 +537,13 @@ main(int  argc,                           /* I - Number of comm
+   }
+ #endif /* HAVE_LAUNCHD */
++#ifdef HAVE_SYSTEMD
++ /*
++  * If we were started by systemd get the listen sockets file descriptors...
++  */
++  systemd_checkin();
++#endif /* HAVE_SYSTEMD */
++
+  /*
+   * Startup the server...
+   */
+@@ -738,6 +754,15 @@ main(int  argc,                           /* I - Number of comm
+       }
+ #endif /* HAVE_LAUNCHD */
++#ifdef HAVE_SYSTEMD
++       /*
++      * If we were started by systemd get the listen sockets file
++      * descriptors...
++        */
++
++        systemd_checkin();
++#endif /* HAVE_SYSTEMD */
++
+        /*
+         * Startup the server...
+         */
+@@ -1516,6 +1541,102 @@ launchd_checkout(void)
+ }
+ #endif /* HAVE_LAUNCHD */
++#ifdef HAVE_SYSTEMD
++static void
++systemd_checkin(void)
++{
++  int n, fd;
++
++  n = sd_listen_fds(0);
++  if (n < 0)
++  {
++    cupsdLogMessage(CUPSD_LOG_ERROR,
++           "systemd_checkin: Failed to acquire sockets from systemd - %s",
++           strerror(-n));
++    exit(EXIT_FAILURE);
++    return;
++  }
++
++  if (n == 0)
++    return;
++
++  for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++)
++  {
++    http_addr_t addr;
++    socklen_t addrlen = sizeof (addr);
++    int r;
++    cupsd_listener_t *lis;
++    char s[256];
++
++    r = sd_is_socket(fd, AF_UNSPEC, SOCK_STREAM, 1);
++    if (r < 0)
++    {
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++             "systemd_checkin: Unable to verify socket type - %s",
++             strerror(-r));
++      continue;
++    }
++
++    if (!r)
++    {
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++             "systemd_checkin: Socket not of the right type");
++      continue;
++    }
++
++    if (getsockname(fd, (struct sockaddr*) &addr, &addrlen))
++    {
++      cupsdLogMessage(CUPSD_LOG_ERROR,
++             "systemd_checkin: Unable to get local address - %s",
++             strerror(errno));
++      continue;
++    }
++
++   /*
++    * Try to match the systemd socket address to one of the listeners...
++    */
++
++    for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
++       lis;
++       lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
++      if (httpAddrEqual(&lis->address, &addr))
++      break;
++
++    if (lis)
++    {
++      cupsdLogMessage(CUPSD_LOG_DEBUG,
++                      "systemd_checkin: Matched existing listener %s with fd %d...",
++                      httpAddrString(&(lis->address), s, sizeof(s)), fd);
++    }
++    else
++    {
++      cupsdLogMessage(CUPSD_LOG_DEBUG,
++                      "systemd_checkin: Adding new listener %s with fd %d...",
++                      httpAddrString(&addr, s, sizeof(s)), fd);
++
++      if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL)
++      {
++        cupsdLogMessage(CUPSD_LOG_ERROR,
++                        "systemd_checkin: Unable to allocate listener - "
++                        "%s.", strerror(errno));
++        exit(EXIT_FAILURE);
++      }
++
++      cupsArrayAdd(Listeners, lis);
++
++      memcpy(&lis->address, &addr, sizeof(lis->address));
++    }
++
++    lis->fd = fd;
++    lis->is_systemd = 1;
++
++#  ifdef HAVE_SSL
++    if (_httpAddrPort(&(lis->address)) == 443)
++      lis->encryption = HTTP_ENCRYPT_ALWAYS;
++#  endif /* HAVE_SSL */
++  }
++}
++#endif /* HAVE_SYSTEMD */
+ /*
+  * 'parent_handler()' - Catch USR1/CHLD signals...
+diff -up cups-1.6b1/scheduler/Makefile.systemd-socket cups-1.6b1/scheduler/Makefile
+--- cups-1.6b1/scheduler/Makefile.systemd-socket       2012-05-21 19:40:22.000000000 +0200
++++ cups-1.6b1/scheduler/Makefile      2012-05-28 11:16:35.663250542 +0200
+@@ -371,7 +371,7 @@ cupsd:     $(CUPSDOBJS) $(LIBCUPSMIME) ../cu
+       $(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
+               $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
+               $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \
+-              $(LIBGSSAPI) $(LIBWRAP)
++              $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS)
+ cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
+       echo Linking $@...
+@@ -379,7 +379,7 @@ cupsd-static:      $(CUPSDOBJS) libcupsmime.a
+               $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
+               ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
+               $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \
+-              $(LIBWRAP)
++              $(LIBWRAP)  $(SDLIBS)
+ tls.o:        tls-darwin.c tls-gnutls.c tls-openssl.c
similarity index 62%
rename from cups/patches/cups-x-lspp.patch
rename to cups/patches/026_cups-lspp.patch
index 380b55d02d54fa537d7b5cf40d38d4844259f3d8..d81ef06534ffbe1e43b6b2823d272f8ae760c59c 100644 (file)
@@ -1,9 +1,9 @@
-diff -up cups-1.4.5/config.h.in.lspp cups-1.4.5/config.h.in
---- cups-1.4.5/config.h.in.lspp        2010-12-24 13:21:31.134859403 +0000
-+++ cups-1.4.5/config.h.in     2010-12-24 13:21:31.173858387 +0000
-@@ -672,6 +672,12 @@
- #undef HAVE_SYS_STATVFS_H
- #undef HAVE_SYS_VFS_H
+diff -up cups-1.6b1/config.h.in.lspp cups-1.6b1/config.h.in
+--- cups-1.6b1/config.h.in.lspp        2012-05-25 17:01:32.000000000 +0200
++++ cups-1.6b1/config.h.in     2012-05-25 17:03:16.889043298 +0200
+@@ -768,6 +768,13 @@ static __inline int _cups_abs(int i) { r
+ #  endif /* __GNUC__ || __STDC_VERSION__ */
+ #endif /* !HAVE_ABS && !abs */
  
 +/*
 + * Are we trying to meet LSPP requirements?
@@ -11,12 +11,13 @@ diff -up cups-1.4.5/config.h.in.lspp cups-1.4.5/config.h.in
 +
 +#undef WITH_LSPP
 +
++
  #endif /* !_CUPS_CONFIG_H_ */
  
-diff -up cups-1.4.5/config-scripts/cups-lspp.m4.lspp cups-1.4.5/config-scripts/cups-lspp.m4
---- cups-1.4.5/config-scripts/cups-lspp.m4.lspp        2010-12-24 13:21:31.174858361 +0000
-+++ cups-1.4.5/config-scripts/cups-lspp.m4     2010-12-24 13:21:31.174858361 +0000
+ /*
+diff -up cups-1.6b1/config-scripts/cups-lspp.m4.lspp cups-1.6b1/config-scripts/cups-lspp.m4
+--- cups-1.6b1/config-scripts/cups-lspp.m4.lspp        2012-05-25 17:01:32.852768495 +0200
++++ cups-1.6b1/config-scripts/cups-lspp.m4     2012-05-25 17:01:32.853768488 +0200
 @@ -0,0 +1,36 @@
 +dnl
 +dnl   LSPP code for the Common UNIX Printing System (CUPS).
@@ -54,11 +55,11 @@ diff -up cups-1.4.5/config-scripts/cups-lspp.m4.lspp cups-1.4.5/config-scripts/c
 +            ;;
 +    esac
 +fi
-diff -up cups-1.4.5/configure.in.lspp cups-1.4.5/configure.in
---- cups-1.4.5/configure.in.lspp       2010-06-22 22:42:44.000000000 +0100
-+++ cups-1.4.5/configure.in    2010-12-24 13:21:31.174858362 +0000
-@@ -42,6 +42,8 @@ sinclude(config-scripts/cups-pap.m4)
- sinclude(config-scripts/cups-pdf.m4)
+diff -up cups-1.6b1/configure.in.lspp cups-1.6b1/configure.in
+--- cups-1.6b1/configure.in.lspp       2012-05-25 17:01:32.000000000 +0200
++++ cups-1.6b1/configure.in    2012-05-25 17:04:03.994714943 +0200
+@@ -37,6 +37,8 @@ sinclude(config-scripts/cups-systemd.m4)
+ sinclude(config-scripts/cups-defaults.m4)
  sinclude(config-scripts/cups-scripting.m4)
  
 +sinclude(config-scripts/cups-lspp.m4)
@@ -66,845 +67,9 @@ diff -up cups-1.4.5/configure.in.lspp cups-1.4.5/configure.in
  INSTALL_LANGUAGES=""
  UNINSTALL_LANGUAGES=""
  LANGFILES=""
-diff -up cups-1.4.5/cups/cups.h.lspp cups-1.4.5/cups/cups.h
---- cups-1.4.5/cups/cups.h.lspp        2010-06-22 04:18:27.000000000 +0100
-+++ cups-1.4.5/cups/cups.h     2010-12-24 13:21:31.176858307 +0000
-@@ -15,6 +15,9 @@
-  *   This file is subject to the Apple OS-Developed Software exception.
-  */
-+/* Copyright (C) 2005 Trusted Computer Solutions, Inc. */
-+/* (c) Copyright 2005-2006 Hewlett-Packard Development Company, L.P. */
-+
- #ifndef _CUPS_CUPS_H_
- #  define _CUPS_CUPS_H_
-@@ -86,6 +89,12 @@ extern "C" {
- #  define CUPS_WHICHJOBS_COMPLETED 1
-+# ifdef WITH_LSPP
-+# define MLS_CONFIG "mls"
-+# define TE_CONFIG "te"
-+# define SELINUX_CONFIG "SELinux"
-+# define UNKNOWN_SL "UNKNOWN SL"
-+# endif /* WITH_LSPP */
- /*
-  * Types and structures...
-  */
-diff -up cups-1.4.5/data/Makefile.lspp cups-1.4.5/data/Makefile
---- cups-1.4.5/data/Makefile.lspp      2008-11-12 19:30:57.000000000 +0000
-+++ cups-1.4.5/data/Makefile   2010-12-24 13:21:31.177858282 +0000
-@@ -25,7 +25,10 @@ BANNERS     =       \
-               secret \
-               standard \
-               topsecret \
--              unclassified
-+              unclassified \
-+              selinux \
-+              mls \
-+              te
- CHARMAPS =    \
-               euc-cn.txt \
-diff -up cups-1.4.5/data/mls.lspp cups-1.4.5/data/mls
---- cups-1.4.5/data/mls.lspp   2010-12-24 13:21:31.177858282 +0000
-+++ cups-1.4.5/data/mls        2010-12-24 13:21:31.178858258 +0000
-@@ -0,0 +1,261 @@
-+%!PS-Adobe-3.0
-+%%BoundingBox: 0 0 612 792
-+%%Pages: 1
-+%%LanguageLevel: 1
-+%%DocumentData: Clean7Bit
-+%%DocumentSuppliedResources: procset bannerprint/1.0
-+%%DocumentNeededResources: font Helvetica Helvetica-Bold Times-Roman
-+%%Creator: Michael Sweet, Easy Software Products
-+%%CreationDate: May 10, 2000
-+%%Title: Test Page
-+%%EndComments
-+%%BeginProlog
-+%%BeginResource procset bannerprint 1.1 0
-+%
-+%   PostScript banner page for the Common UNIX Printing System ("CUPS").
-+%
-+%   Copyright 1993-2005 by Easy Software Products
-+%
-+%   These coded instructions, statements, and computer programs are the
-+%   property of Easy Software Products and are protected by Federal
-+%   copyright law.  Distribution and use rights are outlined in the file
-+%   "LICENSE.txt" which should have been included with this file.  If this
-+%   file is missing or damaged please contact Easy Software Products
-+%   at:
-+%
-+%       Attn: CUPS Licensing Information
-+%       Easy Software Products
-+%       44141 Airport View Drive, Suite 204
-+%       Hollywood, Maryland 20636 USA
-+%
-+%       Voice: (301) 373-9600
-+%       EMail: cups-info@cups.org
-+%         WWW: http://www.cups.org
-+%
-+/CENTER {                     % Draw centered text
-+                              % (name) CENTER -
-+  dup stringwidth pop         % Get the width of the string
-+  0.5 mul neg 0 rmoveto               % Shift left 1/2 of the distance
-+  show                                % Show the string
-+} bind def
-+/RIGHT {                      % Draw right-justified text
-+                              % (name) RIGHT -
-+  dup stringwidth pop         % Get the width of the string
-+  neg 0 rmoveto                       % Shift left the entire distance
-+  show                                % Show the string
-+} bind def
-+/NUMBER {                     % Draw a number
-+                              % power n NUMBER -
-+  1 index 1 eq {              % power == 1?
-+    round cvi exch pop                % Convert "n" to integer
-+  } {
-+    1 index mul round exch div        % Truncate extra decimal places
-+  } ifelse
-+  100 string cvs show         % Convert to a string and show it...
-+} bind def
-+/CUPSLOGO {                   % Draw the CUPS logo
-+                              % height CUPSLOGO
-+  % Start with a big C...
-+  /Helvetica findfont 1 index scalefont setfont
-+  0 setgray
-+  0 0 moveto
-+  (C) show
-+
-+  % Then "UNIX Printing System" much smaller...
-+  /Helvetica-Bold findfont 1 index 9 div scalefont setfont
-+  0.25 mul
-+  dup dup 2.0 mul moveto
-+  (UNIX) show
-+  dup dup 1.6 mul moveto
-+  (Printing) show
-+  dup 1.2 mul moveto
-+  (System) show
-+} bind def
-+/ESPLOGO {                    % Draw the ESP logo
-+                              % height ESPLOGO
-+  % Compute the size of the logo...
-+  0 0
-+  2 index 1.5 mul 3 index
-+
-+  % Do the "metallic" fill from 10% black to 40% black...
-+  1 -0.001 0 {
-+    dup                       % loopval
-+    -0.15 mul         % loopval * -0.15
-+    0.9 add           % 0.9 - loopval * 0.15
-+    setgray           % set gray shade
-+
-+    0                 % x
-+    1 index neg               % loopval
-+    1 add             % 1 - loopval
-+    3 index           % height
-+    mul                       % height * (1 - loopval)
-+    moveto            % starting point
-+
-+    dup                       % loopval
-+    3 index           % width
-+    mul                       % loopval * width
-+    2 index           % height
-+    lineto            % Next point
-+
-+    0                 % x
-+    2 index           % height
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+
-+    dup                       % loopval
-+    0.15 mul          % loopval * 0.15
-+    0.6 add           % 0.6 + loopval * 0.15
-+    setgray
-+
-+    dup                       % loopval
-+    neg 1 add         % 1 - loopval
-+    3 index           % width
-+    mul                       % (1 - loopval) * width
-+    0                 % y
-+    moveto            % Starting point
-+
-+    2 index           % width
-+    exch              % loopval
-+    2 index           % height
-+    mul                       % loopval * height
-+    lineto            % Next point
-+
-+    1 index           % width
-+    0                 % y
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+  } for
-+
-+  0 setgray rectstroke
-+
-+  /Helvetica-BoldOblique findfont 1 index 3 div scalefont setfont
-+  dup 40 div
-+
-+  dup 4 mul 1 index 25 mul moveto (E) show
-+  dup 10 mul 1 index 15 mul moveto (S) show
-+  dup 16 mul 1 index 5 mul moveto (P) show
-+
-+  /Helvetica-BoldOblique findfont 2 index 5 div scalefont setfont
-+  dup 14 mul 1 index 29 mul moveto (asy) show
-+  dup 20 mul 1 index 19 mul moveto (oftware) show
-+  dup 26 mul 1 index 9 mul moveto (roducts) show
-+
-+  pop
-+} bind def
-+%%EndResource
-+%%EndProlog
-+%%Page: 1 1
-+gsave
-+
-+  % Determine the imageable area and device resolution...
-+  initclip newpath clippath pathbbox  % Get bounding rectangle
-+  72 div /pageTop exch def            % Get top margin in inches
-+  72 div /pageRight exch def          % Get right margin in inches
-+  72 div /pageBottom exch def         % Get bottom margin in inches
-+  72 div /pageLeft exch def           % Get left margin in inches
-+
-+  /pageWidth pageRight pageLeft sub def       % pageWidth = pageRight - pageLeft
-+  /pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
-+
-+  /boxWidth                           % width of text box
-+  pageWidth pageHeight lt
-+  { pageWidth 54 mul }
-+  { pageHeight 42 mul }
-+  ifelse def
-+
-+  newpath                             % Clear bounding path
-+
-+  % Create fonts...
-+  /bigFont /Helvetica-Bold findfont   % bigFont = Helvetica-Bold
-+  pageHeight 3 mul scalefont def      % size = pageHeight * 3 (nominally 33)
-+
-+  /mediumFont /Helvetica findfont     % mediumFont = Helvetica
-+  pageHeight 1.5 mul scalefont def    % size = pageHeight * 1.5 (nominally 16.5)
-+
-+  % Offset page to account for lower-left margin...
-+  pageLeft 72 mul
-+  pageBottom 72 mul
-+  translate
-+
-+  % Job information box...
-+  pageWidth 36 mul 9 add              % x = pageWidth * 1/2 * 72 + 9
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul 9 sub             % y = pageHeight * 1/2 * 72 - 9
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+  0.5 setgray rectfill                        % Draw a shadow
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul                   % y = pageHeight * 1/4 * 72
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+
-+  4 copy 1 setgray rectfill           % Clear the box to white
-+  0 setgray rectstroke                        % Draw a black box around it...
-+
-+  % Job information text...
-+  mediumFont setfont                  % Medium sized font
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 5 mul add                        % y += 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Job ID: ) RIGHT
-+  moveto
-+  ({printer-name}-{job-id}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 2 mul add                        % y += 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Title: ) RIGHT
-+  moveto
-+  ({job-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -1 mul add                       % y -= 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Requesting User: ) RIGHT
-+  moveto
-+  ({job-originating-user-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -4 mul add                       % y -= 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Billing Info: ) RIGHT
-+  moveto
-+  ({?job-billing}) show
-+
-+  % Then the CUPS logo....
-+  gsave
-+    pageWidth 4 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 9 mul CUPSLOGO
-+  grestore
-+
-+  % And the ESP logo....
-+  gsave
-+    pageWidth 59 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 6 mul ESPLOGO
-+  grestore
-+% Show the page...
-+grestore
-+showpage
-+%
-+% End of "$Id: mls_template,v 1.1 2005/06/27 18:44:46 colmo Exp $".
-+%
-+%%EOF
-diff -up cups-1.4.5/data/selinux.lspp cups-1.4.5/data/selinux
---- cups-1.4.5/data/selinux.lspp       2010-12-24 13:21:31.178858258 +0000
-+++ cups-1.4.5/data/selinux    2010-12-24 13:21:31.179858233 +0000
-@@ -0,0 +1,261 @@
-+%!PS-Adobe-3.0
-+%%BoundingBox: 0 0 612 792
-+%%Pages: 1
-+%%LanguageLevel: 1
-+%%DocumentData: Clean7Bit
-+%%DocumentSuppliedResources: procset bannerprint/1.0
-+%%DocumentNeededResources: font Helvetica Helvetica-Bold Times-Roman
-+%%Creator: Michael Sweet, Easy Software Products
-+%%CreationDate: May 10, 2000
-+%%Title: Test Page
-+%%EndComments
-+%%BeginProlog
-+%%BeginResource procset bannerprint 1.1 0
-+%
-+%   PostScript banner page for the Common UNIX Printing System ("CUPS").
-+%
-+%   Copyright 1993-2005 by Easy Software Products
-+%
-+%   These coded instructions, statements, and computer programs are the
-+%   property of Easy Software Products and are protected by Federal
-+%   copyright law.  Distribution and use rights are outlined in the file
-+%   "LICENSE.txt" which should have been included with this file.  If this
-+%   file is missing or damaged please contact Easy Software Products
-+%   at:
-+%
-+%       Attn: CUPS Licensing Information
-+%       Easy Software Products
-+%       44141 Airport View Drive, Suite 204
-+%       Hollywood, Maryland 20636 USA
-+%
-+%       Voice: (301) 373-9600
-+%       EMail: cups-info@cups.org
-+%         WWW: http://www.cups.org
-+%
-+/CENTER {                     % Draw centered text
-+                              % (name) CENTER -
-+  dup stringwidth pop         % Get the width of the string
-+  0.5 mul neg 0 rmoveto               % Shift left 1/2 of the distance
-+  show                                % Show the string
-+} bind def
-+/RIGHT {                      % Draw right-justified text
-+                              % (name) RIGHT -
-+  dup stringwidth pop         % Get the width of the string
-+  neg 0 rmoveto                       % Shift left the entire distance
-+  show                                % Show the string
-+} bind def
-+/NUMBER {                     % Draw a number
-+                              % power n NUMBER -
-+  1 index 1 eq {              % power == 1?
-+    round cvi exch pop                % Convert "n" to integer
-+  } {
-+    1 index mul round exch div        % Truncate extra decimal places
-+  } ifelse
-+  100 string cvs show         % Convert to a string and show it...
-+} bind def
-+/CUPSLOGO {                   % Draw the CUPS logo
-+                              % height CUPSLOGO
-+  % Start with a big C...
-+  /Helvetica findfont 1 index scalefont setfont
-+  0 setgray
-+  0 0 moveto
-+  (C) show
-+
-+  % Then "UNIX Printing System" much smaller...
-+  /Helvetica-Bold findfont 1 index 9 div scalefont setfont
-+  0.25 mul
-+  dup dup 2.0 mul moveto
-+  (UNIX) show
-+  dup dup 1.6 mul moveto
-+  (Printing) show
-+  dup 1.2 mul moveto
-+  (System) show
-+} bind def
-+/ESPLOGO {                    % Draw the ESP logo
-+                              % height ESPLOGO
-+  % Compute the size of the logo...
-+  0 0
-+  2 index 1.5 mul 3 index
-+
-+  % Do the "metallic" fill from 10% black to 40% black...
-+  1 -0.001 0 {
-+    dup                       % loopval
-+    -0.15 mul         % loopval * -0.15
-+    0.9 add           % 0.9 - loopval * 0.15
-+    setgray           % set gray shade
-+
-+    0                 % x
-+    1 index neg               % loopval
-+    1 add             % 1 - loopval
-+    3 index           % height
-+    mul                       % height * (1 - loopval)
-+    moveto            % starting point
-+
-+    dup                       % loopval
-+    3 index           % width
-+    mul                       % loopval * width
-+    2 index           % height
-+    lineto            % Next point
-+
-+    0                 % x
-+    2 index           % height
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+
-+    dup                       % loopval
-+    0.15 mul          % loopval * 0.15
-+    0.6 add           % 0.6 + loopval * 0.15
-+    setgray
-+
-+    dup                       % loopval
-+    neg 1 add         % 1 - loopval
-+    3 index           % width
-+    mul                       % (1 - loopval) * width
-+    0                 % y
-+    moveto            % Starting point
-+
-+    2 index           % width
-+    exch              % loopval
-+    2 index           % height
-+    mul                       % loopval * height
-+    lineto            % Next point
-+
-+    1 index           % width
-+    0                 % y
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+  } for
-+
-+  0 setgray rectstroke
-+
-+  /Helvetica-BoldOblique findfont 1 index 3 div scalefont setfont
-+  dup 40 div
-+
-+  dup 4 mul 1 index 25 mul moveto (E) show
-+  dup 10 mul 1 index 15 mul moveto (S) show
-+  dup 16 mul 1 index 5 mul moveto (P) show
-+
-+  /Helvetica-BoldOblique findfont 2 index 5 div scalefont setfont
-+  dup 14 mul 1 index 29 mul moveto (asy) show
-+  dup 20 mul 1 index 19 mul moveto (oftware) show
-+  dup 26 mul 1 index 9 mul moveto (roducts) show
-+
-+  pop
-+} bind def
-+%%EndResource
-+%%EndProlog
-+%%Page: 1 1
-+gsave
-+
-+  % Determine the imageable area and device resolution...
-+  initclip newpath clippath pathbbox  % Get bounding rectangle
-+  72 div /pageTop exch def            % Get top margin in inches
-+  72 div /pageRight exch def          % Get right margin in inches
-+  72 div /pageBottom exch def         % Get bottom margin in inches
-+  72 div /pageLeft exch def           % Get left margin in inches
-+
-+  /pageWidth pageRight pageLeft sub def       % pageWidth = pageRight - pageLeft
-+  /pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
-+
-+  /boxWidth                           % width of text box
-+  pageWidth pageHeight lt
-+  { pageWidth 54 mul }
-+  { pageHeight 42 mul }
-+  ifelse def
-+
-+  newpath                             % Clear bounding path
-+
-+  % Create fonts...
-+  /bigFont /Helvetica-Bold findfont   % bigFont = Helvetica-Bold
-+  pageHeight 3 mul scalefont def      % size = pageHeight * 3 (nominally 33)
-+
-+  /mediumFont /Helvetica findfont     % mediumFont = Helvetica
-+  pageHeight 1.5 mul scalefont def    % size = pageHeight * 1.5 (nominally 16.5)
-+
-+  % Offset page to account for lower-left margin...
-+  pageLeft 72 mul
-+  pageBottom 72 mul
-+  translate
-+
-+  % Job information box...
-+  pageWidth 36 mul 9 add              % x = pageWidth * 1/2 * 72 + 9
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul 9 sub             % y = pageHeight * 1/2 * 72 - 9
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+  0.5 setgray rectfill                        % Draw a shadow
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul                   % y = pageHeight * 1/4 * 72
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+
-+  4 copy 1 setgray rectfill           % Clear the box to white
-+  0 setgray rectstroke                        % Draw a black box around it...
-+
-+  % Job information text...
-+  mediumFont setfont                  % Medium sized font
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 5 mul add                        % y += 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Job ID: ) RIGHT
-+  moveto
-+  ({printer-name}-{job-id}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 2 mul add                        % y += 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Title: ) RIGHT
-+  moveto
-+  ({job-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -1 mul add                       % y -= 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Requesting User: ) RIGHT
-+  moveto
-+  ({job-originating-user-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -4 mul add                       % y -= 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Billing Info: ) RIGHT
-+  moveto
-+  ({?job-billing}) show
-+
-+  % Then the CUPS logo....
-+  gsave
-+    pageWidth 4 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 9 mul CUPSLOGO
-+  grestore
-+
-+  % And the ESP logo....
-+  gsave
-+    pageWidth 59 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 6 mul ESPLOGO
-+  grestore
-+% Show the page...
-+grestore
-+showpage
-+%
-+% End of "$Id: mls_template,v 1.1 2005/06/27 18:44:46 colmo Exp $".
-+%
-+%%EOF
-diff -up cups-1.4.5/data/te.lspp cups-1.4.5/data/te
---- cups-1.4.5/data/te.lspp    2010-12-24 13:21:31.179858233 +0000
-+++ cups-1.4.5/data/te 2010-12-24 13:21:31.180858207 +0000
-@@ -0,0 +1,261 @@
-+%!PS-Adobe-3.0
-+%%BoundingBox: 0 0 612 792
-+%%Pages: 1
-+%%LanguageLevel: 1
-+%%DocumentData: Clean7Bit
-+%%DocumentSuppliedResources: procset bannerprint/1.0
-+%%DocumentNeededResources: font Helvetica Helvetica-Bold Times-Roman
-+%%Creator: Michael Sweet, Easy Software Products
-+%%CreationDate: May 10, 2000
-+%%Title: Test Page
-+%%EndComments
-+%%BeginProlog
-+%%BeginResource procset bannerprint 1.1 0
-+%
-+%   PostScript banner page for the Common UNIX Printing System ("CUPS").
-+%
-+%   Copyright 1993-2005 by Easy Software Products
-+%
-+%   These coded instructions, statements, and computer programs are the
-+%   property of Easy Software Products and are protected by Federal
-+%   copyright law.  Distribution and use rights are outlined in the file
-+%   "LICENSE.txt" which should have been included with this file.  If this
-+%   file is missing or damaged please contact Easy Software Products
-+%   at:
-+%
-+%       Attn: CUPS Licensing Information
-+%       Easy Software Products
-+%       44141 Airport View Drive, Suite 204
-+%       Hollywood, Maryland 20636 USA
-+%
-+%       Voice: (301) 373-9600
-+%       EMail: cups-info@cups.org
-+%         WWW: http://www.cups.org
-+%
-+/CENTER {                     % Draw centered text
-+                              % (name) CENTER -
-+  dup stringwidth pop         % Get the width of the string
-+  0.5 mul neg 0 rmoveto               % Shift left 1/2 of the distance
-+  show                                % Show the string
-+} bind def
-+/RIGHT {                      % Draw right-justified text
-+                              % (name) RIGHT -
-+  dup stringwidth pop         % Get the width of the string
-+  neg 0 rmoveto                       % Shift left the entire distance
-+  show                                % Show the string
-+} bind def
-+/NUMBER {                     % Draw a number
-+                              % power n NUMBER -
-+  1 index 1 eq {              % power == 1?
-+    round cvi exch pop                % Convert "n" to integer
-+  } {
-+    1 index mul round exch div        % Truncate extra decimal places
-+  } ifelse
-+  100 string cvs show         % Convert to a string and show it...
-+} bind def
-+/CUPSLOGO {                   % Draw the CUPS logo
-+                              % height CUPSLOGO
-+  % Start with a big C...
-+  /Helvetica findfont 1 index scalefont setfont
-+  0 setgray
-+  0 0 moveto
-+  (C) show
-+
-+  % Then "UNIX Printing System" much smaller...
-+  /Helvetica-Bold findfont 1 index 9 div scalefont setfont
-+  0.25 mul
-+  dup dup 2.0 mul moveto
-+  (UNIX) show
-+  dup dup 1.6 mul moveto
-+  (Printing) show
-+  dup 1.2 mul moveto
-+  (System) show
-+} bind def
-+/ESPLOGO {                    % Draw the ESP logo
-+                              % height ESPLOGO
-+  % Compute the size of the logo...
-+  0 0
-+  2 index 1.5 mul 3 index
-+
-+  % Do the "metallic" fill from 10% black to 40% black...
-+  1 -0.001 0 {
-+    dup                       % loopval
-+    -0.15 mul         % loopval * -0.15
-+    0.9 add           % 0.9 - loopval * 0.15
-+    setgray           % set gray shade
-+
-+    0                 % x
-+    1 index neg               % loopval
-+    1 add             % 1 - loopval
-+    3 index           % height
-+    mul                       % height * (1 - loopval)
-+    moveto            % starting point
-+
-+    dup                       % loopval
-+    3 index           % width
-+    mul                       % loopval * width
-+    2 index           % height
-+    lineto            % Next point
-+
-+    0                 % x
-+    2 index           % height
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+
-+    dup                       % loopval
-+    0.15 mul          % loopval * 0.15
-+    0.6 add           % 0.6 + loopval * 0.15
-+    setgray
-+
-+    dup                       % loopval
-+    neg 1 add         % 1 - loopval
-+    3 index           % width
-+    mul                       % (1 - loopval) * width
-+    0                 % y
-+    moveto            % Starting point
-+
-+    2 index           % width
-+    exch              % loopval
-+    2 index           % height
-+    mul                       % loopval * height
-+    lineto            % Next point
-+
-+    1 index           % width
-+    0                 % y
-+    lineto            % Next point
-+
-+    closepath
-+    fill
-+  } for
-+
-+  0 setgray rectstroke
-+
-+  /Helvetica-BoldOblique findfont 1 index 3 div scalefont setfont
-+  dup 40 div
-+
-+  dup 4 mul 1 index 25 mul moveto (E) show
-+  dup 10 mul 1 index 15 mul moveto (S) show
-+  dup 16 mul 1 index 5 mul moveto (P) show
-+
-+  /Helvetica-BoldOblique findfont 2 index 5 div scalefont setfont
-+  dup 14 mul 1 index 29 mul moveto (asy) show
-+  dup 20 mul 1 index 19 mul moveto (oftware) show
-+  dup 26 mul 1 index 9 mul moveto (roducts) show
-+
-+  pop
-+} bind def
-+%%EndResource
-+%%EndProlog
-+%%Page: 1 1
-+gsave
-+
-+  % Determine the imageable area and device resolution...
-+  initclip newpath clippath pathbbox  % Get bounding rectangle
-+  72 div /pageTop exch def            % Get top margin in inches
-+  72 div /pageRight exch def          % Get right margin in inches
-+  72 div /pageBottom exch def         % Get bottom margin in inches
-+  72 div /pageLeft exch def           % Get left margin in inches
-+
-+  /pageWidth pageRight pageLeft sub def       % pageWidth = pageRight - pageLeft
-+  /pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
-+
-+  /boxWidth                           % width of text box
-+  pageWidth pageHeight lt
-+  { pageWidth 54 mul }
-+  { pageHeight 42 mul }
-+  ifelse def
-+
-+  newpath                             % Clear bounding path
-+
-+  % Create fonts...
-+  /bigFont /Helvetica-Bold findfont   % bigFont = Helvetica-Bold
-+  pageHeight 3 mul scalefont def      % size = pageHeight * 3 (nominally 33)
-+
-+  /mediumFont /Helvetica findfont     % mediumFont = Helvetica
-+  pageHeight 1.5 mul scalefont def    % size = pageHeight * 1.5 (nominally 16.5)
-+
-+  % Offset page to account for lower-left margin...
-+  pageLeft 72 mul
-+  pageBottom 72 mul
-+  translate
-+
-+  % Job information box...
-+  pageWidth 36 mul 9 add              % x = pageWidth * 1/2 * 72 + 9
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul 9 sub             % y = pageHeight * 1/2 * 72 - 9
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+  0.5 setgray rectfill                        % Draw a shadow
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  boxWidth 0.5 mul sub                        % x-= 1/2 box width
-+  pageHeight 30 mul                   % y = pageHeight * 1/4 * 72
-+  boxWidth                            % w = box width
-+  pageHeight 14 mul                   % h = pageHeight * 1/2 * 72
-+
-+  4 copy 1 setgray rectfill           % Clear the box to white
-+  0 setgray rectstroke                        % Draw a black box around it...
-+
-+  % Job information text...
-+  mediumFont setfont                  % Medium sized font
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 5 mul add                        % y += 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Job ID: ) RIGHT
-+  moveto
-+  ({printer-name}-{job-id}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight 2 mul add                        % y += 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Title: ) RIGHT
-+  moveto
-+  ({job-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -1 mul add                       % y -= 1 line
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Requesting User: ) RIGHT
-+  moveto
-+  ({job-originating-user-name}) show
-+
-+  pageWidth 36 mul                    % x = pageWidth * 1/2 * 72
-+  pageHeight 36 mul                   % y = pageHeight * 1/2 * 72
-+  pageHeight -4 mul add                       % y -= 2 lines
-+  2 copy                              % Copy X & Y
-+  moveto
-+  (Billing Info: ) RIGHT
-+  moveto
-+  ({?job-billing}) show
-+
-+  % Then the CUPS logo....
-+  gsave
-+    pageWidth 4 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 9 mul CUPSLOGO
-+  grestore
-+
-+  % And the ESP logo....
-+  gsave
-+    pageWidth 59 mul
-+    pageWidth 6 mul
-+    translate
-+    pageWidth 6 mul ESPLOGO
-+  grestore
-+% Show the page...
-+grestore
-+showpage
-+%
-+% End of "$Id: mls_template,v 1.1 2005/06/27 18:44:46 colmo Exp $".
-+%
-+%%EOF
-diff -up cups-1.4.5/filter/common.c.lspp cups-1.4.5/filter/common.c
---- cups-1.4.5/filter/common.c.lspp    2007-07-11 22:46:42.000000000 +0100
-+++ cups-1.4.5/filter/common.c 2010-12-24 13:21:31.181858180 +0000
+diff -up cups-1.6b1/filter/common.c.lspp cups-1.6b1/filter/common.c
+--- cups-1.6b1/filter/common.c.lspp    2011-05-20 05:49:49.000000000 +0200
++++ cups-1.6b1/filter/common.c 2012-05-25 17:01:32.854768481 +0200
 @@ -30,6 +30,12 @@
   * Include necessary headers...
   */
@@ -957,7 +122,7 @@ diff -up cups-1.4.5/filter/common.c.lspp cups-1.4.5/filter/common.c
 +    {
 +      lines = 1 + (int)(label_len / max_width);
 +      line_len = (int)(label_len / lines);
-+      wrapped_label = malloc(sizeof(wrapped_label) * lines);
++      wrapped_label = malloc(sizeof(*wrapped_label) * lines);
 +      label_index = i = n = 0;
 +      while (classification[label_index])
 +      {
@@ -989,7 +154,7 @@ diff -up cups-1.4.5/filter/common.c.lspp cups-1.4.5/filter/common.c
 +    else
 +    {
 +      lines = 1;
-+      wrapped_label = malloc(sizeof(wrapped_label));
++      wrapped_label = malloc(sizeof(*wrapped_label));
 +      wrapped_label[0] = (char*)classification;
 +    }
 +
@@ -1073,10 +238,10 @@ diff -up cups-1.4.5/filter/common.c.lspp cups-1.4.5/filter/common.c
  
  
  /*
-diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
---- cups-1.4.5/filter/pstops.c.lspp    2010-12-24 13:21:30.960863932 +0000
-+++ cups-1.4.5/filter/pstops.c 2010-12-24 13:21:31.186858049 +0000
-@@ -3335,6 +3335,18 @@ write_label_prolog(pstops_doc_t *doc,   /*
+diff -up cups-1.6b1/filter/pstops.c.lspp cups-1.6b1/filter/pstops.c
+--- cups-1.6b1/filter/pstops.c.lspp    2012-04-23 21:19:19.000000000 +0200
++++ cups-1.6b1/filter/pstops.c 2012-05-25 17:01:32.855768474 +0200
+@@ -3202,6 +3202,18 @@ write_label_prolog(pstops_doc_t *doc,   /*
  {
    const char  *classification;        /* CLASSIFICATION environment variable */
    const char  *ptr;                   /* Temporary string pointer */
@@ -1095,7 +260,7 @@ diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
  
  
   /*
-@@ -3357,6 +3369,124 @@ write_label_prolog(pstops_doc_t *doc,  /*
+@@ -3224,6 +3236,124 @@ write_label_prolog(pstops_doc_t *doc,  /*
      return;
    }
  
@@ -1115,7 +280,7 @@ diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
 +    {
 +      lines = 1 + (int)(label_len / max_width);
 +      line_len = (int)(label_len / lines);
-+      wrapped_label = malloc(sizeof(wrapped_label) * lines);
++      wrapped_label = malloc(sizeof(*wrapped_label) * lines);
 +      label_index = i = n = 0;
 +      while (classification[label_index])
 +      {
@@ -1147,7 +312,7 @@ diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
 +    else
 +    {
 +      lines = 1;
-+      wrapped_label = malloc(sizeof(wrapped_label));
++      wrapped_label = malloc(sizeof(*wrapped_label));
 +      wrapped_label[0] = (char*)classification;
 +    }
 +
@@ -1220,7 +385,7 @@ diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
   /*
    * Set the classification + page label string...
    */
-@@ -3435,7 +3565,10 @@ write_label_prolog(pstops_doc_t *doc,   /*
+@@ -3302,7 +3432,10 @@ write_label_prolog(pstops_doc_t *doc,   /*
    doc_printf(doc, "  %.0f moveto ESPpl show\n", top - 14.0);
    doc_puts(doc, "pop\n");
    doc_puts(doc, "}bind put\n");
@@ -1231,47 +396,35 @@ diff -up cups-1.4.5/filter/pstops.c.lspp cups-1.4.5/filter/pstops.c
  
  
  /*
-diff -up cups-1.4.5/Makedefs.in.lspp cups-1.4.5/Makedefs.in
---- cups-1.4.5/Makedefs.in.lspp        2010-12-24 13:21:31.073860989 +0000
-+++ cups-1.4.5/Makedefs.in     2010-12-24 13:21:31.187858023 +0000
-@@ -146,7 +146,7 @@ LIBCUPSORDER       =       @LIBCUPSORDER@
- LIBCUPSIMAGEORDER =   @LIBCUPSIMAGEORDER@
- LINKCUPS      =       @LINKCUPS@ $(SSLLIBS) $(DNSSDLIBS)
+diff -up cups-1.6b1/Makedefs.in.lspp cups-1.6b1/Makedefs.in
+--- cups-1.6b1/Makedefs.in.lspp        2012-05-25 17:01:32.000000000 +0200
++++ cups-1.6b1/Makedefs.in     2012-05-25 17:07:57.325088484 +0200
+@@ -146,7 +146,7 @@ LDFLAGS            =       -L../cgi-bin -L../cups -L../f
+                       @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
+ LINKCUPS      =       @LINKCUPS@ $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(LIBZ)
  LINKCUPSIMAGE =       @LINKCUPSIMAGE@
 -LIBS          =       $(LINKCUPS) $(COMMONLIBS)
 +LIBS          =       $(LINKCUPS) $(COMMONLIBS) @LIBAUDIT@ @LIBSELINUX@
  OPTIM         =       @OPTIM@
  OPTIONS               =
  PAMLIBS               =       @PAMLIBS@
-@@ -258,7 +258,7 @@ DBUSDIR            =       @DBUSDIR@
- # Rules...
- #
--.SILENT:
-+
- .SUFFIXES:    .1 .1.gz .1m .1m.gz .3 .3.gz .5 .5.gz .7 .7.gz .8 .8.gz .a .c .cxx .h .man .o .32.o .64.o .gz
- .c.o:
-diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
---- cups-1.4.5/scheduler/client.c.lspp 2010-10-17 05:13:56.000000000 +0100
-+++ cups-1.4.5/scheduler/client.c      2010-12-24 13:21:31.194857839 +0000
-@@ -44,6 +44,7 @@
-  *   valid_host()           - Is the Host: field valid?
-  *   write_file()           - Send a file via HTTP.
-  *   write_pipe()           - Flag that data is available on the CGI pipe.
+diff -up cups-1.6b1/scheduler/client.c.lspp cups-1.6b1/scheduler/client.c
+--- cups-1.6b1/scheduler/client.c.lspp 2012-05-08 00:41:30.000000000 +0200
++++ cups-1.6b1/scheduler/client.c      2012-05-25 17:13:38.947707163 +0200
+@@ -41,6 +41,7 @@
+  *   valid_host()         - Is the Host: field valid?
+  *   write_file()         - Send a file via HTTP.
+  *   write_pipe()         - Flag that data is available on the CGI pipe.
 + *   client_pid_to_auid()   - Get the audit login uid of the client.
   */
  
  /*
-@@ -52,6 +53,7 @@
+@@ -49,10 +50,16 @@
  
  #include "cupsd.h"
  
 +#define _GNU_SOURCE
- #ifdef HAVE_CDSASSL
- #  include <Security/Security.h>
- #  include <Security/SecItem.h>
-@@ -90,6 +92,12 @@ extern const char *cssmErrorString(int e
+ #ifdef HAVE_TCPD_H
  #  include <tcpd.h>
  #endif /* HAVE_TCPD_H */
  
@@ -1280,11 +433,10 @@ diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
 +#include <selinux/context.h>
 +#include <fcntl.h>
 +#endif /* WITH_LSPP */
-+
  
  /*
-  * Local functions...
-@@ -391,6 +399,57 @@ cupsdAcceptClient(cupsd_listener_t *lis)
+  * Local globals...
+@@ -371,6 +378,57 @@ cupsdAcceptClient(cupsd_listener_t *lis)
    }
  #endif /* HAVE_TCPD_H */
  
@@ -1339,10 +491,10 @@ diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
 +  }
 +#endif /* WITH_LSPP */
 +
- #ifdef AF_INET6
-   if (con->http.hostaddr->addr.sa_family == AF_INET6)
-     cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdAcceptClient: %d from %s:%d (IPv6)",
-@@ -781,6 +840,13 @@ cupsdReadClient(cupsd_client_t *con)      /* 
+ #ifdef AF_LOCAL
+   if (con->http.hostaddr->addr.sa_family == AF_LOCAL)
+     cupsdLogMessage(CUPSD_LOG_DEBUG, "[Client %d] Accepted from %s (Domain)",
+@@ -678,6 +736,13 @@ cupsdReadClient(cupsd_client_t *con)      /*
    mime_type_t         *type;          /* MIME type of file */
    cupsd_printer_t     *p;             /* Printer */
    static unsigned     request_id = 0; /* Request ID for temp files */
@@ -1356,7 +508,7 @@ diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
  
  
    status = HTTP_CONTINUE;
-@@ -2135,6 +2201,67 @@ cupsdReadClient(cupsd_client_t *con)    /* 
+@@ -2126,6 +2191,67 @@ cupsdReadClient(cupsd_client_t *con)    /*
            fchmod(con->file, 0640);
            fchown(con->file, RunUser, Group);
              fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
@@ -1424,9 +576,9 @@ diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
          }
  
          if (con->http.state != HTTP_POST_SEND)
-@@ -4641,6 +4768,50 @@ make_certificate(cupsd_client_t *con)   /*
- #endif /* HAVE_SSL */
+@@ -3581,6 +3707,49 @@ is_path_absolute(const char *path)      /* I
+   return (1);
+ }
  
 +#ifdef WITH_LSPP
 +/*
@@ -1471,13 +623,12 @@ diff -up cups-1.4.5/scheduler/client.c.lspp cups-1.4.5/scheduler/client.c
 +    return uid;
 +}
 +#endif /* WITH_LSPP */
-+
  /*
   * 'pipe_command()' - Pipe the output of a command to the remote client.
-  */
-diff -up cups-1.4.5/scheduler/client.h.lspp cups-1.4.5/scheduler/client.h
---- cups-1.4.5/scheduler/client.h.lspp 2009-05-26 23:01:23.000000000 +0100
-+++ cups-1.4.5/scheduler/client.h      2010-12-24 13:21:31.195857813 +0000
+diff -up cups-1.6b1/scheduler/client.h.lspp cups-1.6b1/scheduler/client.h
+--- cups-1.6b1/scheduler/client.h.lspp 2012-05-25 17:01:32.847768530 +0200
++++ cups-1.6b1/scheduler/client.h      2012-05-25 17:14:12.963470050 +0200
 @@ -18,6 +18,13 @@
  #endif /* HAVE_AUTHORIZATION_H */
  
@@ -1492,7 +643,7 @@ diff -up cups-1.4.5/scheduler/client.h.lspp cups-1.4.5/scheduler/client.h
  /*
   * HTTP client structure...
   */
-@@ -64,6 +71,10 @@ struct cupsd_client_s
+@@ -63,6 +70,10 @@ struct cupsd_client_s
  #ifdef HAVE_AUTHORIZATION_H
    AuthorizationRef    authref;        /* Authorization ref */
  #endif /* HAVE_AUTHORIZATION_H */
@@ -1503,7 +654,7 @@ diff -up cups-1.4.5/scheduler/client.h.lspp cups-1.4.5/scheduler/client.h
  };
  
  #define HTTP(con) &((con)->http)
-@@ -133,6 +144,9 @@ extern void        cupsdStartListening(void);
+@@ -135,6 +146,9 @@ extern void        cupsdStartListening(void);
  extern void   cupsdStopListening(void);
  extern void   cupsdUpdateCGI(void);
  extern void   cupsdWriteClient(cupsd_client_t *con);
@@ -1511,20 +662,20 @@ diff -up cups-1.4.5/scheduler/client.h.lspp cups-1.4.5/scheduler/client.h
 +extern uid_t  client_pid_to_auid(pid_t clipid);
 +#endif /* WITH_LSPP */
  
- /*
-diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
---- cups-1.4.5/scheduler/conf.c.lspp   2010-12-24 13:21:30.897865572 +0000
-+++ cups-1.4.5/scheduler/conf.c        2010-12-24 13:21:31.200857684 +0000
-@@ -29,6 +29,7 @@
-  *   read_configuration()     - Read a configuration file.
+ #ifdef HAVE_SSL
+ extern int    cupsdEndTLS(cupsd_client_t *con);
+diff -up cups-1.6b1/scheduler/conf.c.lspp cups-1.6b1/scheduler/conf.c
+--- cups-1.6b1/scheduler/conf.c.lspp   2012-05-25 17:01:32.778769011 +0200
++++ cups-1.6b1/scheduler/conf.c        2012-05-25 17:01:32.860768439 +0200
+@@ -32,6 +32,7 @@
   *   read_location()          - Read a <Location path> definition.
   *   read_policy()            - Read a <Policy name> definition.
+  *   set_policy_defaults()    - Set default policy values as needed.
 + *   is_lspp_config()         - Is the system configured for LSPP
   */
  
  /*
-@@ -54,6 +55,9 @@
+@@ -57,6 +58,9 @@
  #  define INADDR_NONE 0xffffffff
  #endif /* !INADDR_NONE */
  
@@ -1534,7 +685,7 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
  
  /*
   * Configuration variable structure...
-@@ -172,6 +176,10 @@ static const cupsd_var_t  variables[] =
+@@ -164,6 +168,10 @@ static const cupsd_var_t  variables[] =
  #  if defined(HAVE_LIBSSL) || defined(HAVE_GNUTLS)
    { "ServerKey",              &ServerKey,             CUPSD_VARTYPE_PATHNAME },
  #  endif /* HAVE_LIBSSL || HAVE_GNUTLS */
@@ -1545,7 +696,7 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
  #endif /* HAVE_SSL */
    { "ServerName",             &ServerName,            CUPSD_VARTYPE_STRING },
    { "ServerRoot",             &ServerRoot,            CUPSD_VARTYPE_PATHNAME },
-@@ -430,6 +438,9 @@ cupsdReadConfiguration(void)
+@@ -537,6 +545,9 @@ cupsdReadConfiguration(void)
    const char  *tmpdir;                /* TMPDIR environment variable */
    struct stat tmpinfo;                /* Temporary directory info */
    cupsd_policy_t *p;                  /* Policy */
@@ -1555,7 +706,7 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
  
  
   /*
-@@ -713,6 +724,25 @@ cupsdReadConfiguration(void)
+@@ -801,6 +812,25 @@ cupsdReadConfiguration(void)
  
    RunUser = getuid();
  
@@ -1581,12 +732,7 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
    cupsdLogMessage(CUPSD_LOG_INFO, "Remote access is %s.",
                    RemotePort ? "enabled" : "disabled");
  
-@@ -1081,11 +1111,23 @@ cupsdReadConfiguration(void)
-   * Update classification setting as needed...
-   */
--  if (Classification && !strcasecmp(Classification, "none"))
-+  if (Classification && strcasecmp(Classification, "none") == 0)
+@@ -1185,7 +1215,19 @@ cupsdReadConfiguration(void)
      cupsdClearString(&Classification);
  
    if (Classification)
@@ -1606,7 +752,7 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
  
   /*
    * Check the MaxClients setting, and then allocate memory for it...
-@@ -3657,6 +3699,18 @@ read_location(cups_file_t *fp,          /* I - C
+@@ -3423,6 +3465,18 @@ read_location(cups_file_t *fp,          /* I - C
    return ((FatalErrors & CUPSD_FATAL_CONFIG) ? 0 : linenum);
  }
  
@@ -1614,9 +760,9 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
 +int is_lspp_config()
 +{
 +  if (Classification != NULL)
-+    return ((strcasecmp(Classification, MLS_CONFIG) == 0) 
-+            || (strcasecmp(Classification, TE_CONFIG) == 0)
-+            || (strcasecmp(Classification, SELINUX_CONFIG) == 0));
++    return ((_cups_strcasecmp(Classification, MLS_CONFIG) == 0) 
++            || (_cups_strcasecmp(Classification, TE_CONFIG) == 0)
++            || (_cups_strcasecmp(Classification, SELINUX_CONFIG) == 0));
 +  else
 +    return 0;
 +}
@@ -1625,44 +771,79 @@ diff -up cups-1.4.5/scheduler/conf.c.lspp cups-1.4.5/scheduler/conf.c
  
  /*
   * 'read_policy()' - Read a <Policy name> definition.
-diff -up cups-1.4.5/scheduler/conf.h.lspp cups-1.4.5/scheduler/conf.h
---- cups-1.4.5/scheduler/conf.h.lspp   2010-12-24 13:21:30.897865572 +0000
-+++ cups-1.4.5/scheduler/conf.h        2010-12-24 13:21:31.202857632 +0000
-@@ -250,6 +250,12 @@ VAR char          *ServerKey              VALUE(NULL);
- VAR int                       SSLOptions              VALUE(CUPSD_SSL_NONE);
+diff -up cups-1.6b1/scheduler/conf.h.lspp cups-1.6b1/scheduler/conf.h
+--- cups-1.6b1/scheduler/conf.h.lspp   2012-05-25 17:01:32.000000000 +0200
++++ cups-1.6b1/scheduler/conf.h        2012-05-25 17:16:20.522580884 +0200
+@@ -247,6 +247,13 @@ VAR int                   SSLOptions              VALUE(CUPSD_SSL_NO
                                        /* SSL/TLS options */
  #endif /* HAVE_SSL */
 +#ifdef WITH_LSPP
 +VAR int                       AuditLog                VALUE(-1),
 +                                      /* File descriptor for audit */
 +                      PerPageLabels           VALUE(TRUE);
 +                                      /* Put the label on each page */
 +#endif /* WITH_LSPP */
++
  #ifdef HAVE_LAUNCHD
- VAR int                       LaunchdTimeout          VALUE(DEFAULT_KEEPALIVE);
-@@ -266,6 +272,9 @@ VAR char           *SystemGroupAuthKey     VALUE(NULL
-                                       /* System group auth key */
- #endif /* HAVE_AUTHORIZATION_H */
+ VAR int                       LaunchdTimeout          VALUE(10);
+                                       /* Time after which an idle cupsd will exit */
+@@ -265,6 +272,9 @@ int                        HaveServerCreds         VALUE(0);
+ gss_cred_id_t         ServerCreds;    /* Server's GSS credentials */
+ #endif /* HAVE_GSSAPI */
  
 +#ifdef WITH_LSPP
-+extern int    is_lspp_config(void);
++extern int            is_lspp_config(void);
 +#endif /* WITH_LSPP */
  
  /*
   * Prototypes...
-diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
---- cups-1.4.5/scheduler/ipp.c.lspp    2010-12-24 13:21:31.114859924 +0000
-+++ cups-1.4.5/scheduler/ipp.c 2010-12-24 13:21:31.217857242 +0000
-@@ -41,6 +41,7 @@
-  *   cancel_all_jobs()           - Cancel all print jobs.
+diff -up cups-1.6b1/scheduler/cupsd.h.lspp cups-1.6b1/scheduler/cupsd.h
+--- cups-1.6b1/scheduler/cupsd.h.lspp  2012-05-21 19:40:22.000000000 +0200
++++ cups-1.6b1/scheduler/cupsd.h       2012-05-25 17:01:32.861768432 +0200
+@@ -13,6 +13,8 @@
+  *   file is missing or damaged, see the license at "http://www.cups.org/".
+  */
++/* Copyright (C) 2005 Trusted Computer Solutions, Inc. */
++/* (c) Copyright 2005-2006 Hewlett-Packard Development Company, L.P. */
+ /*
+  * Include necessary headers.
+@@ -37,13 +39,20 @@
+ #  include <unistd.h>
+ #endif /* WIN32 */
++#include "config.h"
++#ifdef WITH_LSPP
++#  define MLS_CONFIG "mls"
++#  define TE_CONFIG "te"
++#  define SELINUX_CONFIG "SELinux"
++#  define UNKNOWN_SL "UNKNOWN SL"
++#endif /* WITH_LSPP */
++
+ #include "mime.h"
+ #if defined(HAVE_CDSASSL)
+ #  include <CoreFoundation/CoreFoundation.h>
+ #endif /* HAVE_CDSASSL */
+-
+ /*
+  * Some OS's don't have hstrerror(), most notably Solaris...
+  */
+diff -up cups-1.6b1/scheduler/ipp.c.lspp cups-1.6b1/scheduler/ipp.c
+--- cups-1.6b1/scheduler/ipp.c.lspp    2012-05-25 17:01:32.810768787 +0200
++++ cups-1.6b1/scheduler/ipp.c 2012-05-25 17:18:06.620841313 +0200
+@@ -35,6 +35,7 @@
+  *   cancel_all_jobs()           - Cancel all or selected print jobs.
   *   cancel_job()                - Cancel a print job.
   *   cancel_subscription()       - Cancel a subscription.
 + *   check_context()             - Check the SELinux context for a user and job
-  *   check_quotas()              - Check quotas for a printer and user.
   *   check_rss_recipient()       - Check that we do not have a duplicate RSS
   *                                 feed URI.
-@@ -102,6 +103,9 @@
+  *   check_quotas()              - Check quotas for a printer and user.
+@@ -99,6 +100,9 @@
   *   validate_user()             - Validate the user for the request.
   */
  
@@ -1672,7 +853,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  /*
   * Include necessary headers...
   */
-@@ -124,6 +128,14 @@ extern int mbr_check_membership_by_id(uu
+@@ -122,6 +126,14 @@ extern int mbr_check_membership_by_id(uu
  #  endif /* HAVE_MEMBERSHIPPRIV_H */
  #endif /* __APPLE__ */
  
@@ -1687,7 +868,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
  /*
   * Local functions...
-@@ -157,6 +169,9 @@ static void        cancel_all_jobs(cupsd_client
+@@ -146,6 +158,9 @@ static void        cancel_all_jobs(cupsd_client
  static void   cancel_job(cupsd_client_t *con, ipp_attribute_t *uri);
  static void   cancel_subscription(cupsd_client_t *con, int id);
  static int    check_rss_recipient(const char *recipient);
@@ -1695,9 +876,9 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
 +static int    check_context(cupsd_client_t *con, cupsd_job_t *job);
 +#endif /* WITH_LSPP */
  static int    check_quotas(cupsd_client_t *con, cupsd_printer_t *p);
- static ipp_attribute_t        *copy_attribute(ipp_t *to, ipp_attribute_t *attr,
-                                       int quickcopy);
-@@ -1354,6 +1369,21 @@ add_job(cupsd_client_t  *con,           /* I - Cl
+ static void   close_job(cupsd_client_t *con, ipp_attribute_t *uri);
+ static void   copy_attrs(ipp_t *to, ipp_t *from, cups_array_t *ra,
+@@ -1285,6 +1300,21 @@ add_job(cupsd_client_t  *con,           /* I - Cl
    ipp_attribute_t *media_col,         /* media-col attribute */
                *media_margin;          /* media-*-margin attribute */
    ipp_t               *unsup_col;             /* media-col in unsupported response */
@@ -1719,7 +900,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2, "add_job(%p[%d], %p(%s), %p(%s/%s))",
-@@ -1612,6 +1642,106 @@ add_job(cupsd_client_t  *con,          /* I - Cl
+@@ -1542,6 +1572,106 @@ add_job(cupsd_client_t  *con,          /* I - Cl
      ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL,
                   "Untitled");
  
@@ -1826,7 +1007,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
    if ((job = cupsdAddJob(priority, printer->name)) == NULL)
    {
      send_ipp_status(con, IPP_INTERNAL_ERROR,
-@@ -1620,6 +1750,32 @@ add_job(cupsd_client_t  *con,           /* I - Cl
+@@ -1550,6 +1680,32 @@ add_job(cupsd_client_t  *con,           /* I - Cl
      return (NULL);
    }
  
@@ -1856,10 +1037,10 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
 +  }
 +#endif /* WITH_LSPP */
 +
-   job->dtype   = printer->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT |
-                                   CUPS_PRINTER_REMOTE);
+   job->dtype   = printer->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE);
    job->attrs   = con->request;
-@@ -1825,6 +1981,29 @@ add_job(cupsd_client_t  *con,           /* I - Cl
+   job->dirty   = 1;
+@@ -1759,6 +1915,29 @@ add_job(cupsd_client_t  *con,           /* I - Cl
        attr->values[0].string.text = _cupsStrRetain(printer->job_sheets[0]);
        attr->values[1].string.text = _cupsStrRetain(printer->job_sheets[1]);
      }
@@ -1889,7 +1070,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
      job->job_sheets = attr;
  
-@@ -1855,6 +2034,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
+@@ -1789,6 +1968,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
                                             "job-sheets=\"%s,none\", "
                                             "job-originating-user-name=\"%s\"",
                      Classification, job->username);
@@ -1899,7 +1080,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
        }
        else if (attr->num_values == 2 &&
                 strcmp(attr->values[0].string.text,
-@@ -1873,6 +2055,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
+@@ -1807,6 +1989,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
                                             "job-originating-user-name=\"%s\"",
                      attr->values[0].string.text,
                      attr->values[1].string.text, job->username);
@@ -1909,7 +1090,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
        }
        else if (strcmp(attr->values[0].string.text, Classification) &&
                 strcmp(attr->values[0].string.text, "none") &&
-@@ -1893,6 +2078,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
+@@ -1827,6 +2012,9 @@ add_job(cupsd_client_t  *con,            /* I - Cl
                        "job-originating-user-name=\"%s\"",
                        attr->values[0].string.text,
                        attr->values[1].string.text, job->username);
@@ -1919,7 +1100,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
          }
        }
        else if (strcmp(attr->values[0].string.text, Classification) &&
-@@ -1933,8 +2121,52 @@ add_job(cupsd_client_t  *con,           /* I - Cl
+@@ -1867,8 +2055,52 @@ add_job(cupsd_client_t  *con,           /* I - Cl
                      "job-sheets=\"%s\", "
                      "job-originating-user-name=\"%s\"",
                      Classification, job->username);
@@ -1972,7 +1153,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
     /*
      * See if we need to add the starting sheet...
-@@ -4289,6 +4521,107 @@ check_rss_recipient(
+@@ -3615,6 +3847,111 @@ check_rss_recipient(
  }
  
  
@@ -2031,7 +1212,11 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
 +    cupsdLogMessage(CUPSD_LOG_ERROR, "check_context: unable to convert %s to SELinux sid", con->scon);
 +    return -1;
 +  }
-+  avc_context_to_sid(job->scon, &jobsid);
++  if (avc_context_to_sid(job->scon, &jobsid) != 0)
++  {
++    cupsdLogMessage(CUPSD_LOG_ERROR, "check_context: unable to convert %s to SELinux sid", job->scon);
++    return -1;
++  }
 +  avc_entry_ref_init(&avcref);
 +  tclass = SECCLASS_FILE;
 +  avr = FILE__READ;
@@ -2080,7 +1265,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  /*
   * 'check_quotas()' - Check quotas for a printer and user.
   */
-@@ -4843,6 +5176,15 @@ copy_banner(cupsd_client_t *con,        /* I - 
+@@ -4067,6 +4404,15 @@ copy_banner(cupsd_client_t *con,        /* I -
    char                attrname[255],          /* Name of attribute */
                *s;                     /* Pointer into name */
    ipp_attribute_t *attr;              /* Attribute */
@@ -2096,7 +1281,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-@@ -4878,6 +5220,82 @@ copy_banner(cupsd_client_t *con,        /* I - 
+@@ -4102,6 +4448,82 @@ copy_banner(cupsd_client_t *con,        /* I -
  
    fchmod(cupsFileNumber(out), 0640);
    fchown(cupsFileNumber(out), RunUser, Group);
@@ -2179,7 +1364,7 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
  
   /*
    * Try the localized banner file under the subdirectory...
-@@ -4972,6 +5390,24 @@ copy_banner(cupsd_client_t *con,        /* I - 
+@@ -4196,6 +4618,24 @@ copy_banner(cupsd_client_t *con,        /* I -
        else
          s = attrname;
  
@@ -2189,9 +1374,9 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
 +        if (job->scon != NULL && strncmp(job->scon, UNKNOWN_SL, strlen(UNKNOWN_SL)) != 0)
 +        {
 +          jobcon = context_new(job->scon);
-+          if (strcasecmp(name, MLS_CONFIG) == 0)
++          if (_cups_strcasecmp(name, MLS_CONFIG) == 0)
 +            mls_label = context_range_get(jobcon);
-+          else if (strcasecmp(name, TE_CONFIG) == 0)
++          else if (_cups_strcasecmp(name, TE_CONFIG) == 0)
 +            mls_label = context_type_get(jobcon);
 +          else // default to using the whole context string
 +            mls_label = context_str(jobcon);
@@ -2204,9 +1389,9 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
        if (!strcmp(s, "printer-name"))
        {
          cupsFilePuts(out, job->dest);
-@@ -6945,6 +7381,22 @@ get_job_attrs(cupsd_client_t  *con,     /* I
-     return;
-   }
+@@ -6273,6 +6713,22 @@ get_job_attrs(cupsd_client_t  *con,     /* I
+   exclude = cupsdGetPrivateAttrs(policy, con, printer, job->username);
  
 +
 +#ifdef WITH_LSPP
@@ -2227,19 +1412,19 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
   /*
    * Copy attributes...
    */
-@@ -7175,6 +7627,11 @@ get_jobs(cupsd_client_t  *con,          /* I - C
-     if (username[0] && strcasecmp(username, job->username))
-       continue;
+@@ -6626,6 +7082,11 @@ get_jobs(cupsd_client_t  *con,          /* I - C
+       if (username[0] && _cups_strcasecmp(username, job->username))
+       continue;
  
 +#ifdef WITH_LSPP
-+    if (is_lspp_config() && check_context(con, job) != 1)
-+      continue;
++      if (is_lspp_config() && check_context(con, job) != 1)
++      continue;
 +#endif /* WITH_LSPP */
 +
-     if (count > 0)
-       ippAddSeparator(con->response);
+       if (count > 0)
+       ippAddSeparator(con->response);
  
-@@ -11594,6 +12051,11 @@ validate_user(cupsd_job_t    *job,    /* I 
+@@ -11106,6 +11567,11 @@ validate_user(cupsd_job_t    *job,    /* I
  
    strlcpy(username, get_username(con), userlen);
  
@@ -2251,11 +1436,11 @@ diff -up cups-1.4.5/scheduler/ipp.c.lspp cups-1.4.5/scheduler/ipp.c
   /*
    * Check the username against the owner...
    */
-diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
---- cups-1.4.5/scheduler/job.c.lspp    2010-12-24 13:21:31.028862162 +0000
-+++ cups-1.4.5/scheduler/job.c 2010-12-24 13:21:31.224857060 +0000
-@@ -66,6 +66,9 @@
-  *   update_job_attrs()         - Update the job-printer-* attributes.
+diff -up cups-1.6b1/scheduler/job.c.lspp cups-1.6b1/scheduler/job.c
+--- cups-1.6b1/scheduler/job.c.lspp    2012-05-25 17:01:32.824768691 +0200
++++ cups-1.6b1/scheduler/job.c 2012-05-25 17:22:50.856860012 +0200
+@@ -68,6 +68,9 @@
+  *   update_job_attrs()       - Update the job-printer-* attributes.
   */
  
 +/* Copyright (C) 2005 Trusted Computer Solutions, Inc. */
@@ -2264,9 +1449,9 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
  /*
   * Include necessary headers...
   */
-@@ -75,6 +78,14 @@
- #include <cups/backend.h>
- #include <cups/dir.h>
+@@ -83,6 +86,14 @@
+ #  endif /* HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H */
+ #endif /* __APPLE__ */
  
 +#ifdef WITH_LSPP
 +#include <libaudit.h>
@@ -2279,8 +1464,8 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
  
  /*
   * Design Notes for Job Management
-@@ -505,6 +516,14 @@ cupsdContinueJob(cupsd_job_t *job)        /* I 
-                                       /* PRINTER env variable */
+@@ -580,6 +591,14 @@ cupsdContinueJob(cupsd_job_t *job)        /* I
+                                       /* PRINTER_STATE_REASONS env var */
                        rip_max_cache[255];
                                        /* RIP_MAX_CACHE env variable */
 +#ifdef WITH_LSPP
@@ -2294,7 +1479,7 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-@@ -929,6 +948,67 @@ cupsdContinueJob(cupsd_job_t *job)        /* I 
+@@ -1071,6 +1090,67 @@ cupsdContinueJob(cupsd_job_t *job)      /* I
      }
    }
  
@@ -2325,11 +1510,11 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
 +      else
 +        label_template = strdup(attr->values[0].string.text);
 +
-+      if (strcasecmp(label_template, MLS_CONFIG) == 0)
++      if (_cups_strcasecmp(label_template, MLS_CONFIG) == 0)
 +        mls_label = context_range_get(jobcon);
-+      else if (strcasecmp(label_template, TE_CONFIG) == 0)
++      else if (_cups_strcasecmp(label_template, TE_CONFIG) == 0)
 +        mls_label = context_type_get(jobcon);
-+      else if (strcasecmp(label_template, SELINUX_CONFIG) == 0)
++      else if (_cups_strcasecmp(label_template, SELINUX_CONFIG) == 0)
 +        mls_label = context_str(jobcon);
 +      else
 +        mls_label = label_template;
@@ -2362,33 +1547,8 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
    if (Classification && !banner_page)
    {
      if ((attr = ippFindAttribute(job->attrs, "job-sheets",
-@@ -1165,13 +1245,13 @@ cupsdContinueJob(cupsd_job_t *job)     /* I 
-       if (access(command, F_OK))
-       {
-         snprintf(command, sizeof(command), "%s/backend/%s", ServerBin_compat,
--                 method);
-+                 scheme);
-         if (!access(command, F_OK))
-           {
-             /* Not in the correct directory, but we found it in the compat
-              * directory.  Issue a warning. */
-             cupsdLogMessage(CUPSD_LOG_INFO,
--                            "Backend '%s' not in %s/backend!", method,
-+                            "Backend '%s' not in %s/backend!", scheme,
-                             ServerBin);
-           }
-         else
-@@ -1179,7 +1259,7 @@ cupsdContinueJob(cupsd_job_t *job)       /* I 
-             /* Not in the compat directory either; make any error
-                messages use the correct directory name then. */
-             snprintf(command, sizeof(command), "%s/backend/%s", ServerBin,
--                     method);
-+                     scheme);
-           }
-       }
- #endif /* __x86_64__ */
-@@ -1626,6 +1706,20 @@ cupsdLoadJob(cupsd_job_t *job)          /* I - J
-     goto error;
+@@ -1845,6 +1925,20 @@ cupsdLoadJob(cupsd_job_t *job)          /* I - J
+       ippSetString(job->attrs, &job->reasons, 0, "none");
    }
  
 +#ifdef WITH_LSPP
@@ -2408,7 +1568,7 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
    job->sheets     = ippFindAttribute(job->attrs, "job-media-sheets-completed",
                                       IPP_TAG_INTEGER);
    job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
-@@ -2013,6 +2107,14 @@ cupsdSaveJob(cupsd_job_t *job)          /* I - J
+@@ -2235,6 +2329,14 @@ cupsdSaveJob(cupsd_job_t *job)          /* I - J
  {
    char                filename[1024];         /* Job control filename */
    cups_file_t *fp;                    /* Job file */
@@ -2423,8 +1583,8 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
  
  
    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p",
-@@ -2031,6 +2133,76 @@ cupsdSaveJob(cupsd_job_t *job)          /* I - J
-   fchmod(cupsFileNumber(fp), 0600);
+@@ -2247,6 +2349,76 @@ cupsdSaveJob(cupsd_job_t *job)          /* I - J
    fchown(cupsFileNumber(fp), RunUser, Group);
  
 +#ifdef WITH_LSPP
@@ -2500,7 +1660,7 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
    job->attrs->state = IPP_IDLE;
  
    if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL,
-@@ -3332,6 +3504,18 @@ get_options(cupsd_job_t *job,           /* I - Jo
+@@ -3735,6 +3907,18 @@ get_options(cupsd_job_t *job,           /* I - Jo
          banner_page)
          continue;
  
@@ -2519,7 +1679,7 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
       /*
        * Otherwise add them to the list...
        */
-@@ -4020,6 +4204,19 @@ static void
+@@ -4457,6 +4641,19 @@ static void
  start_job(cupsd_job_t     *job,               /* I - Job ID */
            cupsd_printer_t *printer)   /* I - Printer to print job */
  {
@@ -2539,7 +1699,7 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
    cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))",
                    job, job->id, printer, printer->name);
  
-@@ -4142,6 +4339,108 @@ start_job(cupsd_job_t     *job,                /* I - 
+@@ -4599,6 +4796,108 @@ start_job(cupsd_job_t     *job,                /* I -
    fcntl(job->side_pipes[1], F_SETFD,
        fcntl(job->side_pipes[1], F_GETFD) | FD_CLOEXEC);
  
@@ -2648,9 +1808,9 @@ diff -up cups-1.4.5/scheduler/job.c.lspp cups-1.4.5/scheduler/job.c
   /*
    * Now start the first file in the job...
    */
-diff -up cups-1.4.5/scheduler/job.h.lspp cups-1.4.5/scheduler/job.h
---- cups-1.4.5/scheduler/job.h.lspp    2009-05-11 23:46:01.000000000 +0100
-+++ cups-1.4.5/scheduler/job.h 2010-12-24 13:21:31.225857034 +0000
+diff -up cups-1.6b1/scheduler/job.h.lspp cups-1.6b1/scheduler/job.h
+--- cups-1.6b1/scheduler/job.h.lspp    2012-05-23 03:36:50.000000000 +0200
++++ cups-1.6b1/scheduler/job.h 2012-05-25 17:23:41.802504888 +0200
 @@ -13,6 +13,13 @@
   *   file is missing or damaged, see the license at "http://www.cups.org/".
   */
@@ -2665,10 +1825,10 @@ diff -up cups-1.4.5/scheduler/job.h.lspp cups-1.4.5/scheduler/job.h
  /*
   * Constants...
   */
-@@ -83,6 +90,10 @@ struct cupsd_job_s                  /**** Job request *
-   krb5_ccache         ccache;         /* Kerberos credential cache */
-   char                        *ccname;        /* KRB5CCNAME environment variable */
#endif /* HAVE_GSSAPI */
+@@ -82,6 +89,10 @@ struct cupsd_job_s                  /**** Job request *
+   int                 progress;       /* Printing progress */
+   int                 num_keywords;   /* Number of PPD keywords */
  cups_option_t               *keywords;      /* PPD keywords */
 +#ifdef WITH_LSPP
 +  security_context_t  scon;           /* Security context of job */
 +  uid_t                       auid;           /* Audit loginuid for this job */
@@ -2676,10 +1836,10 @@ diff -up cups-1.4.5/scheduler/job.h.lspp cups-1.4.5/scheduler/job.h
  };
  
  typedef struct cupsd_joblog_s         /**** Job log message ****/
-diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
---- cups-1.4.5/scheduler/main.c.lspp   2010-12-24 13:21:31.158858778 +0000
-+++ cups-1.4.5/scheduler/main.c        2010-12-24 13:22:10.827825881 +0000
-@@ -37,6 +37,8 @@
+diff -up cups-1.6b1/scheduler/main.c.lspp cups-1.6b1/scheduler/main.c
+--- cups-1.6b1/scheduler/main.c.lspp   2012-05-25 17:01:32.849768516 +0200
++++ cups-1.6b1/scheduler/main.c        2012-05-25 17:01:32.868768383 +0200
+@@ -38,6 +38,8 @@
   *   usage()               - Show scheduler usage.
   */
  
@@ -2688,9 +1848,9 @@ diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
  /*
   * Include necessary headers...
   */
-@@ -76,6 +78,9 @@
- #  include <dlfcn.h>
- #endif /* __APPLE__ && HAVE_DLFCN_H */
+@@ -75,6 +77,9 @@
+ #  include <notify.h>
+ #endif /* HAVE_NOTIFY_H */
  
 +#ifdef WITH_LSPP
 +#  include <libaudit.h>
@@ -2698,7 +1858,7 @@ diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
  
  /*
   * Local functions...
-@@ -145,6 +150,9 @@ main(int  argc,                            /* I - Number of comm
+@@ -138,6 +143,9 @@ main(int  argc,                            /* I - Number of comm
  #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
    struct sigaction    action;         /* Actions for POSIX signals */
  #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
@@ -2708,7 +1868,7 @@ diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
  #ifdef __sgi
    cups_file_t         *fp;            /* Fake lpsched lock file */
    struct stat         statbuf;        /* Needed for checking lpsched FIFO */
-@@ -474,6 +482,25 @@ main(int  argc,                           /* I - Number of comm
+@@ -463,6 +471,25 @@ main(int  argc,                           /* I - Number of comm
  #endif /* DEBUG */
    }
  
@@ -2734,7 +1894,7 @@ diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
   /*
    * Set the timezone info...
    */
-@@ -1241,6 +1268,11 @@ main(int  argc,                         /* I - Number of comm
+@@ -1180,6 +1207,11 @@ main(int  argc,                         /* I - Number of comm
  
    cupsdStopSelect();
  
@@ -2746,10 +1906,10 @@ diff -up cups-1.4.5/scheduler/main.c.lspp cups-1.4.5/scheduler/main.c
    return (!stop_scheduler);
  }
  
-diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
---- cups-1.4.5/scheduler/printers.c.lspp       2010-12-24 13:21:31.168858518 +0000
-+++ cups-1.4.5/scheduler/printers.c    2010-12-24 13:21:31.236856747 +0000
-@@ -59,6 +59,8 @@
+diff -up cups-1.6b1/scheduler/printers.c.lspp cups-1.6b1/scheduler/printers.c
+--- cups-1.6b1/scheduler/printers.c.lspp       2012-05-25 17:01:32.786768955 +0200
++++ cups-1.6b1/scheduler/printers.c    2012-05-25 17:24:11.144300359 +0200
+@@ -56,6 +56,8 @@
   *   write_xml_string()         - Write a string with XML escaping.
   */
  
@@ -2758,9 +1918,9 @@ diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
  /*
   * Include necessary headers...
   */
-@@ -103,6 +105,10 @@ static void       write_irix_state(cupsd_print
- #endif /* __sgi */
- static void   write_xml_string(cups_file_t *fp, const char *s);
+@@ -80,6 +82,10 @@
+ #  include <asl.h>
+ #endif /* __APPLE__ */
  
 +#ifdef WITH_LSPP
 +#  include <libaudit.h>
@@ -2768,8 +1928,8 @@ diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
 +#endif /* WITH_LSPP */
  
  /*
-  * 'cupsdAddPrinter()' - Add a printer to the system.
-@@ -2267,6 +2273,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
+  * Local functions...
+@@ -2101,6 +2107,13 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
                  "username",
                  "password"
                };
@@ -2783,7 +1943,7 @@ diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
  
  
    DEBUG_printf(("cupsdSetPrinterAttrs: entering name = %s, type = %x\n", p->name,
-@@ -2397,6 +2410,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
+@@ -2234,6 +2247,45 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)
        attr->values[1].string.text = _cupsStrAlloc(Classification ?
                                           Classification : p->job_sheets[1]);
      }
@@ -2802,7 +1962,7 @@ diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
 +        if (getfilecon(printerfile, &devcon) == -1)
 +        {
 +          if(is_selinux_enabled())
-+            cupsdLogMessage(CUPSD_LOG_ERROR, "cupsdSetPrinterAttrs: Unable to get printer context");
++            cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdSetPrinterAttrs: Unable to get printer context");
 +        }
 +        else
 +        {
@@ -2829,7 +1989,7 @@ diff -up cups-1.4.5/scheduler/printers.c.lspp cups-1.4.5/scheduler/printers.c
    }
  
    p->raw    = 0;
-@@ -5536,7 +5588,6 @@ write_irix_state(cupsd_printer_t *p)     /* 
+@@ -5320,7 +5372,6 @@ write_irix_state(cupsd_printer_t *p)     /*
  }
  #endif /* __sgi */
  
diff --git a/cups/patches/cups-0755.patch b/cups/patches/cups-0755.patch
deleted file mode 100644 (file)
index 7835592..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -up cups-1.4.5/Makedefs.in.0755 cups-1.4.5/Makedefs.in
---- cups-1.4.5/Makedefs.in.0755        2010-12-06 17:19:03.335315249 +0000
-+++ cups-1.4.5/Makedefs.in     2010-12-06 17:19:03.416307263 +0000
-@@ -41,13 +41,13 @@ SHELL              =       /bin/sh
- # Installation programs...
- #
--INSTALL_BIN   =       $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
-+INSTALL_BIN   =       $(LIBTOOL) $(INSTALL) -c -m 755 @INSTALL_STRIP@
- INSTALL_CONFIG        =       $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@
- INSTALL_DATA  =       $(INSTALL) -c -m 444
- INSTALL_DIR   =       $(INSTALL) -d
--INSTALL_LIB   =       $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
-+INSTALL_LIB   =       $(LIBTOOL) $(INSTALL) -c -m 755 @INSTALL_STRIP@
- INSTALL_MAN   =       $(INSTALL) -c -m 444
--INSTALL_SCRIPT        =       $(INSTALL) -c -m 555
-+INSTALL_SCRIPT        =       $(INSTALL) -c -m 755
- #
- # Default user, group, and system groups for the scheduler...
-diff -up cups-1.4.5/scheduler/Makefile.0755 cups-1.4.5/scheduler/Makefile
---- cups-1.4.5/scheduler/Makefile.0755 2010-12-06 17:28:58.562552167 +0000
-+++ cups-1.4.5/scheduler/Makefile      2010-12-06 17:29:07.087756415 +0000
-@@ -174,7 +174,7 @@ install-data:
- install-exec:
-       echo Installing programs in $(SBINDIR)...
-       $(INSTALL_DIR) -m 755 $(SBINDIR)
--      $(INSTALL_BIN) -m 500 cupsd $(SBINDIR)
-+      $(INSTALL_BIN) -m 755 cupsd $(SBINDIR)
-       $(INSTALL_BIN) cupsfilter $(SBINDIR)
-       -if test "x`uname`" = xDarwin; then \
-               $(INSTALL_DIR) $(BUILDROOT)/System/Library/Printers/Libraries; \
diff --git a/cups/patches/cups-EAI_AGAIN.patch b/cups/patches/cups-EAI_AGAIN.patch
deleted file mode 100644 (file)
index 033e7f8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up cups-1.4.2/cups/http-addr.c.EAI_AGAIN cups-1.4.2/cups/http-addr.c
---- cups-1.4.2/cups/http-addr.c.EAI_AGAIN      2010-02-23 10:39:35.038261623 +0000
-+++ cups-1.4.2/cups/http-addr.c        2010-02-23 10:41:14.684385991 +0000
-@@ -253,7 +253,7 @@ httpAddrLookup(
-     if (error)
-     {
--      if (error == EAI_FAIL)
-+      if (error == EAI_FAIL || error == EAI_AGAIN || error == EAI_NODATA)
-         cg->need_res_init = 1;
-       return (httpAddrString(addr, name, namelen));
diff --git a/cups/patches/cups-autotype-crash.patch b/cups/patches/cups-autotype-crash.patch
deleted file mode 100644 (file)
index ed6cb15..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up cups-1.4.4/scheduler/ipp.c.autotype-crash cups-1.4.4/scheduler/ipp.c
---- cups-1.4.4/scheduler/ipp.c.autotype-crash  2010-10-15 15:25:15.093421917 +0100
-+++ cups-1.4.4/scheduler/ipp.c 2010-10-15 15:25:49.645296947 +0100
-@@ -10481,8 +10481,9 @@ send_document(cupsd_client_t  *con,    /* I
-     if (!filetype)
-       filetype = mimeType(MimeDatabase, super, type);
--    cupsdLogJob(job, CUPSD_LOG_DEBUG, "Request file type is %s/%s.",
--              filetype->super, filetype->type);
-+    if (filetype)
-+      cupsdLogJob(job, CUPSD_LOG_DEBUG, "Request file type is %s/%s.",
-+                filetype->super, filetype->type);
-   }
-   else
-     filetype = mimeType(MimeDatabase, super, type);
diff --git a/cups/patches/cups-avahi.patch b/cups/patches/cups-avahi.patch
deleted file mode 100644 (file)
index b1fc75c..0000000
+++ /dev/null
@@ -1,3338 +0,0 @@
-diff -up cups-1.4.5/backend/dnssd.c.avahi cups-1.4.5/backend/dnssd.c
---- cups-1.4.5/backend/dnssd.c.avahi   2010-12-24 13:11:33.760461375 +0000
-+++ cups-1.4.5/backend/dnssd.c 2010-12-24 13:11:38.325341226 +0000
-@@ -15,14 +15,21 @@
-  *
-  * Contents:
-  *
-+ *   next_txt_record()       - Get next TXT record from a cups_txt_records_t.
-+ *   parse_txt_record_pair() - Read key/value pair in cups_txt_records_t.
-  *   main()                  - Browse for printers.
-  *   browse_callback()       - Browse devices.
-  *   browse_local_callback() - Browse local devices.
-  *   compare_devices()       - Compare two devices.
-  *   exec_backend()          - Execute the backend that corresponds to the
-  *                             resolved service name.
-+ *   device_type()           - Get DNS-SD type enumeration from string.
-  *   get_device()            - Create or update a device.
-  *   query_callback()        - Process query data.
-+ *   avahi_client_callback() - Avahi client callback function.
-+ *   avahi_query_callback()  - Avahi query callback function.
-+ *   avahi_browse_callback() - Avahi browse callback function.
-+ *   find_device()           - Find a device from its name and domain.
-  *   sigterm_handler()       - Handle termination signals...
-  *   unquote()               - Unquote a name string.
-  */
-@@ -33,7 +40,18 @@
- #include "backend-private.h"
- #include <cups/array.h>
--#include <dns_sd.h>
-+#ifdef HAVE_DNSSD
-+#  include <dns_sd.h>
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+#  include <avahi-client/client.h>
-+#  include <avahi-client/lookup.h>
-+#  include <avahi-common/simple-watch.h>
-+#  include <avahi-common/domain.h>
-+#  include <avahi-common/error.h>
-+#  include <avahi-common/malloc.h>
-+#define kDNSServiceMaxDomainName AVAHI_DOMAIN_NAME_MAX
-+#endif /* HAVE_AVAHI */
- /*
-@@ -52,7 +70,12 @@ typedef enum
- typedef struct
- {
-+#ifdef HAVE_DNSSD
-   DNSServiceRef       ref;                    /* Service reference for resolve */
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  int         resolved;               /* Did we resolve the device? */
-+#endif /* HAVE_AVAHI */
-   char                *name,                  /* Service name */
-               *domain,                /* Domain name */
-               *fullName,              /* Full name */
-@@ -64,6 +87,20 @@ typedef struct
-               sent;                   /* Did we list the device? */
- } cups_device_t;
-+typedef struct
-+{
-+  char key[256];
-+  char value[256];
-+
-+#ifdef HAVE_DNSSD
-+  const uint8_t *data;
-+  const uint8_t *datanext;
-+  const uint8_t *dataend;
-+#else /* HAVE_AVAHI */
-+  AvahiStringList *txt;
-+#endif /* HAVE_DNSSD */
-+} cups_txt_records_t;
-+
- /*
-  * Local globals...
-@@ -77,6 +114,7 @@ static int          job_canceled = 0;
-  * Local functions...
-  */
-+#ifdef HAVE_DNSSD
- static void           browse_callback(DNSServiceRef sdRef,
-                                       DNSServiceFlags flags,
-                                       uint32_t interfaceIndex,
-@@ -92,12 +130,6 @@ static void                browse_local_callback(DNSSe
-                                             const char *regtype,
-                                             const char *replyDomain,
-                                             void *context);
--static int            compare_devices(cups_device_t *a, cups_device_t *b);
--static void           exec_backend(char **argv);
--static cups_device_t  *get_device(cups_array_t *devices,
--                                  const char *serviceName,
--                                  const char *regtype,
--                                  const char *replyDomain);
- static void           query_callback(DNSServiceRef sdRef,
-                                      DNSServiceFlags flags,
-                                      uint32_t interfaceIndex,
-@@ -106,9 +138,118 @@ static void              query_callback(DNSServiceRe
-                                      uint16_t rrclass, uint16_t rdlen,
-                                      const void *rdata, uint32_t ttl,
-                                      void *context);
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+static void           avahi_client_callback (AvahiClient *client,
-+                                             AvahiClientState state,
-+                                             void *context);
-+static void           avahi_browse_callback (AvahiServiceBrowser *browser,
-+                                             AvahiIfIndex interface,
-+                                             AvahiProtocol protocol,
-+                                             AvahiBrowserEvent event,
-+                                             const char *serviceName,
-+                                             const char *regtype,
-+                                             const char *replyDomain,
-+                                             AvahiLookupResultFlags flags,
-+                                             void *context);
-+#endif /* HAVE_AVAHI */
-+
-+static cups_device_t *        find_device (cups_array_t *devices,
-+                                   cups_txt_records_t *txt,
-+                                   cups_device_t *dkey);
-+static int            compare_devices(cups_device_t *a, cups_device_t *b);
-+static void           exec_backend(char **argv);
-+static cups_device_t  *get_device(cups_array_t *devices,
-+                                  const char *serviceName,
-+                                  const char *regtype,
-+                                  const char *replyDomain);
- static void           sigterm_handler(int sig);
- static void           unquote(char *dst, const char *src, size_t dstsize);
-+#ifdef HAVE_AVAHI
-+static AvahiSimplePoll *simple_poll = NULL;
-+static int avahi_got_callback;
-+#endif /* HAVE_AVAHI */
-+
-+
-+/*
-+ * 'next_txt_record()' - Get next TXT record from a cups_txt_records_t.
-+ */
-+
-+static cups_txt_records_t *
-+next_txt_record (cups_txt_records_t *txt)
-+{
-+#ifdef HAVE_DNSSD
-+  txt->data = txt->datanext;
-+#else /* HAVE_AVAHI */
-+  txt->txt = avahi_string_list_get_next (txt->txt);
-+  if (txt->txt == NULL)
-+    return NULL;
-+#endif /* HAVE_DNSSD */
-+
-+  return txt;
-+}
-+
-+
-+/*
-+ * 'parse_txt_record_pair()' - Read key/value pair in cups_txt_records_t.
-+ */
-+
-+static int
-+parse_txt_record_pair (cups_txt_records_t *txt)
-+{
-+#ifdef HAVE_DNSSD
-+  uint8_t     datalen;
-+  uint8_t     *data = txt->data;
-+  char                *ptr;
-+
-+ /*
-+  * Read a key/value pair starting with an 8-bit length.  Since the
-+  * length is 8 bits and the size of the key/value buffers is 256, we
-+  * don't need to check for overflow...
-+  */
-+
-+  datalen = *data++;
-+  if (!datalen || (data + datalen) >= txt->dataend)
-+    return NULL;
-+  txt->datanext = data + datalen;
-+
-+  for (ptr = txt->key; data < txt->datanext && *data != '='; data ++)
-+    *ptr++ = *data;
-+  *ptr = '\0';
-+
-+  if (data < txt->datanext && *data == '=')
-+  {
-+    data++;
-+
-+    if (data < datanext)
-+      memcpy (txt->value, data, txt->datanext - data);
-+    value[txt->datanext - data] = '\0';
-+  }
-+  else
-+    return 1;
-+#else /* HAVE_AVAHI */
-+  char *key, *value;
-+  size_t len;
-+  avahi_string_list_get_pair (txt->txt, &key, &value, &len);
-+  if (len > sizeof (txt->value) - 1)
-+    len = sizeof (txt->value) - 1;
-+
-+  memcpy (txt->value, value, len);
-+  txt->value[len] = '\0';
-+  len = strlen (key);
-+  if (len > sizeof (txt->key) - 1)
-+    len = sizeof (txt->key) - 1;
-+
-+  memcpy (txt->key, key, len);
-+  txt->key[len] = '\0';
-+  avahi_free (key);
-+  avahi_free (value);
-+#endif /* HAVE_AVAHI */
-+
-+  return 0;
-+}
-+
- /*
-  * 'main()' - Browse for printers.
-@@ -119,6 +260,13 @@ main(int  argc,                           /* I - Number of comm
-      char *argv[])                    /* I - Command-line arguments */
- {
-   const char  *name;                  /* Backend name */
-+  cups_array_t        *devices;               /* Device array */
-+  cups_device_t       *device;                /* Current device */
-+  char                uriName[1024];          /* Unquoted fullName for URI */
-+#ifdef HAVE_DNSSD
-+  int         fd;                     /* Main file descriptor */
-+  fd_set      input;                  /* Input set for select() */
-+  struct timeval timeout;             /* Timeout for select() */
-   DNSServiceRef       main_ref,               /* Main service reference */
-               fax_ipp_ref,            /* IPP fax service reference */
-               ipp_ref,                /* IPP service reference */
-@@ -130,12 +278,11 @@ main(int  argc,                          /* I - Number of comm
-               pdl_datastream_ref,     /* AppSocket service reference */
-               printer_ref,            /* LPD service reference */
-               riousbprint_ref;        /* Remote IO service reference */
--  int         fd;                     /* Main file descriptor */
--  fd_set      input;                  /* Input set for select() */
--  struct timeval timeout;             /* Timeout for select() */
--  cups_array_t        *devices;               /* Device array */
--  cups_device_t       *device;                /* Current device */
--  char                uriName[1024];          /* Unquoted fullName for URI */
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  AvahiClient *client;
-+  int         error;
-+#endif /* HAVE_AVAHI */
- #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-   struct sigaction action;            /* Actions for POSIX signals */
- #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-@@ -194,6 +341,49 @@ main(int  argc,                           /* I - Number of comm
-   * Browse for different kinds of printers...
-   */
-+#ifdef HAVE_AVAHI
-+  if ((simple_poll = avahi_simple_poll_new ()) == NULL)
-+  {
-+    perror ("ERROR: Unable to create avahi simple poll object");
-+    return (1);
-+  }
-+
-+  client = avahi_client_new (avahi_simple_poll_get (simple_poll),
-+                           0, avahi_client_callback, NULL, &error);
-+  if (!client)
-+  {
-+    perror ("ERROR: Unable to create avahi client");
-+    return (1);
-+  }
-+
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_fax-ipp._tcp", NULL, 0,
-+                           avahi_browse_callback, devices);
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_ipp._tcp", NULL, 0,
-+                           avahi_browse_callback, devices);
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_ipp-tls._tcp", NULL, 0,
-+                           avahi_browse_callback, devices);
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_pdl-datastream._tcp",
-+                           NULL, 0,
-+                           avahi_browse_callback,
-+                           devices);
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_printer._tcp", NULL, 0,
-+                           avahi_browse_callback, devices);
-+  avahi_service_browser_new (client, AVAHI_IF_UNSPEC,
-+                           AVAHI_PROTO_UNSPEC,
-+                           "_riousbprint._tcp", NULL, 0,
-+                           avahi_browse_callback, devices);
-+#endif /* HAVE_AVAHI */
-+#ifdef HAVE_DNSSD
-   if (DNSServiceCreateConnection(&main_ref) != kDNSServiceErr_NoError)
-   {
-     perror("ERROR: Unable to create service connection");
-@@ -245,6 +435,7 @@ main(int  argc,                            /* I - Number of comm
-   riousbprint_ref = main_ref;
-   DNSServiceBrowse(&riousbprint_ref, kDNSServiceFlagsShareConnection, 0,
-                    "_riousbprint._tcp", NULL, browse_callback, devices);
-+#endif /* HAVE_DNSSD */
-  /*
-   * Loop until we are killed...
-@@ -252,6 +443,9 @@ main(int  argc,                            /* I - Number of comm
-   while (!job_canceled)
-   {
-+    int announce = 0;
-+
-+#ifdef HAVE_DNSSD
-     FD_ZERO(&input);
-     FD_SET(fd, &input);
-@@ -271,11 +465,35 @@ main(int  argc,                          /* I - Number of comm
-     }
-     else
-     {
-+      announce = 1;
-+    }
-+#else /* HAVE_AVAHI */
-+    int r;
-+    avahi_got_callback = 0;
-+    r = avahi_simple_poll_iterate (simple_poll, 1);
-+    if (r != 0 && r != EINTR)
-+    {
-+     /*
-+      * We've been told to exit the loop.  Perhaps the connection to
-+      * avahi failed.
-+      */
-+
-+      break;
-+    }
-+
-+    if (avahi_got_callback)
-+      announce = 1;
-+#endif /* HAVE_DNSSD */
-+
-+    if (announce)
-+    {
-      /*
-       * Announce any devices we've found...
-       */
-+#ifdef HAVE_DNSSD
-       DNSServiceErrorType status;     /* DNS query status */
-+#endif /* HAVE_DNSSD */
-       cups_device_t *best;            /* Best matching device */
-       char    device_uri[1024];       /* Device URI */
-       int     count;                  /* Number of queries */
-@@ -285,6 +503,7 @@ main(int  argc,                            /* I - Number of comm
-                best = NULL, count = 0;
-            device;
-          device = (cups_device_t *)cupsArrayNext(devices))
-+#ifdef HAVE_DNSSD
-         if (!device->ref && !device->sent)
-       {
-        /*
-@@ -313,14 +532,23 @@ main(int  argc,                          /* I - Number of comm
-             count ++;
-           }
-       }
--      else if (!device->sent)
-+      else
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+      if (!device->resolved)
-+        continue;
-+        else
-+#endif /* HAVE_AVAHI */
-+      if (!device->sent)
-       {
-+#ifdef HAVE_DNSSD
-        /*
-         * Got the TXT records, now report the device...
-         */
-         DNSServiceRefDeallocate(device->ref);
-         device->ref = 0;
-+#endif /* HAVE_DNSSD */
-           if (!best)
-           best = device;
-@@ -368,6 +596,7 @@ main(int  argc,                            /* I - Number of comm
- }
-+#ifdef HAVE_DNSSD
- /*
-  * 'browse_callback()' - Browse devices.
-  */
-@@ -456,6 +685,7 @@ browse_local_callback(
-         device->fullName);
-   device->sent = 1;
- }
-+#endif /* HAVE_DNSSD */
- /*
-@@ -530,6 +760,37 @@ exec_backend(char **argv)         /* I - Comman
- /*
-+ * 'device_type()' - Get DNS-SD type enumeration from string.
-+ */
-+
-+static int
-+device_type (const char *regtype)
-+{
-+#ifdef HAVE_AVAHI
-+  if (!strcmp(regtype, "_ipp._tcp") ||
-+      !strcmp(regtype, "_ipp-tls._tcp"))
-+    return (CUPS_DEVICE_IPP);
-+  else if (!strcmp(regtype, "_fax-ipp._tcp"))
-+    return (CUPS_DEVICE_FAX_IPP);
-+  else if (!strcmp(regtype, "_printer._tcp"))
-+    return (CUPS_DEVICE_PDL_DATASTREAM);
-+#else
-+  if (!strcmp(regtype, "_ipp._tcp.") ||
-+      !strcmp(regtype, "_ipp-tls._tcp."))
-+    return (CUPS_DEVICE_IPP);
-+  else if (!strcmp(regtype, "_fax-ipp._tcp."))
-+    return (CUPS_DEVICE_FAX_IPP);
-+  else if (!strcmp(regtype, "_printer._tcp."))
-+    return (CUPS_DEVICE_PRINTER);
-+  else if (!strcmp(regtype, "_pdl-datastream._tcp."))
-+    return (CUPS_DEVICE_PDL_DATASTREAM);
-+#endif /* HAVE_AVAHI */
-+
-+  return (CUPS_DEVICE_RIOUSBPRINT);
-+}
-+
-+
-+/*
-  * 'get_device()' - Create or update a device.
-  */
-@@ -550,18 +811,7 @@ get_device(cups_array_t *devices, /* I -
-   */
-   key.name = (char *)serviceName;
--
--  if (!strcmp(regtype, "_ipp._tcp.") ||
--      !strcmp(regtype, "_ipp-tls._tcp."))
--    key.type = CUPS_DEVICE_IPP;
--  else if (!strcmp(regtype, "_fax-ipp._tcp."))
--    key.type = CUPS_DEVICE_FAX_IPP;
--  else if (!strcmp(regtype, "_printer._tcp."))
--    key.type = CUPS_DEVICE_PRINTER;
--  else if (!strcmp(regtype, "_pdl-datastream._tcp."))
--    key.type = CUPS_DEVICE_PDL_DATASTREAM;
--  else
--    key.type = CUPS_DEVICE_RIOUSBPRINT;
-+  key.type = device_type (regtype);
-   for (device = cupsArrayFind(devices, &key);
-        device;
-@@ -581,8 +831,14 @@ get_device(cups_array_t *devices, /* I -
-         free(device->domain);
-       device->domain = strdup(replyDomain);
-+#ifdef HAVE_DNSSD
-       DNSServiceConstructFullName(fullName, device->name, regtype,
-                                   replyDomain);
-+#else /* HAVE_AVAHI */
-+      avahi_service_name_join (fullName, kDNSServiceMaxDomainName,
-+                               serviceName, regtype, replyDomain);
-+#endif /* HAVE_DNSSD */
-+
-       free(device->fullName);
-       device->fullName = strdup(fullName);
-       }
-@@ -602,6 +858,9 @@ get_device(cups_array_t *devices,  /* I -
-   device->domain   = strdup(replyDomain);
-   device->type     = key.type;
-   device->priority = 50;
-+#ifdef HAVE_AVAHI
-+  device->resolved = 0;
-+#endif /* HAVE_AVAHI */
-   cupsArrayAdd(devices, device);
-@@ -609,13 +868,20 @@ get_device(cups_array_t *devices,        /* I -
-   * Set the "full name" of this service, which is used for queries...
-   */
-+#ifdef HAVE_DNSSD
-   DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
-+#else /* HAVE_AVAHI */
-+  avahi_service_name_join (fullName, kDNSServiceMaxDomainName,
-+                         serviceName, regtype, replyDomain);
-+#endif /* HAVE_DNSSD */
-+
-   device->fullName = strdup(fullName);
-   return (device);
- }
-+#ifdef HAVE_DNSSD
- /*
-  * 'query_callback()' - Process query data.
-  */
-@@ -639,7 +905,7 @@ query_callback(
-               *ptr;                   /* Pointer into string */
-   cups_device_t       dkey,                   /* Search key */
-               *device;                /* Device */
--
-+  cups_txt_records_t txt;
-   fprintf(stderr, "DEBUG2: query_callback(sdRef=%p, flags=%x, "
-                   "interfaceIndex=%d, errorCode=%d, fullName=\"%s\", "
-@@ -673,84 +939,232 @@ query_callback(
-   if ((ptr = strstr(name, "._")) != NULL)
-     *ptr = '\0';
--  if (strstr(fullName, "_ipp._tcp.") ||
--      strstr(fullName, "_ipp-tls._tcp."))
--    dkey.type = CUPS_DEVICE_IPP;
--  else if (strstr(fullName, "_fax-ipp._tcp."))
--    dkey.type = CUPS_DEVICE_FAX_IPP;
--  else if (strstr(fullName, "_printer._tcp."))
--    dkey.type = CUPS_DEVICE_PRINTER;
--  else if (strstr(fullName, "_pdl-datastream._tcp."))
--    dkey.type = CUPS_DEVICE_PDL_DATASTREAM;
-+  dkey.type = device_type (fullName);
-+
-+  txt.data = rdata;
-+  txt.dataend = rdata + rdlen;
-+  device = find_device ((cups_array_t *) context, &txt, &dkey);
-+  if (!device)
-+    fprintf(stderr, "DEBUG: Ignoring TXT record for \"%s\"...\n", fullName);
-+}
-+#endif /* HAVE_DNSSD */
-+
-+
-+#ifdef HAVE_AVAHI
-+/*
-+ * 'avahi_client_callback()' - Avahi client callback function.
-+ */
-+
-+static void
-+avahi_client_callback(AvahiClient *client,
-+                    AvahiClientState state,
-+                    void *context)
-+{
-+ /*
-+  * If the connection drops, quit.
-+  */
-+
-+  if (state == AVAHI_CLIENT_FAILURE)
-+  {
-+    fprintf (stderr, "ERROR: Avahi connection failed\n");
-+    avahi_simple_poll_quit (simple_poll);
-+  }
-+}
-+
-+
-+/*
-+ * 'avahi_query_callback()' - Avahi query callback function.
-+ */
-+
-+static void
-+avahi_query_callback(AvahiServiceResolver *resolver,
-+                   AvahiIfIndex interface,
-+                   AvahiProtocol protocol,
-+                   AvahiResolverEvent event,
-+                   const char *name,
-+                   const char *type,
-+                   const char *domain,
-+                   const char *host_name,
-+                   const AvahiAddress *address,
-+                   uint16_t port,
-+                   AvahiStringList *txt,
-+                   AvahiLookupResultFlags flags,
-+                   void *context)
-+{
-+  AvahiClient         *client;
-+  cups_device_t               key,
-+                      *device;
-+  char                        uqname[1024],
-+                      *ptr;
-+  cups_txt_records_t  txtr;
-+
-+  client = avahi_service_resolver_get_client (resolver);
-+  if (event != AVAHI_RESOLVER_FOUND)
-+  {
-+    if (event == AVAHI_RESOLVER_FAILURE)
-+    {
-+      fprintf (stderr, "ERROR: %s\n",
-+             avahi_strerror (avahi_client_errno (client)));
-+    }
-+
-+    avahi_service_resolver_free (resolver);
-+    return;
-+  }
-+
-+ /*
-+  * Set search key for device.
-+  */
-+
-+  key.name = uqname;
-+  unquote (uqname, name, sizeof (uqname));
-+  if ((ptr = strstr(name, "._")) != NULL)
-+    *ptr = '\0';
-+
-+  key.domain = (char *) domain;
-+  key.type = device_type (type);
-+
-+ /*
-+  * Find the device and the the TXT information.
-+  */
-+
-+  txtr.txt = txt;
-+  device = find_device ((cups_array_t *) context, &txtr, &key);
-+  if (device)
-+  {
-+   /*
-+    * Let the main loop know to announce the device.
-+    */
-+
-+    device->resolved = 1;
-+    avahi_got_callback = 1;
-+  }
-   else
--    dkey.type = CUPS_DEVICE_RIOUSBPRINT;
-+    fprintf (stderr, "DEBUG: Ignoring TXT record for \"%s\"...\n", name);
-+
-+  avahi_service_resolver_free (resolver);
-+}
-+
-+
-+/*
-+ * 'avahi_browse_callback()' - Avahi browse callback function.
-+ */
-+
-+static void
-+avahi_browse_callback(AvahiServiceBrowser *browser,
-+                    AvahiIfIndex interface,
-+                    AvahiProtocol protocol,
-+                    AvahiBrowserEvent event,
-+                    const char *name,
-+                    const char *type,
-+                    const char *domain,
-+                    AvahiLookupResultFlags flags,
-+                    void *context)
-+{
-+  AvahiClient *client = avahi_service_browser_get_client (browser);
--  for (device = cupsArrayFind(devices, &dkey);
-+  switch (event)
-+  {
-+  case AVAHI_BROWSER_FAILURE:
-+    fprintf (stderr, "ERROR: %s\n",
-+           avahi_strerror (avahi_client_errno (client)));
-+    avahi_simple_poll_quit (simple_poll);
-+    return;
-+
-+  case AVAHI_BROWSER_NEW:
-+   /*
-+    * This object is new on the network.
-+    */
-+
-+    if (flags & AVAHI_LOOKUP_RESULT_LOCAL)
-+    {
-+     /*
-+      * This comes from the local machine so ignore it.
-+      */
-+
-+      fprintf (stderr, "DEBUG: ignoring local service %s\n", name);
-+    }
-+    else
-+    {
-+     /*
-+      * Create a device entry for it if it doesn't yet exist.
-+      */
-+
-+      get_device ((cups_array_t *)context, name, type, domain);
-+
-+     /*
-+      * Now look for a TXT entry.
-+      */
-+
-+      if (avahi_service_resolver_new (client, interface, protocol,
-+                                    name, type, domain,
-+                                    AVAHI_PROTO_UNSPEC, 0,
-+                                    avahi_query_callback, context) == NULL)
-+      {
-+      fprintf (stderr, "ERROR: failed to resolve service %s: %s\n",
-+               name, avahi_strerror (avahi_client_errno (client)));
-+      }
-+    }
-+
-+    break;
-+
-+  case AVAHI_BROWSER_REMOVE:
-+  case AVAHI_BROWSER_ALL_FOR_NOW:
-+  case AVAHI_BROWSER_CACHE_EXHAUSTED:
-+    break;
-+  }
-+}
-+#endif /* HAVE_AVAHI */
-+
-+
-+/*
-+ * 'find_device()' - Find a device from its name and domain.
-+ */
-+
-+static cups_device_t *
-+find_device (cups_array_t *devices,
-+           cups_txt_records_t *txt,
-+           cups_device_t *dkey)
-+{
-+  cups_device_t       *device;
-+  char                *ptr;
-+
-+  for (device = cupsArrayFind(devices, dkey);
-        device;
-        device = cupsArrayNext(devices))
-   {
--    if (strcasecmp(device->name, dkey.name) ||
--        strcasecmp(device->domain, dkey.domain))
-+    if (strcasecmp(device->name, dkey->name) ||
-+        strcasecmp(device->domain, dkey->domain))
-     {
-       device = NULL;
-       break;
-     }
--    else if (device->type == dkey.type)
-+    else if (device->type == dkey->type)
-     {
-      /*
-       * Found it, pull out the priority and make and model from the TXT
-       * record and save it...
-       */
--      const uint8_t   *data,          /* Pointer into data */
--                      *datanext,      /* Next key/value pair */
--                      *dataend;       /* End of entire TXT record */
--      uint8_t         datalen;        /* Length of current key/value pair */
--      char            key[256],       /* Key string */
--                      value[256],     /* Value string */
--                      make_and_model[512],
-+      char            make_and_model[512],
-                                       /* Manufacturer and model */
-                       model[256],     /* Model */
--                      device_id[2048];/* 1284 device ID */
--
-+                      device_id[2048]; /* 1284 device ID */
-       device_id[0]      = '\0';
-       make_and_model[0] = '\0';
-       strcpy(model, "Unknown");
--      for (data = rdata, dataend = data + rdlen;
--           data < dataend;
--           data = datanext)
-+      for (;;)
-       {
--       /*
--        * Read a key/value pair starting with an 8-bit length.  Since the
--      * length is 8 bits and the size of the key/value buffers is 256, we
--      * don't need to check for overflow...
--      */
--
--        datalen = *data++;
--
--        if (!datalen || (data + datalen) >= dataend)
--        break;
-+      char *key;
-+      char *value;
--        datanext = data + datalen;
--
--        for (ptr = key; data < datanext && *data != '='; data ++)
--        *ptr++ = *data;
--      *ptr = '\0';
--
--      if (data < datanext && *data == '=')
--      {
--        data ++;
--
--        if (data < datanext)
--          memcpy(value, data, datanext - data);
--        value[datanext - data] = '\0';
--      }
--      else
--        continue;
-+      if (parse_txt_record_pair (txt))
-+        goto next;
-+      key = txt->key;
-+      value = txt->value;
-         if (!strncasecmp(key, "usb_", 4))
-       {
-        /*
-@@ -805,6 +1219,10 @@ query_callback(
-         if (device->type == CUPS_DEVICE_PRINTER)
-           device->sent = 1;
-       }
-+
-+      next:
-+      if (next_txt_record (txt) == NULL)
-+        break;
-       }
-       if (device->device_id)
-@@ -861,11 +1279,9 @@ query_callback(
-     }
-   }
--  if (!device)
--    fprintf(stderr, "DEBUG: Ignoring TXT record for \"%s\"...\n", fullName);
-+  return device;
- }
--
- /*
-  * 'sigterm_handler()' - Handle termination signals...
-  */
-diff -up cups-1.4.5/config.h.in.avahi cups-1.4.5/config.h.in
---- cups-1.4.5/config.h.in.avahi       2010-08-13 05:11:46.000000000 +0100
-+++ cups-1.4.5/config.h.in     2010-12-24 13:11:38.327341170 +0000
-@@ -344,6 +344,13 @@
- /*
-+ * Do we have Avahi for DNS Service Discovery?
-+ */
-+
-+#undef HAVE_AVAHI
-+
-+
-+/*
-  * Do we have <sys/ioctl.h>?
-  */
-diff -up cups-1.4.5/config-scripts/cups-dnssd.m4.avahi cups-1.4.5/config-scripts/cups-dnssd.m4
---- cups-1.4.5/config-scripts/cups-dnssd.m4.avahi      2009-08-28 23:54:34.000000000 +0100
-+++ cups-1.4.5/config-scripts/cups-dnssd.m4    2010-12-24 13:11:38.326341199 +0000
-@@ -27,6 +27,21 @@ AC_ARG_WITH(dnssd-includes, [  --with-dn
- DNSSDLIBS=""
- DNSSD_BACKEND=""
-+AC_ARG_ENABLE(avahi, [  --enable-avahi          turn on DNS Service Discovery support, default=no],
-+            [if test x$enable_avahi = xyes; then
-+                     AC_MSG_CHECKING(for Avahi)
-+                     if $PKGCONFIG --exists avahi-client; then
-+                             AC_MSG_RESULT(yes)
-+                             CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
-+                             DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
-+                             DNSSD_BACKEND="dnssd"
-+                             AC_DEFINE(HAVE_AVAHI)
-+                             enable_dnssd=no
-+                     else
-+                             AC_MSG_RESULT(no)
-+                     fi
-+             fi])
-+
- if test x$enable_dnssd != xno; then
-       AC_CHECK_HEADER(dns_sd.h, [
-               case "$uname" in
-diff -up cups-1.4.5/cups/http-support.c.avahi cups-1.4.5/cups/http-support.c
---- cups-1.4.5/cups/http-support.c.avahi       2010-10-01 23:40:38.000000000 +0100
-+++ cups-1.4.5/cups/http-support.c     2010-12-24 13:11:38.330341093 +0000
-@@ -41,6 +41,10 @@
-  *   http_copy_decode()   - Copy and decode a URI.
-  *   http_copy_encode()   - Copy and encode a URI.
-  *   resolve_callback()   - Build a device URI for the given service name.
-+ *   avahi_resolve_uri_client_cb()
-+ *                        - Avahi client callback for resolving URI.
-+ *   avahi_resolve_uri_resolver_cb()
-+ *                        - Avahi resolver callback for resolving URI.
-  */
- /*
-@@ -55,6 +59,11 @@
- #  include <dns_sd.h>
- #  include <poll.h>
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+#  include <avahi-client/client.h>
-+#  include <avahi-client/lookup.h>
-+#  include <avahi-common/simple-watch.h>
-+#endif /* HAVE_AVAHI */
- /*
-@@ -121,6 +130,24 @@ static void               resolve_callback(DNSService
-                                        void *context);
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+static void   avahi_resolve_uri_client_cb(AvahiClient *client,
-+                                          AvahiClientState state,
-+                                          void *simple_poll);
-+static void   avahi_resolve_uri_resolver_cb(AvahiServiceResolver *resolver,
-+                                            AvahiIfIndex interface,
-+                                            AvahiProtocol protocol,
-+                                            AvahiResolverEvent event,
-+                                            const char *name,
-+                                            const char *type,
-+                                            const char *domain,
-+                                            const char *host_name,
-+                                            const AvahiAddress *address,
-+                                            uint16_t port,
-+                                            AvahiStringList *txt,
-+                                            AvahiLookupResultFlags flags,
-+                                            void *context);
-+#endif /* HAVE_AVAHI */
- /*
-  * 'httpAssembleURI()' - Assemble a uniform resource identifier from its
-@@ -1351,6 +1378,9 @@ _httpResolveURI(
-   if (strstr(hostname, "._tcp"))
-   {
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+    char              *regtype,       /* Pointer to type in hostname */
-+                      *domain;        /* Pointer to domain in hostname */
- #ifdef HAVE_DNSSD
-     DNSServiceRef     ref,            /* DNS-SD master service reference */
-                       domainref,      /* DNS-SD service reference for domain */
-@@ -1361,6 +1391,16 @@ _httpResolveURI(
-                       *domain;        /* Pointer to domain in hostname */
-     _http_uribuf_t    uribuf;         /* URI buffer */
-     struct pollfd     polldata;       /* Polling data */
-+#else /* HAVE_AVAHI */
-+    AvahiSimplePoll   *simple_poll;
-+    AvahiClient               *client;
-+    int                       error;
-+    struct
-+    {
-+      AvahiSimplePoll *poll;
-+      _http_uribuf_t  uribuf;
-+    } user_data;
-+#endif /* HAVE_DNSSD */
-     if (logit)
-@@ -1398,8 +1438,13 @@ _httpResolveURI(
-     if (domain)
-       *domain++ = '\0';
-+#ifdef HAVE_DNSSD
-     uribuf.buffer  = resolved_uri;
-     uribuf.bufsize = resolved_size;
-+#else
-+    user_data.uribuf.buffer = resolved_uri;
-+    user_data.uribuf.bufsize = resolved_size;
-+#endif
-     resolved_uri[0] = '\0';
-@@ -1414,6 +1459,7 @@ _httpResolveURI(
-     uri = NULL;
-+#ifdef HAVE_DNSSD
-     if (DNSServiceCreateConnection(&ref) == kDNSServiceErr_NoError)
-     {
-       localref = ref;
-@@ -1500,6 +1546,36 @@ _httpResolveURI(
-       DNSServiceRefDeallocate(ref);
-     }
-+#else /* HAVE_AVAHI */
-+    if ((simple_poll = avahi_simple_poll_new ()) != NULL)
-+    {
-+      if ((client = avahi_client_new (avahi_simple_poll_get (simple_poll),
-+                                    0, avahi_resolve_uri_client_cb,
-+                                    &simple_poll, &error)) != NULL)
-+      {
-+      user_data.poll = simple_poll;
-+      if (avahi_service_resolver_new (client, AVAHI_IF_UNSPEC,
-+                                      AVAHI_PROTO_UNSPEC, hostname,
-+                                      regtype, domain, AVAHI_PROTO_UNSPEC, 0,
-+                                      avahi_resolve_uri_resolver_cb,
-+                                      &user_data) != NULL)
-+      {
-+        avahi_simple_poll_loop (simple_poll);
-+
-+       /*
-+        * Collect the result.
-+        */
-+
-+        if (resolved_uri[0])
-+          uri = resolved_uri;
-+      }
-+
-+      avahi_client_free (client);
-+      }
-+
-+      avahi_simple_poll_free (simple_poll);
-+    }
-+#endif /* HAVE_DNSSD */
-     if (logit)
-     {
-@@ -1511,13 +1587,13 @@ _httpResolveURI(
-       fputs("STATE: -connecting-to-device,offline-report\n", stderr);
-     }
--#else
-+#else /* HAVE_DNSSD || HAVE_AVAHI */
-    /*
-     * No DNS-SD support...
-     */
-     uri = NULL;
--#endif /* HAVE_DNSSD */
-+#endif /* HAVE_DNSSD || HAVE_AVAHI */
-     if (logit && !uri)
-       _cupsLangPuts(stderr, _("Unable to find printer!\n"));
-@@ -1723,6 +1799,116 @@ resolve_callback(
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+/*
-+ * 'avahi_resolve_uri_client_cb()' - Avahi client callback for resolving URI.
-+ */
-+
-+static void
-+avahi_resolve_uri_client_cb (AvahiClient *client,
-+                           AvahiClientState state,
-+                           void *simple_poll)
-+{
-+  DEBUG_printf(("avahi_resolve_uri_client_callback(client=%p, state=%d, "
-+              "simple_poll=%p)\n", client, state, simple_poll));
-+
-+  /*
-+   * If the connection drops, quit.
-+   */
-+
-+  if (state == AVAHI_CLIENT_FAILURE)
-+    avahi_simple_poll_quit (simple_poll);
-+}
-+
-+
-+/*
-+ * 'avahi_resolve_uri_resolver_cb()' - Avahi resolver callback for resolving
-+ *                                     URI.
-+ */
-+
-+static void
-+avahi_resolve_uri_resolver_cb (AvahiServiceResolver *resolver,
-+                             AvahiIfIndex interface,
-+                             AvahiProtocol protocol,
-+                             AvahiResolverEvent event,
-+                             const char *name,
-+                             const char *type,
-+                             const char *domain,
-+                             const char *host_name,
-+                             const AvahiAddress *address,
-+                             uint16_t port,
-+                             AvahiStringList *txt,
-+                             AvahiLookupResultFlags flags,
-+                             void *context)
-+{
-+  const char          *scheme;        /* URI scheme */
-+  char                        rp[256];        /* Remote printer */
-+  AvahiStringList     *pair;
-+  char                        *value;
-+  size_t              valueLen = 0;
-+  char                        addr[AVAHI_ADDRESS_STR_MAX];
-+  struct
-+  {
-+    AvahiSimplePoll   *poll;
-+    _http_uribuf_t    uribuf;
-+  }           *poll_uribuf = context;
-+
-+  DEBUG_printf(("avahi_resolve_uri_resolver_callback(resolver=%p, "
-+              "interface=%d, protocol=%d, event=%d, name=\"%s\", "
-+              "type=\"%s\", domain=\"%s\", host_name=\"%s\", address=%p, "
-+              "port=%d, txt=%p, flags=%d, context=%p)\n",
-+              resolver, interface, protocol, event, name, type, domain,
-+              host_name, address, port, txt, flags, context));
-+
-+  if (event != AVAHI_RESOLVER_FOUND)
-+  {
-+    avahi_service_resolver_free (resolver);
-+    avahi_simple_poll_quit (poll_uribuf->poll);
-+    return;
-+  }
-+
-+ /*
-+  * Figure out the scheme from the full name...
-+  */
-+
-+  if (strstr(type, "_ipp."))
-+    scheme = "ipp";
-+  else if (strstr(type, "_printer."))
-+    scheme = "lpd";
-+  else if (strstr(type, "_pdl-datastream."))
-+    scheme = "socket";
-+  else
-+    scheme = "riousbprint";
-+
-+ /*
-+  * Extract the "remote printer key from the TXT record...
-+  */
-+
-+  if ((pair = avahi_string_list_find (txt, "rp")) != NULL)
-+  {
-+    avahi_string_list_get_pair (pair, NULL, &value, &valueLen);
-+    rp[0] = '/';
-+    memcpy (rp + 1, value, valueLen);
-+    rp[valueLen + 1] = '\0';
-+  }
-+  else
-+    rp[0] = '\0';
-+
-+ /*
-+  * Assemble the final device URI...
-+  */
-+
-+  avahi_address_snprint (addr, AVAHI_ADDRESS_STR_MAX, address);
-+  httpAssembleURI(HTTP_URI_CODING_ALL, poll_uribuf->uribuf.buffer,
-+                poll_uribuf->uribuf.bufsize, scheme, NULL,
-+                addr, port, rp);
-+  DEBUG_printf(("avahi_resolve_uri_resolver_callback: Resolved URI is \"%s\"\n",
-+              poll_uribuf->uribuf.buffer));
-+  avahi_simple_poll_quit (poll_uribuf->poll);
-+}
-+#endif /* HAVE_AVAHI */
-+
-+
- /*
-  * End of "$Id: http-support.c 9322 2010-10-01 22:40:38Z mike $".
-  */
-diff -up cups-1.4.5/scheduler/avahi.c.avahi cups-1.4.5/scheduler/avahi.c
---- cups-1.4.5/scheduler/avahi.c.avahi 2010-12-24 13:11:38.333341014 +0000
-+++ cups-1.4.5/scheduler/avahi.c       2010-12-24 13:11:38.333341014 +0000
-@@ -0,0 +1,441 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Avahi poll implementation for the CUPS scheduler.
-+ *
-+ *   Copyright (C) 2010 Red Hat, Inc.
-+ *   Authors:
-+ *    Tim Waugh <twaugh@redhat.com>
-+ *
-+ *   Distribution and use rights are outlined in the file "LICENSE.txt"
-+ *   "LICENSE" which should have been included with this file.  If this
-+ *   file is missing or damaged, see the license at "http://www.cups.org/".
-+ *
-+ * Contents:
-+ *
-+ *   watch_read_cb         - Read callback for file descriptor
-+ *   watch_write_cb        - Write callback for file descriptor
-+ *   watched_fd_add_select() - Call cupsdAddSelect() as needed
-+ *   watch_new()           - Create a new file descriptor watch
-+ *   watch_free()          - Free a file descriptor watch
-+ *   watch_update()        - Update watched events for a file descriptor
-+ *   watch_get_events()    - Get events that happened for a file descriptor
-+ *   timeout_cb()          - Run a timed Avahi callback
-+ *   timeout_new()         - Set a wakeup time
-+ *   timeout_update()      - Update the expiration time for a timeout
-+ *   timeout_free()        - Free a timeout
-+ *   compare_watched_fds() - Compare watched file descriptors for array sorting
-+ *   compare_timeouts()    - Compare timeouts for array sorting
-+ *   avahi_cups_poll_new() - Create a new Avahi main loop object for CUPS
-+ *   avahi_cups_poll_free() - Free an Avahi main loop object for CUPS
-+ *   avahi_cups_poll_get() - Get the abstract poll API structure
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI /* Applies to entire file... */
-+
-+/*
-+ * Include necessary headers...
-+ */
-+
-+#include "cupsd.h"
-+
-+#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
-+#  include <malloc.h>
-+#endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-common/timeval.h>
-+#endif /* HAVE_AVAHI */
-+
-+
-+typedef struct
-+{
-+  AvahiCupsPoll *cups_poll;
-+
-+  int fd;
-+  AvahiWatchEvent occurred;
-+  cups_array_t *watches;
-+} cupsd_watched_fd_t;
-+
-+struct AvahiWatch
-+{
-+  cupsd_watched_fd_t *watched_fd;
-+
-+  AvahiWatchEvent events;
-+  AvahiWatchCallback callback;
-+  void *userdata;
-+};
-+
-+struct AvahiTimeout
-+{
-+  AvahiCupsPoll *cups_poll;
-+  AvahiTimeoutCallback callback;
-+  void *userdata;
-+  cupsd_timeout_t *cupsd_timeout;
-+};
-+
-+/*
-+ * Local functions...
-+ */
-+
-+static AvahiWatch *   watch_new(const AvahiPoll *api,
-+                                int fd,
-+                                AvahiWatchEvent events,
-+                                AvahiWatchCallback callback,
-+                                void *userdata);
-+static void           watch_free(AvahiWatch *watch);
-+static void           watch_update(AvahiWatch *watch,
-+                                   AvahiWatchEvent events);
-+static AvahiWatchEvent        watch_get_events(AvahiWatch *watch);
-+static int            compare_watches(AvahiWatch *p0,
-+                                      AvahiWatch *p1);
-+
-+
-+/*
-+ * 'watch_read_cb' - Read callback for file descriptor
-+ */
-+
-+static void
-+watch_read_cb (void *userdata)
-+{
-+  AvahiWatch *watch;
-+  cupsd_watched_fd_t *watched_fd = userdata;
-+  watched_fd->occurred |= AVAHI_WATCH_IN;
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches)) {
-+    if (watch->events & watched_fd->occurred) {
-+      (watch->callback) (watch, watched_fd->fd,
-+                       AVAHI_WATCH_IN, watch->userdata);
-+      watched_fd->occurred &= ~AVAHI_WATCH_IN;
-+      break;
-+    }
-+  }
-+}
-+
-+
-+/*
-+ * 'watch_write_cb' - Write callback for file descriptor
-+ */
-+
-+static void
-+watch_write_cb (void *userdata)
-+{
-+  AvahiWatch *watch;
-+  cupsd_watched_fd_t *watched_fd = userdata;
-+  watched_fd->occurred |= AVAHI_WATCH_OUT;
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches)) {
-+    if (watch->events & watched_fd->occurred) {
-+      (watch->callback) (watch, watched_fd->fd,
-+                       AVAHI_WATCH_OUT, watch->userdata);
-+      watched_fd->occurred &= ~AVAHI_WATCH_OUT;
-+      break;
-+    }
-+  }
-+}
-+
-+
-+/*
-+ * 'watched_fd_add_select' - Call cupsdAddSelect() as needed
-+ */
-+
-+static int                                            /* O - Watches? */
-+watched_fd_add_select (cupsd_watched_fd_t *watched_fd)
-+{
-+  AvahiWatch *watch;
-+  cupsd_selfunc_t read_cb = NULL, write_cb = NULL;
-+
-+  for (watch = (AvahiWatch *)cupsArrayFirst(watched_fd->watches);
-+       watch;
-+       watch = (AvahiWatch *)cupsArrayNext(watched_fd->watches)) {
-+    if (watch->events & (AVAHI_WATCH_IN |
-+                           AVAHI_WATCH_ERR |
-+                           AVAHI_WATCH_HUP)) {
-+      read_cb = (cupsd_selfunc_t)watch_read_cb;
-+      if (write_cb != NULL)
-+      break;
-+    }
-+
-+    if (watch->events & AVAHI_WATCH_OUT) {
-+      write_cb = (cupsd_selfunc_t)watch_write_cb;
-+      if (read_cb != NULL)
-+      break;
-+    }
-+  }
-+
-+  if (read_cb || write_cb)
-+    cupsdAddSelect (watched_fd->fd, read_cb, write_cb, watched_fd);
-+  else
-+    cupsdRemoveSelect (watched_fd->fd);
-+
-+  return (read_cb || write_cb);
-+}
-+
-+/*
-+ * 'watch_new' - Create a new file descriptor watch
-+ */
-+
-+static AvahiWatch *
-+watch_new (const AvahiPoll *api,
-+         int fd,
-+         AvahiWatchEvent events,
-+         AvahiWatchCallback callback,
-+         void *userdata)
-+{
-+  cupsd_watched_fd_t key, *watched_fd;
-+  AvahiCupsPoll *cups_poll = api->userdata;
-+  AvahiWatch *watch = malloc(sizeof(AvahiWatch));
-+  if (watch == NULL)
-+    return (NULL);
-+
-+  watch->events = events;
-+  watch->callback = callback;
-+  watch->userdata = userdata;
-+
-+  key.fd = fd;
-+  watched_fd = cupsArrayFind (cups_poll->watched_fds, &key);
-+  if (watched_fd == NULL) {
-+    watched_fd = malloc(sizeof(cupsd_watched_fd_t));
-+    if (watched_fd == NULL)
-+      return (NULL);
-+
-+    watched_fd->fd = fd;
-+    watched_fd->occurred = 0;
-+    watched_fd->watches = cupsArrayNew ((cups_array_func_t)compare_watches,
-+                                      NULL);
-+  }
-+
-+  cupsArrayAdd(watched_fd->watches, watch);
-+  watched_fd_add_select (watched_fd);
-+  return (watch);
-+}
-+
-+
-+/*
-+ * 'watch_free' - Free a file descriptor watch
-+ */
-+
-+static void
-+watch_free (AvahiWatch *watch)
-+{
-+  cupsd_watched_fd_t *watched_fd = watch->watched_fd;
-+  AvahiCupsPoll *cups_poll = watched_fd->cups_poll;
-+
-+  cupsArrayRemove (watched_fd->watches, watch);
-+  free (watch);
-+
-+  if (!watched_fd_add_select (watched_fd)) {
-+    /* No more watches */
-+    cupsArrayRemove (cups_poll->watched_fds, watched_fd);
-+    free (watched_fd);
-+  }
-+}
-+
-+
-+/*
-+ * 'watch_update' - Update watched events for a file descriptor
-+ */
-+
-+static void
-+watch_update (AvahiWatch *watch,
-+            AvahiWatchEvent events)
-+{
-+  watch->events = events;
-+  watched_fd_add_select (watch->watched_fd);
-+}
-+
-+
-+/*
-+ * 'watch_get_events' - Get events that happened for a file descriptor
-+ */
-+
-+static AvahiWatchEvent
-+watch_get_events (AvahiWatch *watch)
-+{
-+  return (watch->watched_fd->occurred);
-+}
-+
-+
-+/*
-+ * 'compare_watches' - Compare watches for array sorting
-+ */
-+
-+static int
-+compare_watches (AvahiWatch *p0,
-+               AvahiWatch *p1)
-+{
-+  if (p0->watched_fd->fd < p1->watched_fd->fd)
-+    return (-1);
-+
-+  return ((p0->watched_fd->fd == p1->watched_fd->fd) ? 0 : 1);
-+}
-+
-+
-+/*
-+ * 'timeout_cb()' - Run a timed Avahi callback
-+ */
-+
-+static void
-+timeout_cb (cupsd_timeout_t *cupsd_timeout, void *userdata)
-+{
-+  AvahiTimeout *timeout = userdata;
-+  (timeout->callback) (timeout, timeout->userdata);
-+}
-+
-+
-+/*
-+ * 'timeout_new' - Set a wakeup time
-+ */
-+
-+static AvahiTimeout *
-+timeout_new (const AvahiPoll *api,
-+           const struct timeval *tv,
-+           AvahiTimeoutCallback callback,
-+           void *userdata)
-+{
-+  AvahiTimeout *timeout;
-+  AvahiCupsPoll *cups_poll = api->userdata;
-+
-+  timeout = malloc(sizeof(AvahiTimeout));
-+  if (timeout == NULL)
-+    return (NULL);
-+
-+  timeout->cups_poll = cups_poll;
-+  timeout->callback = callback;
-+  timeout->userdata = userdata;
-+  timeout->cupsd_timeout = cupsdAddTimeout (tv,
-+                                          (cupsd_timeoutfunc_t)timeout_cb,
-+                                          timeout);
-+  cupsArrayAdd (cups_poll->timeouts, timeout);
-+  return (timeout);
-+}
-+
-+
-+/*
-+ * 'timeout_update' - Update the expiration time for a timeout
-+ */
-+
-+static void
-+timeout_update (AvahiTimeout *timeout,
-+              const struct timeval *tv)
-+{
-+  cupsdUpdateTimeout (timeout->cupsd_timeout, tv);
-+}
-+
-+
-+/*
-+ * ' timeout_free' - Free a timeout
-+ */
-+
-+static void
-+timeout_free (AvahiTimeout *timeout)
-+{
-+  cupsArrayRemove (timeout->cups_poll->timeouts, timeout);
-+  cupsdRemoveTimeout (timeout->cupsd_timeout);
-+  free (timeout);
-+}
-+
-+
-+/*
-+ * 'compare_watched_fds' - Compare watched file descriptors for array sorting
-+ */
-+static int
-+compare_watched_fds(cupsd_watched_fd_t *p0,
-+                  cupsd_watched_fd_t *p1)
-+{
-+  if (p0->fd != p1->fd)
-+    return (p0->fd < p1->fd ? -1 : 1);
-+
-+  if (p0 == p1)
-+    return (0);
-+
-+  return (p0 < p1 ? -1 : 1);
-+}
-+
-+
-+/*
-+ * 'compare_timeouts' - Compare timeouts for array sorting
-+ */
-+static int
-+compare_timeouts(AvahiTimeout *p0,
-+               AvahiTimeout *p1)
-+{
-+ /*
-+  * Just compare pointers to make it a stable sort.
-+  */
-+
-+  if (p0->cupsd_timeout < p1->cupsd_timeout)
-+    return (-1);
-+  return ((p0->cupsd_timeout == p1->cupsd_timeout) ? 0 : 1);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_new' - Create a new Avahi main loop object for CUPS
-+ */
-+
-+AvahiCupsPoll *
-+avahi_cups_poll_new (void)
-+{
-+  AvahiCupsPoll *cups_poll = malloc(sizeof(AvahiCupsPoll));
-+  if (cups_poll == NULL)
-+    return (NULL);
-+
-+  cups_poll->watched_fds = cupsArrayNew ((cups_array_func_t)compare_watched_fds,
-+                                       NULL);
-+  cups_poll->timeouts = cupsArrayNew ((cups_array_func_t)compare_timeouts,
-+                                    NULL);
-+
-+  cups_poll->api.userdata = cups_poll;
-+  cups_poll->api.watch_new = watch_new;
-+  cups_poll->api.watch_free = watch_free;
-+  cups_poll->api.watch_update = watch_update;
-+  cups_poll->api.watch_get_events = watch_get_events;
-+
-+  cups_poll->api.timeout_new = timeout_new;
-+  cups_poll->api.timeout_update = timeout_update;
-+  cups_poll->api.timeout_free = timeout_free;
-+
-+  return (cups_poll);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_free' - Free an Avahi main loop object for CUPS
-+ */
-+void
-+avahi_cups_poll_free (AvahiCupsPoll *cups_poll)
-+{
-+  cupsd_watched_fd_t *watched_fd;
-+
-+  for (watched_fd = (cupsd_watched_fd_t*)cupsArrayFirst(cups_poll->watched_fds);
-+       watched_fd;
-+       watched_fd = (cupsd_watched_fd_t*)cupsArrayNext(cups_poll->watched_fds)){
-+    cupsArrayClear (watched_fd->watches);
-+  }
-+
-+  cupsArrayClear (cups_poll->watched_fds);
-+  cupsArrayClear (cups_poll->timeouts);
-+}
-+
-+
-+/*
-+ * 'avahi_cups_poll_get' - Get the abstract poll API structure
-+ */
-+
-+const AvahiPoll *
-+avahi_cups_poll_get (AvahiCupsPoll *cups_poll)
-+{
-+  return (&cups_poll->api);
-+}
-+
-+
-+#endif /* HAVE_AVAHI ... from top of file */
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -up cups-1.4.5/scheduler/avahi.h.avahi cups-1.4.5/scheduler/avahi.h
---- cups-1.4.5/scheduler/avahi.h.avahi 2010-12-24 13:11:38.334340988 +0000
-+++ cups-1.4.5/scheduler/avahi.h       2010-12-24 13:11:38.334340988 +0000
-@@ -0,0 +1,49 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Avahi poll implementation for the CUPS scheduler.
-+ *
-+ *   Copyright (C) 2010 Red Hat, Inc.
-+ *   Authors:
-+ *    Tim Waugh <twaugh@redhat.com>
-+ *
-+ *   Distribution and use rights are outlined in the file "LICENSE.txt"
-+ *   which should have been included with this file.  If this file is
-+ *   file is missing or damaged, see the license at "http://www.cups.org/".
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-client/client.h>
-+#  include <avahi-client/publish.h>
-+#endif /* HAVE_AVAHI */
-+
-+#ifdef HAVE_AUTHORIZATION_H
-+#  include <Security/Authorization.h>
-+#endif /* HAVE_AUTHORIZATION_H */
-+
-+
-+#ifdef HAVE_AVAHI
-+typedef struct
-+{
-+    AvahiPoll api;
-+    cups_array_t *watched_fds;
-+    cups_array_t *timeouts;
-+} AvahiCupsPoll;
-+#endif /* HAVE_AVAHI */
-+
-+/*
-+ * Prototypes...
-+ */
-+
-+#ifdef HAVE_AVAHI
-+extern AvahiCupsPoll *        avahi_cups_poll_new(void);
-+extern void           avahi_cups_poll_free(AvahiCupsPoll *cups_poll);
-+extern const AvahiPoll *avahi_cups_poll_get(AvahiCupsPoll *cups_poll);
-+#endif /* HAVE_AVAHI */
-+
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -up cups-1.4.5/scheduler/cupsd.h.avahi cups-1.4.5/scheduler/cupsd.h
---- cups-1.4.5/scheduler/cupsd.h.avahi 2010-09-21 23:34:57.000000000 +0100
-+++ cups-1.4.5/scheduler/cupsd.h       2010-12-24 13:11:38.335340961 +0000
-@@ -147,6 +147,15 @@ extern const char *cups_hstrerror(int);
- typedef void (*cupsd_selfunc_t)(void *data);
-+#ifdef HAVE_AVAHI
-+/*
-+ * Timeout callback function type...
-+ */
-+
-+typedef struct _cupsd_timeout_s cupsd_timeout_t;
-+typedef void (*cupsd_timeoutfunc_t)(cupsd_timeout_t *timeout, void *data);
-+#endif /* HAVE_AVAHI */
-+
- /*
-  * Globals...
-@@ -188,6 +197,9 @@ VAR PSQUpdateQuotaProcPtr PSQUpdateQuota
-                                       /* Apple PrintService quota function */
- #endif /* __APPLE__ && HAVE_DLFCN_H */
-+#ifdef HAVE_AVAHI
-+VAR cups_array_t *Timeouts;           /* Timed callbacks for main loop */
-+#endif /* HAVE_AVAHI */
-@@ -240,6 +252,18 @@ extern void       cupsdRemoveSelect(int fd);
- extern void   cupsdStartSelect(void);
- extern void   cupsdStopSelect(void);
-+#ifdef HAVE_AVAHI
-+extern void     cupsdInitTimeouts(void);
-+extern cupsd_timeout_t *cupsdAddTimeout (const struct timeval *tv,
-+                                       cupsd_timeoutfunc_t cb,
-+                                       void *data);
-+extern cupsd_timeout_t *cupsdNextTimeout (long *delay);
-+extern void     cupsdRunTimeout (cupsd_timeout_t *timeout);
-+extern void     cupsdUpdateTimeout (cupsd_timeout_t *timeout,
-+                                  const struct timeval *tv);
-+extern void     cupsdRemoveTimeout (cupsd_timeout_t *timeout);
-+#endif /* HAVE_AVAHI */
-+
- extern int    cupsdRemoveFile(const char *filename);
-diff -up cups-1.4.5/scheduler/dirsvc.c.avahi cups-1.4.5/scheduler/dirsvc.c
---- cups-1.4.5/scheduler/dirsvc.c.avahi        2010-12-24 13:11:33.679463507 +0000
-+++ cups-1.4.5/scheduler/dirsvc.c      2010-12-24 13:11:38.343340751 +0000
-@@ -99,6 +99,13 @@
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_DNSSD
-+typedef char *cupsd_txt_record_t;
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+typedef AvahiStringList *cupsd_txt_record_t;
-+#endif /* HAVE_AVAHI */
-+
- /*
-  * Local functions...
-  */
-@@ -159,15 +166,20 @@ static void      update_polling(void);
- static void   update_smb(int onoff);
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+static cupsd_txt_record_t dnssdBuildTxtRecord(int *txt_len, cupsd_printer_t *p,
-+                                            int for_lpd);
-+static void   dnssdDeregisterPrinter(cupsd_printer_t *p);
-+static int    dnssdComparePrinters(cupsd_printer_t *a, cupsd_printer_t *b);
-+static void   dnssdRegisterPrinter(cupsd_printer_t *p);
-+static void   dnssdStop(void);
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-+
- #ifdef HAVE_DNSSD
- #  ifdef HAVE_COREFOUNDATION
- static void   dnssdAddAlias(const void *key, const void *value,
-                             void *context);
- #  endif /* HAVE_COREFOUNDATION */
--static char   *dnssdBuildTxtRecord(int *txt_len, cupsd_printer_t *p,
--                                   int for_lpd);
--static int    dnssdComparePrinters(cupsd_printer_t *a, cupsd_printer_t *b);
--static void   dnssdDeregisterPrinter(cupsd_printer_t *p);
- static char   *dnssdPackTxtRecord(int *txt_len, char *keyvalue[][2],
-                                   int count);
- static void   dnssdRegisterCallback(DNSServiceRef sdRef,
-@@ -175,11 +187,20 @@ static void      dnssdRegisterCallback(DNSSer
-                                     DNSServiceErrorType errorCode,
-                                     const char *name, const char *regtype,
-                                     const char *domain, void *context);
--static void   dnssdRegisterPrinter(cupsd_printer_t *p);
--static void   dnssdStop(void);
- static void   dnssdUpdate(void);
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+static AvahiStringList *avahiPackTxtRecord(char *keyvalue[][2],
-+                                         int count);
-+static void   avahi_entry_group_cb (AvahiEntryGroup *group,
-+                                    AvahiEntryGroupState state,
-+                                    void *userdata);
-+static void   avahi_client_cb (AvahiClient *client,
-+                               AvahiClientState state,
-+                               void *userdata);
-+#endif /* HAVE_AVAHI */
-+
- #ifdef HAVE_LDAP
- static const char * const ldap_attrs[] =/* CUPS LDAP attributes */
-               {
-@@ -283,10 +304,10 @@ cupsdDeregisterPrinter(
-     ldap_dereg_printer(p);
- #endif /* HAVE_LDAP */
--#ifdef HAVE_DNSSD
--  if (removeit && (BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDRef)
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+  if (removeit && (BrowseLocalProtocols & BROWSE_DNSSD))
-     dnssdDeregisterPrinter(p);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- }
-@@ -694,10 +715,10 @@ cupsdRegisterPrinter(cupsd_printer_t *p)
-     slpRegisterPrinter(p); */
- #endif /* HAVE_LIBSLP */
--#ifdef HAVE_DNSSD
--  if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDRef)
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+  if ((BrowseLocalProtocols & BROWSE_DNSSD))
-     dnssdRegisterPrinter(p);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- }
-@@ -1535,13 +1556,16 @@ cupsdStartBrowsing(void)
-   else
-     BrowseSocket = -1;
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-   if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_DNSSD)
-   {
-+#ifdef HAVE_DNSSD
-     DNSServiceErrorType error;                /* Error from service creation */
-+#endif /* HAVE_DNSSD */
-     cupsd_listener_t  *lis;           /* Current listening socket */
-+#ifdef HAVE_DNSSD
-    /*
-     * First create a "master" connection for all registrations...
-     */
-@@ -1566,6 +1590,7 @@ cupsdStartBrowsing(void)
-       fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
-       cupsdAddSelect(fd, (cupsd_selfunc_t)dnssdUpdate, NULL, NULL);
-+#endif /* HAVE_DNSSD */
-      /*
-       * Then get the port we use for registrations.  If we are not listening
-@@ -1607,9 +1632,20 @@ cupsdStartBrowsing(void)
-       */
-       cupsdUpdateDNSSDName();
-+#ifdef HAVE_DNSSD
-     }
--  }
- #endif /* HAVE_DNSSD */
-+  }
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-+
-+#ifdef HAVE_AVAHI
-+  if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_DNSSD)
-+  {
-+    AvahiCupsPollHandle = avahi_cups_poll_new ();
-+    avahi_client_new (avahi_cups_poll_get (AvahiCupsPollHandle),
-+                    0, avahi_client_cb, NULL, NULL);
-+  }
-+#endif /* HAVE_AVAHI */
- #ifdef HAVE_LIBSLP
-   if ((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP)
-@@ -1835,10 +1871,10 @@ cupsdStopBrowsing(void)
-     BrowseSocket = -1;
-   }
--#ifdef HAVE_DNSSD
--  if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDRef)
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+  if ((BrowseLocalProtocols & BROWSE_DNSSD))
-     dnssdStop();
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- #ifdef HAVE_LIBSLP
-   if (((BrowseLocalProtocols | BrowseRemoteProtocols) & BROWSE_SLP) &&
-@@ -1903,7 +1939,7 @@ cupsdStopPolling(void)
- }
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- /*
-  * 'cupsdUpdateDNSSDName()' - Update the computer name we use for browsing...
-  */
-@@ -1911,7 +1947,12 @@ cupsdStopPolling(void)
- void
- cupsdUpdateDNSSDName(void)
- {
-+#ifdef HAVE_DNSSD
-   DNSServiceErrorType error;          /* Error from service creation */
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  int         ret;                    /* Error from service creation */
-+#endif /* HAVE_AVAHI */
-   char                webif[1024];            /* Web interface share name */
- #ifdef HAVE_COREFOUNDATION_H
-   SCDynamicStoreRef sc;                       /* Context for dynamic store */
-@@ -2043,6 +2084,7 @@ cupsdUpdateDNSSDName(void)
-     else
-       strlcpy(webif, "CUPS Web Interface", sizeof(webif));
-+#ifdef HAVE_DNSSD
-     if (WebIFRef)
-       DNSServiceRefDeallocate(WebIFRef);
-@@ -2055,6 +2097,42 @@ cupsdUpdateDNSSDName(void)
-                                   NULL)) != kDNSServiceErr_NoError)
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "DNS-SD web interface registration failed: %d", error);
-+#endif /* HAVE_DNSSD */
-+
-+#ifdef HAVE_AVAHI
-+    if (!AvahiCupsClient)
-+     /*
-+      * Client not yet running.
-+      */
-+      return;
-+
-+    if (AvahiWebIFGroup)
-+      avahi_entry_group_reset (AvahiWebIFGroup);
-+    else
-+      AvahiWebIFGroup = avahi_entry_group_new (AvahiCupsClient,
-+                                             avahi_entry_group_cb,
-+                                             NULL);
-+
-+    if (AvahiWebIFGroup)
-+    {
-+      ret = avahi_entry_group_add_service (AvahiWebIFGroup,
-+                                         AVAHI_IF_UNSPEC,
-+                                         AVAHI_PROTO_UNSPEC,
-+                                         0, /* flags */
-+                                         webif, /* name */
-+                                         "_http._tcp", /* type */
-+                                         NULL, /* domain */
-+                                         NULL, /* host */
-+                                         htons(DNSSDPort), /* port */
-+                                         "path=/", NULL);
-+      if (ret == 0)
-+      ret = avahi_entry_group_commit (AvahiWebIFGroup);
-+
-+      if (ret != 0)
-+      cupsdLogMessage (CUPSD_LOG_ERROR,
-+                       "Avahi web interface registration failed: %d", ret);
-+    }
-+#endif /* HAVE_AVAHI */
-   }
- }
- #endif /* HAVE_DNSSD */
-@@ -2300,162 +2378,7 @@ dequote(char       *d,                 /* I - Destinat
- }
--#ifdef HAVE_DNSSD
--#  ifdef HAVE_COREFOUNDATION
--/*
-- * 'dnssdAddAlias()' - Add a DNS-SD alias name.
-- */
--
--static void
--dnssdAddAlias(const void *key,                /* I - Key */
--              const void *value,      /* I - Value (domain) */
--            void       *context)      /* I - Unused */
--{
--  char        valueStr[1024],                 /* Domain string */
--      hostname[1024];                 /* Complete hostname */
--
--
--  (void)context;
--
--  if (CFGetTypeID((CFStringRef)value) == CFStringGetTypeID() &&
--      CFStringGetCString((CFStringRef)value, valueStr, sizeof(valueStr),
--                         kCFStringEncodingUTF8))
--  {
--    snprintf(hostname, sizeof(hostname), "%s.%s", DNSSDHostName, valueStr);
--    if (!DNSSDAlias)
--      DNSSDAlias = cupsArrayNew(NULL, NULL);
--
--    cupsdAddAlias(DNSSDAlias, hostname);
--    cupsdLogMessage(CUPSD_LOG_DEBUG, "Added Back to My Mac ServerAlias %s",
--                  hostname);
--  }
--  else
--    cupsdLogMessage(CUPSD_LOG_ERROR,
--                    "Bad Back to My Mac domain in dynamic store!");
--}
--#  endif /* HAVE_COREFOUNDATION */
--
--
--/*
-- * 'dnssdBuildTxtRecord()' - Build a TXT record from printer info.
-- */
--
--static char *                         /* O - TXT record */
--dnssdBuildTxtRecord(
--    int             *txt_len,         /* O - TXT record length */
--    cupsd_printer_t *p,                       /* I - Printer information */
--    int             for_lpd)          /* I - 1 = LPD, 0 = IPP */
--{
--  int         i;                      /* Looping var */
--  char                adminurl_str[256],      /* URL for th admin page */
--              type_str[32],           /* Type to string buffer */
--              state_str[32],          /* State to string buffer */
--              rp_str[1024],           /* Queue name string buffer */
--              air_str[1024],          /* auth-info-required string buffer */
--              *keyvalue[32][2];       /* Table of key/value pairs */
--
--
-- /*
--  * Load up the key value pairs...
--  */
--
--  i = 0;
--
--  keyvalue[i  ][0] = "txtvers";
--  keyvalue[i++][1] = "1";
--
--  keyvalue[i  ][0] = "qtotal";
--  keyvalue[i++][1] = "1";
--
--  keyvalue[i  ][0] = "rp";
--  keyvalue[i++][1] = rp_str;
--  if (for_lpd)
--    strlcpy(rp_str, p->name, sizeof(rp_str));
--  else
--    snprintf(rp_str, sizeof(rp_str), "%s/%s", 
--           (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers", p->name);
--
--  keyvalue[i  ][0] = "ty";
--  keyvalue[i++][1] = p->make_model ? p->make_model : "Unknown";
--
--  httpAssembleURIf(HTTP_URI_CODING_ALL, adminurl_str, sizeof(adminurl_str),
--                   "http", NULL, DNSSDHostName, DNSSDPort, "/%s/%s",
--                 (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers",
--                 p->name);
--  keyvalue[i  ][0] = "adminurl";
--  keyvalue[i++][1] = adminurl_str;
--
--  keyvalue[i  ][0] = "note";
--  keyvalue[i++][1] = p->location ? p->location : "";
--
--  keyvalue[i  ][0] = "priority";
--  keyvalue[i++][1] = for_lpd ? "100" : "0";
--
--  keyvalue[i  ][0] = "product";
--  keyvalue[i++][1] = p->product ? p->product : "Unknown";
--
--  snprintf(type_str, sizeof(type_str), "0x%X", p->type | CUPS_PRINTER_REMOTE);
--  snprintf(state_str, sizeof(state_str), "%d", p->state);
--
--  keyvalue[i  ][0] = "printer-state";
--  keyvalue[i++][1] = state_str;
--
--  keyvalue[i  ][0] = "printer-type";
--  keyvalue[i++][1] = type_str;
--
--  keyvalue[i  ][0] = "Transparent";
--  keyvalue[i++][1] = "T";
--
--  keyvalue[i  ][0] = "Binary";
--  keyvalue[i++][1] = "T";
--
--  keyvalue[i  ][0] = "Fax";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_FAX) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Color";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COLOR) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Duplex";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_DUPLEX) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Staple";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_STAPLE) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Copies";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COPIES) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Collate";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COLLATE) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Punch";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_PUNCH) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Bind";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_BIND) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Sort";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_SORT) ? "T" : "F";
--
--  keyvalue[i  ][0] = "Scan";
--  keyvalue[i++][1] = (p->type & CUPS_PRINTER_MFP) ? "T" : "F";
--
--  keyvalue[i  ][0] = "pdl";
--  keyvalue[i++][1] = p->pdl ? p->pdl : "application/postscript";
--
--  if (get_auth_info_required(p, air_str, sizeof(air_str)))
--  {
--    keyvalue[i  ][0] = "air";
--    keyvalue[i++][1] = air_str;
--  }
--
-- /*
--  * Then pack them into a proper txt record...
--  */
--
--  return (dnssdPackTxtRecord(txt_len, keyvalue, i));
--}
--
--
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- /*
-  * 'dnssdComparePrinters()' - Compare the registered names of two printers.
-  */
-@@ -2479,6 +2402,10 @@ dnssdDeregisterPrinter(
- {
-   cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdDeregisterPrinter(%s)", p->name);
-+#ifdef HAVE_DNSSD
-+  if (!DNSSDRef)
-+    return;
-+
-  /*
-   * Closing the socket deregisters the service
-   */
-@@ -2514,6 +2441,23 @@ dnssdDeregisterPrinter(
-     free(p->printer_txt);
-     p->printer_txt = NULL;
-   }
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  if (p->avahi_group)
-+  {
-+    avahi_entry_group_reset (p->avahi_group);
-+    avahi_entry_group_free (p->avahi_group);
-+    p->avahi_group = NULL;
-+
-+    if (p->ipp_txt)
-+      avahi_string_list_free (p->ipp_txt);
-+
-+    if (p->printer_txt)
-+      avahi_string_list_free (p->printer_txt);
-+
-+    p->ipp_txt = p->printer_txt = NULL;
-+  }
-+#endif /* HAVE_AVAHI */
-  /*
-   * Remove the printer from the array of DNS-SD printers, then clear the
-@@ -2526,140 +2470,53 @@ dnssdDeregisterPrinter(
- /*
-- * 'dnssdPackTxtRecord()' - Pack an array of key/value pairs into the
-- *                          TXT record format.
-+ * 'dnssdRegisterPrinter()' - Start sending broadcast information for a printer
-+ *                          or update the broadcast contents.
-  */
--static char *                         /* O - TXT record */
--dnssdPackTxtRecord(int  *txt_len,     /* O - TXT record length */
--                 char *keyvalue[][2], /* I - Table of key value pairs */
--                 int  count)          /* I - Items in table */
-+static void 
-+dnssdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */
- {
--  int  i;                             /* Looping var */
--  int  length;                                /* Length of TXT record */
--  int  length2;                               /* Length of value */
--  char *txtRecord;                    /* TXT record buffer */
--  char *cursor;                               /* Looping pointer */
-+#ifdef HAVE_DNSSD
-+  DNSServiceErrorType se;             /* dnssd errors */
-+  char                        *ipp_txt,       /* IPP TXT record buffer */
-+                      *printer_txt,   /* LPD TXT record buffer */
-+                      *nameptr;       /* Pointer into name */
-+  int                 ipp_len,        /* IPP TXT record length */
-+                      printer_len;    /* LPD TXT record length */
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  int                 ret;            /* Error code */
-+  AvahiStringList     *ipp_txt,       /* IPP TXT record list */
-+                      *printer_txt;   /* LPD TXT record buffer */
-+#endif /* HAVE_AVAHI */
-+  char                        name[1024];     /* Service name */
-+  const char          *regtype;       /* Registration type */
-- /*
--  * Calculate the buffer size
--  */
-+#ifdef HAVE_DNSSD
-+  if (!DNSSDRef)
-+    return;
--  for (length = i = 0; i < count; i++)
--    length += 1 + strlen(keyvalue[i][0]) + 
--            (keyvalue[i][1] ? 1 + strlen(keyvalue[i][1]) : 0);
-+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name,
-+                  !p->ipp_ref ? "new" : "update");
-+
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name,
-+                !p->avahi_group ? "new" : "update");
-+#endif /* HAVE_AVAHI */
-  /*
--  * Allocate and fill it
-+  * If per-printer sharing was just disabled make sure we're not
-+  * registered before returning.
-   */
--  txtRecord = malloc(length);
--  if (txtRecord)
-+  if (!p->shared)
-   {
--    *txt_len = length;
--
--    for (cursor = txtRecord, i = 0; i < count; i++)
--    {
--     /*
--      * Drop in the p-string style length byte followed by the data
--      */
--
--      length  = strlen(keyvalue[i][0]);
--      length2 = keyvalue[i][1] ? 1 + strlen(keyvalue[i][1]) : 0;
--
--      *cursor++ = (unsigned char)(length + length2);
--
--      memcpy(cursor, keyvalue[i][0], length);
--      cursor += length;
--
--      if (length2)
--      {
--        length2 --;
--      *cursor++ = '=';
--      memcpy(cursor, keyvalue[i][1], length2);
--      cursor += length2;
--      }
--    }
--  }
--
--  return (txtRecord);
--}
--
--
--/*
-- * 'dnssdRegisterCallback()' - DNSServiceRegister callback.
-- */
--
--static void
--dnssdRegisterCallback(
--    DNSServiceRef     sdRef,          /* I - DNS Service reference */
--    DNSServiceFlags   flags,          /* I - Reserved for future use */
--    DNSServiceErrorType       errorCode,      /* I - Error code */
--    const char                *name,          /* I - Service name */
--    const char                *regtype,       /* I - Service type */
--    const char                *domain,        /* I - Domain. ".local" for now */
--    void              *context)       /* I - User-defined context */
--{
--  cupsd_printer_t *p = (cupsd_printer_t *)context;
--                                      /* Current printer */
--
--
--  cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterCallback(%s, %s) for %s (%s)",
--                  name, regtype, p ? p->name : "Web Interface",
--                p ? (p->reg_name ? p->reg_name : "(null)") : "NA");
--
--  if (errorCode)
--  {
--    cupsdLogMessage(CUPSD_LOG_ERROR, 
--                  "DNSServiceRegister failed with error %d", (int)errorCode);
--    return;
--  }
--  else if (p && (!p->reg_name || strcasecmp(name, p->reg_name)))
--  {
--    cupsdLogMessage(CUPSD_LOG_INFO, "Using service name \"%s\" for \"%s\"",
--                    name, p->name);
--
--    cupsArrayRemove(DNSSDPrinters, p);
--    cupsdSetString(&p->reg_name, name);
--    cupsArrayAdd(DNSSDPrinters, p);
--
--    LastEvent |= CUPSD_EVENT_PRINTER_MODIFIED;
--  }
--}
--
--
--/*
-- * 'dnssdRegisterPrinter()' - Start sending broadcast information for a printer
-- *                          or update the broadcast contents.
-- */
--
--static void 
--dnssdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */
--{
--  DNSServiceErrorType se;             /* dnssd errors */
--  char                        *ipp_txt,       /* IPP TXT record buffer */
--                      *printer_txt,   /* LPD TXT record buffer */
--                      name[1024],     /* Service name */
--                      *nameptr;       /* Pointer into name */
--  int                 ipp_len,        /* IPP TXT record length */
--                      printer_len;    /* LPD TXT record length */
--  const char          *regtype;       /* Registration type */
--
--
--  cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name,
--                  !p->ipp_ref ? "new" : "update");
--
-- /*
--  * If per-printer sharing was just disabled make sure we're not
--  * registered before returning.
--  */
--
--  if (!p->shared)
--  {
--    dnssdDeregisterPrinter(p);
--    return;
--  }
-+    dnssdDeregisterPrinter(p);
-+    return;
-+  }
-  /*
-   * The registered name takes the form of "<printer-info> @ <computer name>"...
-@@ -2694,6 +2551,7 @@ dnssdRegisterPrinter(cupsd_printer_t *p)
-   * Register IPP and (optionally) LPD...
-   */
-+#ifdef HAVE_DNSSD
-   ipp_len = 0;                                /* anti-compiler-warning-code */
-   ipp_txt = dnssdBuildTxtRecord(&ipp_len, p, 0);
-@@ -2860,6 +2718,140 @@ dnssdRegisterPrinter(cupsd_printer_t *p)
-     if (printer_txt)
-       free(printer_txt);
-   }
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  if (!AvahiCupsClient)
-+   /*
-+    * Client not running yet.  The client callback will call us again later.
-+    */
-+    return;
-+
-+  ipp_txt = dnssdBuildTxtRecord(NULL, p, 0);
-+  printer_txt = dnssdBuildTxtRecord(NULL, p, 1);
-+  regtype = (p->type & CUPS_PRINTER_FAX) ? "_fax-ipp._tcp" : "_ipp._tcp";
-+
-+  if (p->avahi_group && p->ipp_txt && ipp_txt &&
-+      !avahi_string_list_equal (p->ipp_txt, ipp_txt))
-+  {
-+   /*
-+    * Update the existing registration...
-+    */
-+
-+    avahi_string_list_free (p->ipp_txt);
-+
-+    if (p->printer_txt)
-+      avahi_string_list_free (p->printer_txt);
-+
-+    ret = avahi_entry_group_update_service_txt_strlst (p->avahi_group,
-+                                                     AVAHI_IF_UNSPEC,
-+                                                     AVAHI_PROTO_UNSPEC,
-+                                                     0, name, regtype, NULL,
-+                                                     ipp_txt);
-+    if (ret < 0)
-+      goto update_failed;
-+
-+    p->ipp_txt = ipp_txt;
-+    ipp_txt = NULL;
-+
-+    if (BrowseLocalProtocols & BROWSE_LPD)
-+    {
-+      ret = avahi_entry_group_update_service_txt_strlst (p->avahi_group,
-+                                                       AVAHI_IF_UNSPEC,
-+                                                       AVAHI_PROTO_UNSPEC,
-+                                                       0, name,
-+                                                       "_printer._tcp", NULL,
-+                                                       printer_txt);
-+
-+      if (ret < 0)
-+      goto update_failed;
-+
-+      p->printer_txt = printer_txt;
-+      printer_txt = NULL;
-+    }
-+
-+    ret = avahi_entry_group_commit (p->avahi_group);
-+    if (ret < 0)
-+    {
-+    update_failed:
-+      cupsdLogMessage (CUPSD_LOG_ERROR,
-+                     "Failed to update TXT record for %s: %d",
-+                     name, ret);
-+      avahi_entry_group_reset (p->avahi_group);
-+      avahi_entry_group_free (p->avahi_group);
-+      p->avahi_group = NULL;
-+      ipp_txt = p->ipp_txt;
-+      p->ipp_txt = NULL;
-+    }
-+  }
-+
-+  if (!p->avahi_group)
-+  {
-+   /*
-+    * Initial registration.  Use the _fax subtype for fax queues...
-+    */
-+
-+    p->avahi_group = avahi_entry_group_new (AvahiCupsClient,
-+                                          avahi_entry_group_cb,
-+                                          p);
-+
-+    cupsdLogMessage(CUPSD_LOG_DEBUG,
-+                  "Registering Avahi printer %s with name \"%s\" and "
-+                  "type \"%s\"", p->name, name, regtype);
-+
-+    ret = avahi_entry_group_add_service_strlst (p->avahi_group,
-+                                              AVAHI_IF_UNSPEC,
-+                                              AVAHI_PROTO_UNSPEC,
-+                                              0, name, regtype, NULL, NULL,
-+                                              htons(DNSSDPort),
-+                                              ipp_txt);
-+    if (ret < 0)
-+      goto add_failed;
-+
-+    p->ipp_txt = ipp_txt;
-+    ipp_txt = NULL;
-+
-+    if (BrowseLocalProtocols & BROWSE_LPD)
-+    {
-+      cupsdLogMessage(CUPSD_LOG_DEBUG,
-+                    "Registering Avahi printer %s with name \"%s\" and "
-+                    "type \"_printer._tcp\"", p->name, name);
-+
-+      ret = avahi_entry_group_add_service_strlst (p->avahi_group,
-+                                                AVAHI_IF_UNSPEC,
-+                                                AVAHI_PROTO_UNSPEC,
-+                                                0, name,
-+                                                "_printer._tcp", NULL, NULL,
-+                                                htons(515),
-+                                                printer_txt);
-+      if (ret < 0)
-+      goto add_failed;
-+
-+      p->printer_txt = printer_txt;
-+      printer_txt = NULL;
-+    }
-+
-+    ret = avahi_entry_group_commit (p->avahi_group);
-+
-+    if (ret < 0)
-+    {
-+    add_failed:
-+      cupsdLogMessage (CUPSD_LOG_ERROR,
-+                     "Failed to add Avahi entry for %s: %d",
-+                     name, ret);
-+      avahi_entry_group_reset (p->avahi_group);
-+      avahi_entry_group_free (p->avahi_group);
-+      p->avahi_group = NULL;
-+      ipp_txt = p->ipp_txt;
-+      p->ipp_txt = NULL;
-+    }
-+  }
-+
-+  if (ipp_txt)
-+    avahi_string_list_free (ipp_txt);
-+
-+  if (printer_txt)
-+    avahi_string_list_free (printer_txt);
-+#endif /* HAVE_AVAHI */
- }
-@@ -2872,6 +2864,10 @@ dnssdStop(void)
- {
-   cupsd_printer_t     *p;             /* Current printer */
-+#ifdef HAVE_DNSSD
-+  if (!DNSSDRef)
-+    return;
-+#endif /* HAVE_DNSSD */
-  /*
-   * De-register the individual printers
-@@ -2882,6 +2878,7 @@ dnssdStop(void)
-        p = (cupsd_printer_t *)cupsArrayNext(Printers))
-     dnssdDeregisterPrinter(p);
-+#ifdef HAVE_DNSSD
-  /*
-   * Shutdown the rest of the service refs...
-   */
-@@ -2902,6 +2899,7 @@ dnssdStop(void)
-   DNSServiceRefDeallocate(DNSSDRef);
-   DNSSDRef = NULL;
-+#endif /* HAVE_DNSSD */
-   cupsArrayDelete(DNSSDPrinters);
-   DNSSDPrinters = NULL;
-@@ -2911,6 +2909,272 @@ dnssdStop(void)
- /*
-+ * 'dnssdBuildTxtRecord()' - Build a TXT record from printer info.
-+ */
-+
-+static cupsd_txt_record_t             /* O - TXT record */
-+dnssdBuildTxtRecord(
-+    int             *txt_len,         /* O - TXT record length */
-+    cupsd_printer_t *p,                       /* I - Printer information */
-+    int             for_lpd)          /* I - 1 = LPD, 0 = IPP */
-+{
-+  int         i;                      /* Looping var */
-+  char                adminurl_str[256],      /* URL for th admin page */
-+              type_str[32],           /* Type to string buffer */
-+              state_str[32],          /* State to string buffer */
-+              rp_str[1024],           /* Queue name string buffer */
-+              air_str[1024],          /* auth-info-required string buffer */
-+              *keyvalue[32][2];       /* Table of key/value pairs */
-+
-+
-+ /*
-+  * Load up the key value pairs...
-+  */
-+
-+  i = 0;
-+
-+  keyvalue[i  ][0] = "txtvers";
-+  keyvalue[i++][1] = "1";
-+
-+  keyvalue[i  ][0] = "qtotal";
-+  keyvalue[i++][1] = "1";
-+
-+  keyvalue[i  ][0] = "rp";
-+  keyvalue[i++][1] = rp_str;
-+  if (for_lpd)
-+    strlcpy(rp_str, p->name, sizeof(rp_str));
-+  else
-+    snprintf(rp_str, sizeof(rp_str), "%s/%s", 
-+           (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers", p->name);
-+
-+  keyvalue[i  ][0] = "ty";
-+  keyvalue[i++][1] = p->make_model ? p->make_model : "Unknown";
-+
-+  httpAssembleURIf(HTTP_URI_CODING_ALL, adminurl_str, sizeof(adminurl_str),
-+                   "http", NULL, DNSSDHostName, DNSSDPort, "/%s/%s",
-+                 (p->type & CUPS_PRINTER_CLASS) ? "classes" : "printers",
-+                 p->name);
-+  keyvalue[i  ][0] = "adminurl";
-+  keyvalue[i++][1] = adminurl_str;
-+
-+  keyvalue[i  ][0] = "note";
-+  keyvalue[i++][1] = p->location ? p->location : "";
-+
-+  keyvalue[i  ][0] = "priority";
-+  keyvalue[i++][1] = for_lpd ? "100" : "0";
-+
-+  keyvalue[i  ][0] = "product";
-+  keyvalue[i++][1] = p->product ? p->product : "Unknown";
-+
-+  snprintf(type_str, sizeof(type_str), "0x%X", p->type | CUPS_PRINTER_REMOTE);
-+  snprintf(state_str, sizeof(state_str), "%d", p->state);
-+
-+  keyvalue[i  ][0] = "printer-state";
-+  keyvalue[i++][1] = state_str;
-+
-+  keyvalue[i  ][0] = "printer-type";
-+  keyvalue[i++][1] = type_str;
-+
-+  keyvalue[i  ][0] = "Transparent";
-+  keyvalue[i++][1] = "T";
-+
-+  keyvalue[i  ][0] = "Binary";
-+  keyvalue[i++][1] = "T";
-+
-+  keyvalue[i  ][0] = "Fax";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_FAX) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Color";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COLOR) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Duplex";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_DUPLEX) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Staple";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_STAPLE) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Copies";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COPIES) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Collate";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_COLLATE) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Punch";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_PUNCH) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Bind";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_BIND) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Sort";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_SORT) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "Scan";
-+  keyvalue[i++][1] = (p->type & CUPS_PRINTER_MFP) ? "T" : "F";
-+
-+  keyvalue[i  ][0] = "pdl";
-+  keyvalue[i++][1] = p->pdl ? p->pdl : "application/postscript";
-+
-+  if (get_auth_info_required(p, air_str, sizeof(air_str)))
-+  {
-+    keyvalue[i  ][0] = "air";
-+    keyvalue[i++][1] = air_str;
-+  }
-+
-+ /*
-+  * Then pack them into a proper txt record...
-+  */
-+
-+#ifdef HAVE_DNSSD
-+  return (dnssdPackTxtRecord(txt_len, keyvalue, i));
-+#endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  return (avahiPackTxtRecord(keyvalue, i));
-+#endif /* HAVE_AVAHI */
-+}
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-+
-+
-+#ifdef HAVE_DNSSD
-+#  ifdef HAVE_COREFOUNDATION
-+/*
-+ * 'dnssdAddAlias()' - Add a DNS-SD alias name.
-+ */
-+
-+static void
-+dnssdAddAlias(const void *key,                /* I - Key */
-+              const void *value,      /* I - Value (domain) */
-+            void       *context)      /* I - Unused */
-+{
-+  char        valueStr[1024],                 /* Domain string */
-+      hostname[1024];                 /* Complete hostname */
-+
-+
-+  (void)context;
-+
-+  if (CFGetTypeID((CFStringRef)value) == CFStringGetTypeID() &&
-+      CFStringGetCString((CFStringRef)value, valueStr, sizeof(valueStr),
-+                         kCFStringEncodingUTF8))
-+  {
-+    snprintf(hostname, sizeof(hostname), "%s.%s", DNSSDHostName, valueStr);
-+    if (!DNSSDAlias)
-+      DNSSDAlias = cupsArrayNew(NULL, NULL);
-+
-+    cupsdAddAlias(DNSSDAlias, hostname);
-+    cupsdLogMessage(CUPSD_LOG_DEBUG, "Added Back to My Mac ServerAlias %s",
-+                  hostname);
-+  }
-+  else
-+    cupsdLogMessage(CUPSD_LOG_ERROR,
-+                    "Bad Back to My Mac domain in dynamic store!");
-+}
-+#  endif /* HAVE_COREFOUNDATION */
-+
-+
-+/*
-+ * 'dnssdPackTxtRecord()' - Pack an array of key/value pairs into the
-+ *                          TXT record format.
-+ */
-+
-+static char *                         /* O - TXT record */
-+dnssdPackTxtRecord(int  *txt_len,     /* O - TXT record length */
-+                 char *keyvalue[][2], /* I - Table of key value pairs */
-+                 int  count)          /* I - Items in table */
-+{
-+  int  i;                             /* Looping var */
-+  int  length;                                /* Length of TXT record */
-+  int  length2;                               /* Length of value */
-+  char *txtRecord;                    /* TXT record buffer */
-+  char *cursor;                               /* Looping pointer */
-+
-+
-+ /*
-+  * Calculate the buffer size
-+  */
-+
-+  for (length = i = 0; i < count; i++)
-+    length += 1 + strlen(keyvalue[i][0]) + 
-+            (keyvalue[i][1] ? 1 + strlen(keyvalue[i][1]) : 0);
-+
-+ /*
-+  * Allocate and fill it
-+  */
-+
-+  txtRecord = malloc(length);
-+  if (txtRecord)
-+  {
-+    *txt_len = length;
-+
-+    for (cursor = txtRecord, i = 0; i < count; i++)
-+    {
-+     /*
-+      * Drop in the p-string style length byte followed by the data
-+      */
-+
-+      length  = strlen(keyvalue[i][0]);
-+      length2 = keyvalue[i][1] ? 1 + strlen(keyvalue[i][1]) : 0;
-+
-+      *cursor++ = (unsigned char)(length + length2);
-+
-+      memcpy(cursor, keyvalue[i][0], length);
-+      cursor += length;
-+
-+      if (length2)
-+      {
-+        length2 --;
-+      *cursor++ = '=';
-+      memcpy(cursor, keyvalue[i][1], length2);
-+      cursor += length2;
-+      }
-+    }
-+  }
-+
-+  return (txtRecord);
-+}
-+
-+
-+/*
-+ * 'dnssdRegisterCallback()' - DNSServiceRegister callback.
-+ */
-+
-+static void
-+dnssdRegisterCallback(
-+    DNSServiceRef     sdRef,          /* I - DNS Service reference */
-+    DNSServiceFlags   flags,          /* I - Reserved for future use */
-+    DNSServiceErrorType       errorCode,      /* I - Error code */
-+    const char                *name,          /* I - Service name */
-+    const char                *regtype,       /* I - Service type */
-+    const char                *domain,        /* I - Domain. ".local" for now */
-+    void              *context)       /* I - User-defined context */
-+{
-+  cupsd_printer_t *p = (cupsd_printer_t *)context;
-+                                      /* Current printer */
-+
-+
-+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterCallback(%s, %s) for %s (%s)",
-+                  name, regtype, p ? p->name : "Web Interface",
-+                p ? (p->reg_name ? p->reg_name : "(null)") : "NA");
-+
-+  if (errorCode)
-+  {
-+    cupsdLogMessage(CUPSD_LOG_ERROR, 
-+                  "DNSServiceRegister failed with error %d", (int)errorCode);
-+    return;
-+  }
-+  else if (p && (!p->reg_name || strcasecmp(name, p->reg_name)))
-+  {
-+    cupsdLogMessage(CUPSD_LOG_INFO, "Using service name \"%s\" for \"%s\"",
-+                    name, p->name);
-+
-+    cupsArrayRemove(DNSSDPrinters, p);
-+    cupsdSetString(&p->reg_name, name);
-+    cupsArrayAdd(DNSSDPrinters, p);
-+
-+    LastEvent |= CUPSD_EVENT_PRINTER_MODIFIED;
-+  }
-+}
-+
-+
-+/*
-  * 'dnssdUpdate()' - Handle DNS-SD queries.
-  */
-@@ -2931,6 +3195,126 @@ dnssdUpdate(void)
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+/*
-+ * 'avahiPackTxtRecord()' - Pack an array of key/value pairs into an
-+ *                          AvahiStringList.
-+ */
-+
-+static AvahiStringList *              /* O - new string list */
-+avahiPackTxtRecord(char *keyvalue[][2],       /* I - Table of key value pairs */
-+                 int count)           /* I - Items in table */
-+{
-+  AvahiStringList *strlst = NULL;
-+  char **elements;
-+  size_t len;
-+  int i;
-+
-+  elements = malloc ((1 + count) * sizeof (char *));
-+  if (!elements)
-+    goto cleanup;
-+
-+  for (i = 0; i < count; i++)
-+  {
-+    len = (1 + strlen (keyvalue[i][0]) +
-+         (keyvalue[i][1] ? 1 + strlen (keyvalue[i][1]) : 1));
-+    elements[i] = malloc (len * sizeof (char));
-+    if (!elements[i])
-+      goto cleanup;
-+
-+    snprintf (elements[i], len, "%s=%s", keyvalue[i][0], keyvalue[i][1]);
-+  }
-+
-+  strlst = avahi_string_list_new_from_array ((const char **) elements, count);
-+
-+cleanup:
-+  while (--i >= 0)
-+    free (elements[i]);
-+
-+  free (elements);
-+  return (strlst);
-+}
-+
-+
-+/*
-+ * 'avahi_entry_group_cb()' - Avahi entry group callback function.
-+ */
-+static void
-+avahi_entry_group_cb (AvahiEntryGroup *group,
-+                    AvahiEntryGroupState state,
-+                    void *userdata)
-+{
-+  char *name;
-+
-+  if (userdata)
-+    name = ((cupsd_printer_t *) userdata)->reg_name;
-+  else
-+    name = "CUPS web interface";
-+
-+  switch (state)
-+  {
-+  case AVAHI_ENTRY_GROUP_UNCOMMITED:
-+  case AVAHI_ENTRY_GROUP_REGISTERING:
-+    break;
-+
-+  case AVAHI_ENTRY_GROUP_ESTABLISHED:
-+    cupsdLogMessage (CUPSD_LOG_DEBUG,
-+                   "Avahi entry group established for %s", name);
-+    break;
-+
-+  default:
-+    cupsdLogMessage (CUPSD_LOG_DEBUG,
-+                   "Avahi entry group %s has state %d",
-+                   name, state);
-+    break;
-+  }
-+}
-+
-+/*
-+ * 'avahi_client_cb()' - Avahi client callback function.
-+ */
-+static void
-+avahi_client_cb (AvahiClient *client,
-+               AvahiClientState state,
-+               void *userdata)
-+{
-+  cupsd_printer_t *printer;
-+  switch (state)
-+  {
-+  case AVAHI_CLIENT_S_RUNNING:
-+   /*
-+    * Avahi client started successfully.
-+    */
-+    AvahiCupsClient = client;
-+    cupsdLogMessage (CUPSD_LOG_DEBUG, "Avahi client started");
-+
-+    cupsdUpdateDNSSDName ();
-+
-+    for (printer = (cupsd_printer_t *)cupsArrayFirst(DNSSDPrinters);
-+       printer;
-+       printer = (cupsd_printer_t *)cupsArrayNext(DNSSDPrinters))
-+    {
-+      if (!printer->avahi_group)
-+      dnssdRegisterPrinter (printer);
-+    }
-+
-+    break;
-+
-+  case AVAHI_CLIENT_CONNECTING:
-+    cupsdLogMessage (CUPSD_LOG_DEBUG, "Avahi client connecting");
-+    break;
-+
-+  case AVAHI_CLIENT_FAILURE:
-+    cupsdLogMessage (CUPSD_LOG_ERROR, "Avahi client failed");
-+    break;
-+
-+  default:
-+    cupsdLogMessage (CUPSD_LOG_DEBUG, "Avahi client state: %d", state);
-+  }
-+}
-+#endif /* HAVE_AVAHI */
-+
-+
- /*
-  * 'get_auth_info_required()' - Get the auth-info-required value to advertise.
-  */
-diff -up cups-1.4.5/scheduler/dirsvc.h.avahi cups-1.4.5/scheduler/dirsvc.h
---- cups-1.4.5/scheduler/dirsvc.h.avahi        2009-05-14 18:54:37.000000000 +0100
-+++ cups-1.4.5/scheduler/dirsvc.h      2010-12-24 13:11:38.344340724 +0000
-@@ -32,6 +32,10 @@
- #  endif /* HAVE_LDAP_SSL_H */
- #endif /* HAVE_LDAP */
-+#ifdef HAVE_AVAHI
-+#  include <avahi-client/publish.h>
-+#endif /* HAVE_AVAHI */
-+
- /*
-  * Browse protocols...
-  */
-@@ -132,17 +136,20 @@ VAR int                  PollPipe        VALUE(0);
- VAR cupsd_statbuf_t   *PollStatusBuffer VALUE(NULL);
-                                       /* Status buffer for pollers */
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+VAR int                       DNSSDPort       VALUE(0);
-+                                      /* Port number to register */
- VAR char              *DNSSDComputerName VALUE(NULL),
-                                       /* Computer/server name */
-                       *DNSSDHostName  VALUE(NULL);
-                                       /* Hostname */
--VAR cups_array_t      *DNSSDAlias     VALUE(NULL);
--                                      /* List of dynamic ServerAlias's */
--VAR int                       DNSSDPort       VALUE(0);
--                                      /* Port number to register */
- VAR cups_array_t      *DNSSDPrinters  VALUE(NULL);
-                                       /* Printers we have registered */
-+#endif /* HAVE_DNSSD || HAVE_AVAHI */
-+
-+#ifdef HAVE_DNSSD
-+VAR cups_array_t      *DNSSDAlias     VALUE(NULL);
-+                                      /* List of dynamic ServerAlias's */
- VAR DNSServiceRef     DNSSDRef        VALUE(NULL),
-                                       /* Master DNS-SD service reference */
-                       WebIFRef        VALUE(NULL),
-@@ -151,6 +158,15 @@ VAR DNSServiceRef DNSSDRef        VALUE(NULL),
-                                       /* Remote printer browse reference */
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+VAR AvahiCupsPoll     *AvahiCupsPollHandle    VALUE(NULL);
-+                                      /* AvahiCupsPoll object */
-+VAR AvahiClient               *AvahiCupsClient        VALUE(NULL);
-+                                      /* AvahiClient object */
-+VAR AvahiEntryGroup   *AvahiWebIFGroup        VALUE(NULL);
-+                                      /* Web interface entry group */
-+#endif /* HAVE_AVAHI */
-+
- #ifdef HAVE_LIBSLP
- VAR SLPHandle         BrowseSLPHandle VALUE(NULL);
-                                       /* SLP API handle */
-@@ -198,9 +214,9 @@ extern void        cupsdStartBrowsing(void);
- extern void   cupsdStartPolling(void);
- extern void   cupsdStopBrowsing(void);
- extern void   cupsdStopPolling(void);
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- extern void   cupsdUpdateDNSSDName(void);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- #ifdef HAVE_LDAP
- extern void   cupsdUpdateLDAPBrowse(void);
- #endif /* HAVE_LDAP */
-diff -up cups-1.4.5/scheduler/main.c.avahi cups-1.4.5/scheduler/main.c
---- cups-1.4.5/scheduler/main.c.avahi  2010-12-24 13:11:33.633464718 +0000
-+++ cups-1.4.5/scheduler/main.c        2010-12-24 13:11:38.348340619 +0000
-@@ -161,6 +161,10 @@ main(int  argc,                           /* I - Number of comm
-   int                 launchd_idle_exit;
-                                       /* Idle exit on select timeout? */
- #endif        /* HAVE_LAUNCHD */
-+#ifdef HAVE_AVAHI
-+  cupsd_timeout_t     *tmo;           /* Next scheduled timed callback */
-+  long                        tmo_delay;      /* Time before it must be called */
-+#endif /* HAVE_AVAHI */
- #ifdef HAVE_GETEUID
-@@ -561,6 +565,14 @@ main(int  argc,                           /* I - Number of comm
-   httpInitialize();
-+#ifdef HAVE_AVAHI
-+ /*
-+  * Initialize timed callback structures.
-+  */
-+
-+  cupsdInitTimeouts();
-+#endif /* HAVE_AVAHI */
-+
-   cupsdStartServer();
-  /*
-@@ -900,6 +912,16 @@ main(int  argc,                           /* I - Number of comm
-     }
- #endif /* __APPLE__ */
-+#ifdef HAVE_AVAHI
-+   /*
-+    * If a timed callback is due, run it.
-+    */
-+
-+    tmo = cupsdNextTimeout (&tmo_delay);
-+    if (tmo && tmo_delay == 0)
-+      cupsdRunTimeout (tmo);
-+#endif /* HAVE_AVAHI */
-+
- #ifndef __APPLE__
-    /*
-     * Update the network interfaces once a minute...
-@@ -1925,6 +1947,10 @@ select_timeout(int fds)                 /* I - Number 
-   cupsd_job_t         *job;           /* Job information */
-   cupsd_subscription_t        *sub;           /* Subscription information */
-   const char          *why;           /* Debugging aid */
-+#ifdef HAVE_AVAHI
-+  cupsd_timeout_t     *tmo;           /* Timed callback */
-+  long                        tmo_delay;      /* Seconds before calling it */
-+#endif /* HAVE_AVAHI */
-  /*
-@@ -1967,6 +1993,19 @@ select_timeout(int fds)                 /* I - Number 
-   }
- #endif /* __APPLE__ */
-+#ifdef HAVE_AVAHI
-+ /*
-+  * See if there are any scheduled timed callbacks to run.
-+  */
-+
-+  tmo = cupsdNextTimeout (&tmo_delay);
-+  if (tmo)
-+  {
-+    timeout = tmo_delay;
-+    why = "run a timed callback";
-+  }
-+#endif /* HAVE_AVAHI */
-+
-  /*
-   * Check whether we are accepting new connections...
-   */
-diff -up cups-1.4.5/scheduler/Makefile.avahi cups-1.4.5/scheduler/Makefile
---- cups-1.4.5/scheduler/Makefile.avahi        2010-12-24 13:11:33.739461928 +0000
-+++ cups-1.4.5/scheduler/Makefile      2010-12-24 13:11:38.332341040 +0000
-@@ -17,6 +17,7 @@ include ../Makedefs
- CUPSDOBJS =   \
-               auth.o \
-+              avahi.o \
-               banners.o \
-               cert.o \
-               classes.o \
-@@ -39,7 +40,8 @@ CUPSDOBJS =  \
-               server.o \
-               statbuf.o \
-               subscriptions.o \
--              sysman.o
-+              sysman.o \
-+              timeout.o
- LIBOBJS =     \
-               filter.o \
-               mime.o \
-diff -up cups-1.4.5/scheduler/printers.c.avahi cups-1.4.5/scheduler/printers.c
---- cups-1.4.5/scheduler/printers.c.avahi      2010-12-24 13:11:33.784460744 +0000
-+++ cups-1.4.5/scheduler/printers.c    2010-12-24 13:11:38.356340409 +0000
-@@ -929,10 +929,10 @@ cupsdDeletePrinter(
-   cupsdClearString(&p->alert);
-   cupsdClearString(&p->alert_description);
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-   cupsdClearString(&p->product);
-   cupsdClearString(&p->pdl);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-   cupsArrayDelete(p->filetypes);
-@@ -1301,9 +1301,9 @@ cupsdLoadAllPrinters(void)
-     {
-       if (value)
-       {
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-         p->product = _cupsStrAlloc(value);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-       }
-       else
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-@@ -1717,10 +1717,10 @@ cupsdSaveAllPrinters(void)
-     cupsFilePrintf(fp, "Type %d\n", printer->type);
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-     if (printer->product)
-       cupsFilePutConf(fp, "Product", printer->product);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-     for (ptr = (char *)cupsArrayFirst(printer->filters);
-          ptr;
-@@ -3860,7 +3860,7 @@ add_printer_formats(cupsd_printer_t *p)  
-     attr->values[i].string.text = _cupsStrAlloc(mimetype);
-   }
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-   {
-     char              pdl[1024];      /* Buffer to build pdl list */
-     mime_filter_t     *filter;        /* MIME filter looping var */
-@@ -3914,7 +3914,7 @@ add_printer_formats(cupsd_printer_t *p)  
-     cupsdSetString(&p->pdl, pdl);
-   }
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- }
-@@ -4951,9 +4951,9 @@ load_ppd(cupsd_printer_t *p)             /* I - Pri
-       attr->values[i].string.text = _cupsStrAlloc("bcp");
-     }
--#ifdef HAVE_DNSSD
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-     cupsdSetString(&p->product, ppd->product);
--#endif /* HAVE_DNSSD */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
-     if (ppdFindAttr(ppd, "APRemoteQueueID", NULL))
-       p->type |= CUPS_PRINTER_REMOTE;
-diff -up cups-1.4.5/scheduler/printers.h.avahi cups-1.4.5/scheduler/printers.h
---- cups-1.4.5/scheduler/printers.h.avahi      2010-03-30 23:07:33.000000000 +0100
-+++ cups-1.4.5/scheduler/printers.h    2010-12-24 13:11:38.357340382 +0000
-@@ -16,6 +16,9 @@
- #ifdef HAVE_DNSSD
- #  include <dns_sd.h>
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+#  include "avahi.h"
-+#endif /* HAVE_AVAHI */
- #include <cups/pwg-private.h>
-@@ -99,17 +102,24 @@ typedef struct cupsd_printer_s
-   char                *recoverable;           /* com.apple.print.recoverable-message */
-   _pwg_t      *pwg;                   /* PWG<->PPD mapping data */
-+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-+  char                *reg_name;              /* Name used for service registration */
-+  char                *product,               /* PPD Product string */
-+              *pdl;                   /* pdl value for TXT record */
-+#endif /* defined(HAVE_DNSSD) || defined(HAVE_AVAHI) */
- #ifdef HAVE_DNSSD
--  char                *reg_name,              /* Name used for service registration */
--              *product,               /* PPD Product string */
--              *pdl,                   /* pdl value for TXT record */
--              *ipp_txt,               /* IPP TXT record contents */
-+  char                *ipp_txt,               /* IPP TXT record contents */
-               *printer_txt;           /* LPD TXT record contents */
-   int         ipp_len,                /* IPP TXT record length */
-               printer_len;            /* LPD TXT record length */
-   DNSServiceRef       ipp_ref,                /* Reference for _ipp._tcp,_cups */
-               printer_ref;            /* Reference for _printer._tcp */
- #endif /* HAVE_DNSSD */
-+#ifdef HAVE_AVAHI
-+  AvahiStringList *ipp_txt,           /* IPP TXT record */
-+                *printer_txt;         /* LPD TXT record */
-+  AvahiEntryGroup *avahi_group;               /* Avahi entry group */
-+#endif /* HAVE_AVAHI */
- } cupsd_printer_t;
-diff -up cups-1.4.5/scheduler/timeout.c.avahi cups-1.4.5/scheduler/timeout.c
---- cups-1.4.5/scheduler/timeout.c.avahi       2010-12-24 13:11:38.358340356 +0000
-+++ cups-1.4.5/scheduler/timeout.c     2010-12-24 13:11:38.358340356 +0000
-@@ -0,0 +1,191 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Timeout functions for the Common UNIX Printing System (CUPS).
-+ *
-+ *   Copyright (C) 2010 Red Hat, Inc.
-+ *   Authors:
-+ *     Tim Waugh <twaugh@redhat.com>
-+ *
-+ *   Distribution and use rights are outlined in the file "LICENSE.txt"
-+ *   which should have been included with this file.  If this file is
-+ *   file is missing or damaged, see the license at "http://www.cups.org/".
-+ *
-+ * Contents:
-+ *
-+ *   cupsdInitTimeouts()  - Initialise timeout structure.
-+ *   cupsdAddTimeout()    - Add a timed callback.
-+ *   cupsdNextTimeout()   - Find the next enabled timed callback.
-+ *   cupsdUpdateTimeout() - Adjust the time of a timed callback or disable it.
-+ *   cupsdRemoveTimeout() - Discard a timed callback.
-+ *   compare_timeouts()   - Compare timed callbacks for array sorting.
-+ */
-+
-+#include <config.h>
-+
-+#ifdef HAVE_AVAHI /* Applies to entire file... */
-+
-+/*
-+ * Include necessary headers...
-+ */
-+
-+#include "cupsd.h"
-+
-+#if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
-+#  include <malloc.h>
-+#endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
-+
-+#ifdef HAVE_AVAHI
-+#  include <avahi-common/timeval.h>
-+#endif /* HAVE_AVAHI */
-+
-+
-+struct _cupsd_timeout_s
-+{
-+  struct timeval when;
-+  int enabled;
-+  cupsd_timeoutfunc_t callback;
-+  void *data;
-+};
-+
-+/*
-+ * Local functions...
-+ */
-+
-+/*
-+ * 'compare_timeouts()' - Compare timed callbacks for array sorting.
-+ */
-+
-+static int
-+compare_timeouts (cupsd_timeout_t *p0, cupsd_timeout_t *p1)
-+{
-+  if (!p0->enabled || !p1->enabled)
-+  {
-+    if (!p0->enabled && !p1->enabled)
-+      return (0);
-+
-+    return (p0->enabled ? -1 : 1);
-+  }
-+
-+  return (avahi_timeval_compare (&p0->when, &p1->when));
-+}
-+
-+
-+/*
-+ * 'cupsdInitTimeouts()' - Initialise timeout structures.
-+ */
-+
-+void
-+cupsdInitTimeouts(void)
-+{
-+  Timeouts = cupsArrayNew ((cups_array_func_t)compare_timeouts, NULL);
-+}
-+
-+
-+/*
-+ * 'cupsdAddTimeout()' - Add a timed callback.
-+ */
-+
-+cupsd_timeout_t *                             /* O - Timeout handle */
-+cupsdAddTimeout(const struct timeval *tv,     /* I - Absolute time */
-+              cupsd_timeoutfunc_t cb,         /* I - Callback function */
-+              void *data)                     /* I - User data */
-+{
-+  cupsd_timeout_t *timeout;
-+
-+  timeout = malloc (sizeof(cupsd_timeout_t));
-+  if (timeout != NULL)
-+  {
-+    timeout->enabled = (tv != NULL);
-+    if (tv)
-+    {
-+      timeout->when.tv_sec = tv->tv_sec;
-+      timeout->when.tv_usec = tv->tv_usec;
-+    }
-+
-+    timeout->callback = cb;
-+    timeout->data = data;
-+    cupsArrayAdd (Timeouts, timeout);
-+  }
-+
-+  return timeout;
-+}
-+
-+
-+/*
-+ * 'cupsdNextTimeout()' - Find the next enabled timed callback.
-+ */
-+
-+cupsd_timeout_t *             /* O - Next enabled timeout or NULL */
-+cupsdNextTimeout(long *delay) /* O - Seconds before scheduled */
-+{
-+  cupsd_timeout_t *first = cupsArrayFirst (Timeouts);
-+  struct timeval curtime;
-+
-+  if (first && !first->enabled)
-+    first = NULL;
-+
-+  if (first && delay)
-+  {
-+    gettimeofday (&curtime, NULL);
-+    if (avahi_timeval_compare (&curtime, &first->when) > 0)
-+    {
-+      *delay = 0;
-+    } else {
-+      *delay = 1 + first->when.tv_sec - curtime.tv_sec;
-+      if (first->when.tv_usec < curtime.tv_usec)
-+      (*delay)--;
-+    }
-+  }
-+
-+  return (first);
-+}
-+
-+
-+/*
-+ * 'cupsdRunTimeout()' - Run a timed callback.
-+ */
-+
-+void
-+cupsdRunTimeout(cupsd_timeout_t *timeout)     /* I - Timeout */
-+{
-+  timeout->enabled = 0;
-+  timeout->callback (timeout, timeout->data);
-+}
-+
-+/*
-+ * 'cupsdUpdateTimeout()' - Adjust the time of a timed callback or disable it.
-+ */
-+
-+void
-+cupsdUpdateTimeout(cupsd_timeout_t *timeout,  /* I - Timeout */
-+                 const struct timeval *tv)    /* I - Absolute time or NULL */
-+{
-+  cupsArrayRemove (Timeouts, timeout);
-+  timeout->enabled = (tv != NULL);
-+  if (tv)
-+  {
-+    timeout->when.tv_sec = tv->tv_sec;
-+    timeout->when.tv_usec = tv->tv_usec;
-+  }
-+  cupsArrayAdd (Timeouts, timeout);
-+}
-+
-+
-+/*
-+ * 'cupsdRemoveTimeout()' - Discard a timed callback.
-+ */
-+
-+void
-+cupsdRemoveTimeout(cupsd_timeout_t *timeout)  /* I - Timeout */
-+{
-+  cupsArrayRemove (Timeouts, timeout);
-+  free (timeout);
-+}
-+
-+
-+#endif /* HAVE_AVAHI ... from top of file */
-+
-+/*
-+ * End of "$Id$".
-+ */
diff --git a/cups/patches/cups-banners.patch b/cups/patches/cups-banners.patch
deleted file mode 100644 (file)
index 6907c91..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- cups-1.2rc2/scheduler/banners.c.banners    2006-04-19 16:12:07.000000000 +0100
-+++ cups-1.2rc2/scheduler/banners.c    2006-04-19 16:12:42.000000000 +0100
-@@ -119,6 +119,8 @@
-     if ((ext = strrchr(dent->filename, '.')) != NULL)
-       if (!strcmp(ext, ".bck") ||
-           !strcmp(ext, ".bak") ||
-+          !strcmp(ext, ".rpmnew") ||
-+          !strcmp(ext, ".rpmsave") ||
-         !strcmp(ext, ".sav"))
-       continue;
diff --git a/cups/patches/cups-build.patch b/cups/patches/cups-build.patch
deleted file mode 100644 (file)
index 727deb2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-diff -up cups-1.4rc1/Makedefs.in.build cups-1.4rc1/Makedefs.in
---- cups-1.4rc1/Makedefs.in.build      2009-05-27 00:27:06.000000000 +0100
-+++ cups-1.4rc1/Makedefs.in    2009-06-17 11:18:27.185443255 +0100
-@@ -124,7 +124,7 @@ ARFLAGS            =       @ARFLAGS@
- BACKLIBS      =       @BACKLIBS@
- BANNERTOPS    =       @BANNERTOPS@
- CFLAGS                =       @CPPFLAGS@ @CFLAGS@
--COMMONLIBS    =       @LIBS@
-+COMMONLIBS    =       @LIBS@ $(DNSSDLIBS)
- CUPSDLIBS     =       @CUPSDLIBS@
- CXXFLAGS      =       @CPPFLAGS@ @CXXFLAGS@
- CXXLIBS               =       @CXXLIBS@
-diff -up cups-1.4rc1/scheduler/dirsvc.c.build cups-1.4rc1/scheduler/dirsvc.c
---- cups-1.4rc1/scheduler/dirsvc.c.build       2009-05-14 18:54:37.000000000 +0100
-+++ cups-1.4rc1/scheduler/dirsvc.c     2009-06-17 11:23:23.366318546 +0100
-@@ -2042,7 +2042,7 @@ cupsdUpdateDNSSDName(void)
-     WebIFRef = DNSSDRef;
-     if ((error = DNSServiceRegister(&WebIFRef,
--                                  kDNSServiceFlagsShareConnection,
-+                                  0,
-                                   0, webif, "_http._tcp", NULL,
-                                   NULL, htons(DNSSDPort), 7,
-                                   "\006path=/", dnssdRegisterCallback,
-@@ -2765,7 +2765,7 @@ dnssdRegisterPrinter(cupsd_printer_t *p)
-     do
-     {
-       p->ipp_ref = DNSSDRef;
--      if ((se = DNSServiceRegister(&p->ipp_ref, kDNSServiceFlagsShareConnection,
-+      if ((se = DNSServiceRegister(&p->ipp_ref, 0,
-                                    0, name, regtype, NULL, NULL,
-                                  htons(DNSSDPort), ipp_len, ipp_txt,
-                                  dnssdRegisterCallback,
-@@ -2854,7 +2854,7 @@ dnssdRegisterPrinter(cupsd_printer_t *p)
-       p->printer_ref = DNSSDRef;
-       if ((se = DNSServiceRegister(&p->printer_ref,
--                                   kDNSServiceFlagsShareConnection,
-+                                   0,
-                                  0, name, "_printer._tcp", NULL, NULL,
-                                  htons(515), printer_len, printer_txt,
-                                  dnssdRegisterCallback,
diff --git a/cups/patches/cups-dnssd-deviceid.patch b/cups/patches/cups-dnssd-deviceid.patch
deleted file mode 100644 (file)
index abb8366..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-diff -up cups-1.4.3/backend/dnssd.c.dnssd-deviceid.patch cups-1.4.3/backend/dnssd.c
---- cups-1.4.3/backend/dnssd.c.dnssd-deviceid.patch    2010-04-16 19:36:12.226148774 +0100
-+++ cups-1.4.3/backend/dnssd.c 2010-04-16 19:39:53.314148240 +0100
-@@ -1192,15 +1192,22 @@ find_device (cups_array_t *devices,
-       if (device->device_id)
-         free(device->device_id);
-+      if (device_id[0])
-+      {
-+        /* Mark this as the real device ID. */
-+        ptr = device_id + strlen(device_id);
-+        snprintf(ptr, sizeof(device_id) - (ptr - device_id), "FZY:0;");
-+      }
-+
-       if (!device_id[0] && strcmp(model, "Unknown"))
-       {
-         if (make_and_model[0])
--        snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;",
-+        snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;FZY:1;",
-                  make_and_model, model);
-         else if (!strncasecmp(model, "designjet ", 10))
--        snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s", model + 10);
-+        snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s;FZY:1;", model + 10);
-         else if (!strncasecmp(model, "stylus ", 7))
--        snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s", model + 7);
-+        snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s;FZY:1;", model + 7);
-         else if ((ptr = strchr(model, ' ')) != NULL)
-       {
-        /*
-@@ -1210,7 +1217,7 @@ find_device (cups_array_t *devices,
-           memcpy(make_and_model, model, ptr - model);
-         make_and_model[ptr - model] = '\0';
--        snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s",
-+        snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;FZY:1;",
-                  make_and_model, ptr + 1);
-         }
-       }
diff --git a/cups/patches/cups-force-gnutls.patch b/cups/patches/cups-force-gnutls.patch
deleted file mode 100644 (file)
index 85adaa8..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-diff -up cups-1.4.4/config-scripts/cups-ssl.m4.force-gnutls cups-1.4.4/config-scripts/cups-ssl.m4
---- cups-1.4.4/config-scripts/cups-ssl.m4.force-gnutls 2010-09-15 16:49:22.343502552 +0100
-+++ cups-1.4.4/config-scripts/cups-ssl.m4      2010-09-15 16:49:42.347502595 +0100
-@@ -65,23 +65,21 @@ if test x$enable_ssl != xno; then
-       if $PKGCONFIG --exists gnutls; then
-           if test "x$have_pthread" = xyes; then
-               AC_MSG_WARN([The current version of GNU TLS cannot be made thread-safe.])
--          else
--              have_ssl=1
--              SSLLIBS=`$PKGCONFIG --libs gnutls`
--              SSLFLAGS=`$PKGCONFIG --cflags gnutls`
--              AC_DEFINE(HAVE_SSL)
--              AC_DEFINE(HAVE_GNUTLS)
-           fi
-+          have_ssl=1
-+          SSLLIBS=`$PKGCONFIG --libs gnutls`
-+          SSLFLAGS=`$PKGCONFIG --cflags gnutls`
-+          AC_DEFINE(HAVE_SSL)
-+          AC_DEFINE(HAVE_GNUTLS)
-       elif test "x$LIBGNUTLSCONFIG" != x; then
-           if test "x$have_pthread" = xyes; then
-               AC_MSG_WARN([The current version of GNU TLS cannot be made thread-safe.])
--          else
--              have_ssl=1
--              SSLLIBS=`$LIBGNUTLSCONFIG --libs`
--              SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
--              AC_DEFINE(HAVE_SSL)
--              AC_DEFINE(HAVE_GNUTLS)
-           fi
-+          have_ssl=1
-+          SSLLIBS=`$LIBGNUTLSCONFIG --libs`
-+          SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
-+          AC_DEFINE(HAVE_SSL)
-+          AC_DEFINE(HAVE_GNUTLS)
-       fi
-       if test $have_ssl = 1; then
-diff -up cups-1.4.4/configure.force-gnutls cups-1.4.4/configure
---- cups-1.4.4/configure.force-gnutls  2010-06-17 19:25:47.000000000 +0100
-+++ cups-1.4.4/configure       2010-09-15 16:50:01.689503165 +0100
-@@ -17542,36 +17542,34 @@ fi
-           if test "x$have_pthread" = xyes; then
-               { echo "$as_me:$LINENO: WARNING: The current version of GNU TLS cannot be made thread-safe." >&5
- echo "$as_me: WARNING: The current version of GNU TLS cannot be made thread-safe." >&2;}
--          else
--              have_ssl=1
--              SSLLIBS=`$PKGCONFIG --libs gnutls`
--              SSLFLAGS=`$PKGCONFIG --cflags gnutls`
--              cat >>confdefs.h <<\_ACEOF
-+          fi
-+          have_ssl=1
-+          SSLLIBS=`$PKGCONFIG --libs gnutls`
-+          SSLFLAGS=`$PKGCONFIG --cflags gnutls`
-+          cat >>confdefs.h <<\_ACEOF
- #define HAVE_SSL 1
- _ACEOF
--              cat >>confdefs.h <<\_ACEOF
-+          cat >>confdefs.h <<\_ACEOF
- #define HAVE_GNUTLS 1
- _ACEOF
--          fi
-       elif test "x$LIBGNUTLSCONFIG" != x; then
-           if test "x$have_pthread" = xyes; then
-               { echo "$as_me:$LINENO: WARNING: The current version of GNU TLS cannot be made thread-safe." >&5
- echo "$as_me: WARNING: The current version of GNU TLS cannot be made thread-safe." >&2;}
--          else
--              have_ssl=1
--              SSLLIBS=`$LIBGNUTLSCONFIG --libs`
--              SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
--              cat >>confdefs.h <<\_ACEOF
-+          fi
-+          have_ssl=1
-+          SSLLIBS=`$LIBGNUTLSCONFIG --libs`
-+          SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
-+          cat >>confdefs.h <<\_ACEOF
- #define HAVE_SSL 1
- _ACEOF
--              cat >>confdefs.h <<\_ACEOF
-+          cat >>confdefs.h <<\_ACEOF
- #define HAVE_GNUTLS 1
- _ACEOF
--          fi
-       fi
-       if test $have_ssl = 1; then
diff --git a/cups/patches/cups-getpass.patch b/cups/patches/cups-getpass.patch
deleted file mode 100644 (file)
index 1c1da96..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -up cups-1.4.4/cups/usersys.c.getpass cups-1.4.4/cups/usersys.c
---- cups-1.4.4/cups/usersys.c.getpass  2010-03-30 23:07:33.000000000 +0100
-+++ cups-1.4.4/cups/usersys.c  2010-06-18 09:38:08.368096897 +0100
-@@ -41,6 +41,8 @@
- #include "globals.h"
- #include <stdlib.h>
- #include <sys/stat.h>
-+#include <termios.h>
-+#include <signal.h>
- #ifdef WIN32
- #  include <windows.h>
- #else
-@@ -406,7 +408,29 @@ _cupsGetPassword(const char *prompt)      /* 
-   * Use the standard getpass function to get a password from the console.
-   */
--  return (getpass(prompt));
-+  static char password[100];
-+  struct termios oldtio, newtio;
-+  sigset_t oldset, newset;
-+  int nread;
-+  sigprocmask (SIG_BLOCK, NULL, &newset);
-+  sigaddset (&newset, SIGINT);
-+  sigaddset (&newset, SIGTSTP);
-+  sigprocmask (SIG_BLOCK, &newset, &oldset);
-+  tcgetattr (STDIN_FILENO, &oldtio);
-+  newtio = oldtio;
-+  newtio.c_lflag &= ~ECHO;
-+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &newtio);
-+  fputs (prompt, stdout);
-+  fflush (stdout);
-+  nread = read (STDIN_FILENO, password, sizeof (password));
-+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &oldtio);
-+  fputc ('\n', stdout);
-+  sigprocmask (SIG_SETMASK, &oldset, NULL);
-+  if (nread > 0)
-+    password[nread - 1] = '\0';
-+  else
-+    password[0] ='\0';
-+  return password;
- #endif /* WIN32 */
- }
diff --git a/cups/patches/cups-hostnamelookups.patch b/cups/patches/cups-hostnamelookups.patch
deleted file mode 100644 (file)
index 75b6abf..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -up cups-1.4.4/scheduler/network.c.hostnamelookups cups-1.4.4/scheduler/network.c
---- cups-1.4.4/scheduler/network.c.hostnamelookups     2010-04-09 23:42:09.000000000 +0100
-+++ cups-1.4.4/scheduler/network.c     2010-06-18 11:13:02.331979867 +0100
-@@ -154,11 +154,7 @@ cupsdNetIFUpdate(void)
-     * Try looking up the hostname for the address as needed...
-     */
--#ifdef __APPLE__
-     if (HostNameLookups)
--#else
--    if (HostNameLookups || RemotePort)
--#endif /* __APPLE__ */
-       httpAddrLookup((http_addr_t *)(addr->ifa_addr), hostname,
-                      sizeof(hostname));
-     else
-@@ -166,7 +162,7 @@ cupsdNetIFUpdate(void)
-      /*
-       * Map the default server address and localhost to the server name
-       * and localhost, respectively; for all other addresses, use the
--      * dotted notation...
-+      * numeric address...
-       */
-       if (httpAddrLocalhost((http_addr_t *)(addr->ifa_addr)))
diff --git a/cups/patches/cups-no-export-ssllibs.patch b/cups/patches/cups-no-export-ssllibs.patch
deleted file mode 100644 (file)
index 9effc8e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up cups-1.4b2-svn8404/config-scripts/cups-ssl.m4.no-export-ssllibs cups-1.4b2-svn8404/config-scripts/cups-ssl.m4
---- cups-1.4b2-svn8404/config-scripts/cups-ssl.m4.no-export-ssllibs    2009-02-17 17:45:27.000000000 +0000
-+++ cups-1.4b2-svn8404/config-scripts/cups-ssl.m4      2009-03-05 11:12:59.000000000 +0000
-@@ -110,7 +110,7 @@ fi
- AC_SUBST(SSLFLAGS)
- AC_SUBST(SSLLIBS)
--EXPORT_SSLLIBS="$SSLLIBS"
-+EXPORT_SSLLIBS=""
- AC_SUBST(EXPORT_SSLLIBS)
diff --git a/cups/patches/cups-no-gzip-man.patch b/cups/patches/cups-no-gzip-man.patch
deleted file mode 100644 (file)
index 4a08503..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -up cups-1.4b2-svn8404/config-scripts/cups-manpages.m4.no-gzip-man cups-1.4b2-svn8404/config-scripts/cups-manpages.m4
---- cups-1.4b2-svn8404/config-scripts/cups-manpages.m4.no-gzip-man     2009-01-16 08:58:42.000000000 +0000
-+++ cups-1.4b2-svn8404/config-scripts/cups-manpages.m4 2009-03-05 11:11:12.000000000 +0000
-@@ -69,10 +69,10 @@ case "$uname" in
-               ;;
-       Linux* | GNU* | Darwin*)
-               # Linux, GNU Hurd, and Mac OS X
--              MAN1EXT=1.gz
--              MAN5EXT=5.gz
--              MAN7EXT=7.gz
--              MAN8EXT=8.gz
-+              MAN1EXT=1
-+              MAN5EXT=5
-+              MAN7EXT=7
-+              MAN8EXT=8
-               MAN8DIR=8
-               ;;
-       *)
diff --git a/cups/patches/cups-page-label.patch b/cups/patches/cups-page-label.patch
deleted file mode 100644 (file)
index 220b31d..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-diff -up cups-1.4.5/filter/pstops.c.page-label cups-1.4.5/filter/pstops.c
---- cups-1.4.5/filter/pstops.c.page-label      2010-08-31 20:36:08.000000000 +0200
-+++ cups-1.4.5/filter/pstops.c 2010-11-12 13:11:11.000000000 +0100
-@@ -108,6 +108,7 @@ typedef struct                             /**** Document informa
-   int         num_options;            /* Number of document-wide options */
-   cups_option_t       *options;               /* Document-wide options */
-   int         normal_landscape,       /* Normal rotation for landscape? */
-+              orientation,            /* Original orientation of the document */
-               saw_eof,                /* Saw the %%EOF comment? */
-               slow_collate,           /* Collate copies by hand? */
-               slow_duplex,            /* Duplex pages slowly? */
-@@ -2083,7 +2084,7 @@ do_setup(pstops_doc_t *doc,              /* I - Docu
-     * of the pages...
-     */
--    if (Orientation & 1)
-+    if (doc->orientation & 1)
-       write_label_prolog(doc, doc->page_label, PageBottom,
-                          PageWidth - PageLength + PageTop, PageLength);
-     else
-@@ -2091,7 +2092,30 @@ do_setup(pstops_doc_t *doc,             /* I - Docu
-                          PageLength);
-   }
-   else
--    write_label_prolog(doc, doc->page_label, PageBottom, PageTop, PageWidth);
-+  {
-+    switch (doc->orientation)
-+    {
-+      case 0 :
-+        write_label_prolog(doc, doc->page_label, PageBottom, PageTop, 
-+                             PageWidth);
-+          break;
-+
-+      case 1 :
-+        write_label_prolog(doc, doc->page_label, PageLeft, PageRight, 
-+                             PageLength);
-+          break;
-+
-+      case 2 :
-+        write_label_prolog(doc, doc->page_label, PageLength - PageTop, 
-+                             PageLength - PageBottom, PageWidth);
-+          break;
-+
-+      case 3 :
-+        write_label_prolog(doc, doc->page_label, PageWidth - PageRight, 
-+                             PageWidth - PageLeft, PageLength);
-+          break;
-+    }
-+  }
- }
-@@ -2176,7 +2200,7 @@ end_nup(pstops_doc_t *doc,               /* I - Docum
-     case 1 :
-       if (doc->use_ESPshowpage)
-       {
--        write_labels(doc, Orientation);
-+        write_labels(doc, doc->orientation);
-           doc_puts(doc, "ESPshowpage\n");
-       }
-       break;
-@@ -2191,7 +2215,7 @@ end_nup(pstops_doc_t *doc,               /* I - Docum
-           * Rotate the labels back to portrait...
-           */
--          write_labels(doc, Orientation - 1);
-+          write_labels(doc, doc->orientation - 1);
-         }
-         else if (Orientation == 0)
-         {
-@@ -2217,7 +2241,7 @@ end_nup(pstops_doc_t *doc,               /* I - Docum
-     default :
-       if (is_last_page(number) && doc->use_ESPshowpage)
-       {
--        write_labels(doc, Orientation);
-+        write_labels(doc, doc->orientation);
-           doc_puts(doc, "ESPshowpage\n");
-       }
-         break;
-@@ -2433,6 +2457,12 @@ set_pstops_options(
-     Orientation = 0;
-  /*
-+  * Save original orientation of the document
-+  */
-+
-+  doc->orientation = Orientation;
-+
-+ /*
-   * AP_FIRSTPAGE_* and the corresponding non-first-page options.
-   */
diff --git a/cups/patches/cups-peercred.patch b/cups/patches/cups-peercred.patch
deleted file mode 100644 (file)
index 4e579b4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up cups-1.3.5/scheduler/auth.c.peercred cups-1.3.5/scheduler/auth.c
---- cups-1.3.5/scheduler/auth.c.peercred       2008-02-05 16:52:20.000000000 +0000
-+++ cups-1.3.5/scheduler/auth.c        2008-02-05 18:20:06.000000000 +0000
-@@ -54,6 +54,7 @@
-  * Include necessary headers...
-  */
-+#define _GNU_SOURCE
- #include "cupsd.h"
- #include <grp.h>
- #ifdef HAVE_SHADOW_H
diff --git a/cups/patches/cups-res_init.patch b/cups/patches/cups-res_init.patch
deleted file mode 100644 (file)
index 22c75ba..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up cups-1.4b2-svn8404/cups/http-addrlist.c.res_init cups-1.4b2-svn8404/cups/http-addrlist.c
---- cups-1.4b2-svn8404/cups/http-addrlist.c.res_init   2009-03-23 17:41:03.000000000 +0000
-+++ cups-1.4b2-svn8404/cups/http-addrlist.c    2009-03-23 17:41:26.000000000 +0000
-@@ -373,7 +373,7 @@ httpAddrGetList(const char *hostname,      /*
-       freeaddrinfo(results);
-     }
--    else if (error == EAI_FAIL)
-+    else if (error == EAI_FAIL || error == EAI_AGAIN || error == EAI_NODATA)
-       cg->need_res_init = 1;
- #else
diff --git a/cups/patches/cups-serial.patch b/cups/patches/cups-serial.patch
deleted file mode 100644 (file)
index 6e111f2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up cups-1.4b2/backend/serial.c.serial cups-1.4b2/backend/serial.c
---- cups-1.4b2/backend/serial.c.serial 2008-12-16 16:25:02.000000000 +0000
-+++ cups-1.4b2/backend/serial.c        2008-12-16 16:25:21.000000000 +0000
-@@ -74,6 +74,7 @@
- #endif /* __APPLE__ */
- #if defined(__linux) && defined(TIOCGSERIAL)
-+#  include <linux/types.h>
- #  include <linux/serial.h>
- #  include <linux/ioctl.h>
- #endif /* __linux && TIOCGSERIAL */
diff --git a/cups/patches/cups-serialize-gnutls.patch b/cups/patches/cups-serialize-gnutls.patch
deleted file mode 100644 (file)
index cdd82cb..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-diff -up cups-1.4.4/cups/http.c.serialize-gnutls cups-1.4.4/cups/http.c
---- cups-1.4.4/cups/http.c.serialize-gnutls    2010-09-17 13:37:01.858871762 +0100
-+++ cups-1.4.4/cups/http.c     2010-09-17 13:55:22.579871934 +0100
-@@ -149,7 +149,7 @@ static int         http_write_ssl(http_t *http,
- #  ifdef HAVE_GNUTLS
- #    ifdef HAVE_PTHREAD_H
--GCRY_THREAD_OPTION_PTHREAD_IMPL;
-+static pthread_mutex_t gnutls_lock;
- #    endif /* HAVE_PTHREAD_H */
- #  elif defined(HAVE_LIBSSL) && defined(HAVE_PTHREAD_H)
-@@ -1231,7 +1231,7 @@ httpInitialize(void)
-   */
- #  ifdef HAVE_PTHREAD_H
--  gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
-+  pthread_mutex_init(&gnutls_lock, NULL);
- #  endif /* HAVE_PTHREAD_H */
-  /*
-@@ -2228,6 +2228,7 @@ _httpWait(http_t *http,                  /* I - Connect
-     if (SSL_pending((SSL *)(http->tls)))
-       return (1);
- #  elif defined(HAVE_GNUTLS)
-+    /* lock already held here... */
-     if (gnutls_record_check_pending(((http_tls_t *)(http->tls))->session))
-       return (1);
- #  elif defined(HAVE_CDSASSL)
-@@ -2294,6 +2295,8 @@ int                                      /* O - 1 if data is available, 0
- httpWait(http_t *http,                        /* I - Connection to server */
-          int    msec)                 /* I - Milliseconds to wait */
- {
-+  int ret;
-+
-  /*
-   * First see if there is data in the buffer...
-   */
-@@ -2318,7 +2321,17 @@ httpWait(http_t *http,                  /* I - Connecti
-   * If not, check the SSL/TLS buffers and do a select() on the connection...
-   */
--  return (_httpWait(http, msec, 1));
-+#if defined(HAVE_SSL) && defined(HAVE_GNUTLS) && defined(HAVE_PTHREAD_H)
-+  pthread_mutex_lock(&gnutls_lock);
-+#endif
-+
-+  ret = _httpWait(http, msec, 1);
-+
-+#if defined(HAVE_SSL) && defined(HAVE_GNUTLS) && defined(HAVE_PTHREAD_H)
-+  pthread_mutex_unlock(&gnutls_lock);
-+#endif
-+
-+  return (ret);
- }
-@@ -2769,7 +2782,9 @@ http_read_ssl(http_t *http,              /* I - Conn
-   ssize_t     result;                 /* Return value */
-+  pthread_mutex_lock(&gnutls_lock);
-   result = gnutls_record_recv(((http_tls_t *)(http->tls))->session, buf, len);
-+  pthread_mutex_unlock(&gnutls_lock);
-   if (result < 0 && !errno)
-   {
-@@ -3085,6 +3100,7 @@ http_setup_ssl(http_t *http)             /* I - Con
-     return (-1);
-   }
-+  pthread_mutex_lock(&gnutls_lock);
-   gnutls_certificate_allocate_credentials(credentials);
-   gnutls_init(&(conn->session), GNUTLS_CLIENT);
-@@ -3104,9 +3120,11 @@ http_setup_ssl(http_t *http)            /* I - Con
-     free(credentials);
-     free(conn);
-+    pthread_mutex_unlock(&gnutls_lock);
-     return (-1);
-   }
-+  pthread_mutex_unlock(&gnutls_lock);
-   conn->credentials = credentials;
- #  elif defined(HAVE_CDSASSL)
-@@ -3196,9 +3214,11 @@ http_shutdown_ssl(http_t *http)         /* I - 
-   conn = (http_tls_t *)(http->tls);
-   credentials = (gnutls_certificate_client_credentials *)(conn->credentials);
-+  pthread_mutex_lock(&gnutls_lock);
-   gnutls_bye(conn->session, GNUTLS_SHUT_RDWR);
-   gnutls_deinit(conn->session);
-   gnutls_certificate_free_credentials(*credentials);
-+  pthread_mutex_unlock(&gnutls_lock);
-   free(credentials);
-   free(conn);
-@@ -3445,7 +3465,9 @@ http_write_ssl(http_t     *http, /* I - 
- #  elif defined(HAVE_GNUTLS)
-   ssize_t     result;                 /* Return value */
-+  pthread_mutex_lock(&gnutls_lock);
-   result = gnutls_record_send(((http_tls_t *)(http->tls))->session, buf, len);
-+  pthread_mutex_unlock(&gnutls_lock);
-   if (result < 0 && !errno)
-   {
diff --git a/cups/patches/cups-snmp-quirks.patch b/cups/patches/cups-snmp-quirks.patch
deleted file mode 100644 (file)
index 0308676..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-diff -up cups-1.4.3/backend/snmp-supplies.c.snmp-quirks cups-1.4.3/backend/snmp-supplies.c
---- cups-1.4.3/backend/snmp-supplies.c.snmp-quirks     2009-11-20 01:27:57.000000000 +0000
-+++ cups-1.4.3/backend/snmp-supplies.c 2010-06-09 16:27:05.515019804 +0100
-@@ -38,6 +38,13 @@
- /*
-+ * Printer quirks...
-+ */
-+
-+#define QUIRK_CAPACITY        (1<<0)
-+
-+
-+/*
-  * Local structures...
-  */
-@@ -57,6 +64,12 @@ typedef struct                              /**** Printer state ta
-   const char  *keyword;               /* IPP printer-state-reasons keyword */
- } backend_state_t;
-+typedef struct                                /**** Quirk names table ****/
-+{
-+  int         bit;                    /* Quirk bit */
-+  const char  *keyword;               /* cupsSNMPQuirks keyword */
-+} quirk_name_t;
-+
- /*
-  * Local globals...
-@@ -68,6 +81,7 @@ static int           current_state = -1;
- static int            charset = -1;   /* Character set for supply names */
- static int            num_supplies = 0;
-                                       /* Number of supplies found */
-+static int            quirks = 0;     /* Printer quirks */
- static backend_supplies_t supplies[CUPS_MAX_SUPPLIES];
-                                       /* Supply information */
-@@ -153,6 +167,15 @@ static const backend_state_t const print
-                         { CUPS_TC_outputFull, "output-area-full-warning" }
-                       };
-+static const quirk_name_t const quirk_names[] =
-+                      {
-+                       /*
-+                        * The prtMarkerSuppliesLevel values are
-+                        * percentages, not levels relative to the
-+                        * stated capacity.
-+                        */
-+                        { QUIRK_CAPACITY, "capacity" }
-+                      };
- /*
-  * Local functions...
-@@ -208,6 +231,9 @@ backendSNMPSupplies(
-       if (i)
-         *ptr++ = ',';
-+      if (quirks & QUIRK_CAPACITY)
-+      supplies[i].max_capacity = 100;
-+
-       if (supplies[i].max_capacity > 0)
-         sprintf(ptr, "%d", 100 * supplies[i].level / supplies[i].max_capacity);
-       else
-@@ -305,6 +331,7 @@ backend_init_supplies(
-     http_addr_t *addr)                        /* I - Printer address */
- {
-   int         i,                      /* Looping var */
-+              len,                    /* Quirk name length */
-               type;                   /* Current marker type */
-   cups_file_t *cachefile;             /* Cache file */
-   const char  *cachedir;              /* CUPS_CACHEDIR value */
-@@ -366,6 +393,7 @@ backend_init_supplies(
-   current_state = -1;
-   num_supplies  = -1;
-   charset       = -1;
-+  quirks      = 0;
-   memset(supplies, 0, sizeof(supplies));
-@@ -381,6 +409,34 @@ backend_init_supplies(
-     return;
-   }
-+  if (ppd &&
-+      (ppdattr = ppdFindAttr(ppd, "cupsSNMPQuirks", NULL)) != NULL &&
-+      ppdattr->value)
-+  {
-+    ptr = ppdattr->value;
-+    while (*ptr != '\0')
-+    {
-+     /*
-+      * Match keyword against quirk_names table.
-+      */
-+
-+      for (i = 0; i < sizeof (quirk_names) / sizeof (quirk_names[0]); i++)
-+      {
-+      len = strlen (quirk_names[i].keyword);
-+      if (!strncmp (ptr, quirk_names[i].keyword, len) &&
-+          (ptr[len] == '\0' || ptr[len] == ' '))
-+        quirks |= quirk_names[i].bit;
-+      }
-+
-+     /*
-+      * Advance to next keyword.
-+      */
-+
-+      ptr += strcspn (ptr, " ");
-+      ptr += strspn (ptr, " ");
-+    }
-+  }
-+
-   ppdClose(ppd);
-  /*
diff --git a/cups/patches/cups-str3754.patch b/cups/patches/cups-str3754.patch
deleted file mode 100644 (file)
index 148575a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up cups-1.4.5/scheduler/printers.c.printer-timeout cups-1.4.5/scheduler/printers.c
---- cups-1.4.5/scheduler/printers.c.printer-timeout    2010-12-16 14:42:07.048865052 +0000
-+++ cups-1.4.5/scheduler/printers.c    2010-12-16 14:43:05.325684376 +0000
-@@ -785,6 +785,7 @@ cupsdDeletePrinter(
-   */
-   cupsdSetPrinterState(p, IPP_PRINTER_STOPPED, update);
-+  p->state = IPP_PRINTER_STOPPED;
-   if (p->job)
-     cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE,
diff --git a/cups/patches/cups-texttops-rotate-page.patch b/cups/patches/cups-texttops-rotate-page.patch
deleted file mode 100644 (file)
index 2b048cd..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-diff -up cups-1.4.3/filter/texttops.c.texttops-rotate-page cups-1.4.3/filter/texttops.c
---- cups-1.4.3/filter/texttops.c.texttops-rotate-page  2008-11-06 16:42:18.000000000 +0000
-+++ cups-1.4.3/filter/texttops.c       2010-05-18 16:42:23.669940884 +0100
-@@ -97,6 +97,13 @@ WritePage(void)
-   puts("gsave");
-+  /* If we're opereating in Landscape (Orientation == 1 or Orientation == 3)
-+     then rotate and translate the page */
-+  if ( Orientation & 1 ) {
-+    printf ("%d rotate\n", (Orientation & 3) * 90 );
-+    printf("0 %.0f neg translate\n", PageLength);
-+  }
-+
-   if (PrettyPrint)
-     printf("%d H\n", NumPages);
-@@ -212,7 +219,7 @@ WriteProlog(const char *title,             /* I - T
-   puts("%!PS-Adobe-3.0");
-   printf("%%%%BoundingBox: 0 0 %.0f %.0f\n", PageWidth, PageLength);
--  printf("%%cupsRotation: %d\n", (Orientation & 3) * 90);
-+  puts("%cupsRotation: 0");
-   puts("%%Creator: texttops/" CUPS_SVERSION);
-   printf("%%%%CreationDate: %s\n", curdate);
-   WriteTextComment("Title", title);
-@@ -549,6 +556,8 @@ WriteProlog(const char *title,             /* I - T
-   puts("%%EndComments");
-   puts("%%BeginProlog");
-+  printf("%%%%Orientation: %s\n", 
-+         Orientation & 1 ? "Landscape" : "Portrait");
-  /*
-   * Download any missing fonts...
index ae668ab119841182090e8e69e1a9af8437eeb5b1..dfb87b817d0352c43ad8ab5f926cb29d4efa7ae0 100644 (file)
@@ -1,10 +1,15 @@
 [Unit]
-Description=CUPS Printing Service
+Description=CUPS scheduler
+Requires=printer.target
+After=syslog.target
 
 [Service]
-ExecStart=/usr/sbin/cupsd -f -c /etc/cups/cupsd.conf
-ExecStartPost=/sbin/udevadm trigger --subsystem-match=usb --attr-match=serial=AL01077498
+Type=forking
+PIDFile=/var/run/cupsd.pid
+ExecStartPre=/usr/sbin/cupsd -t
+ExecStart=/usr/sbin/cupsd
+ExecStartPost=/sbin/udevadm trigger --subsystem-match=usb --attr-match=bInterfaceClass=07 --attr-match=bInterfaceSubClass=01 --action=add
+ExecStartPost=/sbin/udevadm trigger --subsystem-match=usb --property-match=DEVNAME="/dev/usb/lp*" --action=add
 
 [Install]
 WantedBy=multi-user.target
-