Handle a special character before "+OK", e.g. identify-msg + or -

This commit is contained in:
Samuel Lidén Borell 2014-06-02 20:27:13 +00:00 committed by Berke Viktor
parent d59acc2789
commit 7c52e29e6e
1 changed files with 9 additions and 1 deletions

View File

@ -40,7 +40,7 @@
static const char plugin_name[] = "FiSHLiM"; static const char plugin_name[] = "FiSHLiM";
static const char plugin_desc[] = "Encryption plugin for the FiSH protocol. Less is More!"; static const char plugin_desc[] = "Encryption plugin for the FiSH protocol. Less is More!";
static const char plugin_version[] = "0.0.16"; static const char plugin_version[] = "0.0.17";
static const char usage_setkey[] = "Usage: SETKEY [<nick or #channel>] <password>, sets the key for a channel or nick"; static const char usage_setkey[] = "Usage: SETKEY [<nick or #channel>] <password>, sets the key for a channel or nick";
static const char usage_delkey[] = "Usage: DELKEY <nick or #channel>, deletes the key for a channel or nick"; static const char usage_delkey[] = "Usage: DELKEY <nick or #channel>, deletes the key for a channel or nick";
@ -119,6 +119,7 @@ static int handle_incoming(char *word[], char *word_eol[], void *userdata) {
size_t ew; size_t ew;
size_t uw; size_t uw;
size_t length; size_t length;
char prefix_char = 0;
if (!irc_parse_message((const char **)word, &prefix, &command, &w)) if (!irc_parse_message((const char **)word, &prefix, &command, &w))
return HEXCHAT_EAT_NONE; return HEXCHAT_EAT_NONE;
@ -129,6 +130,8 @@ static int handle_incoming(char *word[], char *word_eol[], void *userdata) {
// Look for encrypted data // Look for encrypted data
for (ew = w+1; ew < HEXCHAT_MAX_WORDS-1; ew++) { for (ew = w+1; ew < HEXCHAT_MAX_WORDS-1; ew++) {
const char *s = (ew == w+1 ? word[ew]+1 : word[ew]); const char *s = (ew == w+1 ? word[ew]+1 : word[ew]);
if (*s && (s[1] == '+' || s[1] == 'm')) { prefix_char = *(s++); }
else { prefix_char = 0; }
if (strcmp(s, "+OK") == 0 || strcmp(s, "mcps") == 0) goto has_encrypted_data; if (strcmp(s, "+OK") == 0 || strcmp(s, "mcps") == 0) goto has_encrypted_data;
} }
return HEXCHAT_EAT_NONE; return HEXCHAT_EAT_NONE;
@ -163,6 +166,11 @@ static int handle_incoming(char *word[], char *word_eol[], void *userdata) {
if (!append(&message, &length, ":")) goto decrypt_error; if (!append(&message, &length, ":")) goto decrypt_error;
} }
if (prefix_char) {
char prefix_str[2] = { prefix_char, '\0' };
if (!append(&message, &length, prefix_str)) goto decrypt_error;
}
} else { } else {
// Add unencrypted data (for example, a prefix from a bouncer or bot) // Add unencrypted data (for example, a prefix from a bouncer or bot)
peice = word[uw]; peice = word[uw];