mirror of
https://github.com/znc/znc.git
synced 2026-03-28 17:42:41 +01:00
Fix processing of multi-token CAP ACK
I broke it in 5943bc9ed9 while fixing #1950
This commit is contained in:
@@ -450,17 +450,19 @@ bool CIRCSock::OnCapabilityMessage(CMessage& Message) {
|
||||
}
|
||||
}
|
||||
} else if (sSubCmd == "ACK") {
|
||||
sArgs.Trim();
|
||||
IRCSOCKMODULECALL(OnServerCapResult(sArgs, true), NOTHING);
|
||||
auto it = mSupportedCaps.find(sArgs);
|
||||
if (it != mSupportedCaps.end()) {
|
||||
it->second(true);
|
||||
VCString vsCaps;
|
||||
sArgs.Split(" ", vsCaps, false);
|
||||
for (CString& sCap : vsCaps) {
|
||||
IRCSOCKMODULECALL(OnServerCapResult(sCap, true), NOTHING);
|
||||
auto it = mSupportedCaps.find(sCap);
|
||||
if (it != mSupportedCaps.end()) {
|
||||
it->second(true);
|
||||
}
|
||||
m_ssAcceptedCaps.insert(std::move(sCap));
|
||||
}
|
||||
m_ssAcceptedCaps.insert(sArgs);
|
||||
} else if (sSubCmd == "NAK") {
|
||||
// This should work because there's no [known]
|
||||
// capability with length of name more than 100 characters.
|
||||
sArgs.Trim();
|
||||
VCString vsCaps;
|
||||
sArgs.Split(" ", vsCaps, false);
|
||||
if (vsCaps.size() == 1) {
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "znctestconfig.h"
|
||||
|
||||
using testing::HasSubstr;
|
||||
using testing::Contains;
|
||||
using testing::ContainsRegex;
|
||||
using testing::SizeIs;
|
||||
using testing::Lt;
|
||||
@@ -1169,7 +1170,7 @@ TEST_F(ZNCTest, ManyCapsInReq) {
|
||||
ircd.ReadUntilAndGet("CAP REQ :", caps3);
|
||||
caps3.remove(0, prefix);
|
||||
EXPECT_THAT(caps3.toStdString(), Not(HasSubstr(" ")));
|
||||
EXPECT_TRUE(caps.split(' ').contains(caps3));
|
||||
EXPECT_THAT(caps.split(' '), Contains(caps3));
|
||||
}
|
||||
|
||||
TEST_F(ZNCTest, JoinWhileRegistration) {
|
||||
|
||||
@@ -305,9 +305,9 @@ TEST_P(SaslModuleTest, Test) {
|
||||
client.Write("znc jump");
|
||||
ircd = ConnectIRCd();
|
||||
ircd.ReadUntil("CAP LS");
|
||||
ircd.Write("CAP * LS :sasl");
|
||||
ircd.ReadUntil("CAP REQ :sasl");
|
||||
ircd.Write("CAP * ACK :sasl");
|
||||
ircd.Write("CAP * LS :away-notify sasl");
|
||||
ircd.ReadUntil("CAP REQ :away-notify sasl");
|
||||
ircd.Write("CAP * ACK :away-notify sasl");
|
||||
ircd.ReadUntil("AUTHENTICATE EXTERNAL");
|
||||
ircd.Write(":server 904 *");
|
||||
ircd.ReadUntil("AUTHENTICATE PLAIN");
|
||||
|
||||
Reference in New Issue
Block a user