ph->set(bound_user, ans_record->rdata);
UserResolver* res_forward;
- if (bound_user->client_sa.sa.sa_family == AF_INET6)
+ if (bound_user->client_sa.family() == AF_INET6)
{
/* IPV6 forward lookup */
res_forward = new UserResolver(this->manager, this->creator, bound_user, ans_record->rdata, DNS::QUERY_AAAA);
irc::sockets::sockaddrs* user_ip = &bound_user->client_sa;
bool rev_match = false;
- if (user_ip->sa.sa_family == AF_INET6)
+ if (user_ip->family() == AF_INET6)
{
struct in6_addr res_bin;
if (inet_pton(AF_INET6, ans_record->rdata.c_str(), &res_bin))
return;
}
+ // Clients can't have a DNS hostname if they aren't connected via IPv4 or IPv6.
+ if (user->client_sa.family() != AF_INET && user->client_sa.family() != AF_INET6)
+ {
+ user->WriteNotice("*** Skipping host resolution (connected via a non-IP socket)");
+ return;
+ }
+
user->WriteNotice("*** Looking up your hostname...");
UserResolver* res_reverse = new UserResolver(*this->DNS, this, user, user->GetIPString(), DNS::QUERY_PTR);