]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_sasl Advertise the sasl capability only if the target server is online
authorAttila Molnar <attilamolnar@hush.com>
Mon, 25 Apr 2016 11:24:40 +0000 (13:24 +0200)
committerAttila Molnar <attilamolnar@hush.com>
Mon, 25 Apr 2016 11:24:40 +0000 (13:24 +0200)
Issue #812

src/modules/m_sasl.cpp

index a6edb8b7079f3ec8ee53092a0d8299db0704ac93..02a302c11cacd46d1d660a792745fcffc9efdf04 100644 (file)
@@ -89,6 +89,7 @@ class ServerTracker : public SpanningTreeEventListener
 class SASLCap : public Cap::Capability
 {
        std::string mechlist;
+       const ServerTracker& servertracker;
 
        bool OnRequest(LocalUser* user, bool adding) CXX11_OVERRIDE
        {
@@ -100,14 +101,20 @@ class SASLCap : public Cap::Capability
                return (user->registered != REG_ALL);
        }
 
+       bool OnList(LocalUser* user) CXX11_OVERRIDE
+       {
+               return servertracker.IsOnline();
+       }
+
        const std::string* GetValue(LocalUser* user) const CXX11_OVERRIDE
        {
                return &mechlist;
        }
 
  public:
-       SASLCap(Module* mod)
+       SASLCap(Module* mod, const ServerTracker& tracker)
                : Cap::Capability(mod, "sasl")
+               , servertracker(tracker)
        {
        }
 
@@ -351,7 +358,7 @@ class ModuleSASL : public Module
        ModuleSASL()
                : authExt("sasl_auth", ExtensionItem::EXT_USER, this)
                , servertracker(this)
-               , cap(this)
+               , cap(this, servertracker)
                , auth(this, authExt, cap)
                , sasl(this, authExt)
                , sasleventprov(this, "event/sasl")