From ae6c8a1bd51b698c577c23a7be4862f8ab6cf470 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Fri, 15 May 2020 20:25:41 +0200 Subject: [PATCH 1/5] Add better support for numeric 489 ERR_SECUREONLYCHAN along with a print format modified: src/fe-common/irc/fe-events-numeric.c modified: src/fe-common/irc/module-formats.c modified: src/fe-common/irc/module-formats.h --- src/fe-common/irc/fe-events-numeric.c | 29 +++++++++++++++++++++++++-- src/fe-common/irc/module-formats.c | 1 + src/fe-common/irc/module-formats.h | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index a6bbaa27..eb356945 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -531,6 +531,31 @@ static void event_477(IRC_SERVER_REC *server, const char *data, g_free(params); } +static void event_489(IRC_SERVER_REC *server, const char *data, + const char *nick) +{ + /* Numeric 489 can mean one of two things things: + * cannot join to channel (secure only), or not chanop or voice. + * If we tried to join this channel, display the joinerror. + * Otherwise depending on the channel being joined or not + * display the error in the channel or status window. + */ + IRC_CHANNEL_REC *chanrec; + char *params, *channel; + + g_return_if_fail(data != NULL); + + params = event_get_params(data, 2, NULL, &channel); + + chanrec = irc_channel_find(server, channel); + if (chanrec != NULL && !chanrec->joined) { + cannot_join(server, data, IRCTXT_JOINERROR_SECURE_ONLY); + } else { + print_event_received(server, data, nick, chanrec == NULL || chanrec->joined); + } + g_free(params); +} + static void event_target_too_fast(IRC_SERVER_REC *server, const char *data, const char *nick) { @@ -683,6 +708,7 @@ void fe_events_numeric_init(void) signal_add("event 475", (SIGNAL_FUNC) event_bad_channel_key); signal_add("event 476", (SIGNAL_FUNC) event_bad_channel_mask); signal_add("event 477", (SIGNAL_FUNC) event_477); + signal_add("event 489", (SIGNAL_FUNC) event_489); /* cannot join to channel (secure only), or not chanop or voice. */ signal_add("event 375", (SIGNAL_FUNC) event_motd); signal_add("event 376", (SIGNAL_FUNC) event_motd); signal_add("event 372", (SIGNAL_FUNC) event_motd); @@ -726,7 +752,6 @@ void fe_events_numeric_init(void) signal_add("event 478", (SIGNAL_FUNC) event_target_received); /* ban list is full */ signal_add("event 482", (SIGNAL_FUNC) event_target_received); /* not chanop */ signal_add("event 486", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+R) */ - signal_add("event 489", (SIGNAL_FUNC) event_target_received); /* not chanop or voice */ signal_add("event 494", (SIGNAL_FUNC) event_target_received); /* cannot /msg (own +R) */ signal_add("event 506", (SIGNAL_FUNC) event_target_received); /* cannot send (+R) */ signal_add("event 716", (SIGNAL_FUNC) event_target_received); /* cannot /msg (+g) */ @@ -776,6 +801,7 @@ void fe_events_numeric_deinit(void) signal_remove("event 475", (SIGNAL_FUNC) event_bad_channel_key); signal_remove("event 476", (SIGNAL_FUNC) event_bad_channel_mask); signal_remove("event 477", (SIGNAL_FUNC) event_477); + signal_remove("event 489", (SIGNAL_FUNC) event_489); signal_remove("event 375", (SIGNAL_FUNC) event_motd); signal_remove("event 376", (SIGNAL_FUNC) event_motd); signal_remove("event 372", (SIGNAL_FUNC) event_motd); @@ -815,7 +841,6 @@ void fe_events_numeric_deinit(void) signal_remove("event 478", (SIGNAL_FUNC) event_target_received); signal_remove("event 482", (SIGNAL_FUNC) event_target_received); signal_remove("event 486", (SIGNAL_FUNC) event_target_received); - signal_remove("event 489", (SIGNAL_FUNC) event_target_received); signal_remove("event 494", (SIGNAL_FUNC) event_target_received); signal_remove("event 506", (SIGNAL_FUNC) event_target_received); signal_remove("event 716", (SIGNAL_FUNC) event_target_received); diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index e36eed92..6cca76d2 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -63,6 +63,7 @@ FORMAT_REC fecommon_irc_formats[] = { { "joinerror_banned", "Cannot join to channel {channel $0} (You are banned)", 1, { 0 } }, { "joinerror_bad_key", "Cannot join to channel {channel $0} (Bad channel key)", 1, { 0 } }, { "joinerror_bad_mask", "Cannot join to channel {channel $0} (Bad channel mask)", 1, { 0 } }, + { "joinerror_secure_only", "Cannot join to channel {channel $0} (Secure clients only)", 1, { 0 } }, { "joinerror_unavail", "Cannot join to channel {channel $0} (Channel is temporarily unavailable)", 1, { 0 } }, { "joinerror_duplicate", "Channel {channel $0} already exists - cannot create it", 1, { 0 } }, { "channel_rejoin", "Channel {channel $0} is temporarily unavailable, this is normally because of netsplits. Irssi will now automatically try to rejoin back to this channel until the join is successful. Use /RMREJOINS command if you wish to abort this.", 1, { 0 } }, diff --git a/src/fe-common/irc/module-formats.h b/src/fe-common/irc/module-formats.h index 66a9804f..02247c4d 100644 --- a/src/fe-common/irc/module-formats.h +++ b/src/fe-common/irc/module-formats.h @@ -40,6 +40,7 @@ enum { IRCTXT_JOINERROR_BANNED, IRCTXT_JOINERROR_BAD_KEY, IRCTXT_JOINERROR_BAD_MASK, + IRCTXT_JOINERROR_SECURE_ONLY, IRCTXT_JOINERROR_UNAVAIL, IRCTXT_JOINERROR_DUPLICATE, IRCTXT_CHANNEL_REJOIN, From 28768e40a35488f6431ac924bfc1802fd1343f5b Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 16 May 2020 00:48:58 +0200 Subject: [PATCH 2/5] Increased IRSSI_ABI_VERSION to 29 modified: src/common.h --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index f2c50cde..c9c4e545 100644 --- a/src/common.h +++ b/src/common.h @@ -6,7 +6,7 @@ #define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */ #define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */ -#define IRSSI_ABI_VERSION 28 +#define IRSSI_ABI_VERSION 29 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From 1fef8f82a5d12ceb8525595f3b65c4de448b8019 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 16 May 2020 01:00:17 +0200 Subject: [PATCH 3/5] make git-clang-format check happy modified: src/fe-common/irc/fe-events-numeric.c --- src/fe-common/irc/fe-events-numeric.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index eb356945..8d672931 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -511,8 +511,7 @@ static void event_bad_channel_mask(IRC_SERVER_REC *server, const char *data) cannot_join(server, data, IRCTXT_JOINERROR_BAD_MASK); } -static void event_477(IRC_SERVER_REC *server, const char *data, - const char *nick) +static void event_477(IRC_SERVER_REC *server, const char *data, const char *nick) { /* Numeric 477 can mean many things: * modeless channel, cannot join/send to channel (+r/+R/+M). From 451e3692b24b9146788e35b4b7b950c1b5c18c52 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 16 May 2020 01:20:22 +0200 Subject: [PATCH 4/5] disable clang-format check for a few sections of code from before format strictnes got tightened modified: src/fe-common/irc/fe-events-numeric.c modified: src/fe-common/irc/module-formats.c modified: src/fe-common/irc/module-formats.h --- src/fe-common/irc/fe-events-numeric.c | 2 ++ src/fe-common/irc/module-formats.c | 2 ++ src/fe-common/irc/module-formats.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index 8d672931..08c97866 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -671,6 +671,7 @@ void fe_events_numeric_init(void) last_away_nick = NULL; last_away_msg = NULL; + /* clang-format off */ signal_add("event 221", (SIGNAL_FUNC) event_user_mode); signal_add("event 303", (SIGNAL_FUNC) event_ison); signal_add("event 353", (SIGNAL_FUNC) event_names_list); @@ -757,6 +758,7 @@ void fe_events_numeric_init(void) signal_add("event 717", (SIGNAL_FUNC) event_target_received); /* +g notified */ signal_add("event 728", (SIGNAL_FUNC) event_target_received); /* quiet (or other) list */ signal_add("event 729", (SIGNAL_FUNC) event_target_received); /* end of quiet (or other) list */ + /* clang-format on */ } void fe_events_numeric_deinit(void) diff --git a/src/fe-common/irc/module-formats.c b/src/fe-common/irc/module-formats.c index 6cca76d2..d4c00f25 100644 --- a/src/fe-common/irc/module-formats.c +++ b/src/fe-common/irc/module-formats.c @@ -21,6 +21,7 @@ #include "module.h" #include +/* clang-format off */ FORMAT_REC fecommon_irc_formats[] = { { MODULE_NAME, "IRC", 0 }, @@ -176,3 +177,4 @@ FORMAT_REC fecommon_irc_formats[] = { { NULL, NULL, 0 } }; +/* clang-format on */ diff --git a/src/fe-common/irc/module-formats.h b/src/fe-common/irc/module-formats.h index 02247c4d..892b77c8 100644 --- a/src/fe-common/irc/module-formats.h +++ b/src/fe-common/irc/module-formats.h @@ -1,5 +1,6 @@ #include +/* clang-format off */ enum { IRCTXT_MODULE_NAME, @@ -144,5 +145,6 @@ enum { IRCTXT_ASK_OPER_PASS, IRCTXT_ACCEPT_LIST }; +/* clang-format on */ extern FORMAT_REC fecommon_irc_formats[]; From 214c7ad7da283d37fa47ff663edbb4035c7aa0ac Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Sat, 16 May 2020 01:26:00 +0200 Subject: [PATCH 5/5] make clang-format happy about the code i added, instead of the code above it. modified: src/fe-common/irc/fe-events-numeric.c --- src/fe-common/irc/fe-events-numeric.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fe-common/irc/fe-events-numeric.c b/src/fe-common/irc/fe-events-numeric.c index 08c97866..37fdf30a 100644 --- a/src/fe-common/irc/fe-events-numeric.c +++ b/src/fe-common/irc/fe-events-numeric.c @@ -530,8 +530,7 @@ static void event_477(IRC_SERVER_REC *server, const char *data, const char *nick g_free(params); } -static void event_489(IRC_SERVER_REC *server, const char *data, - const char *nick) +static void event_489(IRC_SERVER_REC *server, const char *data, const char *nick) { /* Numeric 489 can mean one of two things things: * cannot join to channel (secure only), or not chanop or voice.