From 84237f6b23be4bcafef9e69e8844e425bd969b46 Mon Sep 17 00:00:00 2001 From: w00t Date: Wed, 21 May 2008 22:07:48 +0000 Subject: Clean this up a bit, and log about ignoring link blocks due to missing attributes git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9787 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_spanningtree/utils.cpp | 69 +++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 28 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp index 38923a7e2..cfbb9add0 100644 --- a/src/modules/m_spanningtree/utils.cpp +++ b/src/modules/m_spanningtree/utils.cpp @@ -348,42 +348,55 @@ void SpanningTreeUtilities::RefreshIPCache() ValidIPs.clear(); for (std::vector::iterator L = LinkBlocks.begin(); L != LinkBlocks.end(); L++) { - if ((!L->IPAddr.empty()) && (!L->RecvPass.empty()) && (!L->SendPass.empty()) && (!L->Name.empty()) && (L->Port)) + if (L->IPAddr.empty() || L->RecvPass.empty() || L->SendPass.empty() || L->Name.empty() || L->Port) { - ValidIPs.push_back(L->IPAddr); - - if (L->AllowMask.length()) - ValidIPs.push_back(L->AllowMask); - - /* Needs resolving */ - bool ipvalid = true; - QueryType start_type = DNS_QUERY_A; -#ifdef IPV6 - start_type = DNS_QUERY_AAAA; - if (strchr(L->IPAddr.c_str(),':')) + if (L->Name.empty()) { - in6_addr n; - if (inet_pton(AF_INET6, L->IPAddr.c_str(), &n) < 1) - ipvalid = false; + ServerInstance->Logs->Log("m_spanningtree",DEFAULT,"m_spanningtree: Ignoring a malformed link block (all link blocks require a name!)"); } else + { + ServerInstance->Logs->Log("m_spanningtree",DEFAULT,"m_spanningtree: Ignoring a link block missing recvpass, sendpass, port or ipaddr."); + } + + /* Invalid link block */ + continue; + } + + ValidIPs.push_back(L->IPAddr); + + if (L->AllowMask.length()) + ValidIPs.push_back(L->AllowMask); + + /* Needs resolving */ + bool ipvalid = true; + QueryType start_type = DNS_QUERY_A; +#ifdef IPV6 + start_type = DNS_QUERY_AAAA; + if (strchr(L->IPAddr.c_str(),':')) + { + in6_addr n; + if (inet_pton(AF_INET6, L->IPAddr.c_str(), &n) < 1) + ipvalid = false; + } + else #endif + { + in_addr n; + if (inet_aton(L->IPAddr.c_str(),&n) < 1) + ipvalid = false; + } + + if (!ipvalid) + { + try { - in_addr n; - if (inet_aton(L->IPAddr.c_str(),&n) < 1) - ipvalid = false; + bool cached; + SecurityIPResolver* sr = new SecurityIPResolver((Module*)this->Creator, this, ServerInstance, L->IPAddr, *L, cached, start_type); + ServerInstance->AddResolver(sr, cached); } - if (!ipvalid) + catch (...) { - try - { - bool cached; - SecurityIPResolver* sr = new SecurityIPResolver((Module*)this->Creator, this, ServerInstance, L->IPAddr, *L, cached, start_type); - ServerInstance->AddResolver(sr, cached); - } - catch (...) - { - } } } } -- cgit v1.2.3