summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2021-05-23 19:12:10 +0100
committerGitHub <noreply@github.com>2021-05-23 13:12:10 -0500
commite4fd69e3d4ec2eb707a693ea69b8e14181249d0a (patch)
tree8469ab29009e0e5314c4637ee88706184b78e20b
parentf0554b27df459b7794d990f9da72318e2e3d2620 (diff)
Implement support for the IRCv3 SETNAME specification. (#2571)
-rw-r--r--src/common/inbound.c1
-rw-r--r--src/common/proto-irc.c5
-rw-r--r--src/common/userlist.c5
3 files changed, 10 insertions, 1 deletions
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)