diff options
author | June McEnroe <june@causal.agency> | 2020-08-13 09:33:16 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-08-13 09:33:16 -0400 |
commit | 6f1cb708f0105027f0b2948130e71e0cf0995c89 (patch) | |
tree | f9b30bc976ea2ff55be68e98ae93e624adf87845 | |
parent | Add Additional Components section to README (diff) | |
download | pounce-6f1cb708f0105027f0b2948130e71e0cf0995c89.tar.gz pounce-6f1cb708f0105027f0b2948130e71e0cf0995c89.zip |
Fix unintended interception of NICK after registration
Another bug caused by trying to support broken clients. I'm annoyed.
-rw-r--r-- | client.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/client.c b/client.c index d0df0aa..06efeb8 100644 --- a/client.c +++ b/client.c @@ -318,20 +318,21 @@ static void handlePalaver(struct Client *client, struct Message *msg) { } static const struct { + bool intercept; + bool need; const char *cmd; Handler *fn; - bool need; } Handlers[] = { - { "AUTHENTICATE", handleAuthenticate, false }, - { "CAP", handleCap, false }, - { "NICK", handleNick, false }, - { "NOTICE", handlePrivmsg, true }, - { "PALAVER", handlePalaver, false }, - { "PASS", handlePass, false }, - { "PRIVMSG", handlePrivmsg, true }, - { "QUIT", handleQuit, true }, - { "TAGMSG", handleTagmsg, true }, - { "USER", handleUser, false }, + { false, false, "AUTHENTICATE", handleAuthenticate }, + { false, false, "NICK", handleNick }, + { false, false, "PASS", handlePass }, + { false, false, "USER", handleUser }, + { true, false, "CAP", handleCap }, + { true, false, "PALAVER", handlePalaver }, + { true, true, "NOTICE", handlePrivmsg }, + { true, true, "PRIVMSG", handlePrivmsg }, + { true, true, "QUIT", handleQuit }, + { true, true, "TAGMSG", handleTagmsg }, }; static void clientParse(struct Client *client, char *line) { @@ -355,6 +356,7 @@ static bool intercept(const char *line, size_t len) { line = sp; } for (size_t i = 0; i < ARRAY_LEN(Handlers); ++i) { + if (!Handlers[i].intercept) continue; size_t n = strlen(Handlers[i].cmd); if (len < n) continue; if (memcmp(line, Handlers[i].cmd, n)) continue; |