From 2998fd178b7b0f799bf2e660f5f2e2d6aaaccf10 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 15 Dec 2021 09:37:13 +0000 Subject: Only show the tls cap if there is a TLS provider available. --- src/modules/m_starttls.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_starttls.cpp b/src/modules/m_starttls.cpp index 80e2bb006..d73fb4e6d 100644 --- a/src/modules/m_starttls.cpp +++ b/src/modules/m_starttls.cpp @@ -81,16 +81,39 @@ class CommandStartTLS : public SplitCommand } }; +class TLSCap : public Cap::Capability +{ + private: + dynamic_reference_nocheck& sslref; + + bool OnList(LocalUser* user) CXX11_OVERRIDE + { + return sslref; + } + + bool OnRequest(LocalUser* user, bool adding) CXX11_OVERRIDE + { + return sslref; + } + + public: + TLSCap(Module* mod, dynamic_reference_nocheck& ssl) + : Cap::Capability(mod, "tls") + , sslref(ssl) + { + } +}; + class ModuleStartTLS : public Module { CommandStartTLS starttls; - Cap::Capability tls; + TLSCap tls; dynamic_reference_nocheck ssl; public: ModuleStartTLS() : starttls(this, ssl) - , tls(this, "tls") + , tls(this, ssl) , ssl(this, "ssl") { } -- cgit v1.3.1-10-gc9f91 From 6d0c400a490068bc4d5169583f620dd5ee428746 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 20 Dec 2021 11:01:59 +0000 Subject: Allow unsetting uniqueusername with metadata too. --- src/modules/m_spanningtree/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/modules') diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 5e30469e9..614c7cd83 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -808,7 +808,7 @@ void ModuleSpanningTree::OnDecodeMetaData(Extensible* target, const std::string& // HACK: this should use automatically synced user metadata in v4. User* dest = static_cast(target); if (dest && (extname == "uniqueusername")) - dest->uniqueusername = true; + dest->uniqueusername = (extdata != "0"); } CullResult ModuleSpanningTree::cull() -- cgit v1.3.1-10-gc9f91 From ba82306465d61f99fd353f2533a1447801d6c676 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sat, 25 Dec 2021 09:34:12 +0000 Subject: Fix not looking up IPv4 addresses when a server has an IPv6 address. Closes #1811. --- src/modules/m_spanningtree/resolvers.cpp | 47 +++++++++++++++++++++----------- src/modules/m_spanningtree/resolvers.h | 1 + 2 files changed, 32 insertions(+), 16 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_spanningtree/resolvers.cpp b/src/modules/m_spanningtree/resolvers.cpp index 2811737b8..a339c7756 100644 --- a/src/modules/m_spanningtree/resolvers.cpp +++ b/src/modules/m_spanningtree/resolvers.cpp @@ -113,6 +113,25 @@ SecurityIPResolver::SecurityIPResolver(Module* me, DNS::Manager* mgr, const std: { } +bool SecurityIPResolver::CheckIPv4() +{ + // We only check IPv4 addresses if we have checked IPv6. + if (query != DNS::QUERY_AAAA) + return false; + + SecurityIPResolver* res = new SecurityIPResolver(mine, this->manager, host, MyLink, DNS::QUERY_A); + try + { + this->manager->Process(res); + return true; + } + catch (const DNS::Exception&) + { + delete res; + return false; + } +} + void SecurityIPResolver::OnLookupComplete(const DNS::Query *r) { for (std::vector >::iterator i = Utils->LinkBlocks.begin(); i != Utils->LinkBlocks.end(); ++i) @@ -123,31 +142,27 @@ void SecurityIPResolver::OnLookupComplete(const DNS::Query *r) for (std::vector::const_iterator j = r->answers.begin(); j != r->answers.end(); ++j) { const DNS::ResourceRecord& ans_record = *j; - if (ans_record.type == this->question.type) - Utils->ValidIPs.push_back(ans_record.rdata); + if (ans_record.type != this->question.type) + continue; + + Utils->ValidIPs.push_back(ans_record.rdata); + ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Resolved '%s' as a valid IP address for link '%s'", + ans_record.rdata.c_str(), MyLink->Name.c_str()); } break; } } + + CheckIPv4(); } void SecurityIPResolver::OnError(const DNS::Query *r) { // This can be called because of us being unloaded but we don't have to do anything differently - if (query == DNS::QUERY_AAAA) - { - SecurityIPResolver* res = new SecurityIPResolver(mine, this->manager, host, MyLink, DNS::QUERY_A); - try - { - this->manager->Process(res); - return; - } - catch (DNS::Exception &) - { - delete res; - } - } - ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Could not resolve IP associated with Link '%s': %s", + if (CheckIPv4()) + return; + + ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Could not resolve IP associated with link '%s': %s", MyLink->Name.c_str(), this->manager->GetErrorStr(r->error).c_str()); } diff --git a/src/modules/m_spanningtree/resolvers.h b/src/modules/m_spanningtree/resolvers.h index 295f19463..0fdc5c77a 100644 --- a/src/modules/m_spanningtree/resolvers.h +++ b/src/modules/m_spanningtree/resolvers.h @@ -40,6 +40,7 @@ class SecurityIPResolver : public DNS::Request Module* mine; std::string host; DNS::QueryType query; + bool CheckIPv4(); public: SecurityIPResolver(Module* me, DNS::Manager* mgr, const std::string& hostname, Link* x, DNS::QueryType qt); void OnLookupComplete(const DNS::Query *r) CXX11_OVERRIDE; -- cgit v1.3.1-10-gc9f91