summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2019-12-02 16:39:48 -0500
committerMichael R Sweet <michael.r.sweet@gmail.com>2019-12-02 16:39:48 -0500
commit7a2be9facf6163d3742921902778f6a8947739e1 (patch)
treeb2dd88acea9b451595594415ff42e2e0ff08e965 /tools
parent5ea07c61ba625c2a3be894e3981ac77350cae9df (diff)
downloadcups-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.c15
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);