comparison libpurple/protocols/jabber/chat.c @ 28421:a335d1bab20e

jabber: Reject invalid chat nicks in /nick command. Fixes #10532.
author Paul Aurich <paul@darkrain42.org>
date Sat, 24 Oct 2009 00:59:12 +0000
parents 41992511531f
children 9ae3e70a327b
comparison
equal deleted inserted replaced
28420:eec2df4b9a2d 28421:a335d1bab20e
690 690
691 jabber_chat_change_topic(chat, topic); 691 jabber_chat_change_topic(chat, topic);
692 } 692 }
693 693
694 694
695 void jabber_chat_change_nick(JabberChat *chat, const char *nick) 695 gboolean jabber_chat_change_nick(JabberChat *chat, const char *nick)
696 { 696 {
697 xmlnode *presence; 697 xmlnode *presence;
698 char *full_jid; 698 char *full_jid;
699 PurplePresence *gpresence; 699 PurpleAccount *account;
700 PurpleStatus *status; 700 PurpleStatus *status;
701 JabberBuddyState state; 701 JabberBuddyState state;
702 char *msg; 702 char *msg;
703 int priority; 703 int priority;
704 704
705 if(!chat->muc) { 705 if(!chat->muc) {
706 purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), "", 706 purple_conv_chat_write(PURPLE_CONV_CHAT(chat->conv), "",
707 _("Nick changing not supported in non-MUC chatrooms"), 707 _("Nick changing not supported in non-MUC chatrooms"),
708 PURPLE_MESSAGE_SYSTEM, time(NULL)); 708 PURPLE_MESSAGE_SYSTEM, time(NULL));
709 return; 709 return FALSE;
710 } 710 }
711 711
712 gpresence = purple_account_get_presence(chat->js->gc->account); 712 account = purple_connection_get_account(chat->js->gc);
713 status = purple_presence_get_active_status(gpresence); 713 status = purple_account_get_active_status(account);
714 714
715 purple_status_to_jabber(status, &state, &msg, &priority); 715 purple_status_to_jabber(status, &state, &msg, &priority);
716 716
717 presence = jabber_presence_create_js(chat->js, state, msg, priority); 717 presence = jabber_presence_create_js(chat->js, state, msg, priority);
718 full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, nick); 718 full_jid = g_strdup_printf("%s@%s/%s", chat->room, chat->server, nick);
720 g_free(full_jid); 720 g_free(full_jid);
721 g_free(msg); 721 g_free(msg);
722 722
723 jabber_send(chat->js, presence); 723 jabber_send(chat->js, presence);
724 xmlnode_free(presence); 724 xmlnode_free(presence);
725
726 return TRUE;
725 } 727 }
726 728
727 void jabber_chat_part(JabberChat *chat, const char *msg) 729 void jabber_chat_part(JabberChat *chat, const char *msg)
728 { 730 {
729 char *room_jid; 731 char *room_jid;