diff options
author | Tijl Coosemans <tijl@FreeBSD.org> | 2020-07-21 19:00:39 +0000 |
---|---|---|
committer | Tijl Coosemans <tijl@FreeBSD.org> | 2020-07-21 19:00:39 +0000 |
commit | 0248b2740959f9400189e87c4fa5b73b7774e5cc (patch) | |
tree | 125722a3c2a909bef40fc31ca1e3b1cb08e8f5a4 /print/hplip | |
parent | 5228f6a9707679a6400865103fd0473d35b85f86 (diff) |
Notes
Diffstat (limited to 'print/hplip')
-rw-r--r-- | print/hplip/Makefile | 2 | ||||
-rw-r--r-- | print/hplip/files/patch-protocol_discovery_mdns.c | 79 |
2 files changed, 70 insertions, 11 deletions
diff --git a/print/hplip/Makefile b/print/hplip/Makefile index 91da432be3fe..0a1e818e9ffd 100644 --- a/print/hplip/Makefile +++ b/print/hplip/Makefile @@ -3,7 +3,7 @@ PORTNAME= hplip PORTVERSION= 3.20.3 -PORTREVISION= 0 +PORTREVISION= 1 CATEGORIES= print MASTER_SITES= SF diff --git a/print/hplip/files/patch-protocol_discovery_mdns.c b/print/hplip/files/patch-protocol_discovery_mdns.c index 06c2bbfca10d..f22417a63aa3 100644 --- a/print/hplip/files/patch-protocol_discovery_mdns.c +++ b/print/hplip/files/patch-protocol_discovery_mdns.c @@ -1,4 +1,16 @@ ---- protocol/discovery/mdns.c.orig 2019-10-22 06:18:12 UTC +Use a dynamically allocated port instead of binding port 5353. The bind(2) +call fails when Avahi has already claimed port 5353. On top of that, HPLIP +only performs one-shot queries and those shouldn't be using port 5353 according +to RFC 6762. + +Don't disable loop-back. It's harmless. + +Use default TTL of 1. RFC 6762 requires 255 for responses, not for queries. + +There's no need to join the multicast group for one-shot queries. Responses +are sent to the unicast address. + +--- protocol/discovery/mdns.c.orig 2020-07-01 14:48:56 UTC +++ protocol/discovery/mdns.c @@ -24,7 +24,11 @@ Author: Sanjay Kumar @@ -13,15 +25,62 @@ #include <string.h> #include <syslog.h> #include <sys/socket.h> -@@ -85,6 +89,11 @@ static int mdns_open_socket(int *psocket) +@@ -70,57 +74,13 @@ static int mdns_convert_name_to_dns(const char *name, + static int mdns_open_socket(int *psocket) + { + int stat = MDNS_STATUS_ERROR; +- int udp_socket = -1, yes = 1; +- char loop = 0, ttl = 255; +- struct sockaddr_in recv_addr , addr; +- struct ip_mreq mreq; ++ int udp_socket; - /* Get rid of "address already in use" error message. */ - if (setsockopt(udp_socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) == -1) -+ { -+ BUG("unable to setsockopt: %m\n"); -+ goto bugout; -+ } -+ if (setsockopt(udp_socket, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes)) == -1) + DBG("mdns_open_socket entry.\n"); + + if ((udp_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { - BUG("unable to setsockopt: %m\n"); + BUG("unable to create udp socket: %m\n"); +- goto bugout; +- } +- +- /* Get rid of "address already in use" error message. */ +- if (setsockopt(udp_socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) == -1) +- { +- BUG("unable to setsockopt: %m\n"); +- goto bugout; +- } +- +- /* Bind the socket to port and IP equal to INADDR_ANY. */ +- bzero(&recv_addr, sizeof(recv_addr)); +- recv_addr.sin_family = AF_INET; +- recv_addr.sin_addr.s_addr = htonl(INADDR_ANY); +- recv_addr.sin_port = htons(5353); +- if (bind(udp_socket, (struct sockaddr *) &recv_addr, sizeof(recv_addr)) == -1) +- { +- BUG("unable to bind udp socket: %m\n"); +- goto bugout; +- } +- +- /* Set multicast loopback off. */ +- if (setsockopt(udp_socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) == -1) +- { +- BUG("unable to setsockopt: %m\n"); +- goto bugout; +- } +- +- /* Set ttl to 255. Required by mdns. */ +- if (setsockopt(udp_socket, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl))== -1) +- { +- BUG("unable to setsockopt: %m\n"); +- goto bugout; +- } +- +- /* Join the .local multicast group */ +- mreq.imr_multiaddr.s_addr = inet_addr("224.0.0.251"); +- mreq.imr_interface.s_addr = htonl(INADDR_ANY); +- if (setsockopt(udp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(struct ip_mreq)) == -1) { +- BUG("unable to add to multicast group: %m\n"); +- close(udp_socket); goto bugout; + } + |