# # # patch "libpurple/protocols/msnp9/msn.c" # from [8a2a52639186e41cc15927c380d16fbf97aaa490] # to [bd5f30fcf5fc40abee97ce8f75d41ac953a577ed] # # patch "libpurple/protocols/msnp9/nexus.c" # from [70d0ba8752f9b33cda58265abab0c45ea76519eb] # to [448cdbc53485623d080dd54ad33f60147ba379ce] # # patch "libpurple/protocols/msnp9/notification.c" # from [dd690580185c00b68db4240fd22732b5e3770c36] # to [ee83db2707a80aea2a2bfa6453a4a5dba6b2117b] # # patch "libpurple/protocols/msnp9/session.h" # from [d5bec9bc0a92062231a3af894739157d9a8766c1] # to [dfa5899b4e3af635d628382342b68851745022d3] # # patch "libpurple/protocols/msnp9/user.c" # from [b166fe2436a48a3a6ddabeaa6491a1daba57b6c5] # to [92a67c2d9914c87de46146f76f97a1bd8fed8258] # ============================================================ --- libpurple/protocols/msnp9/msn.c 8a2a52639186e41cc15927c380d16fbf97aaa490 +++ libpurple/protocols/msnp9/msn.c bd5f30fcf5fc40abee97ce8f75d41ac953a577ed @@ -1920,7 +1920,7 @@ msn_got_photo(PurpleUtilFetchUrlData *ur purple_debug_warning("msn", "invalid connection. ignoring buddy photo info.\n"); g_free(stripped); g_free(url_buffer); - g_free(user_info); + purple_notify_user_info_destroy(user_info); g_free(info_data->name); g_free(info_data); g_free(photo_url_text); ============================================================ --- libpurple/protocols/msnp9/nexus.c 70d0ba8752f9b33cda58265abab0c45ea76519eb +++ libpurple/protocols/msnp9/nexus.c 448cdbc53485623d080dd54ad33f60147ba379ce @@ -338,7 +338,7 @@ login_connect_cb(gpointer data, PurpleSs g_strdup(purple_url_encode(purple_account_get_username(session->account))); password = - g_strndup(purple_url_encode(purple_connection_get_password(session->account->gc)), 16); + g_strdup(purple_url_encode(purple_connection_get_password(session->account->gc))); ctint = strtoul((char *)g_hash_table_lookup(nexus->challenge_data, "ct"), NULL, 10) + 200; ============================================================ --- libpurple/protocols/msnp9/notification.c dd690580185c00b68db4240fd22732b5e3770c36 +++ libpurple/protocols/msnp9/notification.c ee83db2707a80aea2a2bfa6453a4a5dba6b2117b @@ -235,6 +235,8 @@ usr_cmd(MsnCmdProc *cmdproc, MsnCommand /* OK */ const char *friendly = purple_url_decode(cmd->params[3]); + session->passport_info.verified = atoi(cmd->params[4]); + purple_connection_set_display_name(gc, friendly); msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN); @@ -780,14 +782,27 @@ rea_cmd(MsnCmdProc *cmdproc, MsnCommand static void rea_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { - /* TODO: This might be for us too */ - MsnSession *session; + PurpleAccount *account; PurpleConnection *gc; const char *friendly; + char *username; session = cmdproc->session; - gc = session->account->gc; + account = session->account; + username = g_strdup(purple_normalize(account, + purple_account_get_username(account))); + + /* Only set display name if our *own* friendly name changed! */ + if (strcmp(username, purple_normalize(account, cmd->params[2]))) + { + g_free(username); + return; + } + + g_free(username); + + gc = account->gc; friendly = purple_url_decode(cmd->params[3]); purple_connection_set_display_name(gc, friendly); ============================================================ --- libpurple/protocols/msnp9/session.h d5bec9bc0a92062231a3af894739157d9a8766c1 +++ libpurple/protocols/msnp9/session.h dfa5899b4e3af635d628382342b68851745022d3 @@ -114,7 +114,7 @@ struct _MsnSession char *file; char *client_ip; int client_port; - + int verified; } passport_info; }; ============================================================ --- libpurple/protocols/msnp9/user.c b166fe2436a48a3a6ddabeaa6491a1daba57b6c5 +++ libpurple/protocols/msnp9/user.c 92a67c2d9914c87de46146f76f97a1bd8fed8258 @@ -126,16 +126,23 @@ msn_user_set_friendly_name(MsnUser *user msn_user_set_friendly_name(MsnUser *user, const char *name) { MsnCmdProc *cmdproc; + MsnSession *session; + const char *encoded; g_return_if_fail(user != NULL); - if (user->friendly_name && strcmp(user->friendly_name, name)) { + encoded = purple_url_encode(name); + session = user->userlist->session; + + if (user->friendly_name && strcmp(user->friendly_name, name) + && (strlen(encoded) < 387) && session->passport_info.verified && + (user->list_op & MSN_LIST_FL_OP)) { /* copy the new name to the server list, but only when new */ /* should we check this more thoroughly? */ - cmdproc = user->userlist->session->notification->cmdproc; + cmdproc = session->notification->cmdproc; msn_cmdproc_send(cmdproc, "REA", "%s %s", user->passport, - purple_url_encode(name)); + encoded); } g_free(user->friendly_name);