]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_sasl.cpp
m_spanningtree Refuse topic changes that would result in desync
[user/henk/code/inspircd.git] / src / modules / m_sasl.cpp
index a6edb8b7079f3ec8ee53092a0d8299db0704ac93..2b247a198a138ebc6e7cd9943db59002a58b0599 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)
        {
        }
 
@@ -238,7 +245,7 @@ class SaslAuthenticator
 
                SendSASL(params);
 
-               if (parameters[0][0] == '*')
+               if (parameters[0].c_str()[0] == '*')
                {
                        this->Abort();
                        return false;
@@ -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")