Implement SASL PLAIN authentication
parent
638be4e775
commit
776ce58648
19
handle.c
19
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) {
|
static void handleErrorErroneousNickname(char *prefix, char *params) {
|
||||||
char *mesg;
|
char *mesg;
|
||||||
parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, NULL, &mesg);
|
parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, NULL, &mesg);
|
||||||
|
@ -481,6 +499,7 @@ static const struct {
|
||||||
{ "401", handleErrorNoSuchNick },
|
{ "401", handleErrorNoSuchNick },
|
||||||
{ "432", handleErrorErroneousNickname },
|
{ "432", handleErrorErroneousNickname },
|
||||||
{ "433", handleErrorErroneousNickname },
|
{ "433", handleErrorErroneousNickname },
|
||||||
|
{ "CAP", handleCap },
|
||||||
{ "ERROR", handleError },
|
{ "ERROR", handleError },
|
||||||
{ "JOIN", handleJoin },
|
{ "JOIN", handleJoin },
|
||||||
{ "KICK", handleKick },
|
{ "KICK", handleKick },
|
||||||
|
|
Loading…
Reference in New Issue