mirror of
https://github.com/znc/znc.git
synced 2026-07-02 16:02:02 +02:00
Don't crash when receiving SASL lines from server without having negotiated SASL via CAP
Reported by Noisytoot on Pissnet, thanks
This commit is contained in:
@@ -196,6 +196,7 @@ class CSASLMod : public CModule {
|
||||
}
|
||||
|
||||
void Authenticate(const CString& sLine) {
|
||||
if (m_Mechanisms.empty()) return;
|
||||
/* Send blank authenticate for other mechanisms (like EXTERNAL). */
|
||||
CString sAuthLine;
|
||||
if (m_Mechanisms.GetCurrent().Equals("PLAIN") && sLine.Equals("+")) {
|
||||
@@ -249,6 +250,7 @@ class CSASLMod : public CModule {
|
||||
}
|
||||
|
||||
EModRet OnNumericMessage(CNumericMessage& msg) override {
|
||||
if (m_Mechanisms.empty()) return CONTINUE;
|
||||
if (msg.GetCode() == 903) {
|
||||
/* SASL success! */
|
||||
if (m_bVerbose) {
|
||||
|
||||
@@ -268,5 +268,17 @@ INSTANTIATE_TEST_CASE_P(SaslInst, SaslModuleTest,
|
||||
99,
|
||||
{SaslModuleTest::Prefix() + "YmJi", "Yg=="}}));
|
||||
|
||||
TEST_F(ZNCTest, SaslMechsNotInit) {
|
||||
auto znc = Run();
|
||||
auto ircd = ConnectIRCd();
|
||||
auto client = LoginClient();
|
||||
client.Write("znc loadmod sasl");
|
||||
client.Write("PRIVMSG *sasl :set * *");
|
||||
client.ReadUntil("Password has been set");
|
||||
ircd.Write("AUTHENTICATE +");
|
||||
ircd.Write("PING foo");
|
||||
ircd.ReadUntil("PONG foo");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace znc_inttest
|
||||
|
||||
Reference in New Issue
Block a user