]> granicus.if.org Git - pdns/commitdiff
add explicit dns_random_uint16 function and use it where we can
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 28 Aug 2019 12:46:30 +0000 (14:46 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 28 Aug 2019 13:42:09 +0000 (15:42 +0200)
14 files changed:
pdns/calidns.cc
pdns/communicator.hh
pdns/dns_random.cc
pdns/dns_random.hh
pdns/dnspacket.cc
pdns/dnsproxy.cc
pdns/ixfr.cc
pdns/lwres.cc
pdns/notify.cc
pdns/resolver.cc
pdns/rfc2136handler.cc
pdns/saxfr.cc
pdns/stubresolver.cc
pdns/test-recpacketcache_cc.cc

index 1d80ac81b90a8380d81801d610d2b9ebf455b7b1..4b4c1de53483a2d7981040d9c67d4bec473449eb 100644 (file)
@@ -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;
index 5413e4dacf2335f9a5af69276536204d776719ae..62b75548a2e3864dd480b08748d34b23326ce62b 100644 (file)
@@ -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);
index 48b910c8f4f85d7c2a561f664de3c52fc37dd922..233f116694450601710887eeebb03f48fbbf4fa8 100644 (file)
@@ -320,3 +320,8 @@ uint32_t dns_random(uint32_t upper_bound) {
     throw std::runtime_error("Unreachable at " __FILE__ ":" + boost::lexical_cast<std::string>(__LINE__)); // cannot be reached
   };
 }
+
+uint16_t dns_random_uint16()
+{
+  return dns_random(0x10000);
+}
index ad163ee31c2772cdf943dff81381a6f62fe29cf5..8aa88f0d4a1467901b3cadb86b34018750375dcc 100644 (file)
@@ -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
index ac752f506fc7439a002a2c480b2e03780e72b8e4..dbfdb6688e8cf96f35a8c98d43b6533e33466e1b 100644 (file)
@@ -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
index eafc6663efc6345988aacb75b09a0290a6e04672..7425055b803f83badba95fc25a82134af2676653 100644 (file)
@@ -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<<Logger::Error<<"DNS Proxy launched, local port "<<ntohs(local.sin4.sin_port)<<", remote "<<d_remote.toStringWithPort()<<endl;
 } 
 
index 0a7dca9f5638829b783a9dd3af2c686c01c0ad2e..bafead50e1ca9ecc66d5d095161ef747ec55d78f 100644 (file)
@@ -131,7 +131,7 @@ vector<pair<vector<DNSRecord>, vector<DNSRecord> > > 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);
 
index 87745d15fe95e7126652796377fb93ec2a2aa83c..2fb111fde1a878a16f858e184c80cb53f06089fd 100644 (file)
@@ -229,7 +229,7 @@ int asyncresolve(const ComboAddress& ip, const DNSName& domain, int type, bool d
   buf.resize(bufsize);
   vector<uint8_t> 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;
index 1ec0c11d64ee7baed789f5b747c5eca93f69fce6..dace6775c03291eeee7dc14c2247d9c5e69793f7 100644 (file)
@@ -115,7 +115,7 @@ try
     }
     vector<uint8_t> 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 "<<addr.toStringWithPort()<<": "+stringerror()<<endl;
index fb8c830dbd10952ab2067dec7ee9cb9d4db1d931..e907d232f10be77ca2c723317fec1f44fe2ab269 100644 (file)
@@ -130,7 +130,7 @@ uint16_t Resolver::sendResolve(const ComboAddress& remote, const ComboAddress& l
   uint16_t randomid;
   vector<uint8_t> 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<uint8_t> 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"))
index 1797d3080899509a8fd49ab59a6e858454c526c1..43ed9ec20d5b31edcbd8a0f4fdcf6d2891c71046 100644 (file)
@@ -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);
index 641008582ef363bfb33d43daba9d06ca79e52592..8d0ddab4521033c5017fd354ead6f31ab0e8995f 100644 (file)
@@ -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;
index 8f593f9f22d557127011e3b299d9182b200f3169..985d96ea55004c909abbfa0145011ab0f6651d35 100644 (file)
@@ -121,7 +121,7 @@ int stubDoResolve(const DNSName& qname, uint16_t qtype, vector<DNSZoneRecord>& r
   vector<uint8_t> 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: ";
index 814dc640962f261b11a907f3c48124e9c9753953..5aa60d7623fad61b9e40c4c34e1ce51ae92adb0f 100644 (file)
@@ -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<const char*>(&packet[0]), packet.size());
   pw.startRecord(qname, QType::A, ttd);