diff options
author | June McEnroe <june@causal.agency> | 2019-10-27 23:33:55 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-10-27 23:33:55 -0400 |
commit | ffac333812563763aa1605181120938c4a914cfe (patch) | |
tree | 402d0ac958faae8b3945b6e55202a8b495d9055d | |
parent | Only increment consumer after successful send (diff) | |
download | pounce-ffac333812563763aa1605181120938c4a914cfe.tar.gz pounce-ffac333812563763aa1605181120938c4a914cfe.zip |
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...
Diffstat (limited to '')
-rw-r--r-- | server.c | 2 | ||||
-rw-r--r-- | state.c | 14 |
2 files changed, 15 insertions, 1 deletions
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 }, |