mirror of
https://github.com/znc/znc.git
synced 2026-07-30 05:23:53 +02:00
Add modperl support for sasl
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user