From: Otto Moerbeek Date: Tue, 20 Jun 2023 10:50:36 +0000 (+0200) Subject: Stop using random(), only place left is in dnsdist-random.cc as a fallback X-Git-Tag: rec-5.0.0-alpha1~125^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3dc4644f6a04a4c3e5b9ef89a178f5e7dd87ed26;p=thirdparty%2Fpdns.git Stop using random(), only place left is in dnsdist-random.cc as a fallback --- diff --git a/pdns/auth-main.cc b/pdns/auth-main.cc index 390f7188f4..38d81c56aa 100644 --- a/pdns/auth-main.cc +++ b/pdns/auth-main.cc @@ -685,8 +685,6 @@ static void triggerLoadOfLibraries() static void mainthread() { - Utility::srandom(); - gid_t newgid = 0; if (!::arg()["setgid"].empty()) newgid = strToGID(::arg()["setgid"]); diff --git a/pdns/credentials.cc b/pdns/credentials.cc index 343c1205ec..5038804b63 100644 --- a/pdns/credentials.cc +++ b/pdns/credentials.cc @@ -40,6 +40,7 @@ #include #include "base64.hh" +#include "dns_random.hh" #include "credentials.hh" #include "misc.hh" @@ -373,7 +374,7 @@ CredentialsHolder::CredentialsHolder(std::string&& password, bool hashPlaintext) } if (!d_isHashed) { - d_fallbackHashPerturb = random(); + d_fallbackHashPerturb = dns_random_uint32(); d_fallbackHash = burtle(reinterpret_cast(d_credentials.getString().data()), d_credentials.getString().size(), d_fallbackHashPerturb); } } diff --git a/pdns/dnsdist-lua-rules.cc b/pdns/dnsdist-lua-rules.cc index 762e4e670d..8549014e72 100644 --- a/pdns/dnsdist-lua-rules.cc +++ b/pdns/dnsdist-lua-rules.cc @@ -22,6 +22,7 @@ #include "dnsdist.hh" #include "dnsdist-lua.hh" #include "dnsdist-rules.hh" +#include "dns_random.hh" std::shared_ptr makeRule(const luadnsrule_t& var) { @@ -443,9 +444,9 @@ void setupLuaRules(LuaContext& luaCtx) items.reserve(1000); for (int n = 0; n < 1000; ++n) { struct item i; - i.ids.qname = DNSName(std::to_string(random())); + i.ids.qname = DNSName(std::to_string(dns_random_uint32())); i.ids.qname += suffix; - i.ids.qtype = random() % 0xff; + i.ids.qtype = dns_random(0xff); i.ids.qclass = QClass::IN; i.ids.protocol = dnsdist::Protocol::DoUDP; i.ids.origRemote = ComboAddress("127.0.0.1"); diff --git a/pdns/dnsdistdist/dnsdist-lbpolicies.cc b/pdns/dnsdistdist/dnsdist-lbpolicies.cc index 70fec893c8..3aed13d54a 100644 --- a/pdns/dnsdistdist/dnsdist-lbpolicies.cc +++ b/pdns/dnsdistdist/dnsdist-lbpolicies.cc @@ -25,6 +25,7 @@ #include "dnsdist-lua.hh" #include "dnsdist-lua-ffi.hh" #include "dolog.hh" +#include "dns_random.hh" GlobalStateHolder g_policy; bool g_roundrobinFailOnNoServer{false}; @@ -153,7 +154,7 @@ static shared_ptr valrandom(const unsigned int val, const Serve shared_ptr wrandom(const ServerPolicy::NumberedServerVector& servers, const DNSQuestion* dq) { - return valrandom(random(), servers); + return valrandom(dns_random_uint32(), servers); } uint32_t g_hashperturb; diff --git a/pdns/dnsdistdist/dnsdist-rules.hh b/pdns/dnsdistdist/dnsdist-rules.hh index 651911e4f8..5b4e80a394 100644 --- a/pdns/dnsdistdist/dnsdist-rules.hh +++ b/pdns/dnsdistdist/dnsdist-rules.hh @@ -33,6 +33,7 @@ #include "dnsdist-lua-ffi.hh" #include "dolog.hh" #include "dnsparser.hh" +#include "dns_random.hh" class MaxQPSIPRule : public DNSRule { @@ -1055,7 +1056,7 @@ public: { if(d_proba == 1.0) return true; - double rnd = 1.0*random() / RAND_MAX; + double rnd = 1.0*dns_random_uint32() / UINT32_MAX; return rnd > (1.0 - d_proba); } string toString() const override diff --git a/pdns/misc.cc b/pdns/misc.cc index 4cfe6d4196..5c9c81785f 100644 --- a/pdns/misc.cc +++ b/pdns/misc.cc @@ -56,6 +56,7 @@ #include #include "iputils.hh" #include "dnsparser.hh" +#include "dns_random.hh" #include #include #include @@ -432,7 +433,7 @@ int waitForMultiData(const set& fds, const int seconds, const int useconds, } } set::const_iterator it(pollinFDs.begin()); - advance(it, random() % pollinFDs.size()); + advance(it, dns_random(pollinFDs.size())); *fdOut = *it; return 1; } @@ -463,7 +464,7 @@ int waitFor2Data(int fd1, int fd2, int seconds, int useconds, int*fd) else if((pfds[1].revents & POLLIN) && !(pfds[0].revents & POLLIN)) *fd = pfds[1].fd; else if(ret == 2) { - *fd = pfds[random()%2].fd; + *fd = pfds[dns_random_uint32()%2].fd; } else *fd = -1; // should never happen diff --git a/pdns/pdnsutil.cc b/pdns/pdnsutil.cc index 2f6a173ca0..bbb840cbdf 100644 --- a/pdns/pdnsutil.cc +++ b/pdns/pdnsutil.cc @@ -216,7 +216,7 @@ static void dbBench(const std::string& fname) while(B.get(rr)) { hits++; } - B.lookup(QType(QType::A), DNSName(std::to_string(random()))+domain, -1); + B.lookup(QType(QType::A), DNSName(std::to_string(dns_random_uint32()))+domain, -1); while(B.get(rr)) { } misses++; diff --git a/pdns/recursordist/rec-main.cc b/pdns/recursordist/rec-main.cc index e94401e74f..2d5dc826f5 100644 --- a/pdns/recursordist/rec-main.cc +++ b/pdns/recursordist/rec-main.cc @@ -3116,7 +3116,6 @@ int main(int argc, char** argv) { g_argc = argc; g_argv = argv; - Utility::srandom(); versionSetProduct(ProductRecursor); reportBasicTypes(); reportOtherTypes(); diff --git a/pdns/unix_utility.cc b/pdns/unix_utility.cc index 26c0782e1c..2fb2d00e07 100644 --- a/pdns/unix_utility.cc +++ b/pdns/unix_utility.cc @@ -204,14 +204,6 @@ int Utility::gettimeofday( struct timeval *tv, void * /* tz */) return ::gettimeofday(tv, nullptr); } -// Sets the random seed. -void Utility::srandom() -{ - struct timeval tv; - gettimeofday(&tv, nullptr); - ::srandom(tv.tv_sec ^ tv.tv_usec ^ getpid()); -} - // Writes a vector. int Utility::writev(int socket, const iovec *vector, size_t count ) { diff --git a/pdns/utility.hh b/pdns/utility.hh index 296449e4ef..5ddf2cc0f2 100644 --- a/pdns/utility.hh +++ b/pdns/utility.hh @@ -121,9 +121,6 @@ public: //! Writes a vector. static int writev( Utility::sock_t socket, const iovec *vector, size_t count ); - //! Sets the random seed. - static void srandom(void); - //! Drops the program's group privileges. static void dropGroupPrivs( uid_t uid, gid_t gid );