From e4fd69e3d4ec2eb707a693ea69b8e14181249d0a Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 23 May 2021 19:12:10 +0100 Subject: [PATCH] Implement support for the IRCv3 SETNAME specification. (#2571) --- src/common/inbound.c | 1 + src/common/proto-irc.c | 5 +++++ src/common/userlist.c | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/common/inbound.c b/src/common/inbound.c index 71c60357..a7cf51a4 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -1724,6 +1724,7 @@ static const char * const supported_caps[] = { "userhost-in-names", "cap-notify", "chghost", + "setname", /* ZNC */ "znc.in/server-time-iso", diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index fa2d822b..e3f4a962 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -1157,6 +1157,11 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[], NULL, 0xff, tags_data); return; + case WORDL('S', 'E', 'T', 'N'): + inbound_user_info (sess, NULL, NULL, NULL, NULL, nick, STRIP_COLON(word, word_eol, 3), + NULL, 0xff, tags_data); + return; + case WORDL('I','N','V','I'): if (ignore_check (word[1], IG_INVI)) return; diff --git a/src/common/userlist.c b/src/common/userlist.c index 0f28a000..17719ff6 100644 --- a/src/common/userlist.c +++ b/src/common/userlist.c @@ -130,8 +130,11 @@ userlist_add_hostname (struct session *sess, char *nick, char *hostname, g_free (user->hostname); user->hostname = g_strdup (hostname); } - if (!user->realname && realname && *realname) + if (realname && *realname && g_strcmp0 (user->realname, realname) != 0) + { + g_free (user->realname); user->realname = g_strdup (realname); + } if (!user->servername && servername) user->servername = g_strdup (servername); if (!user->account && account && strcmp (account, "0") != 0)