imapauth: quote LOGIN arguments and refuse passwords with line breaks

This commit is contained in:
Alhuda Khan committed 2026-10-20 14:18:47 +05:30
1 parent 3d96465fc0
commit 2b7e1b820b
2 files changed
+37 -3

No files matched your search

+23 -1
View File
@@ -561,12 +561,34 @@ TEST_F(ZNCTest, SaslAuthPlainImapAuth) {
ASSERT_TRUE(imap.waitForNewConnection(30000 /* msec */));
auto imapsock = WrapIO(imap.nextPendingConnection());
imapsock.Write("* OK IMAP4rev1 Service Ready");
imapsock.ReadUntil("AUTH LOGIN user@mail.test.com hunter3");
imapsock.ReadUntil("AUTH LOGIN \"user@mail.test.com\" \"hunter3\"");
imapsock.Write("AUTH OK");
client2.ReadUntil(":irc.znc.in 903 foo :SASL authentication successful");
}
TEST_F(ZNCTest, SaslAuthPlainImapAuthLineBreak) {
auto znc = Run();
auto ircd = ConnectIRCd();
QTcpServer imap;
ASSERT_TRUE(imap.listen(QHostAddress::LocalHost)) << imap.errorString().toStdString();
auto client = LoginClient();
client.Write(QStringLiteral("znc loadmod imapauth 127.0.0.1 %1")
.arg(imap.serverPort())
.toUtf8());
client.ReadUntil("Loaded");
auto client2 = ConnectClient();
client2.Write("NICK foo");
client2.Write("CAP REQ :sasl");
client2.Write("USER bar");
client2.Write("AUTHENTICATE PLAIN");
client2.Write("AUTHENTICATE " +
QByteArrayLiteral("\0user\0x\r\nAUTH2 LOGIN a b").toBase64());
client2.ReadUntil(":irc.znc.in 904 foo :Invalid Password");
EXPECT_FALSE(imap.hasPendingConnections());
}
TEST_F(ZNCTest, SaslAuthExternal) {
#ifndef HAVE_LIBSSL
GTEST_SKIP() << "SSL is disabled";