X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fdns.cpp;h=13a80311ad75aa555b9d0d9051c7c5065c6305d7;hb=406ab09f22f46a6cee5559e96f0325768188ffa4;hp=a1287e49937ab8078b7b702e360e4e9f6108564e;hpb=b7f823b059aa6f8133abf0a0d1895983ccd04590;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/dns.cpp b/src/dns.cpp index a1287e499..13a80311a 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -95,6 +95,8 @@ struct s_header { /* DNS query header */ unsigned char payload[512]; /* DNS question, populated by dns_build_query_payload() */ }; +extern time_t TIME; + void *dns_align(void *inp) { char *p = (char*)inp; int offby = ((char *)p - (char *)0) % DNS_ALIGN; @@ -161,7 +163,7 @@ void DNS::dns_init() { /* on first call only: populates servers4 struct with up i4 = 0; initdone = 1; - srand((unsigned int) time(NULL)); + srand((unsigned int) TIME); memset(servers4,'\0',sizeof(in_addr) * DNS_MAX); f = fopen(DNS_CONFIG_FBCK,"r"); if (f == NULL) @@ -186,12 +188,8 @@ void DNS::dns_init_2(const char* dnsserver) { /* populates servers4 struct with int i; in_addr addr4; char buf[1024]; - if (initdone == 1) - return; i4 = 0; - - initdone = 1; - srand((unsigned int) time(NULL)); + srand((unsigned int) TIME); memset(servers4,'\0',sizeof(in_addr) * DNS_MAX); if (dns_aton4_s(dnsserver,&addr4) != NULL) memcpy(&servers4[i4++],&addr4,sizeof(in_addr)); @@ -212,7 +210,10 @@ static int dns_send_requests(const s_header *h, const s_connection *s, const int memcpy(&addr4.sin_addr,&servers4[i],sizeof(addr4.sin_addr)); addr4.sin_family = AF_INET; addr4.sin_port = htons(DNS_PORT); - sendto(s->fd, payload, l + 12, 0, (sockaddr *) &addr4, sizeof(addr4)); + if (sendto(s->fd, payload, l + 12, 0, (sockaddr *) &addr4, sizeof(addr4)) == -1) + { + return -1; + } } return 0; @@ -681,6 +682,11 @@ DNS::DNS(std::string dnsserver) dns_init_2(dnsserver.c_str()); } +void DNS::SetNS(std::string dnsserver) +{ + dns_init_2(dnsserver.c_str()); +} + DNS::~DNS() { } @@ -689,10 +695,12 @@ bool DNS::ReverseLookup(std::string ip) { binip = dns_aton4(ip.c_str()); if (binip == NULL) { - fprintf(stderr,"invalid IP address.\n"); - return 2; + return false; } this->fd = dns_getname4(binip); + if (this->fd == -1) + return false; + return true; } bool DNS::ForwardLookup(std::string host)