Add modperl support for sasl

This commit is contained in:
Alexey Sokolov
2025-03-16 00:42:27 +00:00
parent 93e364b296
commit a7dffb8ff1
5 changed files with 106 additions and 7 deletions
+57
View File
@@ -404,5 +404,62 @@ TEST_F(ZNCTest, ModpythonSaslAuth) {
"as user");
}
TEST_F(ZNCTest, ModperlSaslAuth) {
#ifndef WANT_PERL
GTEST_SKIP() << "Modperl is disabled";
#endif
auto znc = Run();
znc->CanLeak();
InstallModule("sasltest.pm", R"(
package sasltest;
use base 'ZNC::Module';
sub module_types { $ZNC::CModInfo::GlobalModule }
sub OnClientGetSASLMechanisms {
my $self = shift;
my $mechs = shift;
$mechs->insert('FOO');
}
sub OnClientSASLServerInitialChallenge {
if ($_[1] eq "FOO") {
$_[2] = "Welcome";
}
return $ZNC::CONTINUE;
}
sub OnClientSASLAuthenticate {
my $self = $_[0];
if ($_[1] eq "FOO") {
my $user = ZNC::CZNC::Get()->FindUser("user");
$self->GetClient->AcceptSASLLogin($user);
return $ZNC::HALT;
}
return $ZNC::CONTINUE;
}
1;
)");
auto ircd = ConnectIRCd();
auto client = LoginClient();
client.Write("znc loadmod modperl");
client.Write("znc loadmod sasltest");
client.ReadUntil("Loaded");
auto client2 = ConnectClient();
client2.Write("CAP LS 302");
client2.Write("NICK nick");
client2.ReadUntil(" sasl=FOO,PLAIN ");
client2.Write("CAP REQ :sasl");
client2.Write("AUTHENTICATE FOO");
client2.ReadUntil("AUTHENTICATE " + QByteArrayLiteral("Welcome").toBase64());
client2.Write("AUTHENTICATE +");
client2.ReadUntil(
":irc.znc.in 900 nick nick!user@127.0.0.1 user :You are now logged in "
"as user");
}
} // namespace
} // namespace znc_inttest