diff options
author | Michael R Sweet <michael.r.sweet@gmail.com> | 2019-12-02 16:39:48 -0500 |
---|---|---|
committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2019-12-02 16:39:48 -0500 |
commit | 7a2be9facf6163d3742921902778f6a8947739e1 (patch) | |
tree | b2dd88acea9b451595594415ff42e2e0ff08e965 /tools | |
parent | 5ea07c61ba625c2a3be894e3981ac77350cae9df (diff) | |
download | cups-7a2be9facf6163d3742921902778f6a8947739e1.tar.gz |
Limit DNS-SD advertisements to the loopback interface for "localhost" and
support "off" for subtypes to turn off advertisements (Issue #5666)
Diffstat (limited to 'tools')
-rw-r--r-- | tools/ippeveprinter.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/tools/ippeveprinter.c b/tools/ippeveprinter.c index a35c7321d..930331e0f 100644 --- a/tools/ippeveprinter.c +++ b/tools/ippeveprinter.c @@ -6743,6 +6743,10 @@ register_printer( urf[252], /* List of supported URF values */ *ptr; /* Pointer into string */ + + if (!strcmp(subtypes, "off")) + return (1); + color_supported = ippFindAttribute(printer->attrs, "color-supported", IPP_TAG_BOOLEAN); document_format_supported = ippFindAttribute(printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE); printer_location = ippFindAttribute(printer->attrs, "printer-location", IPP_TAG_TEXT); @@ -6788,6 +6792,7 @@ register_printer( #ifdef HAVE_DNSSD DNSServiceErrorType error; /* Error from Bonjour */ char regtype[256]; /* Bonjour service type */ + uint32_t interface; /* Interface index */ /* @@ -6820,9 +6825,11 @@ register_printer( * defend our service name but not actually support LPD... */ + interface = !strcmp(printer->hostname, "localhost") ? kDNSServiceInterfaceIndexLocalOnly : kDNSServiceInterfaceIndexAny; + printer->printer_ref = DNSSDMaster; - if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) + if ((error = DNSServiceRegister(&(printer->printer_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_printer._tcp", NULL /* domain */, NULL /* host */, 0 /* port */, 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_printer._tcp", error); return (0); @@ -6840,7 +6847,7 @@ register_printer( else strlcpy(regtype, "_ipp._tcp", sizeof(regtype)); - if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) + if ((error = DNSServiceRegister(&(printer->ipp_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error); return (0); @@ -6859,7 +6866,7 @@ register_printer( else strlcpy(regtype, "_ipps._tcp", sizeof(regtype)); - if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) + if ((error = DNSServiceRegister(&(printer->ipps_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, regtype, NULL /* domain */, NULL /* host */, htons(printer->port), TXTRecordGetLength(&ipp_txt), TXTRecordGetBytesPtr(&ipp_txt), (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, regtype, error); return (0); @@ -6873,7 +6880,7 @@ register_printer( printer->http_ref = DNSSDMaster; - if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, 0 /* interfaceIndex */, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) + if ((error = DNSServiceRegister(&(printer->http_ref), kDNSServiceFlagsShareConnection, interface, printer->dnssd_name, "_http._tcp,_printer", NULL /* domain */, NULL /* host */, htons(printer->port), 0 /* txtLen */, NULL /* txtRecord */, (DNSServiceRegisterReply)dnssd_callback, printer)) != kDNSServiceErr_NoError) { _cupsLangPrintf(stderr, _("Unable to register \"%s.%s\": %d"), printer->dnssd_name, "_http._tcp,_printer", error); return (0); |