From 700ec4c472dd415536a29ffe1509473d6cc588e9 Mon Sep 17 00:00:00 2001 From: ffrogman Date: Tue, 25 May 2021 23:37:36 -0400 Subject: [PATCH 01/71] Fix cursor getting stuck for auto completions that exclusively change the case of letters --- src/fe-common/core/completion.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe-common/core/completion.c b/src/fe-common/core/completion.c index 06ac124c..e2c4d2a9 100644 --- a/src/fe-common/core/completion.c +++ b/src/fe-common/core/completion.c @@ -104,7 +104,7 @@ char *auto_word_complete(const char *line, int *pos) /* check for words in autocompletion list */ replace = completion_find(word, TRUE); - if (replace == NULL) { + if (replace == NULL || (!g_strcmp0(replace, word))) { ret = NULL; g_string_free(result, TRUE); } else { From f147589e528722859d604446b6496a992602f3a9 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 28 Jul 2021 11:05:30 +0200 Subject: [PATCH 02/71] can do /server add -matrix -network my_matrix_network By Andrej Kacian --- src/fe-common/core/fe-server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fe-common/core/fe-server.c b/src/fe-common/core/fe-server.c index e0100618..468ac4e7 100644 --- a/src/fe-common/core/fe-server.c +++ b/src/fe-common/core/fe-server.c @@ -91,7 +91,9 @@ static SERVER_SETUP_REC *create_server_setup(GHashTable *optlist) if (rec == NULL) rec = chat_protocol_get_default(); else { - chatnet = g_hash_table_lookup(optlist, rec->chatnet); + chatnet = g_hash_table_lookup(optlist, "network"); + if (chatnet == NULL && g_hash_table_lookup(optlist, rec->chatnet) != NULL) + chatnet = rec->chatnet; if (chatnet_find(chatnet) == NULL) { printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_UNKNOWN_CHATNET, chatnet); From 6591c94635e4da69693cbe55dae747d970e6a52b Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 14 Jan 2021 14:27:57 +0100 Subject: [PATCH 03/71] add a limit to showing /NAMES on join only show the counts if too many nicks --- src/fe-common/core/fe-channels.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index 8c914cb8..2d4e9ece 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -107,9 +107,14 @@ static void signal_window_item_changed(WINDOW_REC *window, WI_ITEM_REC *item) static void sig_channel_joined(CHANNEL_REC *channel) { - if (settings_get_bool("show_names_on_join") && - !channel->session_rejoin) - fe_channels_nicklist(channel, CHANNEL_NICKLIST_FLAG_ALL); + if (settings_get_bool("show_names_on_join") && !channel->session_rejoin) { + int limit = settings_get_int("show_names_on_join_limit"); + int flags = CHANNEL_NICKLIST_FLAG_ALL; + if (limit > 0 && g_hash_table_size(channel->nicks) > limit) { + flags |= CHANNEL_NICKLIST_FLAG_COUNT; + } + fe_channels_nicklist(channel, flags); + } } /* SYNTAX: JOIN [-window] [-invite] [-] [] */ @@ -625,6 +630,7 @@ void fe_channels_init(void) { settings_add_bool("lookandfeel", "autoclose_windows", TRUE); settings_add_bool("lookandfeel", "show_names_on_join", TRUE); + settings_add_int("lookandfeel", "show_names_on_join_limit", 18); settings_add_int("lookandfeel", "names_max_columns", 6); settings_add_int("lookandfeel", "names_max_width", 0); From aecf0870143d9dc3530a9e6cc8b64928178d7794 Mon Sep 17 00:00:00 2001 From: Guntbert Reiter Date: Sun, 30 May 2021 21:11:10 +0200 Subject: [PATCH 04/71] Add documentation for escaping some characters this is especially important when using `sendcmd` to send a password for autologin --- docs/help/in/eval.in | 6 ++++++ docs/help/in/network.in | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/help/in/eval.in b/docs/help/in/eval.in index b2d4b625..b0c904b4 100644 --- a/docs/help/in/eval.in +++ b/docs/help/in/eval.in @@ -11,11 +11,17 @@ Evaluates the given commands and executes them; you can use internal variables and separate multiple commands by using the ';' character. + If the command contains a string with '$', '\' or ';' those characters + need to be escaped: + '$' -> '$$' + '\' -> '\\' (or even '\\\\', depending on where they are used) + ';' -> '\;' %9Examples:%9 /EVAL echo I am connected to ${S} on ${chatnet} as ${N} /EVAL echo My user privileges are +${usermode}; echo Let's party! + to print '1;2$3\4': /EVAL echo 1\;2$$3\\4 %9References:%9 diff --git a/docs/help/in/network.in b/docs/help/in/network.in index 0542bd7d..788c1c65 100644 --- a/docs/help/in/network.in +++ b/docs/help/in/network.in @@ -18,7 +18,8 @@ -usermode: Specifies the user modes to set on yourself. -autosendcmd: Specifies the commands, separated by the ';' character, and enclosed within two "'" characters, to perform after - connecting. + connecting. + (Some characters need to be escaped - see /help eval) -querychans: Specifies the maximum number of channels to put in one MODE or WHO command when synchronizing. -whois: Specifies the maximum number of nicknames in one WHOIS From 77741b187ca72ffef747eff3f36903bb1afbba21 Mon Sep 17 00:00:00 2001 From: Francis M Date: Tue, 22 Jun 2021 16:10:55 +0100 Subject: [PATCH 05/71] Fix minor typos in help text --- docs/help/in/otr.in | 2 +- docs/help/in/window.in | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/help/in/otr.in b/docs/help/in/otr.in index f76a2d53..fcfcd875 100644 --- a/docs/help/in/otr.in +++ b/docs/help/in/otr.in @@ -51,7 +51,7 @@ GENKEY This process is done in a background worker and can take an arbitrary amount of time. The completion is checked when another irssi event is - catched. + caught. HELP Print this help. diff --git a/docs/help/in/window.in b/docs/help/in/window.in index aa133766..9a7a7b10 100644 --- a/docs/help/in/window.in +++ b/docs/help/in/window.in @@ -33,12 +33,12 @@ THEME: %|Applies or removes a per-window theme. GROW: %|Increase the size of the active split window by the specified number of lines. SHRINK: %|Decrease the size of the active split window by the specified number of lines. - SIZE: %|Set the current split window size to the specified numer of lines. + SIZE: %|Set the current split window size to the specified number of lines. BALANCE: %|Balance the heights of all split windows. HIDE: %|Hides the current split window, or the split window specified by number or item name. SHOW: %|Show the window specified by number or item name as a new split windows. It is made sticky when autostick_split_windows is turned on. UP: %|Set the split window left or above the current one active. At the top, wraps to the bottom. - DOWN: %|Set the split window right or below the current one active. At the bottom, wraps teft. + DOWN: %|Set the split window right or below the current one active. At the bottom, wraps left. LEFT: %|Go to the previous window numerically that is part of the current sticky group (or not part of any sticky group). RIGHT: %|Go to the next window numerically that is part of the current sticky group (or not part of any sticky group). STICK: %|Make the currently active window sticky, or stick the window specified by number to the currently visible split window. Or turn off stickyness of the currently active window or the window specified by number. From d2062e34cf0e74faffb725928809837807ca67b9 Mon Sep 17 00:00:00 2001 From: Jari Matilainen Date: Wed, 23 Jun 2021 20:56:05 +0200 Subject: [PATCH 06/71] Update fe-common-core.c --- src/fe-common/core/fe-common-core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index 63df1698..e981db33 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -500,7 +500,8 @@ gboolean strarray_find_dest(char **array, const TEXT_DEST_REC *dest) str += server_tag_len + 1; } - if (g_strcmp0(str, "") == 0 || g_strcmp0(str, "::all") == 0) { + if (g_strcmp0(str, "") == 0 || g_strcmp0(str, "*") == 0 || + g_strcmp0(str, "::all") == 0) { return TRUE; } else if (g_ascii_strcasecmp(str, dest->target) == 0) { return TRUE; From 3aeebd310db1c026d90bb05c4f8e7d1ae9ffe544 Mon Sep 17 00:00:00 2001 From: Jari Matilainen Date: Wed, 23 Jun 2021 21:07:31 +0200 Subject: [PATCH 07/71] Update fe-common-core.c --- src/fe-common/core/fe-common-core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index e981db33..1fcd5df1 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -500,8 +500,7 @@ gboolean strarray_find_dest(char **array, const TEXT_DEST_REC *dest) str += server_tag_len + 1; } - if (g_strcmp0(str, "") == 0 || g_strcmp0(str, "*") == 0 || - g_strcmp0(str, "::all") == 0) { + if (g_strcmp0(str, "*") == 0 || g_strcmp0(str, "::all") == 0) { return TRUE; } else if (g_ascii_strcasecmp(str, dest->target) == 0) { return TRUE; From 554a8556d27c66917ed274a76d8ba47bdc7ba13a Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 12 Aug 2021 23:46:31 +0200 Subject: [PATCH 08/71] fix use of wrong "equal" function in meta hash tables --- src/core/servers.c | 2 +- src/fe-text/textbuffer-formats.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/servers.c b/src/core/servers.c index 159af0e1..30fc6844 100644 --- a/src/core/servers.c +++ b/src/core/servers.c @@ -369,7 +369,7 @@ void server_connect_init(SERVER_REC *server) server->type = module_get_uniq_id("SERVER", 0); server_ref(server); server->current_incoming_meta = - g_hash_table_new_full(g_str_hash, (GEqualFunc) g_strcmp0, + g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal, (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free); server->nick = g_strdup(server->connrec->nick); diff --git a/src/fe-text/textbuffer-formats.c b/src/fe-text/textbuffer-formats.c index 2aa06cb2..2cd0d4a3 100644 --- a/src/fe-text/textbuffer-formats.c +++ b/src/fe-text/textbuffer-formats.c @@ -116,7 +116,7 @@ void textbuffer_meta_rec_free(TEXT_BUFFER_META_REC *rec) static void meta_hash_create(struct _TEXT_BUFFER_META_REC *meta) { if (meta->hash == NULL) { - meta->hash = g_hash_table_new_full(g_str_hash, (GEqualFunc) g_strcmp0, + meta->hash = g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal, (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free); } From 7d13cfba074b7dc849f095a3281952ee38518a92 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 12 Aug 2021 23:48:37 +0200 Subject: [PATCH 09/71] add a meta table to all lines --- src/fe-common/core/formats.c | 32 +++++++++++++++++++++++++++++++- src/fe-common/core/formats.h | 12 ++++++++---- src/perl/ui/Formats.xs | 19 +++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/fe-common/core/formats.c b/src/fe-common/core/formats.c index 51588afb..b660b616 100644 --- a/src/fe-common/core/formats.c +++ b/src/fe-common/core/formats.c @@ -34,6 +34,7 @@ #include #include #include +#include static const char *format_backs = "04261537"; static const char *format_fores = "kbgcrmyw"; @@ -46,6 +47,8 @@ static int hide_text_style, hide_server_tags, hide_colors; static int timestamp_level; static int timestamp_timeout; +static GHashTable *global_meta; + int format_find_tag(const char *module, const char *tag) { FORMAT_REC *formats; @@ -453,6 +456,27 @@ void format_read_arglist(va_list va, FORMAT_REC *format, } } +void format_dest_meta_stash(TEXT_DEST_REC *dest, const char *meta_key, const char *meta_value) +{ + g_hash_table_replace(dest->meta, i_refstr_intern(meta_key), g_strdup(meta_value)); +} + +const char *format_dest_meta_stash_find(TEXT_DEST_REC *dest, const char *meta_key) +{ + return g_hash_table_lookup(dest->meta, meta_key); +} + +void format_dest_meta_clear_all(TEXT_DEST_REC *dest) +{ + g_hash_table_remove_all(dest->meta); +} + +static void clear_global_meta(WINDOW_REC *window, TEXT_DEST_REC *dest) +{ + if (dest != NULL && dest->meta == global_meta) + g_hash_table_remove_all(global_meta); +} + void format_create_dest_tag_meta(TEXT_DEST_REC *dest, void *server, const char *server_tag, const char *target, int level, WINDOW_REC *window, GHashTable *meta) @@ -465,7 +489,7 @@ void format_create_dest_tag_meta(TEXT_DEST_REC *dest, void *server, const char * dest->level = level; dest->window = window != NULL ? window : window_find_closest(server, target, level); - dest->meta = meta; + dest->meta = meta != NULL ? meta : global_meta; } void format_create_dest_tag(TEXT_DEST_REC *dest, void *server, const char *server_tag, @@ -1705,12 +1729,18 @@ static void read_settings(void) void formats_init(void) { signal_gui_print_text = signal_get_uniq_id("gui print text"); + global_meta = + g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal, + (GDestroyNotify) i_refstr_release, (GDestroyNotify) g_free); read_settings(); signal_add("setup changed", (SIGNAL_FUNC) read_settings); + signal_add_last("gui print text finished", (SIGNAL_FUNC) clear_global_meta); } void formats_deinit(void) { + g_hash_table_destroy(global_meta); signal_remove("setup changed", (SIGNAL_FUNC) read_settings); + signal_remove("gui print text finished", (SIGNAL_FUNC) clear_global_meta); } diff --git a/src/fe-common/core/formats.h b/src/fe-common/core/formats.h index 12274638..c17bcc75 100644 --- a/src/fe-common/core/formats.h +++ b/src/fe-common/core/formats.h @@ -63,7 +63,7 @@ typedef struct _TEXT_DEST_REC { int hilight_priority; char *hilight_color; - int flags; + int flags; /* PRINT_FLAG */ GHashTable *meta; } TEXT_DEST_REC; @@ -116,12 +116,16 @@ char *format_get_line_start(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t); void format_create_dest(TEXT_DEST_REC *dest, void *server, const char *target, int level, WINDOW_REC *window); -void format_create_dest_tag(TEXT_DEST_REC *dest, void *server, - const char *server_tag, const char *target, - int level, WINDOW_REC *window); +void format_create_dest_tag(TEXT_DEST_REC *dest, void *server, const char *server_tag, + const char *target, int level, WINDOW_REC *window); void format_newline(TEXT_DEST_REC *dest); +/* manipulate the meta table of a dest */ +void format_dest_meta_stash(TEXT_DEST_REC *dest, const char *meta_key, const char *meta_value); +const char *format_dest_meta_stash_find(TEXT_DEST_REC *dest, const char *meta_key); +void format_dest_meta_clear_all(TEXT_DEST_REC *dest); + /* Return how many characters in `str' must be skipped before `len' characters of text is skipped. */ int strip_real_length(const char *str, int len, diff --git a/src/perl/ui/Formats.xs b/src/perl/ui/Formats.xs index c03e6bb5..0f8b59b7 100644 --- a/src/perl/ui/Formats.xs +++ b/src/perl/ui/Formats.xs @@ -156,3 +156,22 @@ print(dest, str) char *str CODE: printtext_dest(dest, "%s", str); + +#******************************* +MODULE = Irssi::UI::Formats PACKAGE = Irssi::UI::TextDest PREFIX = format_dest_ +#******************************* + +void +format_dest_meta_stash(dest, meta_key, meta_value) + Irssi::UI::TextDest dest + char *meta_key + char *meta_value + +char * +format_dest_meta_stash_find(dest, meta_key) + Irssi::UI::TextDest dest + char *meta_key +CODE: + RETVAL = (char *) format_dest_meta_stash_find(dest, meta_key); +OUTPUT: + RETVAL From 9677b07488b6b7b4ee7a425d8f2826669404d058 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 12 Aug 2021 23:49:40 +0200 Subject: [PATCH 10/71] fix wrong server_time in $line->get_meta --- src/perl/textui/TextBuffer.xs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/perl/textui/TextBuffer.xs b/src/perl/textui/TextBuffer.xs index 6695eae0..301e2d4a 100644 --- a/src/perl/textui/TextBuffer.xs +++ b/src/perl/textui/TextBuffer.xs @@ -123,6 +123,8 @@ PPCODE: (void) hv_store(hv, key, strlen(key), new_pv(val), 0); } } - (void) hv_store(hv, "server_time", 11, newSViv(m->server_time), 0); + if (m->server_time) { + (void) hv_store(hv, "server_time", 11, newSViv(m->server_time), 0); + } } XPUSHs(sv_2mortal(newRV_noinc((SV *) hv))); From 8d314eadf1350619d481cc5729c7bd74eec85693 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 12 Aug 2021 23:51:18 +0200 Subject: [PATCH 11/71] move TEXT_BUFFER_META_REC -> LINE_INFO_META_REC --- src/fe-common/core/formats.h | 5 +++++ src/fe-text/textbuffer-formats.c | 12 ++++++------ src/fe-text/textbuffer-formats.h | 8 ++------ src/fe-text/textbuffer.h | 2 +- src/perl/textui/TextBuffer.xs | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/fe-common/core/formats.h b/src/fe-common/core/formats.h index c17bcc75..5666c73b 100644 --- a/src/fe-common/core/formats.h +++ b/src/fe-common/core/formats.h @@ -67,6 +67,11 @@ typedef struct _TEXT_DEST_REC { GHashTable *meta; } TEXT_DEST_REC; +typedef struct _LINE_INFO_META_REC { + gint64 server_time; + GHashTable *hash; +} LINE_INFO_META_REC; + #define window_get_theme(window) \ (window != NULL && (window)->theme != NULL ? \ (window)->theme : current_theme) diff --git a/src/fe-text/textbuffer-formats.c b/src/fe-text/textbuffer-formats.c index 2cd0d4a3..b194a18a 100644 --- a/src/fe-text/textbuffer-formats.c +++ b/src/fe-text/textbuffer-formats.c @@ -102,7 +102,7 @@ static void format_rec_set_dest(TEXT_BUFFER_FORMAT_REC *rec, const TEXT_DEST_REC rec->flags = dest->flags & ~PRINT_FLAG_FORMAT; } -void textbuffer_meta_rec_free(TEXT_BUFFER_META_REC *rec) +void textbuffer_meta_rec_free(LINE_INFO_META_REC *rec) { if (rec == NULL) return; @@ -113,7 +113,7 @@ void textbuffer_meta_rec_free(TEXT_BUFFER_META_REC *rec) g_free(rec); } -static void meta_hash_create(struct _TEXT_BUFFER_META_REC *meta) +static void meta_hash_create(struct _LINE_INFO_META_REC *meta) { if (meta->hash == NULL) { meta->hash = g_hash_table_new_full(g_str_hash, (GEqualFunc) g_str_equal, @@ -122,9 +122,9 @@ static void meta_hash_create(struct _TEXT_BUFFER_META_REC *meta) } } -static TEXT_BUFFER_META_REC *line_meta_create(GHashTable *meta_hash) +static LINE_INFO_META_REC *line_meta_create(GHashTable *meta_hash) { - struct _TEXT_BUFFER_META_REC *meta; + struct _LINE_INFO_META_REC *meta; GHashTableIter iter; const char *key; const char *val; @@ -132,7 +132,7 @@ static TEXT_BUFFER_META_REC *line_meta_create(GHashTable *meta_hash) if (meta_hash == NULL || g_hash_table_size(meta_hash) == 0) return NULL; - meta = g_new0(struct _TEXT_BUFFER_META_REC, 1); + meta = g_new0(struct _LINE_INFO_META_REC, 1); g_hash_table_iter_init(&iter, meta_hash); while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) { @@ -362,7 +362,7 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line, gboolean THEME_REC *theme; int formatnum; TEXT_BUFFER_FORMAT_REC *format_rec; - TEXT_BUFFER_META_REC *meta; + LINE_INFO_META_REC *meta; char *str; curr = line; diff --git a/src/fe-text/textbuffer-formats.h b/src/fe-text/textbuffer-formats.h index 17a907c1..86587563 100644 --- a/src/fe-text/textbuffer-formats.h +++ b/src/fe-text/textbuffer-formats.h @@ -2,11 +2,7 @@ #define IRSSI_FE_TEXT_TEXTBUFFER_FORMATS_H #include - -typedef struct _TEXT_BUFFER_META_REC { - gint64 server_time; - GHashTable *hash; -} TEXT_BUFFER_META_REC; +#include typedef struct _TEXT_BUFFER_FORMAT_REC { char *module; @@ -22,7 +18,7 @@ typedef struct _TEXT_BUFFER_FORMAT_REC { } TEXT_BUFFER_FORMAT_REC; void textbuffer_format_rec_free(TEXT_BUFFER_FORMAT_REC *rec); -void textbuffer_meta_rec_free(TEXT_BUFFER_META_REC *rec); +void textbuffer_meta_rec_free(LINE_INFO_META_REC *rec); char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line, gboolean raw); void textbuffer_formats_init(void); void textbuffer_formats_deinit(void); diff --git a/src/fe-text/textbuffer.h b/src/fe-text/textbuffer.h index 5f5f9a27..6c72a569 100644 --- a/src/fe-text/textbuffer.h +++ b/src/fe-text/textbuffer.h @@ -24,7 +24,7 @@ typedef struct { int level; time_t time; char *text; - struct _TEXT_BUFFER_META_REC *meta; + struct _LINE_INFO_META_REC *meta; struct _TEXT_BUFFER_FORMAT_REC *format; } LINE_INFO_REC; diff --git a/src/perl/textui/TextBuffer.xs b/src/perl/textui/TextBuffer.xs index 301e2d4a..be83cc59 100644 --- a/src/perl/textui/TextBuffer.xs +++ b/src/perl/textui/TextBuffer.xs @@ -107,7 +107,7 @@ textbuffer_line_get_meta(line) PREINIT: HV *hv; LINE_REC *l; - TEXT_BUFFER_META_REC *m; + LINE_INFO_META_REC *m; GHashTableIter iter; char *key; char *val; From 5953b675b9411a87d111ea82ecd7c0876de3f186 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 12 Aug 2021 23:53:44 +0200 Subject: [PATCH 12/71] store the hilight result in the meta table and apply it during the "gui render line text" signal --- src/fe-common/core/hilight-text.c | 98 +++++++++++++++++++++++++++---- src/fe-text/textbuffer-formats.c | 28 ++++++--- 2 files changed, 108 insertions(+), 18 deletions(-) diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c index 153a7a15..4b5e4edd 100644 --- a/src/fe-common/core/hilight-text.c +++ b/src/fe-common/core/hilight-text.c @@ -323,6 +323,71 @@ void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec) static void hilight_print(int index, HILIGHT_REC *rec); +static void sig_render_line_text(TEXT_DEST_REC *dest, GString *str, LINE_INFO_META_REC *meta) +{ + char *color, *tmp, *tmp2; + + if (meta == NULL || meta->hash == NULL) + return; + + color = g_hash_table_lookup(meta->hash, "hilight-color"); + + if ((tmp = g_hash_table_lookup(meta->hash, "hilight-line")) != NULL) { + /* hilight whole line */ + + tmp = strip_codes(str->str); + + color = format_string_expand( + color != NULL ? color : settings_get_str("hilight_color"), NULL); + + g_string_truncate(str, 0); + g_string_append(str, color); + g_string_append(str, tmp); + + g_free(color); + g_free(tmp); + } else if ((tmp = g_hash_table_lookup(meta->hash, "hilight-start")) != NULL && + (tmp2 = g_hash_table_lookup(meta->hash, "hilight-end")) != NULL) { + /* hilight part of the line */ + int hilight_start, hilight_end; + int pos, color_pos, color_len; + char *middle; + GString *str2; + + hilight_start = atoi(tmp); + hilight_end = atoi(tmp2); + + /* start of the line */ + pos = strip_real_length(str->str, hilight_start, NULL, NULL); + + str2 = g_string_new_len(str->str, pos); + + /* color */ + color = format_string_expand( + color != NULL ? color : settings_get_str("hilight_color"), NULL); + g_string_append(str2, color); + g_free(color); + + /* middle of the line, stripped */ + middle = strip_codes(str->str + pos); + g_string_append_len(str2, middle, hilight_end - hilight_start); + g_free(middle); + + /* end of the line */ + pos = strip_real_length(str->str, hilight_end, &color_pos, &color_len); + if (color_pos > 0) { + g_string_append_len(str2, str->str + color_pos, color_len); + } else { + /* no colors in line, change back to default */ + g_string_append_c(str2, 4); + g_string_append_c(str2, FORMAT_STYLE_DEFAULTS); + } + g_string_append(str2, str->str + pos); + + g_string_assign(str, g_string_free(str2, FALSE)); + } +} + static void sig_print_text(TEXT_DEST_REC *dest, const char *text, const char *stripped) { @@ -372,38 +437,47 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text, char *tmp = strip_codes(text); newstr = g_strconcat(color, tmp, NULL); g_free(tmp); + + format_dest_meta_stash(dest, "hilight-line", "\001"); } else { /* hilight part of the line */ - GString *tmp; - char *middle; + GString *str; + char *middle, *tmp; int pos, color_pos, color_len; /* start of the line */ pos = strip_real_length(text, hilight_start, NULL, NULL); - tmp = g_string_new_len(text, pos); + str = g_string_new_len(text, pos); /* color */ - g_string_append(tmp, color); + g_string_append(str, color); /* middle of the line, stripped */ middle = strip_codes(text + pos); - g_string_append_len(tmp, middle, hilight_len); + g_string_append_len(str, middle, hilight_len); g_free(middle); /* end of the line */ pos = strip_real_length(text, hilight_end, &color_pos, &color_len); if (color_pos > 0) { - g_string_append_len(tmp, text + color_pos, color_len); + g_string_append_len(str, text + color_pos, color_len); } else { /* no colors in line, change back to default */ - g_string_append_c(tmp, 4); - g_string_append_c(tmp, FORMAT_STYLE_DEFAULTS); + g_string_append_c(str, 4); + g_string_append_c(str, FORMAT_STYLE_DEFAULTS); } - g_string_append(tmp, text + pos); + g_string_append(str, text + pos); - newstr = tmp->str; - g_string_free(tmp, FALSE); + newstr = str->str; + g_string_free(str, FALSE); + + format_dest_meta_stash(dest, "hilight-start", + tmp = g_strdup_printf("%d", hilight_start)); + g_free(tmp); + format_dest_meta_stash(dest, "hilight-end", + tmp = g_strdup_printf("%d", hilight_end)); + g_free(tmp); } signal_emit("print text", 3, dest, newstr, stripped); @@ -721,6 +795,7 @@ void hilight_text_init(void) read_hilight_config(); signal_add_first("print text", (SIGNAL_FUNC) sig_print_text); + signal_add("gui render line text", (SIGNAL_FUNC) sig_render_line_text); signal_add("setup reread", (SIGNAL_FUNC) read_hilight_config); signal_add("setup changed", (SIGNAL_FUNC) read_settings); @@ -735,6 +810,7 @@ void hilight_text_deinit(void) nickmatch_deinit(nickmatch); signal_remove("print text", (SIGNAL_FUNC) sig_print_text); + signal_remove("gui render line text", (SIGNAL_FUNC) sig_render_line_text); signal_remove("setup reread", (SIGNAL_FUNC) read_hilight_config); signal_remove("setup changed", (SIGNAL_FUNC) read_settings); diff --git a/src/fe-text/textbuffer-formats.c b/src/fe-text/textbuffer-formats.c index b194a18a..5b15313f 100644 --- a/src/fe-text/textbuffer-formats.c +++ b/src/fe-text/textbuffer-formats.c @@ -16,6 +16,7 @@ TEXT_BUFFER_REC *color_buf; gboolean scrollback_format; gboolean show_server_time; +int signal_gui_render_line_text; #if GLIB_CHECK_VERSION(2, 56, 0) /* nothing */ @@ -363,7 +364,7 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line, gboolean int formatnum; TEXT_BUFFER_FORMAT_REC *format_rec; LINE_INFO_META_REC *meta; - char *str; + char *tmp2; curr = line; line = NULL; @@ -396,6 +397,8 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line, gboolean } if (text != NULL && *text != '\0') { + GString *str; + reference_time = curr->info.time; if (show_server_time && meta != NULL && meta->server_time != 0) { current_time = meta->server_time; @@ -403,18 +406,27 @@ char *textbuffer_line_get_text(TEXT_BUFFER_REC *buffer, LINE_REC *line, gboolean current_time = curr->info.time; } + str = g_string_new(text); + signal_emit_id(signal_gui_render_line_text, 3, &dest, str, meta); + if (g_strcmp0(text, str->str) == 0) { + g_string_free(str, TRUE); + } else { + g_free(text); + text = g_string_free(str, FALSE); + } + tmp = format_get_level_tag(theme, &dest); - str = !theme->info_eol ? format_add_linestart(text, tmp) : - format_add_lineend(text, tmp); + tmp2 = !theme->info_eol ? format_add_linestart(text, tmp) : + format_add_lineend(text, tmp); g_free_not_null(tmp); g_free_not_null(text); - text = str; + text = tmp2; tmp = format_get_line_start(theme, &dest, current_time); - str = !theme->info_eol ? format_add_linestart(text, tmp) : - format_add_lineend(text, tmp); + tmp2 = !theme->info_eol ? format_add_linestart(text, tmp) : + format_add_lineend(text, tmp); g_free_not_null(tmp); g_free_not_null(text); - text = str; + text = tmp2; /* str = g_strconcat(text, "\n", NULL); */ /* g_free(text); */ @@ -447,6 +459,8 @@ static void read_settings(void) void textbuffer_formats_init(void) { + signal_gui_render_line_text = signal_get_uniq_id("gui render line text"); + settings_add_bool("lookandfeel", "scrollback_format", TRUE); settings_add_bool("lookandfeel", "show_server_time", FALSE); From 6a52b5ac07fe57ebd5973871db64b775e41a3f84 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 00:44:33 +0200 Subject: [PATCH 13/71] up abi --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index bdbafca7..990cc0cf 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 36 +#define IRSSI_ABI_VERSION 37 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From 1602b506a69d12f6d15014f1c6b246066e29e404 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 17:31:14 +0200 Subject: [PATCH 14/71] add LINE_INFO_META_REC to Perl --- src/perl/get-signals.pl | 13 +++++++------ src/perl/textui/TextBuffer.xs | 30 +++++------------------------- src/perl/ui/UI.xs | 21 +++++++++++++++++++++ src/perl/ui/module.h | 1 + src/perl/ui/typemap | 1 + 5 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/perl/get-signals.pl b/src/perl/get-signals.pl index 12aebdba..a76d7ecf 100755 --- a/src/perl/get-signals.pl +++ b/src/perl/get-signals.pl @@ -52,12 +52,13 @@ while (<>) { CLIENT_REC => 'Irssi::Irc::Client', # fe-common - THEME_REC => 'Irssi::UI::Theme', - KEYINFO_REC => 'Irssi::UI::Keyinfo', - PROCESS_REC => 'Irssi::UI::Process', - TEXT_DEST_REC => 'Irssi::UI::TextDest', - WINDOW_REC => 'Irssi::UI::Window', - WI_ITEM_REC => 'iobject', + THEME_REC => 'Irssi::UI::Theme', + KEYINFO_REC => 'Irssi::UI::Keyinfo', + PROCESS_REC => 'Irssi::UI::Process', + TEXT_DEST_REC => 'Irssi::UI::TextDest', + LINE_INFO_META_REC => 'Irssi::UI::LineInfoMeta', + WINDOW_REC => 'Irssi::UI::Window', + WI_ITEM_REC => 'iobject', # fe-text TEXTBUFFER_VIEW_REC => 'Irssi::TextUI::TextBufferView', diff --git a/src/perl/textui/TextBuffer.xs b/src/perl/textui/TextBuffer.xs index be83cc59..655dbd3c 100644 --- a/src/perl/textui/TextBuffer.xs +++ b/src/perl/textui/TextBuffer.xs @@ -101,30 +101,10 @@ PPCODE: } XPUSHs(sv_2mortal(newRV_noinc((SV *) hv))); -void +Irssi::UI::LineInfoMeta textbuffer_line_get_meta(line) Irssi::TextUI::Line line -PREINIT: - HV *hv; - LINE_REC *l; - LINE_INFO_META_REC *m; - GHashTableIter iter; - char *key; - char *val; -PPCODE: - hv = newHV(); - l = line->line; - if (l->info.meta != NULL) { - m = l->info.meta; - if (m->hash != NULL) { - g_hash_table_iter_init(&iter, m->hash); - while ( - g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) { - (void) hv_store(hv, key, strlen(key), new_pv(val), 0); - } - } - if (m->server_time) { - (void) hv_store(hv, "server_time", 11, newSViv(m->server_time), 0); - } - } - XPUSHs(sv_2mortal(newRV_noinc((SV *) hv))); +CODE: + RETVAL = line->line->info.meta; +OUTPUT: + RETVAL diff --git a/src/perl/ui/UI.xs b/src/perl/ui/UI.xs index 5ac3da4e..30b0f637 100644 --- a/src/perl/ui/UI.xs +++ b/src/perl/ui/UI.xs @@ -64,6 +64,26 @@ static void perl_text_dest_fill_hash(HV *hv, TEXT_DEST_REC *dest) (void) hv_store(hv, "hilight_color", 13, new_pv(dest->hilight_color), 0); } +static void perl_line_info_meta_fill_hash(HV *hv, LINE_INFO_META_REC *meta) +{ + GHashTableIter iter; + char *key; + char *val; + + if (meta != NULL) { + if (meta->hash != NULL) { + g_hash_table_iter_init(&iter, meta->hash); + while ( + g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &val)) { + (void) hv_store(hv, key, strlen(key), new_pv(val), 0); + } + } + if (meta->server_time) { + (void) hv_store(hv, "server_time", 11, newSViv(meta->server_time), 0); + } + } +} + static void perl_exec_fill_hash(HV *hv, EXEC_WI_REC *item) { g_return_if_fail(hv != NULL); @@ -81,6 +101,7 @@ static PLAIN_OBJECT_INIT_REC fe_plains[] = { { "Irssi::UI::Process", (PERL_OBJECT_FUNC) perl_process_fill_hash }, { "Irssi::UI::Window", (PERL_OBJECT_FUNC) perl_window_fill_hash }, { "Irssi::UI::TextDest", (PERL_OBJECT_FUNC) perl_text_dest_fill_hash }, + { "Irssi::UI::LineInfoMeta", (PERL_OBJECT_FUNC) perl_line_info_meta_fill_hash }, { NULL, NULL } }; diff --git a/src/perl/ui/module.h b/src/perl/ui/module.h index 4e19d4c0..4106aec4 100644 --- a/src/perl/ui/module.h +++ b/src/perl/ui/module.h @@ -12,3 +12,4 @@ typedef WINDOW_REC *Irssi__UI__Window; typedef TEXT_DEST_REC *Irssi__UI__TextDest; typedef THEME_REC *Irssi__UI__Theme; typedef KEYINFO_REC *Irssi__UI__Keyinfo; +typedef LINE_INFO_META_REC *Irssi__UI__LineInfoMeta; diff --git a/src/perl/ui/typemap b/src/perl/ui/typemap index 2a16fe44..4afb273d 100644 --- a/src/perl/ui/typemap +++ b/src/perl/ui/typemap @@ -3,6 +3,7 @@ Irssi::UI::Theme T_PlainObj Irssi::UI::Window T_PlainObj Irssi::UI::Keyinfo T_PlainObj Irssi::UI::TextDest T_PlainObj +Irssi::UI::LineInfoMeta T_PlainObj INPUT From 425178e793f03dfaa3b42f4999f3b04eaad48732 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 17:31:49 +0200 Subject: [PATCH 15/71] add GString to Perl --- src/perl/get-signals.pl | 2 ++ src/perl/perl-signals.c | 39 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/perl/get-signals.pl b/src/perl/get-signals.pl index a76d7ecf..f7675f1b 100755 --- a/src/perl/get-signals.pl +++ b/src/perl/get-signals.pl @@ -19,6 +19,8 @@ while (<>) { s/GList \* of ([^,]*)s/glistptr_\1/g; s/GSList of ([^,]*)s/gslist_\1/g; + s/GString \*[^,]*/gstring/g; + s/char \*[^,]*/string/g; s/ulong \*[^,]*/ulongptr/g; s/int \*[^,]*/intptr/g; diff --git a/src/perl/perl-signals.c b/src/perl/perl-signals.c index 9f49fba8..897689e1 100644 --- a/src/perl/perl-signals.c +++ b/src/perl/perl-signals.c @@ -86,7 +86,8 @@ void perl_signal_args_to_c(void (*callback)(void *, int, void **), void *cb_arg, unsigned long v_ulong; GSList *v_gslist; GList *v_glist; - } saved_args[SIGNAL_MAX_ARGUMENTS]; + GString *v_gstring; + } saved_args[SIGNAL_MAX_ARGUMENTS]; AV *aargs; void *p[SIGNAL_MAX_ARGUMENTS]; PERL_SIGNAL_ARGS_REC *rec; @@ -146,6 +147,12 @@ void perl_signal_args_to_c(void (*callback)(void *, int, void **), void *cb_arg, } else if (g_strcmp0(rec->args[n], "intptr") == 0) { saved_args[n].v_int = SvIV(SvRV(arg)); c_arg = &saved_args[n].v_int; + } else if (g_strcmp0(rec->args[n], "gstring") == 0) { + char *pv; + size_t len; + + pv = SvPV(SvRV(arg), len); + c_arg = saved_args[n].v_gstring = g_string_new_len(pv, len); } else if (strncmp(rec->args[n], "glistptr_", 9) == 0) { GList *gl; int is_str; @@ -220,6 +227,16 @@ void perl_signal_args_to_c(void (*callback)(void *, int, void **), void *cb_arg, SV *t = SvRV(arg); SvIOK_only(t); SvIV_set(t, saved_args[n].v_int); + } else if (g_strcmp0(rec->args[n], "gstring") == 0) { + GString *str; + SV *t; + + str = saved_args[n].v_gstring; + t = SvRV(arg); + SvPOK_only(t); + sv_setpvn(t, str->str, str->len); + + g_string_free(str, TRUE); } else if (strncmp(rec->args[n], "gslist_", 7) == 0) { g_slist_free(saved_args[n].v_gslist); } else if (strncmp(rec->args[n], "glistptr_", 9) == 0) { @@ -306,7 +323,10 @@ static void perl_call_signal(PERL_SCRIPT_REC *script, SV *func, perlarg = newSViv(*(unsigned long *) arg); else if (g_strcmp0(rec->args[n], "intptr") == 0) saved_args[n] = perlarg = newRV_noinc(newSViv(*(int *) arg)); - else if (g_strcmp0(rec->args[n], "formatnum_args") == 0 && n >= 3) { + else if (g_strcmp0(rec->args[n], "gstring") == 0) { + GString *str = arg; + saved_args[n] = perlarg = newRV_noinc(newSVpvn(str->str, str->len)); + } else if (g_strcmp0(rec->args[n], "formatnum_args") == 0 && n >= 3) { const THEME_REC *theme; const MODULE_THEME_REC *rec; const FORMAT_REC *formats; @@ -415,8 +435,21 @@ static void perl_call_signal(PERL_SCRIPT_REC *script, SV *func, if (g_strcmp0(rec->args[n], "intptr") == 0) { int *val = arg; *val = SvIV(SvRV(saved_args[n])); + } else if (g_strcmp0(rec->args[n], "gstring") == 0) { + SV *os, *ns; + GString *str = arg; + + os = sv_2mortal(newSVpvn(str->str, str->len)); + ns = SvRV(saved_args[n]); + if (sv_cmp(os, ns) != 0) { + size_t len; + char *pv = SvPV(ns, len); + + g_string_truncate(str, 0); + g_string_append_len(str, pv, len); + } } else if (strncmp(rec->args[n], "glistptr_", 9) == 0) { - GList **ret = arg; + GList **ret = arg; GList *out = NULL; void *val; int count; From ed23d89a5a69b324ed05b5f9bd8115c34ad4b7a9 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 17:32:09 +0200 Subject: [PATCH 16/71] fix recursive crash in Perl scripts --- src/perl/perl-signals.c | 1 + src/perl/perl-sources.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/perl/perl-signals.c b/src/perl/perl-signals.c index 897689e1..683b4c3f 100644 --- a/src/perl/perl-signals.c +++ b/src/perl/perl-signals.c @@ -419,6 +419,7 @@ static void perl_call_signal(PERL_SCRIPT_REC *script, SV *func, if (SvTRUE(ERRSV)) { char *error = g_strdup(SvPV_nolen(ERRSV)); + perl_signal_remove_script(script); signal_emit("script error", 2, script, error); g_free(error); rec = NULL; diff --git a/src/perl/perl-sources.c b/src/perl/perl-sources.c index 9f5773f1..9f9ec6b5 100644 --- a/src/perl/perl-sources.c +++ b/src/perl/perl-sources.c @@ -83,6 +83,7 @@ static int perl_source_event(PERL_SOURCE_REC *rec) if (SvTRUE(ERRSV)) { char *error = g_strdup(SvPV_nolen(ERRSV)); + perl_source_remove_script(rec->script); signal_emit("script error", 2, rec->script, error); g_free(error); } From 96e9ab41e9f353fc9612c27e3d61bc8ab978564d Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 17:32:25 +0200 Subject: [PATCH 17/71] add "gui render line text" to signals.txt --- docs/signals.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/signals.txt b/docs/signals.txt index 1eefc7e0..4e5f85b4 100644 --- a/docs/signals.txt +++ b/docs/signals.txt @@ -358,6 +358,9 @@ gui-printtext.c: textbuffer-view.c "gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line +textbuffer-formats.c + "gui render line text", TEXT_DEST_REC, GString *str, LINE_INFO_META_REC + Perl ---- From 5a8b23cab0f758f78c0dc495ce788d0c58b8a661 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 17:38:57 +0200 Subject: [PATCH 18/71] up abi --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index 990cc0cf..cc334476 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 37 +#define IRSSI_ABI_VERSION 38 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From 0c82a3adfd48df33c971a74ff862d69e23e6909e Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Sun, 15 Aug 2021 00:08:44 +0200 Subject: [PATCH 19/71] Workaround for google/oss-fuzz#3731 Run CIFuzz docker manually --- .github/workflows/cifuzz.yml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index a32e335d..6325d671 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -19,13 +19,23 @@ jobs: matrix: sanitizer: [address, undefined, memory] steps: + - uses: actions/checkout@main + with: + path: irssi + - name: Docker build build_fuzzers container + run: | + # google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + docker build -t build_fuzzers:actions -f "/home/runner/work/_actions/google/oss-fuzz/master/infra/build_fuzzers.Dockerfile" "/home/runner/work/_actions/google/oss-fuzz/master/infra" - name: Build Fuzzers (${{ matrix.sanitizer }}) id: build - uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master - with: - oss-fuzz-project-name: 'irssi' - dry-run: false - sanitizer: ${{ matrix.sanitizer }} + env: + OSS_FUZZ_PROJECT_NAME: 'irssi' + DRY_RUN: false + SANITIZER: ${{ matrix.sanitizer }} + PROJECT_SRC_PATH: /github/workspace/irssi + REPOSITORY: 'irssi' + run: | + docker run --workdir /github/workspace --rm -e OSS_FUZZ_PROJECT_NAME -e DRY_RUN -e SANITIZER -e PROJECT_SRC_PATH -e REPOSITORY -e WORKSPACE=/github/workspace -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "$GITHUB_WORKSPACE":"/github/workspace" build_fuzzers:actions - name: Run Fuzzers (${{ matrix.sanitizer }}) uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: From fdd61f5898c8a97b6a1088db717c16691d601d60 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 21:11:22 +0200 Subject: [PATCH 20/71] add a log_server_time setting --- src/core/log.c | 14 +++++++------- src/core/log.h | 6 +++--- src/fe-common/core/fe-log.c | 33 ++++++++++++++++++++++++++------- src/perl/common/Log.xs | 3 ++- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/core/log.c b/src/core/log.c index cb6f1edd..5bc953a1 100644 --- a/src/core/log.c +++ b/src/core/log.c @@ -204,11 +204,10 @@ static void log_rotate_check(LOG_REC *log) g_free(new_fname); } -void log_write_rec(LOG_REC *log, const char *str, int level) +void log_write_rec(LOG_REC *log, const char *str, int level, time_t now) { char *colorstr; struct tm *tm; - time_t now; int hour, day; g_return_if_fail(log != NULL); @@ -217,7 +216,8 @@ void log_write_rec(LOG_REC *log, const char *str, int level) if (log->handle == -1) return; - now = time(NULL); + if (now == (time_t) -1) + now = time(NULL); tm = localtime(&now); hour = tm->tm_hour; day = tm->tm_mday; @@ -282,8 +282,8 @@ LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item, return NULL; } -void log_file_write(const char *server_tag, const char *item, int level, - const char *str, int no_fallbacks) +void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str, + int no_fallbacks) { GSList *tmp, *fallbacks; char *tmpstr; @@ -309,7 +309,7 @@ void log_file_write(const char *server_tag, const char *item, int level, fallbacks = g_slist_append(fallbacks, rec); else if (log_item_find(rec, LOG_ITEM_TARGET, item, server_tag) != NULL) - log_write_rec(rec, str, level); + log_write_rec(rec, str, level, t); } if (!found && !no_fallbacks && fallbacks != NULL) { @@ -319,7 +319,7 @@ void log_file_write(const char *server_tag, const char *item, int level, g_strdup(str); for (tmp = fallbacks; tmp != NULL; tmp = tmp->next) - log_write_rec(tmp->data, tmpstr, level); + log_write_rec(tmp->data, tmpstr, level, t); g_free(tmpstr); } diff --git a/src/core/log.h b/src/core/log.h index 1c529670..19bca4f3 100644 --- a/src/core/log.h +++ b/src/core/log.h @@ -51,9 +51,9 @@ void log_item_destroy(LOG_REC *log, LOG_ITEM_REC *item); LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item, const char *servertag); -void log_file_write(const char *server_tag, const char *item, int level, - const char *str, int no_fallbacks); -void log_write_rec(LOG_REC *log, const char *str, int level); +void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str, + int no_fallbacks); +void log_write_rec(LOG_REC *log, const char *str, int level, time_t now); int log_start_logging(LOG_REC *log); void log_stop_logging(LOG_REC *log); diff --git a/src/fe-common/core/fe-log.c b/src/fe-common/core/fe-log.c index b5222059..984b3548 100644 --- a/src/fe-common/core/fe-log.c +++ b/src/fe-common/core/fe-log.c @@ -48,6 +48,7 @@ #define AUTOLOG_INACTIVITY_CLOSE (60*5) static int autolog_level; +static int log_server_time; static int autoremove_tag; static char *autolog_path; @@ -502,8 +503,8 @@ static void autolog_open_check(TEXT_DEST_REC *dest) autolog_open(server, server_tag, g_strcmp0(target, "*") ? target : deftarget); } -static void log_single_line(WINDOW_REC *window, const char *server_tag, - const char *target, int level, const char *text) +static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target, + int level, time_t t, const char *text) { char windownum[MAX_INT_STRLEN]; LOG_REC *log; @@ -514,15 +515,16 @@ static void log_single_line(WINDOW_REC *window, const char *server_tag, log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); if (log != NULL) - log_write_rec(log, text, level); + log_write_rec(log, text, level, t); } - log_file_write(server_tag, target, level, text, FALSE); + log_file_write(server_tag, target, level, t, text, FALSE); } static void log_line(TEXT_DEST_REC *dest, const char *text) { char **lines, **tmp; + time_t t = (time_t) -1; if (dest->level == MSGLEVEL_NEVER) return; @@ -536,9 +538,18 @@ static void log_line(TEXT_DEST_REC *dest, const char *text) /* text may contain one or more lines, log wants to eat them one line at a time */ lines = g_strsplit(text, "\n", -1); + if (log_server_time && dest->meta != NULL) { + char *val; + if ((val = g_hash_table_lookup(dest->meta, "time")) != NULL) { + GDateTime *time; + if ((time = g_date_time_new_from_iso8601(val, NULL)) != NULL) { + t = g_date_time_to_unix(time); + g_date_time_unref(time); + } + } + } for (tmp = lines; *tmp != NULL; tmp++) - log_single_line(dest->window, dest->server_tag, - dest->target, dest->level, *tmp); + log_single_line(dest->window, dest->server_tag, dest->target, dest->level, t, *tmp); g_strfreev(lines); } @@ -720,6 +731,13 @@ static void read_settings(void) g_strfreev(autolog_ignore_targets); autolog_ignore_targets = g_strsplit(settings_get_str("autolog_ignore_targets"), " ", -1); + + log_server_time = settings_get_choice("log_server_time"); + if (log_server_time == 2) { + SETTINGS_REC *rec = settings_get_record("show_server_time"); + if (rec != NULL) + log_server_time = settings_get_bool("show_server_time"); + } } void fe_log_init(void) @@ -731,7 +749,8 @@ void fe_log_init(void) settings_add_bool("log", "autolog", FALSE); settings_add_bool("log", "autolog_colors", FALSE); settings_add_bool("log", "autolog_only_saved_channels", FALSE); - settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log"); + settings_add_choice("log", "log_server_time", 2, "off;on;auto"); + settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log"); settings_add_level("log", "autolog_level", "all -crap -clientcrap -ctcps"); settings_add_str("log", "log_theme", ""); settings_add_str("log", "autolog_ignore_targets", ""); diff --git a/src/perl/common/Log.xs b/src/perl/common/Log.xs index cdcdbd90..532095fb 100644 --- a/src/perl/common/Log.xs +++ b/src/perl/common/Log.xs @@ -54,10 +54,11 @@ log_close(log) Irssi::Log log void -log_write_rec(log, str, level) +log_write_rec(log, str, level, now = -1) Irssi::Log log char *str int level + time_t now void log_start_logging(log) From 6a331399399dc9b91d75fbe6b065e31a2db49fe0 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Sat, 14 Aug 2021 22:43:50 +0200 Subject: [PATCH 21/71] compat for glib 2.55 --- src/core/misc.c | 20 ++++++++++++++++---- src/core/misc.h | 7 +++++++ src/fe-text/textbuffer-formats.c | 16 +--------------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/core/misc.c b/src/core/misc.c index c66bbd6d..f0bbf4e0 100644 --- a/src/core/misc.c +++ b/src/core/misc.c @@ -95,7 +95,6 @@ int i_input_add_poll(int fd, int priority, int condition, GInputFunction functio #pragma GCC diagnostic ignored "-Wdeprecated-declarations" int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2) { -#pragma GCC diagnostic pop if (tv1->tv_sec < tv2->tv_sec) return -1; if (tv1->tv_sec > tv2->tv_sec) @@ -105,11 +104,8 @@ int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2) tv1->tv_usec > tv2->tv_usec ? 1 : 0; } -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2) { -#pragma GCC diagnostic pop long secs, usecs; secs = tv1->tv_sec - tv2->tv_sec; @@ -122,6 +118,22 @@ long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2) return usecs; } +#pragma GCC diagnostic pop + +#if GLIB_CHECK_VERSION(2, 56, 0) +/* nothing */ +#else +/* compatibility code for old GLib */ +GDateTime *g_date_time_new_from_iso8601(const gchar *iso_date, GTimeZone *default_tz) +{ + GTimeVal time; + if (g_time_val_from_iso8601(iso_date, &time)) { + return g_date_time_new_from_timeval_utc(&time); + } else { + return NULL; + } +} +#endif int find_substr(const char *list, const char *item) { diff --git a/src/core/misc.h b/src/core/misc.h index 76f5644b..622470f7 100644 --- a/src/core/misc.h +++ b/src/core/misc.h @@ -19,6 +19,13 @@ int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2) G_GNUC_DEPRECATED; long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2) G_GNUC_DEPRECATED; #pragma GCC diagnostic pop +#if GLIB_CHECK_VERSION(2, 56, 0) +/* nothing */ +#else +/* compatibility code for old GLib */ +GDateTime *g_date_time_new_from_iso8601(const gchar *iso_date, GTimeZone *default_tz); +#endif + GSList *i_slist_find_string(GSList *list, const char *key); GSList *i_slist_find_icase_string(GSList *list, const char *key); GList *i_list_find_string(GList *list, const char *key); diff --git a/src/fe-text/textbuffer-formats.c b/src/fe-text/textbuffer-formats.c index 5b15313f..20abc0df 100644 --- a/src/fe-text/textbuffer-formats.c +++ b/src/fe-text/textbuffer-formats.c @@ -1,6 +1,7 @@ #include "module.h" #include #include +#include #include #include #include @@ -18,21 +19,6 @@ gboolean scrollback_format; gboolean show_server_time; int signal_gui_render_line_text; -#if GLIB_CHECK_VERSION(2, 56, 0) -/* nothing */ -#else -/* compatibility code for old GLib */ -static GDateTime *g_date_time_new_from_iso8601(const gchar *iso_date, GTimeZone *default_tz) -{ - GTimeVal time; - if (g_time_val_from_iso8601(iso_date, &time)) { - return g_date_time_new_from_timeval_utc(&time); - } else { - return NULL; - } -} -#endif - static void collector_free(GSList **collector) { while (*collector) { From b3f74fe0ab1fd8dc145dab662e74eeaaeeb6fffe Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Sun, 15 Aug 2021 15:58:10 +0200 Subject: [PATCH 22/71] up abi --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index cc334476..a89b4964 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 38 +#define IRSSI_ABI_VERSION 39 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From a07a4c1ea886e35a17847ff004495e2f18b8b489 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 20:27:35 +0200 Subject: [PATCH 23/71] use an internal build of openssl when fuzzer is enabled --- meson.build | 7 ++++++- subprojects/openssl.wrap | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 subprojects/openssl.wrap diff --git a/meson.build b/meson.build index 1a5182af..fe5aa99f 100644 --- a/meson.build +++ b/meson.build @@ -273,7 +273,12 @@ endif dep += glib_dep dep += gmodule_dep -openssl_dep = dependency('openssl', static : want_static_dependency) +if glib_internal and want_static_dependency and want_fuzzer + openssl_proj = subproject('openssl', default_options : ['default_library=static', 'asm=disabled']) + openssl_dep = openssl_proj.get_variable('openssl_dep') +else + openssl_dep = dependency('openssl', static : want_static_dependency) +endif dep += openssl_dep ############ diff --git a/subprojects/openssl.wrap b/subprojects/openssl.wrap new file mode 100644 index 00000000..4aaaba38 --- /dev/null +++ b/subprojects/openssl.wrap @@ -0,0 +1,14 @@ +[wrap-file] +directory = openssl-1.1.1l +source_url = https://www.openssl.org/source/openssl-1.1.1l.tar.gz +source_filename = openssl-1.1.1l.tar.gz +source_hash = 0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1 +patch_filename = openssl_1.1.1l-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/openssl_1.1.1l-1/get_patch +patch_hash = 670db31580039e06c17f48bcd31e489f453fe72c22006de6d693b9b033f1003a + +[provide] +libcrypto = libcrypto_dep +libssl = libssl_dep +openssl = openssl_dep + From 49903f41854114aec37a74a907135e17931b43c8 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 21:59:38 +0200 Subject: [PATCH 24/71] mess with server ports --- src/core/servers-setup.c | 31 ++++++++++++++------- src/core/servers-setup.h | 1 + src/fe-common/core/fe-server.c | 51 +++++++++++++++++++++++----------- 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c index 357e8ebe..fd719c38 100644 --- a/src/core/servers-setup.c +++ b/src/core/servers-setup.c @@ -457,7 +457,7 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node) port = config_node_get_int(node, "port", 0); chatnet = config_node_get_str(node, "chatnet", NULL); - if (server_setup_find(server, port, chatnet) != NULL) { + if ((rec = server_setup_find(server, port, chatnet)) != NULL && rec->port == port) { return NULL; } @@ -548,7 +548,7 @@ static int compare_server_setup (CONFIG_NODE *node, SERVER_SETUP_REC *server) return -1; address = config_node_get_str(node, "address", NULL); - chatnet = config_node_get_str(node, "chatnet", NULL); + chatnet = config_node_get_str(node, "chatnet", ""); port = config_node_get_int(node, "port", 0); if (address == NULL || chatnet == NULL) { @@ -556,7 +556,7 @@ static int compare_server_setup (CONFIG_NODE *node, SERVER_SETUP_REC *server) } if (g_ascii_strcasecmp(address, server->address) != 0 || - g_ascii_strcasecmp(chatnet, server->chatnet) != 0 || + g_ascii_strcasecmp(chatnet, server->chatnet != NULL ? server->chatnet : "") != 0 || port != server->port) { return 1; } @@ -564,16 +564,20 @@ static int compare_server_setup (CONFIG_NODE *node, SERVER_SETUP_REC *server) return 0; } -static void server_setup_save(SERVER_SETUP_REC *rec) +static void server_setup_save(SERVER_SETUP_REC *rec, int old_port, const char *old_chatnet) { CONFIG_NODE *parent_node, *node; + SERVER_SETUP_REC search_rec = { 0 }; GSList *config_node; parent_node = iconfig_node_traverse("(servers", TRUE); /* Try to find this channel in the configuration */ - config_node = g_slist_find_custom(parent_node->value, rec, - (GCompareFunc)compare_server_setup); + search_rec.address = rec->address; + search_rec.chatnet = old_chatnet != NULL ? (char *) old_chatnet : rec->chatnet; + search_rec.port = old_port; + config_node = g_slist_find_custom(parent_node->value, &search_rec, + (GCompareFunc) compare_server_setup); if (config_node != NULL) /* Let's update this server record */ node = config_node->data; @@ -654,16 +658,23 @@ static void server_setup_destroy(SERVER_SETUP_REC *rec) g_free(rec); } -void server_setup_add(SERVER_SETUP_REC *rec) +void server_setup_modify(SERVER_SETUP_REC *rec, int old_port, const char *old_chatnet) { + g_return_if_fail(g_slist_find(setupservers, rec) != NULL); + rec->type = module_get_uniq_id("SERVER SETUP", 0); - if (g_slist_find(setupservers, rec) == NULL) - setupservers = g_slist_append(setupservers, rec); - server_setup_save(rec); + server_setup_save(rec, old_port, old_chatnet); signal_emit("server setup updated", 1, rec); } +void server_setup_add(SERVER_SETUP_REC *rec) +{ + if (g_slist_find(setupservers, rec) == NULL) + setupservers = g_slist_append(setupservers, rec); + server_setup_modify(rec, -1, NULL); +} + void server_setup_remove_chatnet(const char *chatnet) { GSList *tmp, *next; diff --git a/src/core/servers-setup.h b/src/core/servers-setup.h index f35c3873..742ed4dd 100644 --- a/src/core/servers-setup.h +++ b/src/core/servers-setup.h @@ -41,6 +41,7 @@ SERVER_SETUP_REC *server_setup_find(const char *address, int port, const char *chatnet); void server_setup_add(SERVER_SETUP_REC *rec); +void server_setup_modify(SERVER_SETUP_REC *rec, int old_port, const char *old_chatnet); void server_setup_remove(SERVER_SETUP_REC *rec); /* Remove servers attached to chatne */ diff --git a/src/fe-common/core/fe-server.c b/src/fe-common/core/fe-server.c index 468ac4e7..de45f8e9 100644 --- a/src/fe-common/core/fe-server.c +++ b/src/fe-common/core/fe-server.c @@ -110,11 +110,11 @@ static SERVER_SETUP_REC *create_server_setup(GHashTable *optlist) static void cmd_server_add_modify(const char *data, gboolean add) { GHashTable *optlist; - SERVER_SETUP_REC *rec; - char *addr, *portstr, *password, *value, *chatnet; + SERVER_SETUP_REC *rec, *tmp; + char *addr, *portstr, *password, *value, *chatnet, *old_chatnet; void *free_arg; gboolean newrec; - int port; + int port, old_port, add_port; if (!cmd_get_params(data, &free_arg, 3 | PARAM_FLAG_OPTIONS, "server add", &optlist, &addr, &portstr, &password)) @@ -122,27 +122,39 @@ static void cmd_server_add_modify(const char *data, gboolean add) if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - value = g_hash_table_lookup(optlist, "port"); + port = old_port = -1; if (*portstr != '\0') - port = atoi(portstr); - else if (value != NULL && *value != '\0') - port = atoi(value); + port = add_port = atoi(portstr); else if (g_hash_table_lookup(optlist, "tls") || g_hash_table_lookup(optlist, "ssl")) - port = DEFAULT_SERVER_ADD_TLS_PORT; + add_port = DEFAULT_SERVER_ADD_TLS_PORT; else - port = DEFAULT_SERVER_ADD_PORT; + add_port = DEFAULT_SERVER_ADD_PORT; + + value = g_hash_table_lookup(optlist, "port"); + if (value != NULL && *value != '\0') + old_port = atoi(value); chatnet = g_hash_table_lookup(optlist, "network"); - rec = server_setup_find(addr, port, chatnet); + rec = server_setup_find(addr, old_port != -1 ? old_port : add_port, chatnet); + if (old_port == -1 && rec != NULL) + old_port = rec->port; - if (rec == NULL) { + if (port == -1) + port = old_port != -1 ? old_port : add_port; + + /* make sure the new port doesn't exist */ + tmp = server_setup_find(addr, port, chatnet); + if (tmp != NULL && tmp->port == port) + rec = tmp; + + if (rec == NULL || (rec->port != old_port && rec->port != port)) { newrec = TRUE; if (add == FALSE) { - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, - TXT_SETUPSERVER_NOT_FOUND, addr, port); + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_SETUPSERVER_NOT_FOUND, + addr, old_port == -1 ? port : old_port); cmd_params_free(free_arg); return; } @@ -156,8 +168,9 @@ static void cmd_server_add_modify(const char *data, gboolean add) rec->port = port; } else { newrec = FALSE; - if (*portstr != '\0' || g_hash_table_lookup(optlist, "port")) - rec->port = port; + old_chatnet = g_strdup(rec->chatnet); + old_port = rec->port; + rec->port = port; if (*password != '\0') g_free_and_null(rec->password); if (g_hash_table_lookup(optlist, "host")) { @@ -261,7 +274,13 @@ static void cmd_server_add_modify(const char *data, gboolean add) signal_emit("server add fill", 3, rec, optlist, GINT_TO_POINTER(add)); - server_setup_add(rec); + if (newrec) { + server_setup_add(rec); + } else { + server_setup_modify(rec, old_port, old_chatnet); + g_free(old_chatnet); + } + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_SETUPSERVER_ADDED, addr, port); From c4fd417ccef8f2af6b3efbc4afa72997949a79c9 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 31 Aug 2021 11:09:42 +0200 Subject: [PATCH 25/71] up abi --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index a89b4964..245f2223 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 39 +#define IRSSI_ABI_VERSION 40 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From 4b506fc45c518619f968377b925492a96c7041d5 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 31 Aug 2021 14:49:56 +0200 Subject: [PATCH 26/71] remove duplicated servers on load --- src/core/servers-setup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c index fd719c38..59ca6997 100644 --- a/src/core/servers-setup.c +++ b/src/core/servers-setup.c @@ -458,7 +458,8 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node) chatnet = config_node_get_str(node, "chatnet", NULL); if ((rec = server_setup_find(server, port, chatnet)) != NULL && rec->port == port) { - return NULL; + /* duplicate server setup */ + server_setup_remove(rec); } rec = NULL; From 63a5b80ba7c1df88544ee10fa66ca6202d7ed077 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 20:36:24 +0200 Subject: [PATCH 27/71] only enable sasl plain when username and password are set may fix #1325 --- src/irc/core/irc-servers-setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/irc/core/irc-servers-setup.c b/src/irc/core/irc-servers-setup.c index 5299ef04..e0982550 100644 --- a/src/irc/core/irc-servers-setup.c +++ b/src/irc/core/irc-servers-setup.c @@ -121,9 +121,9 @@ static void sig_server_setup_fill_chatnet(IRC_SERVER_CONNECT_REC *conn, if (ircnet->sasl_mechanism != NULL) { if (!g_ascii_strcasecmp(ircnet->sasl_mechanism, "plain")) { /* The PLAIN method needs both the username and the password */ - conn->sasl_mechanism = SASL_MECHANISM_PLAIN; if (ircnet->sasl_username != NULL && *ircnet->sasl_username && ircnet->sasl_password != NULL && *ircnet->sasl_password) { + conn->sasl_mechanism = SASL_MECHANISM_PLAIN; conn->sasl_username = g_strdup(ircnet->sasl_username); conn->sasl_password = g_strdup(ircnet->sasl_password); } else From 6710b357369e561138b2ee18da6acca1be3f97ed Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 19:31:56 +0200 Subject: [PATCH 28/71] fix reading of starttls = "no" in config --- src/irc/core/irc-servers-setup.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/irc/core/irc-servers-setup.h b/src/irc/core/irc-servers-setup.h index 7b11a2fe..d55507d8 100644 --- a/src/irc/core/irc-servers-setup.h +++ b/src/irc/core/irc-servers-setup.h @@ -12,8 +12,8 @@ (IRC_SERVER_SETUP(server) ? TRUE : FALSE) enum { - STARTTLS_DISALLOW = -1, /* */ - STARTTLS_NOTSET = 0, + STARTTLS_NOTSET = -1, /* */ + STARTTLS_DISALLOW = 0, STARTTLS_ENABLED = 1 }; From 92ade2f591475f310e83b4557012aa5480449fcb Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 19:40:41 +0200 Subject: [PATCH 29/71] fuzz server ssl init --- src/fe-fuzz/server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fe-fuzz/server.c b/src/fe-fuzz/server.c index 83ce7bfa..b74a29b9 100644 --- a/src/fe-fuzz/server.c +++ b/src/fe-fuzz/server.c @@ -152,6 +152,7 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) { args_execute(0, NULL); core_preinit((*argv)[0]); core_init(); + irssi_ssl_init(); irc_init(); fe_common_core_init(); fe_common_irc_init(); From e10e1c2da73a4af4ffc9acb3dd91b65feb93e6c7 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 18:43:50 +0200 Subject: [PATCH 30/71] fix reading of old config ssl_verify key --- src/core/servers-setup.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c index 357e8ebe..0664aa38 100644 --- a/src/core/servers-setup.c +++ b/src/core/servers-setup.c @@ -484,8 +484,9 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node) rec->password = g_strdup(config_node_get_str(node, "password", NULL)); rec->use_tls = config_node_get_bool(node, "use_tls", FALSE) || config_node_get_bool(node, "use_ssl", FALSE); - rec->tls_verify = config_node_get_bool(node, "tls_verify", TRUE) || - config_node_get_bool(node, "ssl_verify", FALSE); + rec->tls_verify = config_node_find(node, "tls_verify") != NULL ? + config_node_get_bool(node, "tls_verify", TRUE) : + config_node_get_bool(node, "ssl_verify", TRUE); value = config_node_get_str(node, "tls_cert", NULL); if (value == NULL) From 215cf08828d14e5e307e0f334e51f7ac41e83329 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Mon, 30 Aug 2021 19:40:41 +0200 Subject: [PATCH 31/71] fuzz server ssl init --- src/fe-fuzz/server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fe-fuzz/server.c b/src/fe-fuzz/server.c index 83ce7bfa..b74a29b9 100644 --- a/src/fe-fuzz/server.c +++ b/src/fe-fuzz/server.c @@ -152,6 +152,7 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) { args_execute(0, NULL); core_preinit((*argv)[0]); core_init(); + irssi_ssl_init(); irc_init(); fe_common_core_init(); fe_common_irc_init(); From 21701a1299cd6b64db5b2fb3765f578ff1f9fc6b Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 31 Aug 2021 17:29:43 +0200 Subject: [PATCH 32/71] do not unconditionally enable tls on /connect -! --- src/core/servers-setup.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c index b1f57a99..82e5f6be 100644 --- a/src/core/servers-setup.c +++ b/src/core/servers-setup.c @@ -191,8 +191,10 @@ static void server_setup_fill_optlist(SERVER_CONNECT_REC *conn, GHashTable *optl /* ad-hoc TLS settings from command optlist */ if ((tmp = g_hash_table_lookup(optlist, "tls_cert")) != NULL || - (tmp = g_hash_table_lookup(optlist, "ssl_cert")) != NULL) + (tmp = g_hash_table_lookup(optlist, "ssl_cert")) != NULL) { conn->tls_cert = g_strdup(tmp); + conn->use_tls = TRUE; + } if ((tmp = g_hash_table_lookup(optlist, "tls_pkey")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_pkey")) != NULL) conn->tls_pkey = g_strdup(tmp); @@ -220,10 +222,10 @@ static void server_setup_fill_optlist(SERVER_CONNECT_REC *conn, GHashTable *optl if (g_hash_table_lookup(optlist, "notls_verify") != NULL) conn->tls_verify = FALSE; if (g_hash_table_lookup(optlist, "tls_verify") != NULL || - g_hash_table_lookup(optlist, "ssl_verify") != NULL) + g_hash_table_lookup(optlist, "ssl_verify") != NULL) { conn->tls_verify = TRUE; - if ((conn->tls_cert != NULL && conn->tls_cert[0] != '\0') || conn->tls_verify) conn->use_tls = TRUE; + } if (g_hash_table_lookup(optlist, "notls") != NULL) conn->use_tls = FALSE; if (g_hash_table_lookup(optlist, "tls") != NULL || From 6c47fcf10d5a4b7718a3351ea0571da4d9f3c536 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 31 Aug 2021 21:49:29 +0200 Subject: [PATCH 33/71] Revert "Merge pull request #19 from ailin-nemui/starttls-no" This reverts commit 3324c5da89c694ce5bbd20ecb313da870d1bb914, reversing changes made to d3115f38550f26b935d4e22201d09287ce44e5ac. --- src/irc/core/irc-servers-setup.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/irc/core/irc-servers-setup.h b/src/irc/core/irc-servers-setup.h index d55507d8..7b11a2fe 100644 --- a/src/irc/core/irc-servers-setup.h +++ b/src/irc/core/irc-servers-setup.h @@ -12,8 +12,8 @@ (IRC_SERVER_SETUP(server) ? TRUE : FALSE) enum { - STARTTLS_NOTSET = -1, /* */ - STARTTLS_DISALLOW = 0, + STARTTLS_DISALLOW = -1, /* */ + STARTTLS_NOTSET = 0, STARTTLS_ENABLED = 1 }; From 1a6d74ac2645cf4f1c980604894f60dbf29a2d95 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Tue, 31 Aug 2021 21:54:41 +0200 Subject: [PATCH 34/71] fix reading of starttls = "no" in config, attempt 2 --- src/irc/core/irc-servers-setup.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/irc/core/irc-servers-setup.c b/src/irc/core/irc-servers-setup.c index 5299ef04..2cc80946 100644 --- a/src/irc/core/irc-servers-setup.c +++ b/src/irc/core/irc-servers-setup.c @@ -188,6 +188,7 @@ static void init_userinfo(void) static void sig_server_setup_read(IRC_SERVER_SETUP_REC *rec, CONFIG_NODE *node) { + int starttls; g_return_if_fail(rec != NULL); g_return_if_fail(node != NULL); @@ -197,7 +198,10 @@ static void sig_server_setup_read(IRC_SERVER_SETUP_REC *rec, CONFIG_NODE *node) rec->max_cmds_at_once = config_node_get_int(node, "cmds_max_at_once", 0); rec->cmd_queue_speed = config_node_get_int(node, "cmd_queue_speed", 0); rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0); - rec->starttls = config_node_get_bool(node, "starttls", STARTTLS_NOTSET); + starttls = config_node_get_bool(node, "starttls", -1); + rec->starttls = starttls == -1 ? STARTTLS_NOTSET : + starttls == 0 ? STARTTLS_DISALLOW : + STARTTLS_ENABLED; if (rec->starttls == STARTTLS_ENABLED) { rec->use_tls = 0; } From 939b773b8bea76dcf4ab33bb53d9899c84c218fb Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 13:37:07 +0200 Subject: [PATCH 35/71] Revert "Changed the support channel to LiberaChat." This reverts commit a5d4fd5aa7ad1d57c0b8e11e382944a3654cfa00. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d1232764..d229391a 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,4 @@ Irssi is always looking for developers. Feel free to submit patches through GitHub pull requests. You can also contact the Irssi developers in -[#irssi](https://irssi.org/support/irc/) on irc.libera.chat. +[#irssi](https://irssi.org/support/irc/) on irc.example.com. From 1a30e646d9a450b19582bdf306d7aad66730a632 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 13:37:17 +0200 Subject: [PATCH 36/71] Revert "Applied the updated docs changes in line with the upcoming blog post." This reverts commit 1773fa8d191c9f1dcc7c1e59dbcdf31c1263c918. --- README.md | 2 +- docs/help/in/admin.in | 2 +- docs/help/in/channel.in | 8 +++--- docs/help/in/connect.in | 6 ++--- docs/help/in/disconnect.in | 2 +- docs/help/in/info.in | 2 +- docs/help/in/join.in | 2 +- docs/help/in/knock.in | 2 +- docs/help/in/log.in | 8 +++--- docs/help/in/motd.in | 2 +- docs/help/in/names.in | 2 +- docs/help/in/nctcp.in | 2 +- docs/help/in/network.in | 6 ++--- docs/help/in/part.in | 2 +- docs/help/in/query.in | 4 +-- docs/help/in/recode.in | 2 +- docs/help/in/reconnect.in | 2 +- docs/help/in/server.in | 16 +++++------ docs/manual.txt | 2 +- docs/proxy.txt | 2 +- docs/startup-HOWTO.html | 4 +-- docs/startup-HOWTO.txt | 4 +-- irssi.conf | 54 ++++++++++++++++---------------------- 23 files changed, 65 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index d229391a..08be65b4 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,4 @@ Irssi is always looking for developers. Feel free to submit patches through GitHub pull requests. You can also contact the Irssi developers in -[#irssi](https://irssi.org/support/irc/) on irc.example.com. +[#irssi](https://irssi.org/support/irc/) on freenode. diff --git a/docs/help/in/admin.in b/docs/help/in/admin.in index cfe66eba..2b6f8b73 100644 --- a/docs/help/in/admin.in +++ b/docs/help/in/admin.in @@ -15,7 +15,7 @@ %9Examples:%9 /ADMIN - /ADMIN irc.example.com + /ADMIN orwell.freenode.net /ADMIN mike %9See also:%9 INFO diff --git a/docs/help/in/channel.in b/docs/help/in/channel.in index 0e15b6d5..86e824c2 100644 --- a/docs/help/in/channel.in +++ b/docs/help/in/channel.in @@ -33,12 +33,12 @@ /CHANNEL /CHANNEL LIST - /CHANNEL ADD -auto #irssi ExampleNet + /CHANNEL ADD -auto #irssi Freenode /CHANNEL ADD -auto #basementcat Quakenet secret_lair - /CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout ExampleNet + /CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout Freenode /CHANNEL ADD -auto -bots 'Q!TheQBot@CServe.quakenet.org' -botcmd '^MSG Q op #irssi' #irssi Quakenet - /CHANNEL MODIFY -noauto #irssi ExampleNet - /CHANNEL REMOVE #hideout ExampleNet + /CHANNEL MODIFY -noauto #irssi Freenode + /CHANNEL REMOVE #hideout Freenode %9Special Example:%9 diff --git a/docs/help/in/connect.in b/docs/help/in/connect.in index 4d59dde1..e861ad74 100644 --- a/docs/help/in/connect.in +++ b/docs/help/in/connect.in @@ -34,9 +34,9 @@ %9Examples:%9 - /CONNECT ExampleNet - /CONNECT -6 ExampleNet - /CONNECT -4 -! -host staff.irssi.org -network ExampleNet irc.example.com + /CONNECT Freenode + /CONNECT -6 Freenode + /CONNECT -4 -! -host staff.irssi.org -network Freenode orwell.freenode.net /CONNECT irc.irssi.org 6667 WzerT8zq mike %9See also:%9 DISCONNECT, RMRECONNS, SERVER diff --git a/docs/help/in/disconnect.in b/docs/help/in/disconnect.in index 88772e1e..bd4a4e17 100644 --- a/docs/help/in/disconnect.in +++ b/docs/help/in/disconnect.in @@ -18,7 +18,7 @@ %9Examples:%9 - /DISCONNECT ExampleNet I'm off for today, take care! + /DISCONNECT Freenode I'm off for today, take care! /DISCONNECT * Vacation time :D /DISCONNECT diff --git a/docs/help/in/info.in b/docs/help/in/info.in index 41578501..275f349d 100644 --- a/docs/help/in/info.in +++ b/docs/help/in/info.in @@ -15,7 +15,7 @@ %9Examples:%9 /INFO - /INFO irc.example.com + /INFO orwell.freenode.net %9See also:%9 ADMIN diff --git a/docs/help/in/join.in b/docs/help/in/join.in index 55190267..39fa23f8 100644 --- a/docs/help/in/join.in +++ b/docs/help/in/join.in @@ -20,7 +20,7 @@ /JOIN #irssi /JOIN #basementcat secret_lair /JOIN -invite - /JOIN -ExampleNet #github,#example,#irssi + /JOIN -freenode #github,#freenode,#irssi %9See also:%9 KICK, PART diff --git a/docs/help/in/knock.in b/docs/help/in/knock.in index 3e2fdbdb..bb554d55 100644 --- a/docs/help/in/knock.in +++ b/docs/help/in/knock.in @@ -23,7 +23,7 @@ %9Examples:%9 /KNOCK #irssi - /KNOCK #example + /KNOCK #freenode /KNOCK #github %9See also:%9 INVITE, JOIN diff --git a/docs/help/in/log.in b/docs/help/in/log.in index dfe26e30..e4743d46 100644 --- a/docs/help/in/log.in +++ b/docs/help/in/log.in @@ -33,10 +33,10 @@ %9Examples:%9 /LOG OPEN -targets mike ~/irclogs/mike.log MSGS - /LOG OPEN -targets #irssi ~/irclogs/ExampleNet/irssi-%%Y-%%m-%%d - /LOG CLOSE ~/irclogs/ExampleNet/irssi-%%Y-%%m-%%d - /LOG STOP ~/irclogs/ExampleNet/irssi-%%Y-%%m-%%d - /LOG START ~/irclogs/ExampleNet/irssi-%%Y-%%m-%%d + /LOG OPEN -targets #irssi-freenode ~/irclogs/freenode/irssi-%%Y-%%m-%%d + /LOG CLOSE ~/irclogs/freenode/irssi-%%Y-%%m-%%d + /LOG STOP ~/irclogs/freenode/irssi-%%Y-%%m-%%d + /LOG START ~/irclogs/freenode/irssi-%%Y-%%m-%%d /SET autolog ON diff --git a/docs/help/in/motd.in b/docs/help/in/motd.in index ee1233b2..e33a1c75 100644 --- a/docs/help/in/motd.in +++ b/docs/help/in/motd.in @@ -15,7 +15,7 @@ %9Examples:%9 /MOTD - /MOTD irc.example.com + /MOTD orwel.freenode.org /MOTD bob %9See also:%9 ADMIN, INFO, LINKS, MAP diff --git a/docs/help/in/names.in b/docs/help/in/names.in index deccea40..8fd8cf91 100644 --- a/docs/help/in/names.in +++ b/docs/help/in/names.in @@ -21,7 +21,7 @@ %9Examples:%9 /NAMES -ops - /NAMES -voices #irssi,#example + /NAMES -voices #irssi,#freenode %9See also:%9 JOIN, PART, WHO, WHOIS diff --git a/docs/help/in/nctcp.in b/docs/help/in/nctcp.in index 68d789d6..93c3f3ec 100644 --- a/docs/help/in/nctcp.in +++ b/docs/help/in/nctcp.in @@ -15,7 +15,7 @@ %9Examples:%9 /NCTCP #irssi VERSION King of the Jungle v1.0 - /NCTCP bob,#example USERINFO I am bob :p + /NCTCP bob,#freenode USERINFO I am bob :p %9See also:%9 CTCP diff --git a/docs/help/in/network.in b/docs/help/in/network.in index 183fd5b5..fbdaa0b4 100644 --- a/docs/help/in/network.in +++ b/docs/help/in/network.in @@ -59,11 +59,11 @@ %9Examples:%9 /NETWORK ADD -usermode +giw EFnet - /NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org ExampleNet - /NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' ExampleNet + /NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org Freenode + /NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' Freenode /NETWORK ADD -autosendcmd '^MSG Q@CServe.quakenet.org AUTH mike WzerT8zq; WAIT 2000; OPER mike WzerT8zq; WAIT 2000; MODE mike +kXP' Quakenet /NETWORK MODIFY -usermode +gi EFnet - /NETWORK REMOVE ExampleNet + /NETWORK REMOVE Freenode %9See also:%9 CHANNEL, CONNECT, SERVER diff --git a/docs/help/in/part.in b/docs/help/in/part.in index 51be59bd..e96abfbb 100644 --- a/docs/help/in/part.in +++ b/docs/help/in/part.in @@ -14,7 +14,7 @@ %9Examples:%9 /PART #irssi - /PART #example,#irssi + /PART #freenode,#irssi %9See also:%9 JOIN, KICK diff --git a/docs/help/in/query.in b/docs/help/in/query.in index 85f2556e..1c0ba5b9 100644 --- a/docs/help/in/query.in +++ b/docs/help/in/query.in @@ -17,8 +17,8 @@ %9Examples:%9 /QUERY mike - /QUERY -ExampleNet bob - /QUERY -ExampleNet -window sarah + /QUERY -freenode bob + /QUERY -freenode -window sarah %9See also:%9 MSG, UNQUERY, WINDOW diff --git a/docs/help/in/recode.in b/docs/help/in/recode.in index c34822de..63f52339 100644 --- a/docs/help/in/recode.in +++ b/docs/help/in/recode.in @@ -22,7 +22,7 @@ %9Examples:%9 /RECODE - /RECODE ADD ExampleNet/mike utf-8 + /RECODE ADD Freenode/mike utf-8 /RECODE ADD #korea euc-kr /RECODE REMOVE #korea diff --git a/docs/help/in/reconnect.in b/docs/help/in/reconnect.in index f2148c90..aa1dc946 100644 --- a/docs/help/in/reconnect.in +++ b/docs/help/in/reconnect.in @@ -15,7 +15,7 @@ %9Examples:%9 /RECONNECT - /RECONNECT ExampleNet + /RECONNECT Freenode /RECONNECT EFnet BRB :) %9See also:%9 CONNECT, DISCONNECT, NETWORK, RMRECONNS, SERVER diff --git a/docs/help/in/server.in b/docs/help/in/server.in index 8a4d8887..beb75114 100644 --- a/docs/help/in/server.in +++ b/docs/help/in/server.in @@ -61,15 +61,15 @@ %9Examples:%9 /SERVER - /SERVER CONNECT irc.example.com - /SERVER CONNECT +irc.example.com - /SERVER ADD -network ExampleNet -noautosendcmd irc.example.com - /SERVER ADD -! -auto -host staff.irssi.org -4 -network ExampleNet -noproxy irc.example.com 6667 - /SERVER MODIFY -network ExampleNet -noauto irc.example.com - /SERVER MODIFY -network ExampleNet irc.example.com 6697 - - /SERVER REMOVE irc.example.com 6667 ExampleNet + /SERVER CONNECT chat.freenode.net + /SERVER CONNECT +chat.freenode.net + /SERVER ADD -network Freenode -noautosendcmd orwell.freenode.net + /SERVER ADD -! -auto -host staff.irssi.org -4 -network Freenode -noproxy orwell.freenode.net 6667 + /SERVER MODIFY -network Freenode -noauto orwell.freenode.net + /SERVER MODIFY -network Freenode orwell.freenode.net 6697 - + /SERVER REMOVE orwell.freenode.net 6667 Freenode /SERVER PURGE - /SERVER PURGE irc.example.com + /SERVER PURGE orwell.freenode.net %9See also:%9 CHANNEL, CONNECT, DISCONNECT, NETWORK, RECONNECT, RMRECONNS diff --git a/docs/manual.txt b/docs/manual.txt index 29065feb..0f24ffe3 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -349,7 +349,7 @@ after connecting to the network. This is useful for automatically identifying yourself to NickServ, for example - /NETWORK ADD -autosendcmd "/^msg NickServ identify secret" ExampleNet + /NETWORK ADD -autosendcmd "/^msg NickServ identify secret" freenode /NETWORK REMOVE diff --git a/docs/proxy.txt b/docs/proxy.txt index 9ed7ecdb..224d24e3 100644 --- a/docs/proxy.txt +++ b/docs/proxy.txt @@ -24,7 +24,7 @@ You really should set some password for the proxy with: Then you'll need to configure the ports/ircnets the proxy listens in, something like: - /SET irssiproxy_ports IRCnet=2777 EFNet=2778 ExampleNet=2779 + /SET irssiproxy_ports ircnet=2777 efnet=2778 freenode=2779 There we have 3 different irc networks answering in 3 ports. Note that you'll have to make the correct /IRCNET ADD and /SERVER ADD commands to diff --git a/docs/startup-HOWTO.html b/docs/startup-HOWTO.html index ecbeb467..48f6e6df 100644 --- a/docs/startup-HOWTO.html +++ b/docs/startup-HOWTO.html @@ -68,7 +68,7 @@

And to connect to one of those networks and join a channel:

-
/CONNECT ExampleNet
+
/CONNECT Freenode
 /JOIN #irssi
 
@@ -94,7 +94,7 @@

If you have irssi 0.8.18 or higher and the irc network supports it, you can use SASL instead of nickserv, which is more reliable:

-
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN ExampleNet
+
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode
 

These commands have many more options, see their help for details:

diff --git a/docs/startup-HOWTO.txt b/docs/startup-HOWTO.txt index 84397f33..61de27e3 100644 --- a/docs/startup-HOWTO.txt +++ b/docs/startup-HOWTO.txt @@ -43,7 +43,7 @@ has a few predefined networks, to list them: And to connect to one of those networks and join a channel: -/CONNECT LiberaChat +/CONNECT Freenode /JOIN #irssi To add more networks: @@ -67,7 +67,7 @@ wait for 2 seconds before joining channels: If you have irssi 0.8.18 or higher and the irc network supports it, you can use SASL instead of nickserv, which is more reliable: -/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN ExampleNet +/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode These commands have many more options, see their help for details: diff --git a/irssi.conf b/irssi.conf index 9faa8973..edaeb3f5 100644 --- a/irssi.conf +++ b/irssi.conf @@ -1,19 +1,18 @@ servers = ( - { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; }, - { address = "ssl.efnet.org"; chatnet = "EFNet"; port = "9999"; use_tls = "yes"; tls_verify = "no"; }, - { address = "irc.esper.net"; chatnet = "EsperNet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "chat.freenode.net"; chatnet = "Freenode"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "irc.gamesurge.net"; chatnet = "GameSurge"; port = "6667"; }, - { address = "ssl.ircnet.ovh"; chatnet = "IRCnet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; }, - { address = "irc.ircsource.net"; chatnet = "IRCSource"; port = "6667"; }, - { address = "irc.libera.chat"; chatnet = "LiberaChat"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; }, - { address = "irc.oftc.net"; chatnet = "OFTC"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "irc.quakenet.org"; chatnet = "QuakeNet"; port = "6667"; }, - { address = "irc.rizon.net"; chatnet = "Rizon"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; }, - { address = "irc.undernet.org"; chatnet = "Undernet"; port = "6667"; } + { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; }, + { address = "ssl.efnet.org"; chatnet = "EFNet"; port = "9999"; use_tls = "yes"; tls_verify = "no"; }, + { address = "irc.esper.net"; chatnet = "EsperNet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "chat.freenode.net"; chatnet = "Freenode"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "irc.gamesurge.net"; chatnet = "GameSurge"; port = "6667"; }, + { address = "ssl.ircnet.ovh"; chatnet = "IRCnet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; }, + { address = "irc.ircsource.net"; chatnet = "IRCSource"; port = "6667"; }, + { address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; }, + { address = "irc.oftc.net"; chatnet = "OFTC"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "irc.quakenet.org"; chatnet = "QuakeNet"; port = "6667"; }, + { address = "irc.rizon.net"; chatnet = "Rizon"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; }, + { address = "irc.undernet.org"; chatnet = "Undernet"; port = "6667"; } ); chatnets = { @@ -59,12 +58,6 @@ chatnets = { max_msgs = "4"; max_whois = "1"; }; - LiberaChat = { - type = "IRC"; - max_kicks = "1"; - max_msgs = "4"; - max_whois = "1"; - }; NetFuze = { type = "IRC"; max_kicks = "1"; @@ -101,16 +94,15 @@ chatnets = { }; channels = ( - { name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; }, - { name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; }, - { name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; }, - { name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; }, - { name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; }, - { name = "#libera"; chatnet = "LiberaChat"; autojoin = "No"; }, - { name = "#irssi"; chatnet = "LiberaChat"; autojoin = "No"; }, - { name = "#netfuze"; chatnet = "NetFuze"; autojoin = "No"; }, - { name = "#oftc"; chatnet = "OFTC"; autojoin = "No"; }, - { name = "silc"; chatnet = "SILC"; autojoin = "No"; } + { name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; }, + { name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; }, + { name = "#irssi"; chatnet = "Freenode"; autojoin = "No"; }, + { name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; }, + { name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; }, + { name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; }, + { name = "#netfuze"; chatnet = "NetFuze"; autojoin = "No"; }, + { name = "#oftc"; chatnet = "OFTC"; autojoin = "No"; }, + { name = "silc"; chatnet = "SILC"; autojoin = "No"; } ); aliases = { From 82d2cd88e78b4bffe0c710dd940d1771506eced6 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 13:37:37 +0200 Subject: [PATCH 37/71] Revert "Irssi does not take a political stance." This reverts commit a4486c236a3bf15192d0500b3a1892f7465826c7. --- README.md | 2 +- docs/help/in/admin.in | 2 +- docs/help/in/channel.in | 8 ++++---- docs/help/in/connect.in | 6 +++--- docs/help/in/disconnect.in | 2 +- docs/help/in/info.in | 2 +- docs/help/in/join.in | 2 +- docs/help/in/knock.in | 2 +- docs/help/in/log.in | 8 ++++---- docs/help/in/motd.in | 2 +- docs/help/in/names.in | 2 +- docs/help/in/nctcp.in | 2 +- docs/help/in/network.in | 6 +++--- docs/help/in/part.in | 2 +- docs/help/in/query.in | 4 ++-- docs/help/in/recode.in | 2 +- docs/help/in/reconnect.in | 2 +- docs/help/in/server.in | 16 ++++++++-------- docs/manual.txt | 2 +- docs/proxy.txt | 2 +- docs/startup-HOWTO.html | 4 ++-- docs/startup-HOWTO.txt | 4 ++-- irssi.conf | 8 ++++---- 23 files changed, 46 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 08be65b4..d1232764 100644 --- a/README.md +++ b/README.md @@ -72,4 +72,4 @@ Irssi is always looking for developers. Feel free to submit patches through GitHub pull requests. You can also contact the Irssi developers in -[#irssi](https://irssi.org/support/irc/) on freenode. +[#irssi](https://irssi.org/support/irc/) on irc.libera.chat. diff --git a/docs/help/in/admin.in b/docs/help/in/admin.in index 2b6f8b73..acb6e1ae 100644 --- a/docs/help/in/admin.in +++ b/docs/help/in/admin.in @@ -15,7 +15,7 @@ %9Examples:%9 /ADMIN - /ADMIN orwell.freenode.net + /ADMIN irc.libera.chat /ADMIN mike %9See also:%9 INFO diff --git a/docs/help/in/channel.in b/docs/help/in/channel.in index 86e824c2..d9be8cf5 100644 --- a/docs/help/in/channel.in +++ b/docs/help/in/channel.in @@ -33,12 +33,12 @@ /CHANNEL /CHANNEL LIST - /CHANNEL ADD -auto #irssi Freenode + /CHANNEL ADD -auto #irssi liberachat /CHANNEL ADD -auto #basementcat Quakenet secret_lair - /CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout Freenode + /CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout liberachat /CHANNEL ADD -auto -bots 'Q!TheQBot@CServe.quakenet.org' -botcmd '^MSG Q op #irssi' #irssi Quakenet - /CHANNEL MODIFY -noauto #irssi Freenode - /CHANNEL REMOVE #hideout Freenode + /CHANNEL MODIFY -noauto #irssi liberachat + /CHANNEL REMOVE #hideout liberachat %9Special Example:%9 diff --git a/docs/help/in/connect.in b/docs/help/in/connect.in index e861ad74..d4375eec 100644 --- a/docs/help/in/connect.in +++ b/docs/help/in/connect.in @@ -34,9 +34,9 @@ %9Examples:%9 - /CONNECT Freenode - /CONNECT -6 Freenode - /CONNECT -4 -! -host staff.irssi.org -network Freenode orwell.freenode.net + /CONNECT liberachat + /CONNECT -6 liberachat + /CONNECT -4 -! -host staff.irssi.org -network liberachat irc.libera.chat /CONNECT irc.irssi.org 6667 WzerT8zq mike %9See also:%9 DISCONNECT, RMRECONNS, SERVER diff --git a/docs/help/in/disconnect.in b/docs/help/in/disconnect.in index bd4a4e17..c53b1e60 100644 --- a/docs/help/in/disconnect.in +++ b/docs/help/in/disconnect.in @@ -18,7 +18,7 @@ %9Examples:%9 - /DISCONNECT Freenode I'm off for today, take care! + /DISCONNECT liberachat I'm off for today, take care! /DISCONNECT * Vacation time :D /DISCONNECT diff --git a/docs/help/in/info.in b/docs/help/in/info.in index 275f349d..d8d8cfc9 100644 --- a/docs/help/in/info.in +++ b/docs/help/in/info.in @@ -15,7 +15,7 @@ %9Examples:%9 /INFO - /INFO orwell.freenode.net + /INFO irc.libera.chat %9See also:%9 ADMIN diff --git a/docs/help/in/join.in b/docs/help/in/join.in index 39fa23f8..adf7158e 100644 --- a/docs/help/in/join.in +++ b/docs/help/in/join.in @@ -20,7 +20,7 @@ /JOIN #irssi /JOIN #basementcat secret_lair /JOIN -invite - /JOIN -freenode #github,#freenode,#irssi + /JOIN -liberachat #github,#libera,#irssi %9See also:%9 KICK, PART diff --git a/docs/help/in/knock.in b/docs/help/in/knock.in index bb554d55..ce8f9aa0 100644 --- a/docs/help/in/knock.in +++ b/docs/help/in/knock.in @@ -23,7 +23,7 @@ %9Examples:%9 /KNOCK #irssi - /KNOCK #freenode + /KNOCK #libera /KNOCK #github %9See also:%9 INVITE, JOIN diff --git a/docs/help/in/log.in b/docs/help/in/log.in index e4743d46..3ca8782c 100644 --- a/docs/help/in/log.in +++ b/docs/help/in/log.in @@ -33,10 +33,10 @@ %9Examples:%9 /LOG OPEN -targets mike ~/irclogs/mike.log MSGS - /LOG OPEN -targets #irssi-freenode ~/irclogs/freenode/irssi-%%Y-%%m-%%d - /LOG CLOSE ~/irclogs/freenode/irssi-%%Y-%%m-%%d - /LOG STOP ~/irclogs/freenode/irssi-%%Y-%%m-%%d - /LOG START ~/irclogs/freenode/irssi-%%Y-%%m-%%d + /LOG OPEN -targets #irssi ~/irclogs/liberachat/irssi-%%Y-%%m-%%d + /LOG CLOSE ~/irclogs/liberachat/irssi-%%Y-%%m-%%d + /LOG STOP ~/irclogs/liberachat/irssi-%%Y-%%m-%%d + /LOG START ~/irclogs/liberachat/irssi-%%Y-%%m-%%d /SET autolog ON diff --git a/docs/help/in/motd.in b/docs/help/in/motd.in index e33a1c75..6e86681e 100644 --- a/docs/help/in/motd.in +++ b/docs/help/in/motd.in @@ -15,7 +15,7 @@ %9Examples:%9 /MOTD - /MOTD orwel.freenode.org + /MOTD irc.libera.chat /MOTD bob %9See also:%9 ADMIN, INFO, LINKS, MAP diff --git a/docs/help/in/names.in b/docs/help/in/names.in index 8fd8cf91..974b845f 100644 --- a/docs/help/in/names.in +++ b/docs/help/in/names.in @@ -21,7 +21,7 @@ %9Examples:%9 /NAMES -ops - /NAMES -voices #irssi,#freenode + /NAMES -voices #irssi,#libera %9See also:%9 JOIN, PART, WHO, WHOIS diff --git a/docs/help/in/nctcp.in b/docs/help/in/nctcp.in index 93c3f3ec..9f516730 100644 --- a/docs/help/in/nctcp.in +++ b/docs/help/in/nctcp.in @@ -15,7 +15,7 @@ %9Examples:%9 /NCTCP #irssi VERSION King of the Jungle v1.0 - /NCTCP bob,#freenode USERINFO I am bob :p + /NCTCP bob,#libera USERINFO I am bob :p %9See also:%9 CTCP diff --git a/docs/help/in/network.in b/docs/help/in/network.in index fbdaa0b4..0542bd7d 100644 --- a/docs/help/in/network.in +++ b/docs/help/in/network.in @@ -59,11 +59,11 @@ %9Examples:%9 /NETWORK ADD -usermode +giw EFnet - /NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org Freenode - /NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' Freenode + /NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org liberachat + /NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' liberachat /NETWORK ADD -autosendcmd '^MSG Q@CServe.quakenet.org AUTH mike WzerT8zq; WAIT 2000; OPER mike WzerT8zq; WAIT 2000; MODE mike +kXP' Quakenet /NETWORK MODIFY -usermode +gi EFnet - /NETWORK REMOVE Freenode + /NETWORK REMOVE liberachat %9See also:%9 CHANNEL, CONNECT, SERVER diff --git a/docs/help/in/part.in b/docs/help/in/part.in index e96abfbb..f89769cc 100644 --- a/docs/help/in/part.in +++ b/docs/help/in/part.in @@ -14,7 +14,7 @@ %9Examples:%9 /PART #irssi - /PART #freenode,#irssi + /PART #libera,#irssi %9See also:%9 JOIN, KICK diff --git a/docs/help/in/query.in b/docs/help/in/query.in index 1c0ba5b9..a34f85e8 100644 --- a/docs/help/in/query.in +++ b/docs/help/in/query.in @@ -17,8 +17,8 @@ %9Examples:%9 /QUERY mike - /QUERY -freenode bob - /QUERY -freenode -window sarah + /QUERY -liberachat bob + /QUERY -liberachat -window sarah %9See also:%9 MSG, UNQUERY, WINDOW diff --git a/docs/help/in/recode.in b/docs/help/in/recode.in index 63f52339..760c66cd 100644 --- a/docs/help/in/recode.in +++ b/docs/help/in/recode.in @@ -22,7 +22,7 @@ %9Examples:%9 /RECODE - /RECODE ADD Freenode/mike utf-8 + /RECODE ADD liberachat/mike utf-8 /RECODE ADD #korea euc-kr /RECODE REMOVE #korea diff --git a/docs/help/in/reconnect.in b/docs/help/in/reconnect.in index aa1dc946..87beb95a 100644 --- a/docs/help/in/reconnect.in +++ b/docs/help/in/reconnect.in @@ -15,7 +15,7 @@ %9Examples:%9 /RECONNECT - /RECONNECT Freenode + /RECONNECT liberachat /RECONNECT EFnet BRB :) %9See also:%9 CONNECT, DISCONNECT, NETWORK, RMRECONNS, SERVER diff --git a/docs/help/in/server.in b/docs/help/in/server.in index beb75114..f7d907f3 100644 --- a/docs/help/in/server.in +++ b/docs/help/in/server.in @@ -61,15 +61,15 @@ %9Examples:%9 /SERVER - /SERVER CONNECT chat.freenode.net - /SERVER CONNECT +chat.freenode.net - /SERVER ADD -network Freenode -noautosendcmd orwell.freenode.net - /SERVER ADD -! -auto -host staff.irssi.org -4 -network Freenode -noproxy orwell.freenode.net 6667 - /SERVER MODIFY -network Freenode -noauto orwell.freenode.net - /SERVER MODIFY -network Freenode orwell.freenode.net 6697 - - /SERVER REMOVE orwell.freenode.net 6667 Freenode + /SERVER CONNECT irc.libera.chat + /SERVER CONNECT +irc.libera.chat + /SERVER ADD -network liberachat -noautosendcmd irc.libera.chat + /SERVER ADD -! -auto -host staff.irssi.org -4 -network liberachat -noproxy irc.libera.chat 6667 + /SERVER MODIFY -network liberachat -noauto irc.libera.chat + /SERVER MODIFY -network liberachat irc.libera.chat 6697 - + /SERVER REMOVE irc.libera.chat 6667 liberachat /SERVER PURGE - /SERVER PURGE orwell.freenode.net + /SERVER PURGE irc.libera.chat %9See also:%9 CHANNEL, CONNECT, DISCONNECT, NETWORK, RECONNECT, RMRECONNS diff --git a/docs/manual.txt b/docs/manual.txt index 0f24ffe3..5f0eac51 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -349,7 +349,7 @@ after connecting to the network. This is useful for automatically identifying yourself to NickServ, for example - /NETWORK ADD -autosendcmd "/^msg NickServ identify secret" freenode + /NETWORK ADD -autosendcmd "/^msg NickServ identify secret" liberachat /NETWORK REMOVE diff --git a/docs/proxy.txt b/docs/proxy.txt index 224d24e3..172770e8 100644 --- a/docs/proxy.txt +++ b/docs/proxy.txt @@ -24,7 +24,7 @@ You really should set some password for the proxy with: Then you'll need to configure the ports/ircnets the proxy listens in, something like: - /SET irssiproxy_ports ircnet=2777 efnet=2778 freenode=2779 + /SET irssiproxy_ports IRCnet=2777 EFNet=2778 liberachat=2779 There we have 3 different irc networks answering in 3 ports. Note that you'll have to make the correct /IRCNET ADD and /SERVER ADD commands to diff --git a/docs/startup-HOWTO.html b/docs/startup-HOWTO.html index 48f6e6df..b0c68f1f 100644 --- a/docs/startup-HOWTO.html +++ b/docs/startup-HOWTO.html @@ -68,7 +68,7 @@

And to connect to one of those networks and join a channel:

-
/CONNECT Freenode
+
/CONNECT liberachat
 /JOIN #irssi
 
@@ -94,7 +94,7 @@

If you have irssi 0.8.18 or higher and the irc network supports it, you can use SASL instead of nickserv, which is more reliable:

-
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode
+
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN liberachat
 

These commands have many more options, see their help for details:

diff --git a/docs/startup-HOWTO.txt b/docs/startup-HOWTO.txt index 61de27e3..bff33108 100644 --- a/docs/startup-HOWTO.txt +++ b/docs/startup-HOWTO.txt @@ -43,7 +43,7 @@ has a few predefined networks, to list them: And to connect to one of those networks and join a channel: -/CONNECT Freenode +/CONNECT liberachat /JOIN #irssi To add more networks: @@ -67,7 +67,7 @@ wait for 2 seconds before joining channels: If you have irssi 0.8.18 or higher and the irc network supports it, you can use SASL instead of nickserv, which is more reliable: -/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode +/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN liberachat These commands have many more options, see their help for details: diff --git a/irssi.conf b/irssi.conf index edaeb3f5..21c3ba4c 100644 --- a/irssi.conf +++ b/irssi.conf @@ -2,7 +2,7 @@ servers = ( { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; }, { address = "ssl.efnet.org"; chatnet = "EFNet"; port = "9999"; use_tls = "yes"; tls_verify = "no"; }, { address = "irc.esper.net"; chatnet = "EsperNet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, - { address = "chat.freenode.net"; chatnet = "Freenode"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, + { address = "irc.libera.chat"; chatnet = "liberachat";port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, { address = "irc.gamesurge.net"; chatnet = "GameSurge"; port = "6667"; }, { address = "ssl.ircnet.ovh"; chatnet = "IRCnet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; }, { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; }, @@ -34,7 +34,7 @@ chatnets = { max_msgs = "4"; max_whois = "1"; }; - Freenode = { + liberachat = { type = "IRC"; max_kicks = "1"; max_msgs = "4"; @@ -95,8 +95,8 @@ chatnets = { channels = ( { name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; }, - { name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; }, - { name = "#irssi"; chatnet = "Freenode"; autojoin = "No"; }, + { name = "#libera"; chatnet = "liberachat";autojoin = "No"; }, + { name = "#irssi"; chatnet = "liberachat";autojoin = "No"; }, { name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; }, { name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; }, { name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; }, From 240b79aa2677c5f21ec3350123eb573502bea85d Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 22:56:06 +0200 Subject: [PATCH 38/71] send channel sync requests "later" in the command queue --- src/irc/core/channels-query.c | 16 +++++---- src/irc/core/irc-servers.h | 1 + src/irc/core/irc.c | 59 ++++++++++++++++++++------------ src/irc/core/irc.h | 12 +++++-- src/irc/notifylist/notify-ison.c | 6 ++-- src/perl/irc/Server.xs | 7 ++++ 6 files changed, 69 insertions(+), 32 deletions(-) diff --git a/src/irc/core/channels-query.c b/src/irc/core/channels-query.c index 6cf3dd2b..37fcb2d2 100644 --- a/src/irc/core/channels-query.c +++ b/src/irc/core/channels-query.c @@ -53,9 +53,9 @@ loop: /* here are the WHOX commands we send. the full spec can be found on [1]. (1) WHOX_CHANNEL_FULL_CMD for getting the user list when we join a channel. we request the fields - c (channel), u (user), h (host), n (nick), f (flags), d (hops), a (important, account!), and - r (the real name goes last because it os the only that can contain spaces.) we request all - those fields as they are also included in the "regular" WHO reply we would get without WHOX. + c (channel), u (user), h (host), n (nick), f (flags), d (hops), a (account), and r (the real + name goes last because it is the only that can contain spaces.) we request all those fields + as they are also included in the "regular" WHO reply we would get without WHOX. (2) WHOX_USERACCOUNT_CMD for getting the account names of people that joined. this code is obviously only used when we don't have extended-joins. we request n (nick) and a (account) @@ -265,7 +265,7 @@ static void query_send(IRC_SERVER_REC *server, int query) cmd = NULL; } - irc_send_cmd(server, cmd); + irc_send_cmd_later(server, cmd); g_free(chanstr); g_free(chanstr_commas); @@ -440,6 +440,7 @@ void irc_channels_query_purge_accountquery(IRC_SERVER_REC *server, const char *n g_free(cmd); server->cmdcount--; + server->cmdlater--; } else { prev = tmp->next; } @@ -528,7 +529,9 @@ static void sig_event_join(IRC_SERVER_REC *server, const char *data, const char } if (g_hash_table_size(chanrec->nicks) < settings_get_int("channel_max_who_sync") && - server->isupport != NULL && g_hash_table_lookup(server->isupport, "whox") != NULL) { + server->isupport != NULL && g_hash_table_lookup(server->isupport, "whox") != NULL && + g_hash_table_size(server->chanqueries->accountqueries) < + settings_get_int("account_max_chase")) { char *cmd; server_redirect_event(server, "who user", 1, nick, -1, "chanquery useraccount abort", /* failure signal */ @@ -538,7 +541,7 @@ static void sig_event_join(IRC_SERVER_REC *server, const char *data, const char cmd = g_strdup_printf(WHOX_USERACCOUNT_CMD, nick); g_hash_table_add(server->chanqueries->accountqueries, g_strdup(nick)); /* queue the command */ - irc_send_cmd_full(server, cmd, FALSE, FALSE, FALSE); + irc_send_cmd_later(server, cmd); g_free(cmd); } } @@ -635,6 +638,7 @@ void channels_query_init(void) { settings_add_bool("misc", "channel_sync", TRUE); settings_add_int("misc", "channel_max_who_sync", 1000); + settings_add_int("misc", "account_max_chase", 10); signal_add("server connected", (SIGNAL_FUNC) sig_connected); signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected); diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index 544baba9..93fa02a4 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -119,6 +119,7 @@ struct _IRC_SERVER_REC { there actually is, to make flood control remember how many messages can be sent before starting the flood control */ + int cmdlater; /* number of commands in queue to be sent later */ GSList *cmdqueue; /* command, redirection, ... */ gint64 wait_cmd; /* don't send anything to server before this */ gint64 last_cmd; /* last time command was sent to server */ diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index 628d7130..e712c9bf 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -47,8 +47,7 @@ static void strip_params_colon(char *const); /* The core of the irc_send_cmd* functions. If `raw' is TRUE, the `cmd' won't be checked at all if it's 512 bytes or not, or if it contains line feeds or not. Use with extreme caution! */ -void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, - int send_now, int immediate, int raw) +void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_when, int raw) { GString *str; int len; @@ -65,6 +64,8 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, if (server->cmdcount == 0) irc_servers_start_cmd_timeout(); + if (server->cmdlater > server->cmdcount) + server->cmdlater = server->cmdcount; server->cmdcount++; if (!raw) { @@ -105,7 +106,7 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, g_string_append(str, cmd); } - if (send_now) { + if (irc_send_when == IRC_SEND_NOW) { rawlog_output(server->rawlog, str->str); server_redirect_command(server, str->str, server->redirect_next); server->redirect_next = NULL; @@ -117,25 +118,31 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, g_string_append_c(str, 10); } - if (send_now) { - irc_server_send_data(server, str->str, str->len); + if (irc_send_when == IRC_SEND_NOW) { + irc_server_send_data(server, str->str, str->len); g_string_free(str, TRUE); - } else { - + } else if (irc_send_when == IRC_SEND_NEXT) { /* add to queue */ - if (immediate) { - server->cmdqueue = g_slist_prepend(server->cmdqueue, - server->redirect_next); - server->cmdqueue = g_slist_prepend(server->cmdqueue, - g_string_free(str, FALSE)); - } else { - server->cmdqueue = g_slist_append(server->cmdqueue, - g_string_free(str, FALSE)); - server->cmdqueue = g_slist_append(server->cmdqueue, - server->redirect_next); - } + server->cmdqueue = g_slist_prepend(server->cmdqueue, server->redirect_next); + server->cmdqueue = g_slist_prepend(server->cmdqueue, g_string_free(str, FALSE)); + } else if (irc_send_when == IRC_SEND_NORMAL) { + guint pos = g_slist_length(server->cmdqueue); + if (pos > 2 * server->cmdlater) + pos -= 2 * server->cmdlater; + else + pos = 0; + + server->cmdqueue = g_slist_insert(server->cmdqueue, server->redirect_next, pos); + server->cmdqueue = g_slist_insert(server->cmdqueue, g_string_free(str, FALSE), pos); + } else if (irc_send_when == IRC_SEND_LATER) { + server->cmdqueue = g_slist_append(server->cmdqueue, g_string_free(str, FALSE)); + server->cmdqueue = g_slist_append(server->cmdqueue, server->redirect_next); + server->cmdlater++; + } else { + g_warn_if_reached(); } - server->redirect_next = NULL; + + server->redirect_next = NULL; } /* Send command to IRC server */ @@ -149,7 +156,7 @@ void irc_send_cmd(IRC_SERVER_REC *server, const char *cmd) (server->cmdcount < server->max_cmds_at_once || server->cmd_queue_speed <= 0); - irc_send_cmd_full(server, cmd, send_now, FALSE, FALSE); + irc_send_cmd_full(server, cmd, send_now ? IRC_SEND_NOW : IRC_SEND_NORMAL, FALSE); } /* Send command to IRC server */ @@ -173,7 +180,7 @@ void irc_send_cmd_now(IRC_SERVER_REC *server, const char *cmd) { g_return_if_fail(cmd != NULL); - irc_send_cmd_full(server, cmd, TRUE, TRUE, FALSE); + irc_send_cmd_full(server, cmd, IRC_SEND_NOW, FALSE); } /* Send command to server putting it at the beginning of the queue of @@ -183,7 +190,15 @@ void irc_send_cmd_first(IRC_SERVER_REC *server, const char *cmd) { g_return_if_fail(cmd != NULL); - irc_send_cmd_full(server, cmd, FALSE, TRUE, FALSE); + irc_send_cmd_full(server, cmd, IRC_SEND_NEXT, FALSE); +} + +/* Send command to server putting it at the end of the queue. */ +void irc_send_cmd_later(IRC_SERVER_REC *server, const char *cmd) +{ + g_return_if_fail(cmd != NULL); + + irc_send_cmd_full(server, cmd, IRC_SEND_LATER, FALSE); } static char *split_nicks(const char *cmd, char **pre, char **nicks, char **post, int arg) diff --git a/src/irc/core/irc.h b/src/irc/core/irc.h index 8803f662..92fb4ccb 100644 --- a/src/irc/core/irc.h +++ b/src/irc/core/irc.h @@ -27,6 +27,13 @@ typedef struct _REDIRECT_REC REDIRECT_REC; extern char *current_server_event; /* current server event being processed */ +enum { + IRC_SEND_NOW, /* */ + IRC_SEND_NEXT, + IRC_SEND_NORMAL, + IRC_SEND_LATER +}; + /* Send command to IRC server */ void irc_send_cmd(IRC_SERVER_REC *server, const char *cmd); void irc_send_cmdv(IRC_SERVER_REC *server, const char *cmd, ...) G_GNUC_PRINTF (2, 3); @@ -42,11 +49,12 @@ void irc_send_cmd_now(IRC_SERVER_REC *server, const char *cmd); commands to send -- it will go out as soon as possible in accordance to the flood protection settings. */ void irc_send_cmd_first(IRC_SERVER_REC *server, const char *cmd); +/* Send command to server putting it at the end of the queue. */ +void irc_send_cmd_later(IRC_SERVER_REC *server, const char *cmd); /* The core of the irc_send_cmd* functions. If `raw' is TRUE, the `cmd' won't be checked at all if it's 512 bytes or not, or if it contains line feeds or not. Use with extreme caution! */ -void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, - int send_now, int immediate, int raw); +void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_when, int raw); /* Extract a tag value from tags */ GHashTable *irc_parse_message_tags(const char *tags); diff --git a/src/irc/notifylist/notify-ison.c b/src/irc/notifylist/notify-ison.c index 32316038..809394c4 100644 --- a/src/irc/notifylist/notify-ison.c +++ b/src/irc/notifylist/notify-ison.c @@ -92,7 +92,7 @@ static void ison_send(IRC_SERVER_REC *server, GString *cmd) server_redirect_event(server, "ison", 1, NULL, -1, NULL, "event 303", "notifylist event", NULL); - irc_send_cmd(server, cmd->str); + irc_send_cmd_later(server, cmd->str); g_string_truncate(cmd, 0); } @@ -183,7 +183,9 @@ static void whois_send(IRC_SERVER_REC *server, const char *nicks, "", "event empty", NULL); g_free(str); - irc_send_cmdv(server, "WHOIS %s", whois_request); + str = g_strdup_printf("WHOIS %s", whois_request); + irc_send_cmd_later(server, str); + g_free(str); } static void whois_send_server(IRC_SERVER_REC *server, char *nick) diff --git a/src/perl/irc/Server.xs b/src/perl/irc/Server.xs index fef3698f..63e3111a 100644 --- a/src/perl/irc/Server.xs +++ b/src/perl/irc/Server.xs @@ -86,6 +86,13 @@ send_raw_first(server, cmd) CODE: irc_send_cmd_first(server, cmd); +void +send_raw_later(server, cmd) + Irssi::Irc::Server server + char *cmd +CODE: + irc_send_cmd_later(server, cmd); + void send_raw_split(server, cmd, nickarg, max_nicks) Irssi::Irc::Server server From 157913bd98f1f95eb7eb58b2c73a8e6685f0c8cc Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 23:26:35 +0200 Subject: [PATCH 39/71] do not chase during netsplit --- src/irc/core/channels-query.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/irc/core/channels-query.c b/src/irc/core/channels-query.c index 37fcb2d2..05c9768c 100644 --- a/src/irc/core/channels-query.c +++ b/src/irc/core/channels-query.c @@ -530,6 +530,7 @@ static void sig_event_join(IRC_SERVER_REC *server, const char *data, const char if (g_hash_table_size(chanrec->nicks) < settings_get_int("channel_max_who_sync") && server->isupport != NULL && g_hash_table_lookup(server->isupport, "whox") != NULL && + server->split_servers == NULL && g_hash_table_size(server->chanqueries->accountqueries) < settings_get_int("account_max_chase")) { char *cmd; From 2de9c25376c18776011a42dc9f2e3ff4370bb700 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 23:01:58 +0200 Subject: [PATCH 40/71] up abi --- src/common.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index 245f2223..d2dd2f7c 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 40 +#define IRSSI_ABI_VERSION 41 #define DEFAULT_SERVER_ADD_PORT 6667 #define DEFAULT_SERVER_ADD_TLS_PORT 6697 From 37237f377e639650a4eb92168661fe4d53989400 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 2 Sep 2021 22:38:53 +0200 Subject: [PATCH 41/71] actually remember the hilight -color --- src/fe-common/core/hilight-text.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c index 4b5e4edd..d308bd04 100644 --- a/src/fe-common/core/hilight-text.c +++ b/src/fe-common/core/hilight-text.c @@ -479,6 +479,8 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text, tmp = g_strdup_printf("%d", hilight_end)); g_free(tmp); } + if (hilight->color != NULL) + format_dest_meta_stash(dest, "hilight-color", hilight->color); signal_emit("print text", 3, dest, newstr, stripped); From cf903840233904de85858aa180f1a6b2e339a45d Mon Sep 17 00:00:00 2001 From: Jari Matilainen Date: Thu, 2 Sep 2021 23:10:37 +0200 Subject: [PATCH 42/71] Allow -tls_ca{file,path} '' to unset an argument --- src/fe-common/core/fe-server.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/fe-common/core/fe-server.c b/src/fe-common/core/fe-server.c index de45f8e9..78e7202c 100644 --- a/src/fe-common/core/fe-server.c +++ b/src/fe-common/core/fe-server.c @@ -213,12 +213,16 @@ static void cmd_server_add_modify(const char *data, gboolean add) value = g_hash_table_lookup(optlist, "ssl_cafile"); if (value != NULL && *value != '\0') rec->tls_cafile = g_strdup(value); + else if (value != NULL && *value == '\0') + g_free_and_null(rec->tls_cafile); value = g_hash_table_lookup(optlist, "tls_capath"); if (value == NULL) value = g_hash_table_lookup(optlist, "ssl_capath"); if (value != NULL && *value != '\0') rec->tls_capath = g_strdup(value); + else if (value != NULL && *value == '\0') + g_free_and_null(rec->tls_capath); value = g_hash_table_lookup(optlist, "tls_ciphers"); if (value == NULL) From cb11fd9cf76a368d8672925d02272c8a24992017 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 3 Sep 2021 16:18:21 +0200 Subject: [PATCH 43/71] add a PACKAGE_VERSION override for meson --- meson.build | 10 ++++++++-- meson_options.txt | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index fe5aa99f..bd192a92 100644 --- a/meson.build +++ b/meson.build @@ -53,6 +53,8 @@ require_glib_internal = get_option('install-glib') == 'force' want_static_dependency = get_option('static-dependency') == 'yes' +package_version = get_option('PACKAGE_VERSION') != '' ? get_option('PACKAGE_VERSION') : meson.project_version() + chat_modules = ['irc'] run_command('mkdir', meson.current_build_dir() / incdir) @@ -540,7 +542,7 @@ foreach h : headers endforeach conf.set('HAVE_LIBUTF8PROC', have_libutf8proc) -conf.set_quoted('PACKAGE_VERSION', meson.project_version()) +conf.set_quoted('PACKAGE_VERSION', package_version) conf.set_quoted('PACKAGE_TARNAME', meson.project_name()) configure_file(output : 'irssi-config.h', @@ -581,7 +583,11 @@ pc_requires = [] if not glib_internal pc_requires += glib_dep endif -pc.generate(filebase : 'irssi-1', name : 'Irssi', description : 'Irssi chat client', requires : pc_requires) +pc.generate(filebase : 'irssi-1', + name : 'Irssi', + description : 'Irssi chat client', + version : package_version, + requires : pc_requires) ########### # irssi.1 # diff --git a/meson_options.txt b/meson_options.txt index 5dc9c514..1013166d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -15,3 +15,4 @@ option('static-dependency', type : 'combo', description : 'Request static depen option('install-glib', type : 'combo', description : 'Download and install GLib for you', choices : ['no', 'yes', 'force']) option('docdir', type : 'string', description : 'Documentation directory') option('fhs-prefix', type : 'string', description : 'System prefix for Termux') +option('PACKAGE_VERSION', type : 'string', description : 'Override PACKAGE_VERSION in tarballs') From 37eb6c351cd46af6b5827a4f6cd58dbe493067ca Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 3 Sep 2021 19:34:11 +0200 Subject: [PATCH 44/71] fix queue bug --- src/irc/core/irc.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index e712c9bf..51b55a2b 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -51,6 +51,7 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_whe { GString *str; int len; + guint pos; gboolean server_supports_tag; g_return_if_fail(server != NULL); @@ -64,10 +65,16 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_whe if (server->cmdcount == 0) irc_servers_start_cmd_timeout(); - if (server->cmdlater > server->cmdcount) - server->cmdlater = server->cmdcount; server->cmdcount++; + pos = g_slist_length(server->cmdqueue); + if (server->cmdlater > pos / 2) { + server->cmdlater = pos / 2; + pos = 0; + } else { + pos -= 2 * server->cmdlater; + } + if (!raw) { const char *tmp = cmd; @@ -126,12 +133,6 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_whe server->cmdqueue = g_slist_prepend(server->cmdqueue, server->redirect_next); server->cmdqueue = g_slist_prepend(server->cmdqueue, g_string_free(str, FALSE)); } else if (irc_send_when == IRC_SEND_NORMAL) { - guint pos = g_slist_length(server->cmdqueue); - if (pos > 2 * server->cmdlater) - pos -= 2 * server->cmdlater; - else - pos = 0; - server->cmdqueue = g_slist_insert(server->cmdqueue, server->redirect_next, pos); server->cmdqueue = g_slist_insert(server->cmdqueue, g_string_free(str, FALSE), pos); } else if (irc_send_when == IRC_SEND_LATER) { From 9e128901104afb61ca29926e4421aadda031f38d Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Fri, 13 Aug 2021 18:32:49 +0200 Subject: [PATCH 45/71] add a "server outgoing modify" signal to intercept outgoing messages --- docs/signals.txt | 1 + src/irc/core/irc-servers.c | 24 ++++++++++++++---------- src/irc/core/irc.c | 21 +++++++++++++-------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/docs/signals.txt b/docs/signals.txt index 4e5f85b4..6128084b 100644 --- a/docs/signals.txt +++ b/docs/signals.txt @@ -151,6 +151,7 @@ irc.c: "whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address "server incoming", SERVER_REC, char *data + "server outgoing modify", SERVER_REC, GString *data (for perl parser..) "redir ", SERVER_REC, char *args, char *sender_nick, char *sender_address diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 676e8cb9..1c9f0cec 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -734,9 +734,9 @@ static int server_cmd_timeout(IRC_SERVER_REC *server, gint64 now) { REDIRECT_REC *redirect; GSList *link; + GString *str; long usecs; char *cmd; - int len; if (!IS_IRC_SERVER(server)) return 0; @@ -759,16 +759,20 @@ static int server_cmd_timeout(IRC_SERVER_REC *server, gint64 now) redirect = server->cmdqueue->next->data; /* send command */ - len = strlen(cmd); - irc_server_send_data(server, cmd, len); + str = g_string_new(cmd); + signal_emit("server outgoing modify", 2, server, str); + if (str->len) { + irc_server_send_data(server, str->str, str->len); - /* add to rawlog without [CR+]LF */ - if (len > 2 && cmd[len-2] == '\r') - cmd[len-2] = '\0'; - else if (cmd[len-1] == '\n') - cmd[len-1] = '\0'; - rawlog_output(server->rawlog, cmd); - server_redirect_command(server, cmd, redirect); + /* add to rawlog without [CR+]LF */ + if (str->len > 2 && str->str[str->len - 2] == '\r') + str->str[str->len - 2] = '\0'; + else if (str->str[str->len - 1] == '\n') + str->str[str->len - 1] = '\0'; + rawlog_output(server->rawlog, str->str); + server_redirect_command(server, str->str, redirect); + } + g_string_free(str, TRUE); /* remove from queue */ server->cmdqueue = g_slist_remove(server->cmdqueue, cmd); diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index 51b55a2b..c17e2470 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -113,20 +113,25 @@ void irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int irc_send_whe g_string_append(str, cmd); } - if (irc_send_when == IRC_SEND_NOW) { - rawlog_output(server->rawlog, str->str); - server_redirect_command(server, str->str, server->redirect_next); - server->redirect_next = NULL; - } - if (!raw) { - /* Add CR+LF to command */ + /* Add CR+LF to command */ g_string_append_c(str, 13); g_string_append_c(str, 10); } if (irc_send_when == IRC_SEND_NOW) { - irc_server_send_data(server, str->str, str->len); + signal_emit("server outgoing modify", 2, server, str); + if (str->len) { + irc_server_send_data(server, str->str, str->len); + + /* add to rawlog without [CR+]LF */ + if (str->len > 2 && str->str[str->len - 2] == '\r') + str->str[str->len - 2] = '\0'; + else if (str->str[str->len - 1] == '\n') + str->str[str->len - 1] = '\0'; + rawlog_output(server->rawlog, str->str); + server_redirect_command(server, str->str, server->redirect_next); + } g_string_free(str, TRUE); } else if (irc_send_when == IRC_SEND_NEXT) { /* add to queue */ From 2cdcf86174b420091372edd295dc81cda8b46d8f Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Wed, 1 Sep 2021 23:37:11 +0200 Subject: [PATCH 46/71] branding --- .github/workflows/check.yml | 2 +- NEWS | 274 ++++++++++++++++++++++++++++++++++- README.md | 33 ++--- src/core/expandos.c | 2 +- src/fe-text/module-formats.c | 6 +- 5 files changed, 291 insertions(+), 26 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index aeaf6c27..61de72ff 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -118,5 +118,5 @@ jobs: echo load perl >> irssi-test/startup echo load proxy >> irssi-test/startup echo ^quit >> irssi-test/startup - irssi-build/bin/irssi --home irssi-test | ~/render.pl + irssi-build/bin/irssi --home irssi-test | perl -Mutf8 -C ~/render.pl cat irc.log.* diff --git a/NEWS b/NEWS index 1bdffd82..b3282761 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,274 @@ -v1.3-head 2021-xx-xx The Irssi team +v1.3.0-an 2021-09-05 Ailin Nemui + * /SET resolve_reverse_lookup setting was removed (#1135) + * Irssi will try to connect on IPv4 if IPv6 connection failed + (#1146). By Shivaram Lingamneni + * The display system now renders formats on the fly (#1079, + #1188, #1191, #1192, #1204, #1205, #1209, an#13, an#14, an#28, + an#29) + + This major change will break scripts that try to modify + printed text during "print text" signal (#1189). They need + to be ported to modify the text during "print format" + instead. It also breaks the usage of using /FORMAT to add + different colours to a line. Such usage needs to be ported + to using $expando variables instead. Affected scripts + include format_identify.pl, friends_peder.pl, nickcolor.pl, + nm.pl, people.pl + + The "gui print text finished" and "gui print text after + finished" signals gained a TEXT_DEST_REC *parameter in the + process. + + A new "gui render line text" signal is available to change + the rendering of a line + + * made the $Z expando (time) dynamic (#1087, #1207, #1208) + + This change breaks the usage of /SET timestamp_format to + supply a custom displayed time stamp. Affected scripts + include binary_time.pl + + * /HILIGHT -priority now affects which hilight rule gets + applied (#1228, #1232) + * The NAMES list is now hidden by default if there are more + than 18 users on the channel (an#7) + + To revert to the previous behaviour + + /SET show_names_on_join_limit -1 + + * -tls_verify is now enabled by default (#1170, an#18, #1309, + an#23) + + This may cause an ugly display of notls_verify in the output + of /SERVER LIST, even on plain-text connection, on old + configs. Kindly remove the "tls_verify = "no";" entries from + your config file manually. + + * Irssi will now attempt STARTTLS if advertised (#1170, #1312, + an#19) + + Use -disallow_starttls if you absolutely do not want this + + In order to check for a STARTTLS advertisement, Irssi will + now wait for a response (even an error) to CAP LS 302. If + your bouncer/server does not want to communicate before + receiving USER/PASS at all, use -nocap to disable the CAP + check. + + * Channel sync requests (WHO, MODE) are now sent "later" than + user commands. This should improve responsiveness to user + commands in the autojoin phase (an#26, an#32, an#33) + * Irssi is now using full paths in #include directives and + consequently does not add all directories to the include + path anymore (#1040) + * The Build System was ported to Meson (#1064, #1065, #1068, + #1071, #1072, #1073, #1074, #1075, #1084, #1085, #1118, #1166, + #1223, #1224, #1245, #1313, #1314, an#31) + * Scriptassist was changed to use a YAML database (#1163) + + It will tell you when you need to update your setting + + * /BIND shows all partial matches (#1155) + * Cleanup of unused functions (#1017, #1132, #1145, #1182, + #1246, #1264) + + Functions removed: + + NET_CALLBACK + NET_HOST_CALLBACK + RESOLVED_NAME_REC + net_gethostbyaddr_nonblock + net_connect_nonblock + [ SIMPLE_THREAD_REC, simple_init, simple_readpipe ] + hash_save_key + + Functions deprecated: + + dec2octal + g_timeval_cmp + get_timeval_diff + + Function names corrected: + + g_input -> i_input + g_istr -> i_istr + g_io_channel -> i_io_channel + g_hash_free_value -> i_hash_free_value + remove g_free_true + gslist -> i_slist + glog_func -> i_log_func + glist -> i_list + + If multi-version compatibility is desired, module authors + can find an example of backwards compatible code in + cdidier/irssi-xmpp#55 + + + Add MSGLEVEL_HIDDEN to Perl (#1044) + + Add $view->set_hidden_level and $view->remove_lines_by_level + to Perl (#1026) + + Add a /SET scrollback_max_age setting (#1022). By Heikki + Orsila + + Add /SET actlist_prefer_window_name (#1025) + + Add -window option to /CAT (#1023, #1159) + + Add an option to list specific sections with + + /SET -section lookandfeel + + (#1048) + + + Add support for IRCv3 CAP LS 302 (#1091) + + Add a new "print noformat" signal that goes together with + "print format" (#1088, #1192) + + Add support for IRCv3 extended-join. /SET show_extended_join + to enable (#1097, #1107, #1124) + + There are two new /FORMATs, join_extended and + join_extended_account, that theme writers need to take into + account if desired. + + + Add support for IRCv3 setname (#1093, #1104, #1254, GL#33, + #1104, #1254) + + Add support for IRCv3 account-notify (#1100, #1098, GL#33, + #1105, #1131). Credit to oss-fuzz + /SET show_account_notify to enable + + Add support for IRCv3 invite-notify (#1094) + + Add support for receiving IRCv3 message-tags (#576, #1090) + + Add support for sending IRCv3 message-tags (#1092) + + Add support for the oragono.io/maxline-2 CAP to increase IRC + protocol line length (#1092) + + Enable the znc.in/self-message CAP by default (#1123) + + Add support for IRCv3 away-notify. /SET away_notify_public + to enable (#1099, GL#33, #1105) + + Add support for IRCv3 chghost (#1096, GL#33, #1105) + + Add support for IRCv3 account-notify. + + Add support for IRCv3 server-time. /SET show_server_time to + enable (#1108) + + Add support for logging IRCv3 server-time. + /SET log_server_time to disable (#1318, an#16) + + Add IRCv3 features to signals.txt (#1111) + + In particular, "message join" now takes 2 additional + arguments, script and module authors must beware of this + change. + + + Show the unignore time in /IGNORE output (#1158, #1161) + + Add /SET quit_on_hup to make the behaviour of SIGHUP + configurable (#828, #1169). By Pinguin1234 + + Support numeric 489 as ERR_SECUREONLYCHAN (#1193, #1196). By + Michael Hansen + + Improve support for building Irssi in Termux-Android with + Meson (#1199) + + Add usermode key to Irssi::Irc::Chatnet in Perl (#1288). By + Jessica Sophie Porter + + Add format_string_expand and format_string_unexpand + functions to Perl (#1286) + + Add ...->format_create_dest(...)->printformat("format", + args...) and ...->printformat_module("module", "format", + args...) methods to Perl (#1284) + + You can avoid any CORE::GLOBAL::caller hacks using the + printformat_module method, especially sind that hack was not + safe during signal emissions + + + Add tracking of user accounts in the channel nicklist using + WHOX on join (#1250) + + Add auto-loading of the Perl and otr module from /SET + autoload_modules (#1295) + + Add /IGNORE ... NOHILIGHT to ignore some hilights (#1260) + + Do not beep on hidden lines with /SET beep_msg_level + ... -HIDDEN (#1259) + + Added /CS, /MS, /NS, and /OS aliases to the default config + (#1316). By Mathis Beer + + Allow -tls_ca{file,path} '' to unset an argument (#730, + #1060, an#30) + + Add a "server outgoing modify" signal to intercept outgoing + messages (#1148, #1151, an#15). Original by + JustAnotherArchivist + - remove some hard-coded 510 byte assumptions (#1086) + - Several fixes for error checks in SSL (#944, #1037, #943, + #1036). Reported by Chi Li + - Wrong variable tested in mask_match (#902, #1035) + - Fix bug where irssi-proxy with `?'-port would not reconnect + (#1041) + - Allow shrinking of /SET rawlog_lines (#957, #1020). By + Marcus "Teschi" Prinz + - Fix /WINDOW BALANCE warning (#1054) + - fix overflow when first command history entry expires + (#1070) + - begin modularising IRC module (#1067, #1112, #1113) + - fix some memory leaks in /DCC RESUME and settings_add + (#1077). By Zero King + - fix cut-off text with theme_indent module and /SET + indent_always OFF (#1078) + - fix the cap_queue order (#1095) + - add reference counted strings (#1089) + - Fix irc_op_public messages not triggering hilights (#354, + #891, #1129). By Dan Collins + - Fix /IGNORE not setting the right level in irc_op_public + messages (#1280). Credit to oss-fuzz + - Fix GTimeVal deprecation (#1141, #1144, #1145) + + If multi-version compatibility is desired, module authors + can find an example of backwards compatible code in + cdidier/irssi-xmpp#53 + + - Fix /IGNORE ... MODES NO_ACT not working (#1164) + - Deprecated -ssl* options are hidden from tab completion + (#1171) + - Make /SET actlist_sort a choice type (#1198) + - Fix crash from self-unloading script (#1206). By Thomas + Stagner + - Fix crash during Perl signal emission (#1233, #1234) + - Fix a case where empty lines or comments inside channels or + servers in the config would confuse Irssi (#1062, #1242, + #1243) + - Fix reported freezing in DCC GET on slow disks (#159, #1271) + - Fix message-tags parsing (#1274, #1275). Credit to oss-fuzz + - Fail redirects when receiving numeric 263 (RPL_TRYAGAIN) in + response to /WHO (#1283) + - Some updates to .gitignore (#1302). By Rene Kita + - Fix build on operating systems with X/Open Curses, version 2 + (#1305, #1308). By Nia Alarie (Regression introduced with + #1290, alternative fix for Irssi 1.2.3 no-term.h.patch) + - Fix otr module not using g_strndup, e.g. on Solaris 10 + (#1315). By Claes Nästén + - Fix cursor getting stuck for auto completions that changes + case (#1176, #1322, an#8). By ffrogman + - Restore operation of tag/* in /SET activity_hide_targets + (#1337, an#11) nb. the ::all syntax was working in Irssi 1.1 + and 1.2 (and continues to work) + - Fix /SERVER ADD -matrix -network my_matrix_network + (an#12). By Andrej Kacian + - Fix /SERVER ADD creating duplicated entries in the config + file (#1317, an#22) + - Fix critical when SASL user is set and SASL password is + empty (#1325, an#21) + - Misc fixes (#1106, #1141, #1272, #1297) + - Fuzz fixes (#1116, #1117, #1119, #1125, #1126, an#20) + - Build system fixes (#1101, #1102, #1069, #1140, #1181, #1253) + - Text and Help updates + - add -tls_* options to manual (#1029, #1030). By Jacob + V. Rasmussen + - missing targets in /MSG (#1032) + - wrong parameter in /ECHO (#1024) + - Spelling in OTR (#1047). By David Gall + - Clarify statusbar priority (#1049). By Marius Gedminas + - Document get_irssi_dir in Perl (#1051, #1052). By Alex + Shafer + - typo in /HILIGHT help (#1081). By DFrostByte + - improved clarity of your_nick_owned (#1138). By Mike Quin + - Update some URLs to https (#1163) + - Add documentation for escaping some characters (#1329, + #1330, an#9). By Guntbert Reiter + - Fix some typos (#1336, an#10). By Francis Mteo + - Infrastructure updates: + - Support for Github Actions (#1039, #1103, #1160, #1212, + #1231, #1252, #1261) + - Run clang-format on pull requests (#1172, #1173, #1184, + #1230, #1247, #1287) + - Run abidiff on pull requests (#1179, #1195) + - Test CI-Fuzz (#1279, #1304, an#17) v1.2.3 2021-04-11 The Irssi team - Fix the compilation of utf8proc (#1021) @@ -40,7 +310,7 @@ v1.2.3 2021-04-11 The Irssi team v1.2.2 2019-08-29 The Irssi team - Fix a use after free issue when receiving IRCv3 CAP - information from the server (GL#34) + information from the server (GL#34, GL!35) - Fix a crash during startup when windows weren't fully initialised yet (#1114, bdo#935813) diff --git a/README.md b/README.md index d1232764..21fa14e8 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ -# [Irssi](https://irssi.org/) +# Neırssi -![Build Status](https://github.com/irssi/irssi/workflows/Check%20Irssi/badge.svg?branch=master) +![Build Status](https://github.com/ailin-nemui/irssi/workflows/Check%20Irssi/badge.svg?branch=master) -Irssi is a modular chat client that is most commonly known for its -text mode user interface, but 80% of the code isn't text mode -specific. Irssi comes with IRC support built in, and there are -third party [ICB](https://github.com/jperkin/irssi-icb), +Neırssi is a modular text mode chat client mostly compatible with +[Irssi](https://irssi.org). It comes with IRC support built in, and +there are third party [ICB](https://github.com/jperkin/irssi-icb), [SILC](http://www.silcnet.org/), [XMPP](http://cybione.org/~irssi-xmpp/) (Jabber), [PSYC](http://about.psyc.eu/Irssyc) and @@ -14,14 +13,14 @@ available. ![irssi](https://user-images.githubusercontent.com/5665186/32180643-cf127f60-bd92-11e7-8aa2-882313ce1d8e.png) -## [Download information](https://irssi.org/download/) +## [Download information](https://ailin-nemui.github.io/irssi/Getting.html) #### Development source installation [Ninja](https://ninja-build.org/) 1.5 and [Meson](https://mesonbuild.com/) 0.49 ``` -git clone https://github.com/irssi/irssi +git clone https://github.com/ailin-nemui/irssi cd irssi meson Build ninja -C Build && sudo ninja -C Build install @@ -29,13 +28,13 @@ ninja -C Build && sudo ninja -C Build install #### Release source installation -* Download [release](https://github.com/irssi/irssi/releases) -* [Verify](https://irssi.org/download/#release-sources) signature +* Download [release](https://github.com/ailin-nemui/irssi/releases) +* Verify signature ``` tar xJf irssi-*.tar.xz cd irssi-* -./configure -make && sudo make install +meson Build +ninja -C Build && sudo ninja -C Build install ``` ### Requirements @@ -47,23 +46,23 @@ make && sudo make install #### See the [INSTALL](INSTALL) file for details -## [Documentation](https://irssi.org/documentation/) +## Documentation -* [Frequently Asked Questions](https://irssi.org/documentation/faq) -* [Startup How-To](https://irssi.org/documentation/startup) +* [New users guide](https://ailin-nemui.github.io/irssi/New-users.html) * Check the built-in `/HELP`, it has all the details on command syntax +* Other random Irssi documentation on https://irssi.org/documentation/ ## [Themes](https://irssi-import.github.io/themes/) ## [Scripts](https://scripts.irssi.org/) -## [Modules](https://irssi.org/modules/) +## [Modules](https://ailin-nemui.github.io/irssi/Modules.html) ## [Security information](https://irssi.org/security/) Please report security issues to staff@irssi.org. Thanks! -## [Bugs](https://github.com/irssi/irssi/issues) / Suggestions / [Contributing](https://irssi.org/development/) +## [Bugs](https://github.com/irssi/irssi/issues) / Suggestions / Contributing Check the GitHub issues if it is already listed in there; if not, open an issue on GitHub or send a mail to [staff@irssi.org](mailto:staff@irssi.org). diff --git a/src/core/expandos.c b/src/core/expandos.c index 0f317e51..da84b568 100644 --- a/src/core/expandos.c +++ b/src/core/expandos.c @@ -322,7 +322,7 @@ static char *expando_last_invite(SERVER_REC *server, void *item, int *free_ret) /* client version text string */ static char *expando_version(SERVER_REC *server, void *item, int *free_ret) { - return PACKAGE_VERSION; + return PACKAGE_VERSION "-an"; } /* current value of CMDCHARS */ diff --git a/src/fe-text/module-formats.c b/src/fe-text/module-formats.c index 7cdc5654..e9d4fab9 100644 --- a/src/fe-text/module-formats.c +++ b/src/fe-text/module-formats.c @@ -84,11 +84,7 @@ FORMAT_REC gui_text_formats[] = { NULL, "Welcome", 0 }, { "irssi_banner", - " ___ _%:" - "|_ _|_ _ _____(_)%:" - " | || '_(_-<_-< |%:" - "|___|_| /__/__/_|%:" - "Irssi v$J - https://irssi.org", 0 }, + "Neırssi v$J", 0 }, { "welcome_firsttime", "- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n" "Hi there! If this is your first time using Irssi, you%:" From 42f749346b375ccd5e46527a21ff2e7192273f5f Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Wed, 8 Sep 2021 13:03:03 +0200 Subject: [PATCH 47/71] Merge pull request #34 from ailin-nemui/no-maxline remove oragono.io/maxline-2 (cherry picked from commit 7e1401140412361b813accd99aa367658435c12f) --- NEWS | 4 +--- src/irc/core/irc-servers.c | 21 --------------------- src/irc/core/irc-servers.h | 1 - 3 files changed, 1 insertion(+), 25 deletions(-) diff --git a/NEWS b/NEWS index b3282761..8be7531e 100644 --- a/NEWS +++ b/NEWS @@ -134,9 +134,7 @@ v1.3.0-an 2021-09-05 Ailin Nemui /SET show_account_notify to enable + Add support for IRCv3 invite-notify (#1094) + Add support for receiving IRCv3 message-tags (#576, #1090) - + Add support for sending IRCv3 message-tags (#1092) - + Add support for the oragono.io/maxline-2 CAP to increase IRC - protocol line length (#1092) + + Add support for sending IRCv3 message-tags (#1092, an#34) + Enable the znc.in/self-message CAP by default (#1123) + Add support for IRCv3 away-notify. /SET away_notify_public to enable (#1099, GL#33, #1105) diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 1c9f0cec..664ca9a4 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -282,7 +282,6 @@ static void server_init_1(IRC_SERVER_REC *server) irc_cap_toggle(server, CAP_SASL, TRUE); } - irc_cap_toggle(server, CAP_MAXLINE, TRUE); irc_cap_toggle(server, CAP_MULTI_PREFIX, TRUE); irc_cap_toggle(server, CAP_EXTENDED_JOIN, TRUE); irc_cap_toggle(server, CAP_SETNAME, TRUE); @@ -647,24 +646,6 @@ static void sig_server_quit(IRC_SERVER_REC *server, const char *msg) g_free(recoded); } -static void cap_maxline(IRC_SERVER_REC *server) -{ - unsigned int maxline = 0; - gboolean parse_successful = FALSE; - const char *maxline_str; - - maxline_str = g_hash_table_lookup(server->cap_supported, CAP_MAXLINE); - if (maxline_str != NULL) { - parse_successful = parse_uint(maxline_str, NULL, 10, &maxline); - - } - - if (parse_successful && - maxline >= MAX_IRC_MESSAGE_LEN + 2 /* 2 bytes for CR+LF */) { - server->max_message_len = maxline - 2; - } -} - void irc_server_send_action(IRC_SERVER_REC *server, const char *target, const char *data) { char *recoded; @@ -1226,7 +1207,6 @@ void irc_servers_init(void) signal_add_first("server disconnected", (SIGNAL_FUNC) sig_disconnected); signal_add_last("server destroyed", (SIGNAL_FUNC) sig_destroyed); signal_add_last("server quit", (SIGNAL_FUNC) sig_server_quit); - signal_add("server cap ack " CAP_MAXLINE, (SIGNAL_FUNC) cap_maxline); signal_add("event 670", (SIGNAL_FUNC) event_starttls); signal_add("event 451", (SIGNAL_FUNC) event_registerfirst); signal_add("server cap end", (SIGNAL_FUNC) event_capend); @@ -1258,7 +1238,6 @@ void irc_servers_deinit(void) signal_remove("server disconnected", (SIGNAL_FUNC) sig_disconnected); signal_remove("server destroyed", (SIGNAL_FUNC) sig_destroyed); signal_remove("server quit", (SIGNAL_FUNC) sig_server_quit); - signal_remove("server cap ack " CAP_MAXLINE, (SIGNAL_FUNC) cap_maxline); signal_remove("event 670", (SIGNAL_FUNC) event_starttls); signal_remove("event 451", (SIGNAL_FUNC) event_registerfirst); signal_remove("server cap end", (SIGNAL_FUNC) event_capend); diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index 93fa02a4..903de773 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -15,7 +15,6 @@ #define MAX_IRC_USER_TAGS_LEN 4094 #define CAP_LS_VERSION "302" -#define CAP_MAXLINE "oragono.io/maxline-2" #define CAP_MESSAGE_TAGS "message-tags" #define CAP_SASL "sasl" #define CAP_MULTI_PREFIX "multi-prefix" From 0f3e95892de7e7a360336fcc9739e770916a9156 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Wed, 8 Sep 2021 13:03:14 +0200 Subject: [PATCH 48/71] Merge pull request #35 from ailin-nemui/fixes duplicate issue in NEWS (cherry picked from commit d3e105a3963cbc693ac316ae884b000902999828) --- NEWS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 8be7531e..ced7bcd5 100644 --- a/NEWS +++ b/NEWS @@ -127,8 +127,7 @@ v1.3.0-an 2021-09-05 Ailin Nemui join_extended_account, that theme writers need to take into account if desired. - + Add support for IRCv3 setname (#1093, #1104, #1254, GL#33, - #1104, #1254) + + Add support for IRCv3 setname (#1093, #1104, #1254, GL#33) + Add support for IRCv3 account-notify (#1100, #1098, GL#33, #1105, #1131). Credit to oss-fuzz /SET show_account_notify to enable From 8b49cd012dc4af4040eb4ef03939e80072d40a5f Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Wed, 15 Sep 2021 17:56:45 +0200 Subject: [PATCH 49/71] Merge pull request #36 from ailin-nemui/missing-hilights correctly store updated message levels e.g. from /hilight (cherry picked from commit ad8221835c90969a6ba87807b072ba9f4d63bd48) --- NEWS | 5 +++-- src/fe-text/textbuffer-formats.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index ced7bcd5..b7c62b93 100644 --- a/NEWS +++ b/NEWS @@ -2,9 +2,10 @@ v1.3.0-an 2021-09-05 Ailin Nemui * /SET resolve_reverse_lookup setting was removed (#1135) * Irssi will try to connect on IPv4 if IPv6 connection failed (#1146). By Shivaram Lingamneni + * The display system now renders formats on the fly (#1079, - #1188, #1191, #1192, #1204, #1205, #1209, an#13, an#14, an#28, - an#29) + #1188, #1191, #1192, #1204, #1205, #1209, #1349, an#13, + an#14, an#28, an#29, an#36) This major change will break scripts that try to modify printed text during "print text" signal (#1189). They need diff --git a/src/fe-text/textbuffer-formats.c b/src/fe-text/textbuffer-formats.c index 20abc0df..50d6250a 100644 --- a/src/fe-text/textbuffer-formats.c +++ b/src/fe-text/textbuffer-formats.c @@ -265,7 +265,7 @@ static void sig_gui_print_text_finished(WINDOW_REC *window, TEXT_DEST_REC *dest) info->meta = line_meta_create(dest->meta); - info->level |= MSGLEVEL_FORMAT; + info->level = dest->level | MSGLEVEL_FORMAT; /* the line will be inserted into the view with textbuffer_view_insert_line by gui-printtext.c:view_add_eol */ From 0932bbed7b1f51a00cfee231632e67ab9118da75 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Tue, 21 Sep 2021 22:35:30 +0200 Subject: [PATCH 50/71] Merge pull request #37 from ailin-nemui/int-min-reached fix pedantic error in MSGLEVEL enum (cherry picked from commit b0fdbb144d5c5723269b2571761b0a073a392454) --- src/core/levels.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/levels.h b/src/core/levels.h index 04893b34..7f1aa931 100644 --- a/src/core/levels.h +++ b/src/core/levels.h @@ -42,7 +42,7 @@ enum { MSGLEVEL_HIDDEN = 0x10000000, /* Hidden from view */ MSGLEVEL_RESERVED1 = 0x20000000, MSGLEVEL_RESERVED2 = 0x40000000, - MSGLEVEL_FORMAT = 0x80000000 /* Format data */ + MSGLEVEL_FORMAT = (int)0x80000000 /* Format data */ }; /* clang-format on */ From 117758fb9046a859ecfacaab7ab1a7a2e35377e6 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Wed, 22 Sep 2021 11:25:32 +0200 Subject: [PATCH 51/71] Merge pull request #40 from ailin-nemui/gh-actions update github actions ubuntu version to 18.04 and meson to <0.60.0 (cherry picked from commit db705278d2f766433d3c28f776241c4997efde70) --- .github/workflows/check.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 61de72ff..97cb3feb 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,7 +18,7 @@ jobs: steps: - name: prepare required software run: | - sudo apt install $apt_build_deps $apt_build_deps_autotools + sudo apt update && sudo apt install $apt_build_deps $apt_build_deps_autotools - uses: actions/checkout@main - name: make dist run: | @@ -38,18 +38,18 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-16.04, ubuntu-latest] + os: [ubuntu-18.04, ubuntu-latest] builder: [meson, configure] compiler: [clang, gcc] flags: [regular] include: - - os: ubuntu-16.04 + - os: ubuntu-18.04 builder: meson meson_ver: ==0.49.2 setuptools_ver: <51 - os: ubuntu-latest builder: meson - meson_ver: <0.59.0 + meson_ver: <0.60.0 - os: ubuntu-latest builder: meson flags: meson-latest FAILURE-OK @@ -64,7 +64,7 @@ jobs: meson_ver: ${{ matrix.meson_ver }} setuptools_ver: ${{ matrix.setuptools_ver }} run: | - sudo apt install $apt_build_deps $apt_build_deps_${{ matrix.builder }} + sudo apt update && sudo apt install $apt_build_deps $apt_build_deps_${{ matrix.builder }} eval "$get_pip_build_deps_${{ matrix.builder }}" curl -SLf https://github.com/irssi-import/actions-irssi/raw/master/check-irssi/render.pl -o ~/render.pl && chmod +x ~/render.pl - name: unpack archive From 0ba449d8be26b047eea3b0b7e4ecdcba906f03f8 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Wed, 22 Sep 2021 12:33:10 +0200 Subject: [PATCH 52/71] Merge pull request #39 from ailin-nemui/sync run syncdocs.sh and syncscripts.sh (cherry picked from commit 85a9dc146d803be344bf3806395ac294d6929c13) --- docs/faq.html | 4 +- docs/faq.txt | 6 +- docs/startup-HOWTO.html | 4 +- docs/startup-HOWTO.txt | 4 +- scripts/quitmsg.pl | 27 +++----- scripts/scriptassist.pl | 139 +++++++++++++++++++++++++--------------- 6 files changed, 104 insertions(+), 80 deletions(-) diff --git a/docs/faq.html b/docs/faq.html index 7c17f45d..50b404a0 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -2,7 +2,7 @@

Frequently Asked Questions

Q: Why doesn’t irssi display colors even when ircii etc. displays them?

-

A: They force ANSI colors even if terminal doesn’t support them. By default, irssi uses colors only if terminfo/termcap so says. The correct way to fix this would be to change your TERM environment to a value where colors work, like xterm-color or color_xterm (eg. TERM=xterm-color irssi). If this doesn’t help, then use the evil way of /SET term_force_colors ON.

+

A: They force ANSI colors even if terminal doesn’t support them. By default, irssi uses colors only if terminfo/termcap so says. The correct way to fix this would be to change your TERM environment to a value where colors work, like xterm-256color or color_xterm (eg. TERM=xterm-256color irssi). If this doesn’t help, then use the evil way of /SET term_force_colors ON.

Q: How do I easily write text to channel that starts with ‘/’ character?

@@ -54,7 +54,7 @@

Q: Will there be /DETACH-like feature?

-

A: tmux, screen and dtach can be used to do it just fine.

+

A: tmux, screen and dtach can be used to do it just fine.

Q: How do I run scripts automatically at startup?

diff --git a/docs/faq.txt b/docs/faq.txt index 0d0b5f46..0fcc156a 100644 --- a/docs/faq.txt +++ b/docs/faq.txt @@ -4,8 +4,8 @@ Q: Why doesn’t irssi display colors even when ircii etc. displays them? A: They force ANSI colors even if terminal doesn’t support them. By default, irssi uses colors only if terminfo/termcap so says. The correct way to fix this would be to change your TERM environment to a value where colors work, like - xterm-color or color_xterm (eg. TERM=xterm-color irssi). If this doesn’t help, - then use the evil way of /SET term_force_colors ON. + xterm-256color or color_xterm (eg. TERM=xterm-256color irssi). If this doesn’t + help, then use the evil way of /SET term_force_colors ON. Q: How do I easily write text to channel that starts with ‘/’ character? A: / /text @@ -119,6 +119,6 @@ A: Check [6]here [1] https://github.com/irssi-import/xirssi [2] https://tmux.github.io/ [3] https://www.gnu.org/software/screen/screen.html - [4] http://dtach.sf.net/ + [4] https://sourceforge.net/projects/dtach/ [5] https://dgl.cx/irssi/hack-whois-in-current-window.pl [6] https://irssi.org/assets/irssi.wav diff --git a/docs/startup-HOWTO.html b/docs/startup-HOWTO.html index b0c68f1f..696dea4d 100644 --- a/docs/startup-HOWTO.html +++ b/docs/startup-HOWTO.html @@ -226,7 +226,7 @@ Ctrl-P, Ctrl-N - Jump to previous / next window

And finally channels:

-
/CHANNEL ADD -auto -bots *!*user@host -botcmd "/^msg $0 op pass" #irssi efnet
+
/CHANNEL ADD -auto -bots *!*bot@host.org -botcmd "/^msg $0 op pass" #irssi efnet
 /CHANNEL ADD -auto #secret IRCnet password
 
@@ -395,7 +395,7 @@ Ctrl-X - set the next server in list active

/HELP bind tells pretty much everything there is to know about keyboard bindings. However, there’s the problem of how to bind some non-standard keys. They might differ a bit with each terminal, so you’ll need to find out what exactly the keypress produces. Easiest way to check that would be to see what it prints in cat. Here’s an example for pressing F1 key:

-
 [user@host] ~% cat
+
 [cras@hurina] ~% cat
  ^[OP
 
diff --git a/docs/startup-HOWTO.txt b/docs/startup-HOWTO.txt index bff33108..90d278de 100644 --- a/docs/startup-HOWTO.txt +++ b/docs/startup-HOWTO.txt @@ -218,7 +218,7 @@ IRC network, other servers are automatically connected in same network if the And finally channels: -/CHANNEL ADD -auto -bots *!*user@host -botcmd "/^msg $0 op pass" #irssi efnet +/CHANNEL ADD -auto -bots *!*bot@host.org -botcmd "/^msg $0 op pass" #irssi efnet /CHANNEL ADD -auto #secret IRCnet password -bots and -botcmd should be the only ones needing a bit of explaining. They’re @@ -442,7 +442,7 @@ They might differ a bit with each terminal, so you’ll need to find out what exactly the keypress produces. Easiest way to check that would be to see what it prints in cat. Here’s an example for pressing F1 key: - [user@host] ~% cat + [cras@hurina] ~% cat ^[OP So in irssi you would use /BIND ^[OP /ECHO F1 pressed. If you use multiple diff --git a/scripts/quitmsg.pl b/scripts/quitmsg.pl index e289468c..102d9aa5 100644 --- a/scripts/quitmsg.pl +++ b/scripts/quitmsg.pl @@ -6,36 +6,27 @@ use Irssi::Irc; use strict; use vars qw($VERSION %IRSSI); -$VERSION = "1.00"; +$VERSION = "1.01"; %IRSSI = ( authors => 'Timo Sirainen', name => 'quitmsg', description => 'Random quit messages', license => 'Public Domain', - changed => 'Sun Mar 10 23:18 EET 2002' + changed => 'Mon Jul 22 20:00 EET 2020' ); -my $quitfile = glob "~/.irssi/irssi.quit"; +my $quitfile = Irssi::get_irssi_dir() . "/irssi.quit"; sub cmd_quit { my ($data, $server, $channel) = @_; return if ($data ne ""); + + open (my $fh, "<", $quitfile) || return; + my @lines = <$fh>; - open (f, "<", $quitfile) || return; - my $lines = 0; while() { $lines++; }; - - my $line = int(rand($lines))+1; - - my $quitmsg; - seek(f, 0, 0); $. = 0; - while() { - next if ($. != $line); - - chomp; - $quitmsg = $_; - last; - } - close(f); + my $quitmsg = $lines[int(rand(@lines))]; + chomp($quitmsg); + close($fh); foreach my $server (Irssi::servers) { $server->command("/disconnect ".$server->{tag}." $quitmsg"); diff --git a/scripts/scriptassist.pl b/scripts/scriptassist.pl index 536ef33a..cf02d57e 100644 --- a/scripts/scriptassist.pl +++ b/scripts/scriptassist.pl @@ -5,7 +5,7 @@ use strict; -our $VERSION = '2003020807'; +our $VERSION = '2020042700'; our %IRSSI = ( authors => 'Stefan \'tommie\' Tomanek', contact => 'stefan@pico.ruhr.de', @@ -23,12 +23,15 @@ use Irssi 20020324; use CPAN::Meta::YAML; use LWP::UserAgent; use POSIX; +use version; # GnuPG is not always needed $have_gpg = 0; eval "use GnuPG qw(:algo :trust);"; $have_gpg = 1 if not ($@); +my $irssi_version = qv(Irssi::parse_special('v$J') =~ s/-.*//r); + sub show_help { my $help = "scriptassist $VERSION /scriptassist check @@ -39,15 +42,15 @@ sub show_help { Search the script database /scriptassist info Display information about -".#/scriptassist ratings -# Retrieve the average ratings of the the scripts -#/scriptassist top -# Retrieve the first top rated scripts -"/scriptassist new +/scriptassist ratings + Retrieve the average ratings of the the scripts +/scriptassist top + Retrieve the first top rated scripts +/scriptassist new Display the newest scripts -".#/scriptassist rate