diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_sslmodes.cpp | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/src/modules/m_sslmodes.cpp b/src/modules/m_sslmodes.cpp index bc5cb5675..fda90c3d8 100644 --- a/src/modules/m_sslmodes.cpp +++ b/src/modules/m_sslmodes.cpp @@ -34,6 +34,8 @@ enum { // From UnrealIRCd. ERR_SECUREONLYCHAN = 489, + + // InspIRCd-specific. ERR_ALLMUSTSSL = 490 }; @@ -120,27 +122,14 @@ class SSLModeUser : public ModeHandler ModeAction OnModeChange(User* user, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE { - if (adding) - { - if (!dest->IsModeSet(this)) - { - if (!API || !API->GetCertificate(user)) - return MODEACTION_DENY; + if (adding == dest->IsModeSet(this)) + return MODEACTION_DENY; - dest->SetMode(this, true); - return MODEACTION_ALLOW; - } - } - else - { - if (dest->IsModeSet(this)) - { - dest->SetMode(this, false); - return MODEACTION_ALLOW; - } - } + if (adding && IS_LOCAL(user) && (!API || !API->GetCertificate(user))) + return MODEACTION_DENY; - return MODEACTION_DENY; + dest->SetMode(this, adding); + return MODEACTION_ALLOW; } }; |