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... --- server.c | 2 +- state.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/server.c b/server.c index a304db0..5d985cb 100644 --- a/server.c +++ b/server.c @@ -159,7 +159,7 @@ void serverLogin( void serverAuth(void) { assert(authPlain); - serverFormat("AUTHENTICATE %s\r\nCAP END\r\n", authPlain); + serverFormat("AUTHENTICATE %s\r\n", authPlain); free(authPlain); authPlain = NULL; } 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