From ffac333812563763aa1605181120938c4a914cfe Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 27 Oct 2019 23:33:55 -0400 Subject: Wait for SASL success before sending CAP END Also refuse to continue logging in if SASL authentication fails. I should really just move all of log in and authentication from server.c to state.c... --- state.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'state.c') diff --git a/state.c b/state.c index 01829a4..c63a6b2 100644 --- a/state.c +++ b/state.c @@ -130,6 +130,16 @@ static void handleAuthenticate(struct Message *msg) { serverAuth(); } +static void handleReplyLoggedIn(struct Message *msg) { + (void)msg; + serverFormat("CAP END\r\n"); +} + +static void handleErrorSASLFail(struct Message *msg) { + if (!msg->params[1]) errx(EX_PROTOCOL, "RPL_SASLFAIL without message"); + errx(EX_CONFIG, "%s", msg->params[1]); +} + static void handleReplyWelcome(struct Message *msg) { if (!msg->params[1]) errx(EX_PROTOCOL, "RPL_WELCOME without message"); set(&intro.origin, msg->origin); @@ -233,6 +243,10 @@ static const struct { { "005", handleReplyISupport }, { "332", handleReplyTopic }, { "433", handleErrorNicknameInUse }, + { "900", handleReplyLoggedIn }, + { "904", handleErrorSASLFail }, + { "905", handleErrorSASLFail }, + { "906", handleErrorSASLFail }, { "AUTHENTICATE", handleAuthenticate }, { "CAP", handleCap }, { "ERROR", handleError }, -- cgit 1.4.1