diff options
author | Adam <Adam@anope.org> | 2011-08-23 19:06:15 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-09-10 01:55:37 -0400 |
commit | b504791bad450dfc9d28faa8b2009f8eaef0f485 (patch) | |
tree | efd935358ade31dfb0987091d75864d7c3985443 /modules | |
parent | d5749c11f3ad7288c9307e156f263a2223ecd1a1 (diff) |
Cleaned up the dns engine, and fixed sometimes parsing multiple answer queries incorrectly
Diffstat (limited to 'modules')
-rw-r--r-- | modules/extra/m_dnsbl.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/modules/extra/m_dnsbl.cpp b/modules/extra/m_dnsbl.cpp index 7e5342d3c..c8f18a34c 100644 --- a/modules/extra/m_dnsbl.cpp +++ b/modules/extra/m_dnsbl.cpp @@ -28,16 +28,21 @@ class DNSBLResolver : public DNSRequest public: DNSBLResolver(Module *c, User *u, const Blacklist &b, const Anope::string &host, bool add_akill) : DNSRequest(host, DNS_QUERY_A, true, c), user(u), blacklist(b), add_to_akill(add_akill) { } - void OnLookupComplete(const DNSRecord *record) + void OnLookupComplete(const DNSQuery *record) { if (!user || user->GetExt("m_dnsbl_akilled")) return; + const ResourceRecord &ans_record = record->answers[0]; + // Replies should be in 127.0.0.0/24 + if (ans_record.rdata.find("127.0.0.") != 0) + return; + Anope::string record_reason; if (!this->blacklist.replies.empty()) { sockaddrs sresult; - sresult.pton(AF_INET, record->result); + sresult.pton(AF_INET, ans_record.rdata); int result = (sresult.sa4.sin_addr.s_addr & 0xFF000000) >> 24; if (!this->blacklist.replies.count(result)) @@ -155,8 +160,6 @@ class ModuleDNSBL : public Module Log() << "m_dnsbl: " << ex.GetReason(); } } - - return; } }; |