if(sock==-1)
throw PDNSException("poll betrayed us! (should not happen)");
-
DLOG(L<<"Received a packet " << len <<" bytes long from "<< remote.toString()<<endl);
+
+ BOOST_STATIC_ASSERT(offsetof(sockaddr_in, sin_port) == offsetof(sockaddr_in6, sin6_port));
+
+ if(remote.sin4.sin_port == 0) // would generate error on responding. sin4 also works for ipv6
+ return 0;
DNSPacket *packet;
if(prefilled) // they gave us a preallocated packet
#include "dns_random.hh"
#include <iostream>
#include <errno.h>
+#include <boost/static_assert.hpp>
#include <map>
#include <set>
#include "recursor_cache.hh"
g_stats.unauthorizedUDP++;
return;
}
+ BOOST_STATIC_ASSERT_MSG(offsetof(sockaddr_in, sin_port) == offsetof(sockaddr_in6, sin6_port), "IPv4 and IPv6 structs differ wrt port");
+ if(!fromaddr.sin4.sin_port) { // also works for IPv6
+ if(!g_quiet)
+ L<<Logger::Error<<"["<<MT->getTid()<<"] dropping UDP query from "<<fromaddr.toStringWithPort()<<", can't deal with port 0"<<endl;
+
+ g_stats.clientParseError++; // not quite the best place to put it, but needs to go somewhere
+ return;
+ }
try {
dnsheader* dh=(dnsheader*)data;