- Cheaply restore compatibility with 1.1.x by having cups_get_sdests()
perform a CUPS_GET_CLASSES request if it is not sure it is talking to CUPS 1.2 or later (bug #512866).
This commit is contained in:
parent
a983e8610b
commit
bbd55382a3
90
cups-cups-get-classes.patch
Normal file
90
cups-cups-get-classes.patch
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
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
|
||||||
|
char uri[1024]; /* printer-uri value */
|
||||||
|
int num_options; /* Number of options */
|
||||||
|
cups_option_t *options; /* Options */
|
||||||
|
+ int get_classes; /* Whether we need to fetch class */
|
||||||
|
#ifdef __APPLE__
|
||||||
|
char media_default[41]; /* Default paper size */
|
||||||
|
#endif /* __APPLE__ */
|
||||||
|
@@ -1791,6 +1792,8 @@ cups_get_sdests(http_t *http, /* I
|
||||||
|
* printer-uri [for IPP_GET_PRINTER_ATTRIBUTES]
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ get_classes = (op == CUPS_GET_PRINTERS);
|
||||||
|
+
|
||||||
|
request = ippNewRequest(op);
|
||||||
|
|
||||||
|
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||||
|
@@ -1848,6 +1851,23 @@ cups_get_sdests(http_t *http, /* I
|
||||||
|
attr->value_tag != IPP_TAG_URI)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (get_classes &&
|
||||||
|
+
|
||||||
|
+ /* Is this a class? */
|
||||||
|
+ ((attr->value_tag == IPP_TAG_ENUM &&
|
||||||
|
+ !strcmp(attr->name, "printer-type") &&
|
||||||
|
+ (attr->values[0].integer & CUPS_PRINTER_CLASS)) ||
|
||||||
|
+
|
||||||
|
+ /* Or, is this an attribute from CUPS 1.2 or later? */
|
||||||
|
+ !strcmp(attr->name, "auth-info-required") ||
|
||||||
|
+ !strncmp(attr->name, "marker-", 7) ||
|
||||||
|
+ !strcmp(attr->name, "printer-commands") ||
|
||||||
|
+ !strcmp(attr->name, "printer-is-shared")))
|
||||||
|
+ /* We are talking to a recent enough CUPS server that
|
||||||
|
+ * CUPS_GET_PRINTERS returns classes as well.
|
||||||
|
+ */
|
||||||
|
+ get_classes = 0;
|
||||||
|
+
|
||||||
|
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
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * If we sent a CUPS_GET_CLASSES request, check whether
|
||||||
|
+ * CUPS_GET_PRINTERS already gave us this destination and exit
|
||||||
|
+ * early if so.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ if (op == CUPS_GET_CLASSES)
|
||||||
|
+ {
|
||||||
|
+ int diff;
|
||||||
|
+ cups_find_dest (printer_name, NULL, num_dests, *dests, 0, &diff);
|
||||||
|
+ if (diff == 0)
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ * Found it. The CUPS server already gave us the classes in
|
||||||
|
+ * its CUPS_GET_PRINTERS response.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ cupsFreeOptions(num_options, options);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ * If this is a CUPS_GET_PRINTERS request but we didn't see any
|
||||||
|
+ * classes we might be talking to an older CUPS server that requires
|
||||||
|
+ * CUPS_GET_CLASSES as well.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ if (get_classes)
|
||||||
|
+ num_dests = cups_get_sdests (http, CUPS_GET_CLASSES, name,
|
||||||
|
+ num_dests, dests);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
* Return the count...
|
||||||
|
*/
|
||||||
|
|
@ -58,7 +58,8 @@ Patch31: cups-str3254.patch
|
|||||||
Patch32: cups-str3253.patch
|
Patch32: cups-str3253.patch
|
||||||
Patch33: cups-str3266.patch
|
Patch33: cups-str3266.patch
|
||||||
Patch34: cups-str3262.patch
|
Patch34: cups-str3262.patch
|
||||||
Patch35: cups-avahi.patch
|
Patch35: cups-cups-get-classes.patch
|
||||||
|
Patch36: cups-avahi.patch
|
||||||
Patch100: cups-lspp.patch
|
Patch100: cups-lspp.patch
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Url: http://www.cups.org/
|
Url: http://www.cups.org/
|
||||||
@ -214,7 +215,8 @@ module.
|
|||||||
%patch32 -p1 -b .str3253
|
%patch32 -p1 -b .str3253
|
||||||
%patch33 -p1 -b .str3266
|
%patch33 -p1 -b .str3266
|
||||||
%patch34 -p1 -b .str3262
|
%patch34 -p1 -b .str3262
|
||||||
#%patch35 -p1 -b .avahi
|
%patch35 -p1 -b .cups-get-classes
|
||||||
|
#%patch36 -p1 -b .avahi
|
||||||
|
|
||||||
%if %lspp
|
%if %lspp
|
||||||
%patch100 -p1 -b .lspp
|
%patch100 -p1 -b .lspp
|
||||||
@ -508,6 +510,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Jul 28 2009 Tim Waugh <twaugh@redhat.com> 1:1.4-0.rc1.12
|
* Tue Jul 28 2009 Tim Waugh <twaugh@redhat.com> 1:1.4-0.rc1.12
|
||||||
|
- Cheaply restore compatibility with 1.1.x by having cups_get_sdests()
|
||||||
|
perform a CUPS_GET_CLASSES request if it is not sure it is talking
|
||||||
|
to CUPS 1.2 or later (bug #512866).
|
||||||
- Prevent ipp backend looping with bad IPP devices (bug #476424,
|
- Prevent ipp backend looping with bad IPP devices (bug #476424,
|
||||||
STR #3262).
|
STR #3262).
|
||||||
- Fixed Device ID reporting in the usb backend (STR #3266).
|
- Fixed Device ID reporting in the usb backend (STR #3266).
|
||||||
|
Loading…
Reference in New Issue
Block a user