aboutsummaryrefslogtreecommitdiff
path: root/print/hplip
diff options
context:
space:
mode:
authorTijl Coosemans <tijl@FreeBSD.org>2020-07-21 19:00:39 +0000
committerTijl Coosemans <tijl@FreeBSD.org>2020-07-21 19:00:39 +0000
commit0248b2740959f9400189e87c4fa5b73b7774e5cc (patch)
tree125722a3c2a909bef40fc31ca1e3b1cb08e8f5a4 /print/hplip
parent5228f6a9707679a6400865103fd0473d35b85f86 (diff)
Notes
Diffstat (limited to 'print/hplip')
-rw-r--r--print/hplip/Makefile2
-rw-r--r--print/hplip/files/patch-protocol_discovery_mdns.c79
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;
+ }
+