diff options
author | June McEnroe <june@causal.agency> | 2018-12-04 22:13:44 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-12-04 22:13:44 -0500 |
commit | 776ce586486b09ef76eadfd9c35584dd5e09d44f (patch) | |
tree | afdcf783ba8b7b269f57dc848c8a1f569b968db2 | |
parent | Show error if disconnected unintentionally (diff) | |
download | test-776ce586486b09ef76eadfd9c35584dd5e09d44f.tar.gz test-776ce586486b09ef76eadfd9c35584dd5e09d44f.zip |
Implement SASL PLAIN authentication
-rw-r--r-- | handle.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/handle.c b/handle.c index 3b52f0c..dd42452 100644 --- a/handle.c +++ b/handle.c @@ -105,6 +105,24 @@ static void handleError(char *prefix, char *params) { } } +static void handleCap(char *prefix, char *params) { + char *subc, *list; + parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, &subc, &list); + if (!strcmp(subc, "ACK") && self.auth) { + size_t len = strlen(self.auth); + byte plain[1 + len]; + plain[0] = 0; + for (size_t i = 0; i < len; ++i) { + plain[1 + i] = (self.auth[i] == ':' ? 0 : self.auth[i]); + } + char *b64 = base64(plain, sizeof(plain)); + ircFmt("AUTHENTICATE PLAIN\r\n"); + ircFmt("AUTHENTICATE %s\r\n", b64); + free(b64); + } + ircFmt("CAP END\r\n"); +} + static void handleErrorErroneousNickname(char *prefix, char *params) { char *mesg; parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, NULL, &mesg); @@ -481,6 +499,7 @@ static const struct { { "401", handleErrorNoSuchNick }, { "432", handleErrorErroneousNickname }, { "433", handleErrorErroneousNickname }, + { "CAP", handleCap }, { "ERROR", handleError }, { "JOIN", handleJoin }, { "KICK", handleKick }, |