diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2009-02-17 19:24:29 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2009-02-17 19:24:29 +0000 |
commit | f0ab5bff8ab3f7b00619675b806b1f01294a3f6a (patch) | |
tree | 2c9d51f5a4af79a28e10dc990e323efaddb5c555 /scheduler/dirsvc.c | |
parent | bf3816c7edd01247b850a12e52856819190b66fd (diff) | |
download | cups-f0ab5bff8ab3f7b00619675b806b1f01294a3f6a.tar.gz |
Merge changes from CUPS 1.4svn-r8362.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1228 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'scheduler/dirsvc.c')
-rw-r--r-- | scheduler/dirsvc.c | 93 |
1 files changed, 70 insertions, 23 deletions
diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c index d876c5ac4..f41fb451b 100644 --- a/scheduler/dirsvc.c +++ b/scheduler/dirsvc.c @@ -47,6 +47,7 @@ * dnssdRegisterCallback() - DNSServiceRegister callback. * dnssdRegisterPrinter() - Start sending broadcast information for a * printer or update the broadcast contents. + * dnssdStop() - Stop all DNS-SD registrations. * dnssdUpdate() - Handle DNS-SD queries. * get_hostconfig() - Get an /etc/hostconfig service setting. * is_local_queue() - Determine whether the URI points at a local @@ -166,6 +167,7 @@ static void dnssdRegisterCallback(DNSServiceRef sdRef, 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 */ @@ -1816,29 +1818,7 @@ cupsdStopBrowsing(void) #ifdef HAVE_DNSSD if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDRef) - { - if (WebIFRef) - { - DNSServiceRefDeallocate(WebIFRef); - WebIFRef = NULL; - } - - if (RemoteRef) - { - DNSServiceRefDeallocate(RemoteRef); - RemoteRef = NULL; - } - - cupsdRemoveSelect(DNSServiceRefSockFD(DNSSDRef)); - - DNSServiceRefDeallocate(DNSSDRef); - DNSSDRef = NULL; - - cupsArrayDelete(DNSSDPrinters); - DNSSDPrinters = NULL; - - DNSSDPort = 0; - } + dnssdStop(); #endif /* HAVE_DNSSD */ #ifdef HAVE_LIBSLP @@ -2812,6 +2792,53 @@ dnssdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */ /* + * 'dnssdStop()' - Stop all DNS-SD registrations. + */ + +static void +dnssdStop(void) +{ + cupsd_printer_t *p; /* Current printer */ + + + /* + * De-register the individual printers + */ + + for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); + p; + p = (cupsd_printer_t *)cupsArrayNext(Printers)) + dnssdDeregisterPrinter(p); + + /* + * Shutdown the rest of the service refs... + */ + + if (WebIFRef) + { + DNSServiceRefDeallocate(WebIFRef); + WebIFRef = NULL; + } + + if (RemoteRef) + { + DNSServiceRefDeallocate(RemoteRef); + RemoteRef = NULL; + } + + cupsdRemoveSelect(DNSServiceRefSockFD(DNSSDRef)); + + DNSServiceRefDeallocate(DNSSDRef); + DNSSDRef = NULL; + + cupsArrayDelete(DNSSDPrinters); + DNSSDPrinters = NULL; + + DNSSDPort = 0; +} + + +/* * 'dnssdUpdate()' - Handle DNS-SD queries. */ @@ -2822,9 +2849,12 @@ dnssdUpdate(void) if ((sdErr = DNSServiceProcessResult(DNSSDRef)) != kDNSServiceErr_NoError) + { cupsdLogMessage(CUPSD_LOG_ERROR, "DNS Service Discovery registration error %d!", sdErr); + dnssdStop(); + } } #endif /* HAVE_DNSSD */ @@ -3509,6 +3539,18 @@ process_implicit_classes(void) else len = strlen(p->name); + if (len >= sizeof(name)) + { + /* + * If the printer name length somehow is greater than we normally allow, + * skip this printer... + */ + + len = 0; + cupsArrayRestore(Printers); + continue; + } + strncpy(name, p->name, len); name[len] = '\0'; offset = 0; @@ -5253,8 +5295,13 @@ update_polling(void) while ((ptr = cupsdStatBufUpdate(PollStatusBuffer, &loglevel, message, sizeof(message))) != NULL) + { + if (loglevel == CUPSD_LOG_INFO) + cupsdLogMessage(CUPSD_LOG_INFO, "%s", message); + if (!strchr(PollStatusBuffer->buffer, '\n')) break; + } if (ptr == NULL && !PollStatusBuffer->bufused) { |