From dd167b4c8393677f465c03d66b438d519c43fb87 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 15 Apr 2022 13:43:22 -0500 Subject: python: Fix API break in hook_timer() Closes #2691 --- plugins/python/python.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/python/python.py b/plugins/python/python.py index 1adcde98..0420a4e2 100644 --- a/plugins/python/python.py +++ b/plugins/python/python.py @@ -284,7 +284,7 @@ def _on_server_attrs_hook(word, word_eol, attrs, userdata): @ffi.def_extern() def _on_timer_hook(userdata): hook = ffi.from_handle(userdata) - if hook.callback(hook.userdata) is True: + if hook.callback(hook.userdata) == True: return 1 hook.is_unload = True # Don't unhook -- cgit 1.4.1 From 13b6a40b9c3d1f2215ff87cdaff9e38a4020ee92 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sat, 16 Apr 2022 18:41:34 -0500 Subject: Change preferences sub-dialogs to be modal This solves the issue where the parent dialog is closed and then the child dialog is used. This is however only a partial fix: - Many other dialogs throughout the codebase do not currently have parent windows and need to be refactored. - Not all window managers respect modal so users can still trigger bugs. We can be more defensive against this but it requires more refactoring. Closes #2686 --- src/common/fe.h | 1 + src/fe-gtk/chanlist.c | 2 +- src/fe-gtk/dccgui.c | 2 +- src/fe-gtk/fe-gtk.c | 4 ++-- src/fe-gtk/gtkutil.c | 12 +++++++++++- src/fe-gtk/gtkutil.h | 2 +- src/fe-gtk/menu.c | 2 +- src/fe-gtk/plugingui.c | 2 +- src/fe-gtk/rawlog.c | 2 +- src/fe-gtk/setup.c | 18 +++++++++++------- src/fe-gtk/textgui.c | 4 ++-- src/fe-gtk/urlgrab.c | 2 +- 12 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/common/fe.h b/src/common/fe.h index 9da4e230..b8a6279e 100644 --- a/src/common/fe.h +++ b/src/common/fe.h @@ -141,6 +141,7 @@ void fe_get_int (char *prompt, int def, void *callback, void *ud); #define FRF_NOASKOVERWRITE 32 /* don't ask to overwrite existing files */ #define FRF_EXTENSIONS 64 /* specify file extensions to be displayed */ #define FRF_MIMETYPES 128 /* specify file mimetypes to be displayed */ +#define FRF_MODAL 256 /* dialog should be modal to parent */ void fe_get_file (const char *title, char *initial, void (*callback) (void *userdata, char *file), void *userdata, int flags); diff --git a/src/fe-gtk/chanlist.c b/src/fe-gtk/chanlist.c index aeddc417..abf62843 100644 --- a/src/fe-gtk/chanlist.c +++ b/src/fe-gtk/chanlist.c @@ -512,7 +512,7 @@ chanlist_save (GtkWidget * wid, server *serv) GtkTreeModel *model = GET_MODEL (serv); if (gtk_tree_model_get_iter_first (model, &iter)) - gtkutil_file_req (_("Select an output filename"), chanlist_filereq_done, + gtkutil_file_req (NULL, _("Select an output filename"), chanlist_filereq_done, serv, NULL, NULL, FRF_WRITE); } diff --git a/src/fe-gtk/dccgui.c b/src/fe-gtk/dccgui.c index 5b8dbac9..728698e3 100644 --- a/src/fe-gtk/dccgui.c +++ b/src/fe-gtk/dccgui.c @@ -146,7 +146,7 @@ fe_dcc_send_filereq (struct session *sess, char *nick, int maxcps, int passive) mdc->maxcps = maxcps; mdc->passive = passive; - gtkutil_file_req (tbuf, dcc_send_filereq_file, mdc, prefs.hex_dcc_dir, NULL, FRF_MULTIPLE|FRF_FILTERISINITIAL); + gtkutil_file_req (NULL, tbuf, dcc_send_filereq_file, mdc, prefs.hex_dcc_dir, NULL, FRF_MULTIPLE|FRF_FILTERISINITIAL); g_free (tbuf); } diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index 7eca0710..38e6172d 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -903,7 +903,7 @@ fe_confirm (const char *message, void (*yesproc)(void *), void (*noproc)(void *) if (dcc->file) { char *filepath = g_build_filename (prefs.hex_dcc_dir, dcc->file, NULL); - gtkutil_file_req (message, dcc_saveas_cb, ud, filepath, NULL, + gtkutil_file_req (NULL, message, dcc_saveas_cb, ud, filepath, NULL, FRF_WRITE|FRF_NOASKOVERWRITE|FRF_FILTERISINITIAL); g_free (filepath); } @@ -1216,7 +1216,7 @@ fe_get_file (const char *title, char *initial, { /* OK: Call callback once per file, then once more with file=NULL. */ /* CANCEL: Call callback once with file=NULL. */ - gtkutil_file_req (title, callback, userdata, initial, NULL, flags | FRF_FILTERISINITIAL); + gtkutil_file_req (NULL, title, callback, userdata, initial, NULL, flags | FRF_FILTERISINITIAL); } void diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 674ad4fc..98a971f9 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -190,7 +190,7 @@ gtkutil_file_req_response (GtkWidget *dialog, gint res, struct file_req *freq) } void -gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions, +gtkutil_file_req (GtkWindow *parent, const char *title, void *callback, void *userdata, char *filter, char *extensions, int flags) { struct file_req *freq; @@ -269,6 +269,16 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte G_CALLBACK (gtkutil_file_req_response), freq); g_signal_connect (G_OBJECT (dialog), "destroy", G_CALLBACK (gtkutil_file_req_destroy), (gpointer) freq); + + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + + if (flags & FRF_MODAL) + { + g_assert (parent); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + } + gtk_widget_show (dialog); } diff --git a/src/fe-gtk/gtkutil.h b/src/fe-gtk/gtkutil.h index 0aa36439..c6e380e9 100644 --- a/src/fe-gtk/gtkutil.h +++ b/src/fe-gtk/gtkutil.h @@ -25,7 +25,7 @@ typedef void (*filereqcallback) (void *, char *file); -void gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions, int flags); +void gtkutil_file_req (GtkWindow *parent, const char *title, void *callback, void *userdata, char *filter, char *extensions, int flags); void gtkutil_destroy (GtkWidget * igad, GtkWidget * dgad); void gtkutil_destroy_on_esc (GtkWidget *win); GtkWidget *gtkutil_button (GtkWidget *box, char *stock, char *tip, void *callback, diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 233715e5..76bc3906 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -1362,7 +1362,7 @@ savebuffer_req_done (session *sess, char *file) static void menu_savebuffer (GtkWidget * wid, gpointer none) { - gtkutil_file_req (_("Select an output filename"), savebuffer_req_done, + gtkutil_file_req (NULL, _("Select an output filename"), savebuffer_req_done, current_sess, NULL, NULL, FRF_WRITE); } diff --git a/src/fe-gtk/plugingui.c b/src/fe-gtk/plugingui.c index 83bb745f..c40ac304 100644 --- a/src/fe-gtk/plugingui.c +++ b/src/fe-gtk/plugingui.c @@ -161,7 +161,7 @@ plugingui_load (void) { char *sub_dir = g_build_filename (get_xdir(), "addons", NULL); - gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb, current_sess, + gtkutil_file_req (NULL, _("Select a Plugin or Script to load"), plugingui_load_cb, current_sess, sub_dir, "*."PLUGIN_SUFFIX";*.lua;*.pl;*.py;*.tcl;*.js", FRF_FILTERISINITIAL|FRF_EXTENSIONS); g_free (sub_dir); diff --git a/src/fe-gtk/rawlog.c b/src/fe-gtk/rawlog.c index 52a77267..666059c6 100644 --- a/src/fe-gtk/rawlog.c +++ b/src/fe-gtk/rawlog.c @@ -77,7 +77,7 @@ rawlog_clearbutton (GtkWidget * wid, server *serv) static int rawlog_savebutton (GtkWidget * wid, server *serv) { - gtkutil_file_req (_("Save As..."), rawlog_save, serv, NULL, NULL, FRF_WRITE); + gtkutil_file_req (NULL, _("Save As..."), rawlog_save, serv, NULL, NULL, FRF_WRITE); return FALSE; } diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c index a7e3a15c..2f0589bd 100644 --- a/src/fe-gtk/setup.c +++ b/src/fe-gtk/setup.c @@ -48,6 +48,7 @@ GtkStyle *create_input_style (GtkStyle *); #define LABEL_INDENT 12 +static GtkWidget *setup_window = NULL; static int last_selected_page = 0; static int last_selected_row = 0; /* sound row */ static gboolean color_change; @@ -1105,8 +1106,8 @@ setup_browsefile_cb (GtkWidget *button, GtkWidget *entry) filter = "image/*"; filter_type = FRF_MIMETYPES; #endif - gtkutil_file_req (_("Select an Image File"), setup_filereq_cb, - entry, NULL, filter, filter_type|FRF_RECENTLYUSED); + gtkutil_file_req (GTK_WINDOW (setup_window), _("Select an Image File"), setup_filereq_cb, + entry, NULL, filter, filter_type|FRF_RECENTLYUSED|FRF_MODAL); } static void @@ -1141,7 +1142,7 @@ setup_fontsel_cancel (GtkWidget *button, GtkFontSelectionDialog *dialog) static void setup_browsefolder_cb (GtkWidget *button, GtkEntry *entry) { - gtkutil_file_req (_("Select Download Folder"), setup_filereq_cb, entry, (char*)gtk_entry_get_text (entry), NULL, FRF_CHOOSEFOLDER); + gtkutil_file_req (GTK_WINDOW (setup_window), _("Select Download Folder"), setup_filereq_cb, entry, (char*)gtk_entry_get_text (entry), NULL, FRF_CHOOSEFOLDER|FRF_MODAL); } static void @@ -1154,6 +1155,9 @@ setup_browsefont_cb (GtkWidget *button, GtkWidget *entry) dialog = (GtkFontSelectionDialog *) gtk_font_selection_dialog_new (_("Select font")); font_dialog = (GtkWidget *)dialog; /* global var */ + gtk_window_set_transient_for (GTK_WINDOW (font_dialog), GTK_WINDOW (setup_window)); + gtk_window_set_modal (GTK_WINDOW (font_dialog), TRUE); + sel = (GtkFontSelection *) gtk_font_selection_dialog_get_font_selection (dialog); if (gtk_entry_get_text (GTK_ENTRY (entry))[0]) @@ -1457,6 +1461,8 @@ setup_color_cb (GtkWidget *button, gpointer userdata) g_object_set_data (G_OBJECT (ok_button), "b", button); gtk_widget_set_sensitive (help_button, FALSE); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (gtk_color_selection_dialog_get_color_selection (cdialog)), color); + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (setup_window)); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_widget_show (dialog); g_object_unref (cancel_button); @@ -1711,8 +1717,8 @@ setup_snd_browse_cb (GtkWidget *button, GtkEntry *entry) filter_type = FRF_MIMETYPES; #endif - gtkutil_file_req (_("Select a sound file"), setup_snd_filereq_cb, entry, - sounds_dir, filter, FRF_FILTERISINITIAL|filter_type); + gtkutil_file_req (GTK_WINDOW (setup_window), _("Select a sound file"), setup_snd_filereq_cb, entry, + sounds_dir, filter, FRF_MODAL|FRF_FILTERISINITIAL|filter_type); g_free (sounds_dir); } @@ -2336,8 +2342,6 @@ setup_close_cb (GtkWidget *win, GtkWidget **swin) void setup_open (void) { - static GtkWidget *setup_window = NULL; - if (setup_window) { gtk_window_present (GTK_WINDOW (setup_window)); diff --git a/src/fe-gtk/textgui.c b/src/fe-gtk/textgui.c index b0f2f392..b5eaf893 100644 --- a/src/fe-gtk/textgui.c +++ b/src/fe-gtk/textgui.c @@ -282,7 +282,7 @@ pevent_save_cb (GtkWidget * wid, void *data) { if (data) { - gtkutil_file_req (_("Print Texts File"), pevent_save_req_cb, NULL, + gtkutil_file_req (NULL, _("Print Texts File"), pevent_save_req_cb, NULL, NULL, NULL, FRF_WRITE); return; } @@ -304,7 +304,7 @@ pevent_load_req_cb (void *arg1, char *file) static void pevent_load_cb (GtkWidget * wid, void *data) { - gtkutil_file_req (_("Print Texts File"), pevent_load_req_cb, NULL, NULL, NULL, 0); + gtkutil_file_req (NULL, _("Print Texts File"), pevent_load_req_cb, NULL, NULL, NULL, 0); } static void diff --git a/src/fe-gtk/urlgrab.c b/src/fe-gtk/urlgrab.c index fd8d8d91..fc2f4b5a 100644 --- a/src/fe-gtk/urlgrab.c +++ b/src/fe-gtk/urlgrab.c @@ -145,7 +145,7 @@ url_save_callback (void *arg1, char *file) static void url_button_save (void) { - gtkutil_file_req (_("Select an output filename"), + gtkutil_file_req (NULL, _("Select an output filename"), url_save_callback, NULL, NULL, NULL, FRF_WRITE); } -- cgit 1.4.1 From 2dd7636134f31d1f6f931f6adb0c33b3b5c12a34 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Sat, 30 Apr 2022 16:47:04 -0500 Subject: appdata: Update appstream usage for desktop applications --- data/misc/io.github.Hexchat.Plugin.metainfo.xml.in | 2 +- data/misc/io.github.Hexchat.appdata.xml.in | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/data/misc/io.github.Hexchat.Plugin.metainfo.xml.in b/data/misc/io.github.Hexchat.Plugin.metainfo.xml.in index b4412ce2..b32a9191 100644 --- a/data/misc/io.github.Hexchat.Plugin.metainfo.xml.in +++ b/data/misc/io.github.Hexchat.Plugin.metainfo.xml.in @@ -1,7 +1,7 @@ io.github.Hexchat.Plugin.@NAME@ - io.github.Hexchat.desktop + io.github.Hexchat @NAME@ Plugin @SUMMARY@ https://hexchat.github.io/ diff --git a/data/misc/io.github.Hexchat.appdata.xml.in b/data/misc/io.github.Hexchat.appdata.xml.in index 9ee4343b..d75cc1cc 100644 --- a/data/misc/io.github.Hexchat.appdata.xml.in +++ b/data/misc/io.github.Hexchat.appdata.xml.in @@ -1,7 +1,8 @@ - - io.github.Hexchat.desktop + + io.github.Hexchat HexChat + io.github.Hexchat.desktop HexChat CC0-1.0 GPL-2.0+ -- cgit 1.4.1 From 6da8f97e37f1eb57c1dcb9fc094f386385dae22b Mon Sep 17 00:00:00 2001 From: DjLegolas Date: Sat, 7 May 2022 19:16:11 +0300 Subject: fix addons load in python2 --- plugins/python/python.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/python/python.py b/plugins/python/python.py index 0420a4e2..7a794784 100644 --- a/plugins/python/python.py +++ b/plugins/python/python.py @@ -146,8 +146,8 @@ class Plugin: def loadfile(self, filename): try: self.filename = filename - with open(filename, encoding='utf-8') as f: - data = f.read() + with open(filename, 'rb') as f: + data = f.read().decode('utf-8') compiled = compile_file(data, filename) exec(compiled, self.globals) -- cgit 1.4.1 From 2638c884797b82054116166523ed35c0e303aaa7 Mon Sep 17 00:00:00 2001 From: DjLegolas Date: Sun, 12 Apr 2020 00:01:46 +0300 Subject: update python3 from 3.6 to 3.8.10 Signed-off-by: DjLegolas --- .github/workflows/windows-build.yml | 6 +++--- win32/hexchat.props | 4 ++-- win32/installer/hexchat.iss.tt | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index f1eddbbd..4554f2a9 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -41,11 +41,11 @@ jobs: & 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }} New-Item -Path "c:\gtk-build" -Name "python-2.7" -ItemType "Directory" - New-Item -Path "c:\gtk-build" -Name "python-3.6" -ItemType "Directory" + New-Item -Path "c:\gtk-build" -Name "python-3.8" -ItemType "Directory" New-Item -Path "c:\gtk-build\python-2.7" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}" - New-Item -Path "c:\gtk-build\python-3.6" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/3.6.8/${{ matrix.arch }}" + New-Item -Path "c:\gtk-build\python-3.8" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/3.8.10/${{ matrix.arch }}" - C:/hostedtoolcache/windows/Python/3.6.8/${{ matrix.arch }}/python.exe -m pip install cffi + C:/hostedtoolcache/windows/Python/3.8.10/${{ matrix.arch }}/python.exe -m pip install cffi C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}/python.exe -m pip install -qq cffi shell: powershell diff --git a/win32/hexchat.props b/win32/hexchat.props index 038873b1..5d81b2dc 100644 --- a/win32/hexchat.props +++ b/win32/hexchat.props @@ -8,7 +8,7 @@ c:\gtk-build\gendef c:\gtk-build\perl-5.20 c:\gtk-build\python-2.7 - c:\gtk-build\python-3.6 + c:\gtk-build\python-3.8 c:\gtk-build\WinSparkle @@ -26,7 +26,7 @@ python27 hcpython2 $(YourPython3Path)\$(PlatformName) - python36 + python38 hcpython3 $(DepsRoot)\include\luajit-2.1 hclua diff --git a/win32/installer/hexchat.iss.tt b/win32/installer/hexchat.iss.tt index 1671988d..74f86e78 100644 --- a/win32/installer/hexchat.iss.tt +++ b/win32/installer/hexchat.iss.tt @@ -74,7 +74,7 @@ Name: "langs\lua"; Description: "Lua"; Types: normal custom; Flags: disablenouni Name: "langs\perl"; Description: "Perl (requires Perl 5.20)"; Types: custom; Flags: disablenouninstallwarning Name: "langs\python"; Description: "Python Interface"; Types: custom; Flags: disablenouninstallwarning Name: "langs\python\python2"; Description: "Python (requires Python 2.7)"; Types: custom; Flags: disablenouninstallwarning exclusive -Name: "langs\python\python3"; Description: "Python (requires Python 3.6)"; Types: custom; Flags: disablenouninstallwarning exclusive +Name: "langs\python\python3"; Description: "Python (requires Python 3.8)"; Types: custom; Flags: disablenouninstallwarning exclusive [Tasks] Name: portable; Description: "Yes"; GroupDescription: "Portable Mode: Stores configuration files within install directory for portable drives."; Flags: unchecked @@ -298,14 +298,14 @@ begin REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x64.exe'; REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x64.exe'; PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x64.msi'; - PY2 := 'https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi'; - PY3 := 'https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe'; + PY2 := 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi'; + PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe'; #else REDIST := 'https://dl.hexchat.net/misc/vcredist_2015_x86.exe'; REDIST_2013 := 'https://dl.hexchat.net/misc/vcredist_2013_x86.exe'; PERL := 'https://dl.hexchat.net/misc/perl/Perl%205.20.0%20x86.msi'; - PY2 := 'https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi'; - PY3 := 'https://www.python.org/ftp/python/3.6.4/python-3.6.4.exe'; + PY2 := 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi'; + PY3 := 'https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe'; #endif DOTNET := 'https://dl.hexchat.net/misc/dotnet_40.exe'; SPELL := 'https://dl.hexchat.net/hexchat/HexChat%20Spelling%20Dictionaries%20r2.exe'; @@ -332,7 +332,7 @@ begin if IsComponentSelected('langs\python\python2') and not CheckDLL('python27.dll') then idpAddFile(PY2, ExpandConstant('{tmp}\python.msi')); - if IsComponentSelected('langs\python\python3') and not CheckDLL('python36.dll') then + if IsComponentSelected('langs\python\python3') and not CheckDLL('python38.dll') then idpAddFile(PY3, ExpandConstant('{tmp}\python.exe')); end; end; -- cgit 1.4.1 From 778047bc65e529804c3342ee0f3a8d5d7550fde5 Mon Sep 17 00:00:00 2001 From: Ashpool Date: Tue, 10 May 2022 03:44:35 +0200 Subject: raise the max length of a server password to 1024 - alleviate #1296 --- src/common/hexchat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/hexchat.h b/src/common/hexchat.h index 43a5f43a..470dd4ad 100644 --- a/src/common/hexchat.h +++ b/src/common/hexchat.h @@ -501,7 +501,7 @@ typedef struct server int joindelay_tag; /* waiting before we send JOIN */ char hostname[128]; /* real ip number */ char servername[128]; /* what the server says is its name */ - char password[86]; + char password[1024]; char nick[NICKLEN]; char linebuf[8704]; /* RFC says 512 chars including \r\n, IRCv3 message tags add 8191, plus the NUL byte */ char *last_away_reason; -- cgit 1.4.1 From b8645bfbf21a5f3e4583d7fc97c418585a48624a Mon Sep 17 00:00:00 2001 From: Artem Zhurikhin Date: Fri, 13 May 2022 22:56:26 +0200 Subject: Split long SASL auth strings into 400-byte chunks (#2709) Fixes #2705 --- src/common/inbound.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/common/inbound.c b/src/common/inbound.c index 3c505a57..ddd6ee9a 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1929,7 +1929,24 @@ inbound_sasl_authenticate (server *serv, char *data) return; } - tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass); + /* long SASL passwords must be split into 400-byte chunks + https://ircv3.net/specs/extensions/sasl-3.1#the-authenticate-command */ + size_t pass_len = strlen (pass); + if (pass_len <= 400) + tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass); + else + { + size_t sent = 0; + while (sent < pass_len) + { + char *pass_chunk = g_strndup (pass + sent, 400); + tcp_sendf (serv, "AUTHENTICATE %s\r\n", pass_chunk); + sent += 400; + g_free (pass_chunk); + } + } + if (pass_len % 400 == 0) + tcp_sendf (serv, "AUTHENTICATE +\r\n"); g_free (pass); -- cgit 1.4.1 From dfda8f2eeec840bbe5e44b9d7563283ecb10bf10 Mon Sep 17 00:00:00 2001 From: DjLegolas Date: Sat, 14 May 2022 11:20:10 +0300 Subject: fix sysinfo print of cpu name the cpu name might have tailing spaces in Windows, which weren't remove before printing. --- src/common/sysinfo/win32/backend.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/sysinfo/win32/backend.c b/src/common/sysinfo/win32/backend.c index 67a0fd2b..e2ae83ed 100644 --- a/src/common/sysinfo/win32/backend.c +++ b/src/common/sysinfo/win32/backend.c @@ -356,6 +356,8 @@ static char *read_cpu_info (IWbemClassObject *object) VariantClear (&max_clock_speed_variant); + g_strchomp (name_utf8); + if (cpu_freq_mhz > 1000) { result = g_strdup_printf ("%s (%.2fGHz)", name_utf8, cpu_freq_mhz / 1000.f); -- cgit 1.4.1 From ec9653e754f3db754cc24dc7beecae318af3a0fd Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Fri, 15 Jul 2022 13:17:00 -0500 Subject: servlist: Remove IRCHighWay They have self-signed certs which doesn't belong in our default list. --- src/common/servlist.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/common/servlist.c b/src/common/servlist.c index 160cc9e0..b9b304f8 100644 --- a/src/common/servlist.c +++ b/src/common/servlist.c @@ -193,9 +193,6 @@ static const struct defaultserver def[] = {"IRC4Fun", 0, 0, 0, LOGIN_SASL, 0, TRUE}, {0, "irc.irc4fun.net"}, - {"IRCHighWay", 0, 0, 0, 0, 0, TRUE}, - {0, "irc.irchighway.net"}, - {"IRCNet", 0}, {0, "open.ircnet.net"}, -- cgit 1.4.1 From d7c6c424e8c078d3e5a28c830ff3f6f62da8b39a Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 1 Aug 2022 14:07:31 -0500 Subject: servlist: Remove ACN They are no longer supporting TLS and let their cert expire. Non-TLS networks do not belong in our default list. Closes #2722 --- src/common/servlist.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/common/servlist.c b/src/common/servlist.c index b9b304f8..771d7813 100644 --- a/src/common/servlist.c +++ b/src/common/servlist.c @@ -54,8 +54,6 @@ static const struct defaultserver def[] = /* Invalid hostname in cert */ {0, "irc.2600.net"}, - {"ACN", 0, 0, 0, LOGIN_SASL, 0, TRUE}, - {0, "global.acn.gr"}, {"AfterNET", 0, 0, 0, LOGIN_SASL, 0, TRUE}, {0, "irc.afternet.org"}, -- cgit 1.4.1 From 20c50fd7ef6e027c0e84a5dac48b95e229f36134 Mon Sep 17 00:00:00 2001 From: Adrian Date: Sun, 21 Aug 2022 20:46:21 +0200 Subject: notification_plugin_deinit: Set function signature to int(void *) Previously the function signature was inconsistent throughout src/fe-gtk/plugin-notification.{h,c}: One file had the signature int(void), while the other had int(void *). Since this type mismatch might lead to problems (especially with LTO) and the (possibly provided) function argument isn't used in the function's definition, this commit sets int(void *) as function signature for both the declaration and definition of the function. Fixes: https://github.com/hexchat/hexchat/issues/2726 --- src/fe-gtk/plugin-notification.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fe-gtk/plugin-notification.c b/src/fe-gtk/plugin-notification.c index 875b50f4..fc71d22b 100644 --- a/src/fe-gtk/plugin-notification.c +++ b/src/fe-gtk/plugin-notification.c @@ -246,7 +246,7 @@ notification_plugin_init (hexchat_plugin *plugin_handle, char **plugin_name, cha int -notification_plugin_deinit (void) +notification_plugin_deinit (void *unused_param) { notification_backend_deinit (); return 1; -- cgit 1.4.1 From 46c9df18639ff0ee343d4c8ad48e845795b6ac1c Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 28 Aug 2022 17:59:42 +0100 Subject: Fix various compiler warnings. fish.c: -Wincompatible-pointer-types fkeys.c: -Wmisleading-indentation proto-irc.c: -Wincompatible-pointer-types util.c: -Wdeprecated-declarations xtext.c: -Wmaybe-uninitialized --- plugins/fishlim/fish.c | 2 +- src/common/proto-irc.c | 2 +- src/common/util.c | 5 +++++ src/fe-gtk/fkeys.c | 2 +- src/fe-gtk/xtext.c | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/fishlim/fish.c b/plugins/fishlim/fish.c index 5a27e4cb..7fe7e287 100644 --- a/plugins/fishlim/fish.c +++ b/plugins/fishlim/fish.c @@ -91,7 +91,7 @@ static const signed char fish_unbase64[256] = { #include static OSSL_PROVIDER *legacy_provider; static OSSL_PROVIDER *default_provider; -static OSSL_LIB_CTX* *ossl_ctx; +static OSSL_LIB_CTX *ossl_ctx; #endif int fish_init(void) diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 32cc47f2..5b8e02c4 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -461,7 +461,7 @@ channel_date (session *sess, char *chan, char *timestr, } static int -trailing_index(const char *word_eol[]) +trailing_index(char *word_eol[]) { int param_index; for (param_index = 3; param_index < PDIWORDS; ++param_index) diff --git a/src/common/util.c b/src/common/util.c index fa0783d4..f06074fc 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1375,11 +1375,16 @@ str_sha256hash (char *string) int i; unsigned char hash[SHA256_DIGEST_LENGTH]; char buf[SHA256_DIGEST_LENGTH * 2 + 1]; /* 64 digit hash + '\0' */ + +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + SHA256 (string, strlen (string), hash); +#else SHA256_CTX sha256; SHA256_Init (&sha256); SHA256_Update (&sha256, string, strlen (string)); SHA256_Final (hash, &sha256); +#endif for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c index dc4b41bc..6dd16e35 100644 --- a/src/fe-gtk/fkeys.c +++ b/src/fe-gtk/fkeys.c @@ -894,7 +894,7 @@ key_save_kbs (void) #define STRIP_WHITESPACE \ while (buf[0] == ' ' || buf[0] == '\t') \ buf++; \ - len = strlen (buf); \ + len = strlen (buf); \ while (buf[len] == ' ' || buf[len] == '\t') \ { \ buf[len] = 0; \ diff --git a/src/fe-gtk/xtext.c b/src/fe-gtk/xtext.c index 6a0fccba..08a5110a 100644 --- a/src/fe-gtk/xtext.c +++ b/src/fe-gtk/xtext.c @@ -947,7 +947,7 @@ gtk_xtext_find_char (GtkXText * xtext, int x, int y, int *off, int *out_of_bound textentry *ent; int line; int subline; - int outofbounds; + int outofbounds = FALSE; /* Adjust y value for negative rounding, double to int */ if (y < 0) -- cgit 1.4.1 From bd4290a1a949e444eb1633644f88976e2025b2d8 Mon Sep 17 00:00:00 2001 From: Andreas Schärtl Date: Thu, 1 Sep 2022 18:22:29 +0200 Subject: Support whitespace between language codes So far, when configuring multiple spell check languages, Hexchat requires the user to separate multiple entries with commas and only commas. This patch allows users to also enter whitespace, e.g. de_DE, en_US as is common in many applications. --- src/fe-gtk/sexy-spell-entry.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fe-gtk/sexy-spell-entry.c b/src/fe-gtk/sexy-spell-entry.c index 04ff0f8a..a3042783 100644 --- a/src/fe-gtk/sexy-spell-entry.c +++ b/src/fe-gtk/sexy-spell-entry.c @@ -1255,7 +1255,7 @@ void sexy_spell_entry_activate_default_languages(SexySpellEntry *entry) { GSList *enchant_langs; - char *lang, *langs; + char *lang, **i, **langs; if (!have_enchant) return; @@ -1265,21 +1265,21 @@ sexy_spell_entry_activate_default_languages(SexySpellEntry *entry) enchant_langs = sexy_spell_entry_get_languages(entry); - langs = g_strdup (prefs.hex_text_spell_langs); + langs = g_strsplit_set (prefs.hex_text_spell_langs, ", \t", 0); - lang = strtok (langs, ","); - while (lang != NULL) + for (i = langs; *i; i++) { + lang = *i; + if (enchant_has_lang (lang, enchant_langs)) { sexy_spell_entry_activate_language_internal (entry, lang, NULL); } - lang = strtok (NULL, ","); } g_slist_foreach(enchant_langs, (GFunc) g_free, NULL); g_slist_free(enchant_langs); - g_free (langs); + g_strfreev (langs); /* If we don't have any languages activated, use "en" */ if (entry->priv->dict_list == NULL) -- cgit 1.4.1 From 2dbc6adbc23701653e5a32fad42390f461881d7e Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 28 Aug 2022 15:59:40 +0100 Subject: Fix PROTOCTL NAMESX and only send when not using `multi-prefix`. This capability is the equivalent of the old protoctl token. --- src/common/modes.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common/modes.c b/src/common/modes.c index 756f0858..d8fd75aa 100644 --- a/src/common/modes.c +++ b/src/common/modes.c @@ -918,8 +918,12 @@ inbound_005 (server * serv, char *word[], const message_tags_data *tags_data) server_set_encoding (serv, "UTF-8"); } else if (g_strcmp0 (tokname, "NAMESX") == 0) { - /* 12345678901234567 */ - tcp_send_len (serv, "PROTOCTL NAMESX\r\n", 17); + if (tokadding && !serv->have_namesx) + { + /* only use protoctl if the server doesn't have the equivalent cap */ + tcp_send_len (serv, "PROTOCTL NAMESX\r\n", 17); + serv->have_namesx = TRUE; + } } else if (g_strcmp0 (tokname, "WHOX") == 0) { serv->have_whox = tokadding; -- cgit 1.4.1 From 8fb0d2311fc249b6b4f6beae7ccd135f913f0e47 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sat, 24 Sep 2022 15:33:20 +0100 Subject: Default /SERVER and friends to use SSL when built with OpenSSL. Since commit 747a52aae8806a9072a23ea68212767f352ac431 users have to opt-out of using SSL when creating a new server. This commit makes it so /SERVER also uses SSL by default. In order to connect insecurely users must now use one of these methods: /SERVER -insecure irc.example.com /SERVER irc.example.com -6667 The `-ssl` flag and the `+port` syntax have been retained for compat reasons. --- src/common/outbound.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/common/outbound.c b/src/common/outbound.c index 6f0241be..5c4e01b0 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -3249,7 +3249,7 @@ cmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[]) int offset = 0; #ifdef USE_OPENSSL - int use_ssl = FALSE; + int use_ssl = TRUE; int use_ssl_noverify = FALSE; if (g_strcmp0 (word[2], "-ssl") == 0) { @@ -3261,6 +3261,11 @@ cmd_reconnect (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl = TRUE; use_ssl_noverify = TRUE; offset++; /* args move up by 1 word */ + } else if (g_strcmp0 (word[2], "-insecure") == 0) + { + use_ssl = FALSE; + use_ssl_noverify = FALSE; + offset++; /* args move up by 1 word */ } serv->use_ssl = use_ssl; serv->accept_invalid_cert = use_ssl_noverify; @@ -3450,8 +3455,10 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) char *pass = NULL; char *channel = NULL; char *key = NULL; - int use_ssl = FALSE; +#ifdef USE_OPENSSL + int use_ssl = TRUE; int use_ssl_noverify = FALSE; +#endif int is_url = TRUE; server *serv = sess->server; ircnet *net = NULL; @@ -3469,6 +3476,11 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl_noverify = TRUE; offset++; /* args move up by 1 word */ } + else if (g_strcmp0 (word[2], "-insecure") == 0) + { + use_ssl = FALSE; + offset++; /* args move up by 1 word */ + } #endif if (!parse_irc_url (word[2 + offset], &server_name, &port, &channel, &key, &use_ssl)) @@ -3509,6 +3521,13 @@ cmd_server (struct session *sess, char *tbuf, char *word[], char *word_eol[]) use_ssl = TRUE; #endif } + else if (port[0] == '-') + { + port++; +#ifdef USE_OPENSSL + use_ssl = FALSE; +#endif + } if (*pass) { @@ -3564,7 +3583,7 @@ cmd_servchan (struct session *sess, char *tbuf, char *word[], int offset = 0; #ifdef USE_OPENSSL - if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-ssl-noverify") == 0) + if (g_strcmp0 (word[2], "-ssl") == 0 || g_strcmp0 (word[2], "-ssl-noverify") == 0 || g_strcmp0 (word[2], "-insecure") == 0) offset++; #endif @@ -4098,14 +4117,14 @@ const struct commands xc_cmds[] = { {"SEND", cmd_send, 0, 0, 1, N_("SEND []")}, #ifdef USE_OPENSSL {"SERVCHAN", cmd_servchan, 0, 0, 1, - N_("SERVCHAN [-ssl|-ssl-noverify] , connects and joins a channel")}, + N_("SERVCHAN [-insecure|-ssl|-ssl-noverify] , connects and joins a channel")}, #else {"SERVCHAN", cmd_servchan, 0, 0, 1, N_("SERVCHAN , connects and joins a channel")}, #endif #ifdef USE_OPENSSL {"SERVER", cmd_server, 0, 0, 1, - N_("SERVER [-ssl|-ssl-noverify] [] [], connects to a server, the default port is 6667 for normal connections, and 6697 for ssl connections")}, + N_("SERVER [-insecure|-ssl|-ssl-noverify] [] [], connects to a server, the default port is 6667 for insecure connections, and 6697 for ssl connections")}, #else {"SERVER", cmd_server, 0, 0, 1, N_("SERVER [] [], connects to a server, the default port is 6667")}, -- cgit 1.4.1 From 8cf2aa55863cd34849426e95e2e3e9bccb18eba1 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 16 Oct 2022 11:18:44 +0100 Subject: Make it more clear that /SERVER and /SERVCHAN use SSL by default. --- src/common/outbound.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/outbound.c b/src/common/outbound.c index 5c4e01b0..b9f88196 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -4117,14 +4117,14 @@ const struct commands xc_cmds[] = { {"SEND", cmd_send, 0, 0, 1, N_("SEND []")}, #ifdef USE_OPENSSL {"SERVCHAN", cmd_servchan, 0, 0, 1, - N_("SERVCHAN [-insecure|-ssl|-ssl-noverify] , connects and joins a channel")}, + N_("SERVCHAN [-insecure|-ssl|-ssl-noverify] , connects and joins a channel using ssl unless otherwise specified")}, #else {"SERVCHAN", cmd_servchan, 0, 0, 1, N_("SERVCHAN , connects and joins a channel")}, #endif #ifdef USE_OPENSSL {"SERVER", cmd_server, 0, 0, 1, - N_("SERVER [-insecure|-ssl|-ssl-noverify] [] [], connects to a server, the default port is 6667 for insecure connections, and 6697 for ssl connections")}, + N_("SERVER [-insecure|-ssl|-ssl-noverify] [] [], connects to a server using ssl unless otherwise specified, the default port is 6697 for ssl connections and 6667 for insecure connections")}, #else {"SERVER", cmd_server, 0, 0, 1, N_("SERVER [] [], connects to a server, the default port is 6667")}, -- cgit 1.4.1 From 221283ba19ad118413a328994cd6b0f3ab76f186 Mon Sep 17 00:00:00 2001 From: DjLegolas Date: Sun, 8 May 2022 21:43:15 +0300 Subject: add shortcut options in setup will allow the user to control on which of the shortcuts to create: * start menu - will now show the relevant window * desktop * quick launch on uninstall, all will be removed on uninstall --- win32/installer/hexchat.iss.tt | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/win32/installer/hexchat.iss.tt b/win32/installer/hexchat.iss.tt index 74f86e78..b03e2212 100644 --- a/win32/installer/hexchat.iss.tt +++ b/win32/installer/hexchat.iss.tt @@ -25,7 +25,7 @@ DefaultDirName={pf64}\HexChat DefaultDirName={pf32}\HexChat #endif DefaultGroupName=HexChat -DisableProgramGroupPage=yes +AllowNoIcons=yes SolidCompression=yes Compression=lzma2/ultra64 SourceDir=..\rel @@ -60,6 +60,9 @@ Name: "custom"; Description: "Custom Installation"; Flags: iscustom Name: "libs"; Description: "HexChat"; Types: normal minimal custom; Flags: fixed Name: "xctext"; Description: "HexChat-Text"; Types: custom; Flags: disablenouninstallwarning Name: "xtm"; Description: "HexChat Theme Manager"; Types: normal custom; Flags: disablenouninstallwarning +Name: "icons"; Description: "Create Shortcuts"; Types: custom; Flags: disablenouninstallwarning +Name: "icons\desktopicon"; Description: "Create Desktop Shortcut"; Types: custom; Flags: disablenouninstallwarning +Name: "icons\quicklaunchicon"; Description: "Create Quick Launch Shortcut"; Types: custom; Flags: disablenouninstallwarning Name: "translations"; Description: "Translations"; Types: normal custom; Flags: disablenouninstallwarning Name: "spell"; Description: "Spelling Dictionaries"; Types: custom; Flags: disablenouninstallwarning Name: "plugins"; Description: "Plugins"; Types: custom; Flags: disablenouninstallwarning @@ -196,14 +199,16 @@ Source: "hexchat-text.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: Source: "thememan.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: xtm [Icons] -Name: "{group}\HexChat"; Filename: "{app}\hexchat.exe"; AppUserModelID: "HexChat.Desktop.Notify"; Tasks: not portable -Name: "{group}\HexChat Safe Mode"; Filename: "{app}\hexchat.exe"; Parameters: "--no-auto --no-plugins"; Tasks: not portable -Name: "{group}\HexChat ChangeLog"; Filename: "{app}\changelog.url"; IconFilename: "{sys}\shell32.dll"; IconIndex: 165; Tasks: not portable -Name: "{group}\HexChat ReadMe"; Filename: "{app}\readme.url"; IconFilename: "{sys}\shell32.dll"; IconIndex: 23; Tasks: not portable -Name: "{group}\HexChat Config Folder"; Filename: "%APPDATA%\HexChat\"; Tasks: not portable -Name: "{group}\HexChat-Text"; Filename: "{app}\hexchat-text.exe"; Components: xctext; Tasks: not portable -Name: "{group}\HexChat Theme Manager"; Filename: "{app}\thememan.exe"; Components: xtm; Tasks: not portable -Name: "{group}\Uninstall HexChat"; Filename: "{uninstallexe}"; Tasks: not portable +Name: "{group}\HexChat"; Filename: "{app}\hexchat.exe"; AppUserModelID: "HexChat.Desktop.Notify"; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat Safe Mode"; Filename: "{app}\hexchat.exe"; Parameters: "--no-auto --no-plugins"; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat ChangeLog"; Filename: "{app}\changelog.url"; IconFilename: "{sys}\shell32.dll"; IconIndex: 165; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat ReadMe"; Filename: "{app}\readme.url"; IconFilename: "{sys}\shell32.dll"; IconIndex: 23; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat Config Folder"; Filename: "%APPDATA%\HexChat\"; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat-Text"; Filename: "{app}\hexchat-text.exe"; Components: xctext; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\HexChat Theme Manager"; Filename: "{app}\thememan.exe"; Components: xtm; Tasks: not portable; Check: not WizardNoIcons +Name: "{group}\Uninstall HexChat"; Filename: "{uninstallexe}"; Tasks: not portable; Check: not WizardNoIcons +Name: "{commondesktop}\HexChat"; Filename: "{app}\hexchat.exe"; AppUserModelID: "HexChat.Desktop.Notify"; Components: icons\desktopicon; Tasks: not portable +Name: "{commonappdata}\Microsoft\Internet Explorer\Quick Launch\HexChat"; Filename: "{app}\hexchat.exe"; Components: icons\quicklaunchicon; Tasks: not portable [Messages] BeveledLabel= {#APPNAM} -- cgit 1.4.1 From 4ad7afe884ff1e3df70d4c0b137add9b973a6891 Mon Sep 17 00:00:00 2001 From: Patrick Date: Sat, 29 Oct 2022 15:44:21 -0500 Subject: ci: Add gtk-update-icon-cache to msys2 workflow --- .github/workflows/msys-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/msys-build.yml b/.github/workflows/msys-build.yml index b7779da6..580c6aef 100644 --- a/.github/workflows/msys-build.yml +++ b/.github/workflows/msys-build.yml @@ -19,6 +19,7 @@ jobs: mingw-w64-x86_64-python3-cffi mingw-w64-x86_64-meson mingw-w64-x86_64-gtk2 + mingw-w64-x86_64-gtk-update-icon-cache mingw-w64-x86_64-luajit mingw-w64-x86_64-desktop-file-utils -- cgit 1.4.1 From 9d175cc4594d6ccf12b463ab49ec158e9f06036c Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 18 Oct 2022 20:11:18 +0100 Subject: Also request the extended-monitor capability. This allows getting hostname/awaymsg/etc updates for monitored clients which will update the internal cache for that data. --- src/common/inbound.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/inbound.c b/src/common/inbound.c index ddd6ee9a..d4b5a32e 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1728,6 +1728,7 @@ static const char * const supported_caps[] = { "setname", "invite-notify", "account-tag", + "extended-monitor", /* ZNC */ "znc.in/server-time-iso", -- cgit 1.4.1 From bb7a03e9f68a775ca93dd6ad8ea61e4f1d2ba81b Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 2 Nov 2022 14:35:23 +0000 Subject: Fix updating the topic (user@host) of dialogs on CHGHOST. This is updated when a user receives a new message but would have not been updated when a user sent a CHGHOST. --- src/common/inbound.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common/inbound.c b/src/common/inbound.c index d4b5a32e..a591dc48 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1474,10 +1474,17 @@ inbound_user_info (session *sess, char *chan, char *user, char *host, for (list = sess_list; list; list = list->next) { sess = list->data; - if (sess->type == SESS_CHANNEL && sess->server == serv) + if (sess->server != serv) + continue; + + if (sess->type == SESS_CHANNEL) { userlist_add_hostname (sess, nick, uhost, realname, servname, account, away); } + else if (sess->type == SESS_DIALOG && uhost && !serv->p_cmp (sess->channel, nick)) + { + set_topic (sess, uhost, uhost); + } } } -- cgit 1.4.1