static void mainthread()
{
- Utility::srandom();
-
gid_t newgid = 0;
if (!::arg()["setgid"].empty())
newgid = strToGID(::arg()["setgid"]);
#include <unistd.h>
#include "base64.hh"
+#include "dns_random.hh"
#include "credentials.hh"
#include "misc.hh"
}
if (!d_isHashed) {
- d_fallbackHashPerturb = random();
+ d_fallbackHashPerturb = dns_random_uint32();
d_fallbackHash = burtle(reinterpret_cast<const unsigned char*>(d_credentials.getString().data()), d_credentials.getString().size(), d_fallbackHashPerturb);
}
}
#include "dnsdist.hh"
#include "dnsdist-lua.hh"
#include "dnsdist-rules.hh"
+#include "dns_random.hh"
std::shared_ptr<DNSRule> makeRule(const luadnsrule_t& var)
{
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");
#include "dnsdist-lua.hh"
#include "dnsdist-lua-ffi.hh"
#include "dolog.hh"
+#include "dns_random.hh"
GlobalStateHolder<ServerPolicy> g_policy;
bool g_roundrobinFailOnNoServer{false};
shared_ptr<DownstreamState> wrandom(const ServerPolicy::NumberedServerVector& servers, const DNSQuestion* dq)
{
- return valrandom(random(), servers);
+ return valrandom(dns_random_uint32(), servers);
}
uint32_t g_hashperturb;
#include "dnsdist-lua-ffi.hh"
#include "dolog.hh"
#include "dnsparser.hh"
+#include "dns_random.hh"
class MaxQPSIPRule : public DNSRule
{
{
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
#include <boost/format.hpp>
#include "iputils.hh"
#include "dnsparser.hh"
+#include "dns_random.hh"
#include <pwd.h>
#include <grp.h>
#include <climits>
}
}
set<int>::const_iterator it(pollinFDs.begin());
- advance(it, random() % pollinFDs.size());
+ advance(it, dns_random(pollinFDs.size()));
*fdOut = *it;
return 1;
}
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
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++;
{
g_argc = argc;
g_argv = argv;
- Utility::srandom();
versionSetProduct(ProductRecursor);
reportBasicTypes();
reportOtherTypes();
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 )
{
//! 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 );