]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Squelch log message: sendto failed permission denied for
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Apr 2010 06:48:49 +0000 (06:48 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Apr 2010 06:48:49 +0000 (06:48 +0000)
         255.255.255.255, it is visible in VERB_DETAIL (verbosity 2).

git-svn-id: file:///svn/unbound/trunk@2088 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/net_help.c
util/net_help.h
util/netevent.c

index 1fee6faeb742dcb56a580731f1d212ae2a81a2f9..1874a12353d6322fcbb34da10ae1cf37cb62e3b6 100644 (file)
@@ -1,3 +1,7 @@
+23 April 2010: Wouter
+       - Squelch log message: sendto failed permission denied for
+         255.255.255.255, it is visible in VERB_DETAIL (verbosity 2).
+
 22 April 2010: Wouter
        - tag 1.4.4.
        - trunk contains 1.4.5 in development.
index 182f39d8e50b8a43c9e48c7e90a9312cd05a7ef0..7b2a3f4009e79cbbf44f82f63ae250a3010ccf60 100644 (file)
@@ -494,6 +494,14 @@ addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen)
        return (memcmp(s, map_prefix, 12) == 0);
 }
 
+int addr_is_broadcast(struct sockaddr_storage* addr, socklen_t addrlen)
+{
+       int af = (int)((struct sockaddr_in*)addr)->sin_family;
+       void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr;
+       return af == AF_INET && addrlen>=(socklen_t)sizeof(struct sockaddr_in)
+               && memcmp(sinaddr, "\377\377\377\377", 4) == 0;
+}
+
 void sock_list_insert(struct sock_list** list, struct sockaddr_storage* addr,
        socklen_t len, struct regional* region)
 {
index 9ac96ebc3718c8cce03ac6b12b4de75cd596eadc..8afa84b269307256f6e45e333226459689cae12b 100644 (file)
@@ -279,6 +279,14 @@ void addr_to_str(struct sockaddr_storage* addr, socklen_t addrlen,
  */
 int addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen);
 
+/**
+ * See if sockaddr is 255.255.255.255.
+ * @param addr: address
+ * @param addrlen: length of address
+ * @return true if so
+ */
+int addr_is_broadcast(struct sockaddr_storage* addr, socklen_t addrlen);
+
 /**
  * Insert new socket list item. If fails logs error.
  * @param list: pointer to pointer to first item.
index 4b6a0a3cefb8cdf8e4d92b454b7af6792d483a81..3f3c6ce037e901837cf63f5e6c92d7082ed7a93f 100644 (file)
@@ -301,6 +301,12 @@ comm_point_send_udp_msg(struct comm_point *c, ldns_buffer* packet,
                        (struct sockaddr_storage*)addr, addrlen) &&
                        verbosity < VERB_DETAIL)
                        return 0;
+               /* SO_BROADCAST sockopt can give access to 255.255.255.255,
+                * but a dns cache does not need it. */
+               if(errno == EACCES && addr_is_broadcast(
+                       (struct sockaddr_storage*)addr, addrlen) &&
+                       verbosity < VERB_DETAIL)
+                       return 0;
 #ifndef USE_WINSOCK
                verbose(VERB_OPS, "sendto failed: %s", strerror(errno));
 #else