/*
- * "$Id: printers.c 6539 2007-05-23 15:08:29Z mike $"
+ * "$Id: printers.c 6595 2007-06-21 22:29:57Z mike $"
*
* Printer routines for the Common UNIX Printing System (CUPS).
*
* cupsdRenamePrinter() - Rename a printer.
* cupsdSaveAllPrinters() - Save all printer definitions to the
* printers.conf file.
+ * cupsdSetAuthInfoRequired() - Set the required authentication info.
* cupsdSetPrinterAttrs() - Set printer attributes based upon the PPD
* file.
* cupsdSetPrinterReasons() - Set/update the reasons strings.
#include <cups/dir.h>
-/*
- * Currently Bonjour printers that are shared by CUPS servers are added
- * manually by the user on Mac OS X systems. While these printers *are*
- * remote queues, the current print dialog will not show them if they
- * (correctly) have the CUPS_PRINTER_REMOTE bit set. This may change
- * in future releases, however the code to do this is currently disabled.
- *
- * Define BONJOUR_IS_REMOTE to 1 to get the correct behavior...
- */
-
-#define BONJOUR_IS_REMOTE 0
-
-
/*
* Local functions...
*/
* Skip remote destinations and printer classes...
*/
- if ((printer->type & CUPS_PRINTER_REMOTE) ||
+ if ((printer->type & CUPS_PRINTER_DISCOVERED) ||
(printer->type & CUPS_PRINTER_CLASS) ||
(printer->type & CUPS_PRINTER_IMPLICIT))
continue;
}
else
return (0);
+
+ values = (*end) ? end + 1 : end;
}
if (p->num_auth_info_required == 0)
p->num_auth_info_required = 1;
}
+ /*
+ * Update the printer-type value as needed...
+ */
+
+ if (p->num_auth_info_required > 1 ||
+ strcmp(p->auth_info_required[0], "none"))
+ p->type |= CUPS_PRINTER_AUTHENTICATED;
+ else
+ p->type &= ~CUPS_PRINTER_AUTHENTICATED;
+
return (1);
}
if (!attr || attr->num_values > 4)
return (0);
+ /*
+ * Update the printer-type value as needed...
+ */
+
+ if (attr->num_values > 1 ||
+ strcmp(attr->values[0].string.text, "none"))
+ p->type |= CUPS_PRINTER_AUTHENTICATED;
+ else
+ p->type &= ~CUPS_PRINTER_AUTHENTICATED;
+
for (i = 0; i < attr->num_values; i ++)
{
if (!strcmp(attr->values[i].string.text, "none"))
int num_media; /* Number of media options */
cupsd_location_t *auth; /* Pointer to authentication element */
const char *auth_supported; /* Authentication supported */
- cups_ptype_t printer_type; /* Printer type data */
ppd_file_t *ppd; /* PPD file data */
ppd_option_t *input_slot, /* InputSlot options */
*media_type, /* MediaType options */
*/
auth_supported = "requesting-user-name";
- if (!(p->type & CUPS_PRINTER_REMOTE))
+ if (!(p->type & CUPS_PRINTER_DISCOVERED))
{
if (p->type & CUPS_PRINTER_CLASS)
snprintf(resource, sizeof(resource), "/classes/%s", p->name);
ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
"auth-info-required", NULL, "none");
- if (cupsArrayCount(Banners) > 0 && !(p->type & CUPS_PRINTER_REMOTE))
+ if (cupsArrayCount(Banners) > 0 && !(p->type & CUPS_PRINTER_DISCOVERED))
{
/*
* Setup the job-sheets-default attribute...
}
}
- printer_type = p->type;
-
p->raw = 0;
p->remote = 0;
- if (p->type & CUPS_PRINTER_REMOTE)
+ if (p->type & CUPS_PRINTER_DISCOVERED)
{
/*
* Tell the client this is a remote printer of some type...
* Show current and available port monitors for this printer...
*/
- ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "port-monitor",
+ ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
NULL, p->port_monitor ? p->port_monitor : "none");
-
for (i = 1, ppdattr = ppdFindAttr(ppd, "cupsPortMonitor", NULL);
ppdattr;
i ++, ppdattr = ppdFindNextAttr(ppd, "cupsPortMonitor", NULL));
i ++;
}
- attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+ attr = ippAddStrings(p->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME,
"port-monitor-supported", i, NULL, NULL);
attr->values[0].string.text = _cupsStrAlloc("none");
cupsdSetString(&p->product, ppd->product);
#endif /* HAVE_DNSSD */
-#if BONJOUR_IS_REMOTE
- ppdattr = ppdFindAttr(ppd, "APRemoteQueueID", NULL);
-#endif /* BONJOUR_IS_REMOTE */
+ if (ppdFindAttr(ppd, "APRemoteQueueID", NULL))
+ p->type |= CUPS_PRINTER_REMOTE;
/*
* Close the PPD and set the type...
*/
ppdClose(ppd);
-
- printer_type = p->type;
-
-#if BONJOUR_IS_REMOTE
- if (ppdattr)
- {
- /*
- * This is a shared Bonjour printer...
- */
-
- printer_type |= CUPS_PRINTER_REMOTE;
- }
-#endif /* BONJOUR_IS_REMOTE */
}
else if (!access(filename, 0))
{
* Tell the client this is really a hard-wired remote printer.
*/
- printer_type |= CUPS_PRINTER_REMOTE;
+ p->type |= CUPS_PRINTER_REMOTE;
/*
* Point the printer-uri-supported attribute to the
}
}
- /*
- * Save the local printer type value, which may have the CUPS_PRINTER_REMOTE
- * bit set. We use this value when sending the printer-type attribute to
- * clients so they know whether the printer is really remote. Doing it
- * this way prevents the browsing code from timing out hardwired remote
- * printers...
- */
-
- p->external_type = printer_type;
-
/*
* Copy the printer options into a browse attributes string we can re-use.
*/
- if (!(printer_type & CUPS_PRINTER_REMOTE))
+ if (!(p->type & CUPS_PRINTER_DISCOVERED))
{
const char *valptr; /* Pointer into value */
char *attrptr; /* Pointer into attribute string */
* Can't set status of remote printers...
*/
- if (p->type & CUPS_PRINTER_REMOTE)
+ if (p->type & CUPS_PRINTER_DISCOVERED)
return;
/*
* Remove remote printers if we are no longer browsing...
*/
- if (!Browsing && (p->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_REMOTE)))
+ if (!Browsing &&
+ (p->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_DISCOVERED)))
{
if (p->type & CUPS_PRINTER_IMPLICIT)
cupsArrayRemove(ImplicitPrinters, p);
* Update printer attributes as needed...
*/
- if (!(p->type & CUPS_PRINTER_REMOTE))
+ if (!(p->type & CUPS_PRINTER_DISCOVERED))
cupsdSetPrinterAttrs(p);
}
}
if (dtype)
*dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT |
- CUPS_PRINTER_REMOTE);
+ CUPS_PRINTER_REMOTE | CUPS_PRINTER_DISCOVERED);
return (p->name);
}
if (dtype)
*dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT |
- CUPS_PRINTER_REMOTE);
+ CUPS_PRINTER_REMOTE | CUPS_PRINTER_DISCOVERED);
return (p->name);
}
/*
- * End of "$Id: printers.c 6539 2007-05-23 15:08:29Z mike $".
+ * End of "$Id: printers.c 6595 2007-06-21 22:29:57Z mike $".
*/