diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-05-21 22:07:48 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-05-21 22:07:48 +0000 |
commit | 84237f6b23be4bcafef9e69e8844e425bd969b46 (patch) | |
tree | 8e3a1b76c384183a1142efb92ef2eb087ae8244b /src | |
parent | e52435a2a8ebbab86c826e32f86e6d1aa4f786e8 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_spanningtree/utils.cpp | 69 |
1 files changed, 41 insertions, 28 deletions
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<Link>::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 (...) - { - } } } } |