From: Peter van Dijk Date: Wed, 28 Aug 2019 12:46:30 +0000 (+0200) Subject: add explicit dns_random_uint16 function and use it where we can X-Git-Tag: dnsdist-1.4.0-rc3~24^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a410b1763891427871e451f4c316a73ef0d68d6d;p=pdns add explicit dns_random_uint16 function and use it where we can --- diff --git a/pdns/calidns.cc b/pdns/calidns.cc index 1d80ac81b..4b4c1de53 100644 --- a/pdns/calidns.cc +++ b/pdns/calidns.cc @@ -394,7 +394,7 @@ try DNSPacketWriter pw(packet, DNSName(qname), DNSRecordContent::TypeToNumber(qtype)); pw.getHeader()->rd=wantRecursion; - pw.getHeader()->id=dns_random(UINT16_MAX); + pw.getHeader()->id=dns_random_uint16(); if(!subnet.empty() || !ecsRange.empty()) { EDNSSubnetOpts opt; diff --git a/pdns/communicator.hh b/pdns/communicator.hh index 5413e4dac..62b75548a 100644 --- a/pdns/communicator.hh +++ b/pdns/communicator.hh @@ -76,7 +76,7 @@ public: nr.domain = domain; nr.ip = caIp.toStringWithPort(); nr.attempts = 0; - nr.id = dns_random(0xffff); + nr.id = dns_random_uint16(); nr.next = time(0); d_nqueue.push_back(nr); diff --git a/pdns/dns_random.cc b/pdns/dns_random.cc index 48b910c8f..233f11669 100644 --- a/pdns/dns_random.cc +++ b/pdns/dns_random.cc @@ -320,3 +320,8 @@ uint32_t dns_random(uint32_t upper_bound) { throw std::runtime_error("Unreachable at " __FILE__ ":" + boost::lexical_cast(__LINE__)); // cannot be reached }; } + +uint16_t dns_random_uint16() +{ + return dns_random(0x10000); +} diff --git a/pdns/dns_random.hh b/pdns/dns_random.hh index ad163ee31..8aa88f0d4 100644 --- a/pdns/dns_random.hh +++ b/pdns/dns_random.hh @@ -25,5 +25,6 @@ void dns_random_init(const std::string& data = "", bool force_reinit = false); uint32_t dns_random(uint32_t n); +uint16_t dns_random_uint16(); #endif diff --git a/pdns/dnspacket.cc b/pdns/dnspacket.cc index ac752f506..dbfdb6688 100644 --- a/pdns/dnspacket.cc +++ b/pdns/dnspacket.cc @@ -387,7 +387,7 @@ void DNSPacket::wrapup() void DNSPacket::setQuestion(int op, const DNSName &qd, int newqtype) { memset(&d,0,sizeof(d)); - d.id=dns_random(0xffff); + d.id=dns_random_uint16(); d.rd=d.tc=d.aa=false; d.qr=false; d.qdcount=1; // is htons'ed later on diff --git a/pdns/dnsproxy.cc b/pdns/dnsproxy.cc index eafc6663e..7425055b8 100644 --- a/pdns/dnsproxy.cc +++ b/pdns/dnsproxy.cc @@ -78,7 +78,7 @@ DNSProxy::DNSProxy(const string &remote) throw PDNSException("Unable to UDP connect to remote nameserver "+d_remote.toStringWithPort()+": "+stringerror()); } - d_xor=dns_random(0xffff); + d_xor=dns_random_uint16(); g_log<, vector > > getIXFRDeltas(const ComboAd DNSPacketWriter pw(packet, zone, QType::IXFR); pw.getHeader()->qr=0; pw.getHeader()->rd=0; - pw.getHeader()->id=dns_random(0xffff); + pw.getHeader()->id=dns_random_uint16(); pw.startRecord(zone, QType::SOA, 0, QClass::IN, DNSResourceRecord::AUTHORITY); oursr.d_content->toPacket(pw); diff --git a/pdns/lwres.cc b/pdns/lwres.cc index 87745d15f..2fb111fde 100644 --- a/pdns/lwres.cc +++ b/pdns/lwres.cc @@ -229,7 +229,7 @@ int asyncresolve(const ComboAddress& ip, const DNSName& domain, int type, bool d buf.resize(bufsize); vector vpacket; // string mapped0x20=dns0x20(domain); - uint16_t qid = dns_random(0xffff); + uint16_t qid = dns_random_uint16(); DNSPacketWriter pw(vpacket, domain, type); pw.getHeader()->rd=sendRDQuery; diff --git a/pdns/notify.cc b/pdns/notify.cc index 1ec0c11d6..dace6775c 100644 --- a/pdns/notify.cc +++ b/pdns/notify.cc @@ -115,7 +115,7 @@ try } vector outpacket; DNSPacketWriter pw(outpacket, DNSName(argv[2]), QType::SOA, 1, Opcode::Notify); - pw.getHeader()->id = dns_random(UINT16_MAX); + pw.getHeader()->id = dns_random_uint16(); if(send(sock, &outpacket[0], outpacket.size(), 0) < 0) { cerr<<"Unable to send notify to "< packet; DNSPacketWriter pw(packet, domain, type); - pw.getHeader()->id = randomid = dns_random(0xffff); + pw.getHeader()->id = randomid = dns_random_uint16(); if(dnssecOK) { pw.addOpt(2800, 0, EDNSOpts::DNSSECOK); @@ -392,7 +392,7 @@ AXFRRetriever::AXFRRetriever(const ComboAddress& remote, vector packet; DNSPacketWriter pw(packet, domain, QType::AXFR); - pw.getHeader()->id = dns_random(0xffff); + pw.getHeader()->id = dns_random_uint16(); if(!tt.name.empty()) { if (tt.algo == DNSName("hmac-md5")) diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index 1797d3080..43ed9ec20 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -614,7 +614,7 @@ int PacketHandler::forwardPacket(const string &msgPrefix, DNSPacket *p, DomainIn } DNSPacket forwardPacket(*p); - forwardPacket.setID(dns_random(0xffff)); + forwardPacket.setID(dns_random_uint16()); forwardPacket.setRemote(&remote); uint16_t len=htons(forwardPacket.getString().length()); string buffer((const char*)&len, 2); diff --git a/pdns/saxfr.cc b/pdns/saxfr.cc index 641008582..8d0ddab45 100644 --- a/pdns/saxfr.cc +++ b/pdns/saxfr.cc @@ -112,7 +112,7 @@ try tkrc.d_keysize = output.size(); tkrc.d_key = output; tkrc.d_othersize = 0; - pwtkey.getHeader()->id = dns_random(0xffff); + pwtkey.getHeader()->id = dns_random_uint16(); pwtkey.startRecord(gssctx.getLabel(), QType::TKEY, 3600, QClass::ANY, DNSResourceRecord::ADDITIONAL, false); tkrc.toPacket(pwtkey); pwtkey.commit(); @@ -161,7 +161,7 @@ try DNSPacketWriter pw(packet, DNSName(argv[3]), 252); - pw.getHeader()->id = dns_random(0xffff); + pw.getHeader()->id = dns_random_uint16(); if (tsig) { TSIGRecordContent trc; diff --git a/pdns/stubresolver.cc b/pdns/stubresolver.cc index 8f593f9f2..985d96ea5 100644 --- a/pdns/stubresolver.cc +++ b/pdns/stubresolver.cc @@ -121,7 +121,7 @@ int stubDoResolve(const DNSName& qname, uint16_t qtype, vector& r vector packet; DNSPacketWriter pw(packet, qname, qtype); - pw.getHeader()->id=dns_random(0xffff); + pw.getHeader()->id=dns_random_uint16(); pw.getHeader()->rd=1; string msg ="Doing stub resolving, using resolvers: "; diff --git a/pdns/test-recpacketcache_cc.cc b/pdns/test-recpacketcache_cc.cc index 814dc6409..5aa60d762 100644 --- a/pdns/test-recpacketcache_cc.cc +++ b/pdns/test-recpacketcache_cc.cc @@ -33,7 +33,7 @@ BOOST_AUTO_TEST_CASE(test_recPacketCacheSimple) { DNSPacketWriter pw(packet, qname, QType::A); pw.getHeader()->rd=true; pw.getHeader()->qr=false; - pw.getHeader()->id=dns_random(UINT16_MAX); + pw.getHeader()->id=dns_random_uint16(); string qpacket((const char*)&packet[0], packet.size()); pw.startRecord(qname, QType::A, ttd); @@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(test_recPacketCacheSimple) { pw2.getHeader()->rd=true; pw2.getHeader()->qr=false; - pw2.getHeader()->id=dns_random(UINT16_MAX); + pw2.getHeader()->id=dns_random_uint16(); qpacket.assign((const char*)&packet[0], packet.size()); found = rpc.getResponsePacket(tag, qpacket, time(nullptr), &fpacket, &age, &qhash); @@ -108,7 +108,7 @@ BOOST_AUTO_TEST_CASE(test_recPacketCache_Tags) { DNSPacketWriter pw(packet, qname, QType::A); pw.getHeader()->rd=true; pw.getHeader()->qr=false; - pw.getHeader()->id=dns_random(UINT16_MAX); + pw.getHeader()->id=dns_random_uint16(); string qpacket(reinterpret_cast(&packet[0]), packet.size()); pw.startRecord(qname, QType::A, ttd);