* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * Inspire is copyright (C) 2002-2005 ChatSpike-Dev.
+ * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
* E-mail:
* <brain@chatspike.net>
* <Craig@chatspike.net>
void dns_close(int fd)
{
#ifndef THREADED_DNS
- ServerInstance->SE->DelFd(fd);
+ if (ServerInstance && ServerInstance->SE)
+ ServerInstance->SE->DelFd(fd);
#endif
log(DEBUG,"DNS: dns_close on fd %d",fd);
if (fd == lastcreate)
alist->next = NULL;
break;
}
- goto defaultcase;
+ memcpy(res,&h.payload[i],rr.rdlength);
+ res[rr.rdlength] = '\0';
break;
default:
- defaultcase:
memcpy(res,&h.payload[i],rr.rdlength);
res[rr.rdlength] = '\0';
break;
log(DEBUG,"Create blank DNS");
}
-DNS::DNS(std::string dnsserver)
+DNS::DNS(const std::string &dnsserver)
{
dns_init_2(dnsserver.c_str());
- log(DEBUG,"Create DNS");
+ log(DEBUG,"Create DNS with server '%s'",dnsserver.c_str());
}
-void DNS::SetNS(std::string dnsserver)
+void DNS::SetNS(const std::string &dnsserver)
{
dns_init_2(dnsserver.c_str());
log(DEBUG,"Set NS");
{
}
-bool DNS::ReverseLookup(std::string ip)
+bool DNS::ReverseLookup(const std::string &ip)
{
- ServerInstance->stats->statsDns++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDns++;
binip = dns_aton4(ip.c_str());
if (binip == NULL)
{
}
log(DEBUG,"DNS: ReverseLookup, fd=%d",this->myfd);
#ifndef THREADED_DNS
- ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS);
+ if (ServerInstance && ServerInstance->SE)
+ ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS);
#endif
return true;
}
-bool DNS::ForwardLookup(std::string host)
+bool DNS::ForwardLookup(const std::string &host)
{
- ServerInstance->stats->statsDns++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDns++;
this->myfd = dns_getip4(host.c_str());
if (this->myfd == -1)
{
}
log(DEBUG,"DNS: ForwardLookup, fd=%d",this->myfd);
#ifndef THREADED_DNS
- ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS);
+ if (ServerInstance && ServerInstance->SE)
+ ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_DNS);
#endif
return true;
}
+bool DNS::ForwardLookupWithFD(const std::string &host, int &fd)
+{
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDns++;
+ this->myfd = dns_getip4(host.c_str());
+ fd = this->myfd;
+ if (this->myfd == -1)
+ {
+
+ }
+ log(DEBUG,"DNS: ForwardLookupWithFD, fd=%d",this->myfd);
+ if (ServerInstance && ServerInstance->SE)
+ ServerInstance->SE->AddFd(this->myfd,true,X_ESTAB_MODULE);
+ return true;
+}
+
bool DNS::HasResult(int fd)
{
return (fd == this->myfd);
result = dns_getresult(this->myfd);
if (result)
{
- ServerInstance->stats->statsDnsGood++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDnsGood++;
dns_close(this->myfd);
return result;
}
else
{
- ServerInstance->stats->statsDnsBad++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDnsBad++;
if (this->myfd != -1)
{
dns_close(this->myfd);
}
if (result)
{
- ServerInstance->stats->statsDnsGood++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDnsGood++;
unsigned char a = (unsigned)result[0];
unsigned char b = (unsigned)result[1];
unsigned char c = (unsigned)result[2];
}
else
{
- ServerInstance->stats->statsDnsBad++;
+ if (ServerInstance && ServerInstance->stats)
+ ServerInstance->stats->statsDnsBad++;
log(DEBUG,"DANGER WILL ROBINSON! NXDOMAIN for forward lookup, but we got a reverse lookup!");
return "";
}
DNS dns2;
std::string host;
std::string ip;
- if (dns1.ReverseLookup(u->ip))
+ if (dns1.ReverseLookup((char*)inet_ntoa(u->ip4)))
{
while (!dns1.HasResult())
{
usleep(100);
}
ip = dns2.GetResultIP();
- if (ip == std::string(u->ip))
+ if (ip == std::string((char*)inet_ntoa(u->ip4)))
{
if (host.length() < 160)
{