Split long SASL auth strings into 400-byte chunks (#2709)

Fixes #2705
This commit is contained in:
Artem Zhurikhin 2022-05-13 22:56:26 +02:00 committed by GitHub
parent 778047bc65
commit b8645bfbf2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 1 deletions

View File

@ -1929,7 +1929,24 @@ inbound_sasl_authenticate (server *serv, char *data)
return;
}
tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass);
/* long SASL passwords must be split into 400-byte chunks
https://ircv3.net/specs/extensions/sasl-3.1#the-authenticate-command */
size_t pass_len = strlen (pass);
if (pass_len <= 400)
tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass);
else
{
size_t sent = 0;
while (sent < pass_len)
{
char *pass_chunk = g_strndup (pass + sent, 400);
tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass_chunk);
sent += 400;
g_free (pass_chunk);
}
}
if (pass_len % 400 == 0)
tcp_sendf (serv, "AUTHENTICATE +\r\n");
g_free (pass);