]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_sasl Advertise SASL mechanism list to supporting clients
authorAttila Molnar <attilamolnar@hush.com>
Sat, 5 Dec 2015 15:01:30 +0000 (16:01 +0100)
committerAttila Molnar <attilamolnar@hush.com>
Sat, 5 Dec 2015 15:01:30 +0000 (16:01 +0100)
src/modules/m_sasl.cpp

index 4d1dbbc71df04f0b8d9aa7e44f9186d2596a944e..7570e77328d7b5e24a3d027bf6e4a79c02468dd4 100644 (file)
@@ -26,6 +26,8 @@
 
 class SASLCap : public Cap::Capability
 {
+       std::string mechlist;
+
        bool OnRequest(LocalUser* user, bool adding) CXX11_OVERRIDE
        {
                // Requesting this cap is allowed anytime
@@ -36,11 +38,25 @@ class SASLCap : public Cap::Capability
                return (user->registered != REG_ALL);
        }
 
+       const std::string* GetValue(LocalUser* user) const CXX11_OVERRIDE
+       {
+               return &mechlist;
+       }
+
  public:
        SASLCap(Module* mod)
                : Cap::Capability(mod, "sasl")
        {
        }
+
+       void SetMechlist(const std::string& newmechlist)
+       {
+               if (mechlist == newmechlist)
+                       return;
+
+               mechlist = newmechlist;
+               NotifyValueChange();
+       }
 };
 
 enum SaslState { SASL_INIT, SASL_COMM, SASL_DONE };
@@ -305,6 +321,12 @@ class ModuleSASL : public Module
                return MOD_RES_PASSTHRU;
        }
 
+       void OnDecodeMetaData(Extensible* target, const std::string& extname, const std::string& extdata) CXX11_OVERRIDE
+       {
+               if ((target == NULL) && (extname == "saslmechlist"))
+                       cap.SetMechlist(extdata);
+       }
+
        Version GetVersion() CXX11_OVERRIDE
        {
                return Version("Provides support for IRC Authentication Layer (aka: SASL) via AUTHENTICATE.", VF_VENDOR);