From aa971baa15678c0d1e20af74c9cf82e2b46e8db4 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sun, 15 Jul 2012 09:53:36 +0200 Subject: [PATCH] irc: fix format of message "USER" (according to RFC 2812) (bug #36825) Old format was: USER username username address :real name New format is : USER username 0 * :real name And now spaces are automatically replaced by underscores in username (since no space is allowed here). --- ChangeLog | 3 ++- src/plugins/irc/irc-server.c | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c82278cf..310e93ca8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ WeeChat ChangeLog ================= Sébastien Helleu -v0.3.9-dev, 2012-07-14 +v0.3.9-dev, 2012-07-15 Version 0.3.9 (under dev!) @@ -34,6 +34,7 @@ Version 0.3.9 (under dev!) internal WeeChat charset) * guile: fix crash when unloading a script without pointer to interpreter * guile: fix path of guile include dirs in cmake build (patch #7790) +* irc: fix format of message "USER" (according to RFC 2812) (bug #36825) * irc: add bar item "buffer_modes", remove option irc.look.item_channel_modes (task #12022) * irc: fix parsing of user modes (ignore everything after first space) diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 1cf0cc56a..f6972142d 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -2793,6 +2793,7 @@ void irc_server_login (struct t_irc_server *server) { const char *password, *username, *realname, *capabilities; + char *username2; password = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_PASSWORD); username = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_USERNAME); @@ -2817,14 +2818,16 @@ irc_server_login (struct t_irc_server *server) irc_server_sendf (server, 0, NULL, "CAP LS"); } + username2 = (username && username[0]) ? + weechat_string_replace (username, " ", "_") : strdup ("weechat"); irc_server_sendf (server, 0, NULL, "NICK %s\n" - "USER %s %s %s :%s", + "USER %s 0 * :%s", server->nick, - (username && username[0]) ? username : "weechat", - (username && username[0]) ? username : "weechat", - server->current_address, - (realname && realname[0]) ? realname : ((username && username[0]) ? username : "weechat")); + (username2) ? username2 : "weechat", + (realname && realname[0]) ? realname : ((username2) ? username2 : "weechat")); + if (username2) + free (username2); if (server->hook_timer_connection) weechat_unhook (server->hook_timer_connection);