Mercurial > pidgin.yaz
changeset 22697:e587650c5d16
merge of '9448aec0bc0e0168e10e0a3991bfbfe716de6c86'
and 'e119afbe9b2dac774c2d26f65883bfd21b226807'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 24 Apr 2008 01:46:38 +0000 |
parents | 387071b0d4d4 (diff) 8d74a9e409f1 (current diff) |
children | 80c87908ff1d |
files | |
diffstat | 9 files changed, 132 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/account.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/account.c Thu Apr 24 01:46:38 2008 +0000 @@ -1359,8 +1359,12 @@ return; } - if (orig_pass == NULL || new_pass_1 == NULL || new_pass_2 == NULL || - *orig_pass == '\0' || *new_pass_1 == '\0' || *new_pass_2 == '\0') + if ((purple_request_fields_is_field_required(fields, "password") && + (orig_pass == NULL || *orig_pass == '\0')) || + (purple_request_fields_is_field_required(fields, "new_password_1") && + (new_pass_1 == NULL || *new_pass_1 == '\0')) || + (purple_request_fields_is_field_required(fields, "new_password_2") && + (new_pass_2 == NULL || *new_pass_2 == '\0'))) { purple_notify_error(account, NULL, _("Fill out all fields completely."), NULL); @@ -1376,11 +1380,20 @@ PurpleRequestFields *fields; PurpleRequestFieldGroup *group; PurpleRequestField *field; + PurpleConnection *gc; + PurplePlugin *prpl = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; char primary[256]; g_return_if_fail(account != NULL); g_return_if_fail(purple_account_is_connected(account)); + gc = purple_account_get_connection(account); + if (gc != NULL) + prpl = purple_connection_get_prpl(gc); + if (prpl != NULL) + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); + fields = purple_request_fields_new(); group = purple_request_field_group_new(NULL); @@ -1389,21 +1402,24 @@ field = purple_request_field_string_new("password", _("Original password"), NULL, FALSE); purple_request_field_string_set_masked(field, TRUE); - purple_request_field_set_required(field, TRUE); + if (!(prpl_info && (prpl_info->options | OPT_PROTO_PASSWORD_OPTIONAL))) + purple_request_field_set_required(field, TRUE); purple_request_field_group_add_field(group, field); field = purple_request_field_string_new("new_password_1", _("New password"), NULL, FALSE); purple_request_field_string_set_masked(field, TRUE); - purple_request_field_set_required(field, TRUE); + if (!(prpl_info && (prpl_info->options | OPT_PROTO_PASSWORD_OPTIONAL))) + purple_request_field_set_required(field, TRUE); purple_request_field_group_add_field(group, field); field = purple_request_field_string_new("new_password_2", _("New password (again)"), NULL, FALSE); purple_request_field_string_set_masked(field, TRUE); - purple_request_field_set_required(field, TRUE); + if (!(prpl_info && (prpl_info->options | OPT_PROTO_PASSWORD_OPTIONAL))) + purple_request_field_set_required(field, TRUE); purple_request_field_group_add_field(group, field); g_snprintf(primary, sizeof(primary), _("Change password for %s"),
--- a/libpurple/log.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/log.c Thu Apr 24 01:46:38 2008 +0000 @@ -1758,6 +1758,7 @@ lastoff = offset; g_snprintf(convostart, length, "%s", temp); + memset(&tm, 0, sizeof(tm)); sscanf(convostart, "%*s %s %d %d:%d:%d %d", month, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &tm.tm_year); /* Ugly hack, in case current locale is not English */
--- a/libpurple/protocols/msnp9/nexus.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/protocols/msnp9/nexus.c Thu Apr 24 01:46:38 2008 +0000 @@ -337,7 +337,8 @@ username = g_strdup(purple_url_encode(purple_account_get_username(session->account))); - password = g_strndup(purple_connection_get_password(session->account->gc), 16); + password = g_utf8_strncpy(g_strdup(purple_connection_get_password(session->account->gc)), + purple_connection_get_password(session->account->gc), 16); encpass = g_strdup(purple_url_encode(password)); g_free(password);
--- a/libpurple/protocols/msnp9/slplink.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/protocols/msnp9/slplink.c Thu Apr 24 01:46:38 2008 +0000 @@ -118,6 +118,8 @@ while (slplink->slp_calls != NULL) msn_slp_call_destroy(slplink->slp_calls->data); + g_queue_free(slplink->slp_msg_queue); + session->slplinks = g_list_remove(session->slplinks, slplink);
--- a/libpurple/protocols/msnp9/switchboard.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/protocols/msnp9/switchboard.c Thu Apr 24 01:46:38 2008 +0000 @@ -111,6 +111,9 @@ for (l = swboard->users; l != NULL; l = l->next) g_free(l->data); + if (swboard->users != NULL) + g_list_free(swboard->users); + session = swboard->session; session->switches = g_list_remove(session->switches, swboard);
--- a/libpurple/protocols/silc/silc.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/protocols/silc/silc.c Thu Apr 24 01:46:38 2008 +0000 @@ -380,14 +380,6 @@ client = sg->client; - /* Progress */ - if (params.detach_data) { - purple_connection_update_progress(gc, _("Resuming session"), 2, 5); - sg->resuming = TRUE; - } else { - purple_connection_update_progress(gc, _("Performing key exchange"), 2, 5); - } - /* Get session detachment data, if available */ memset(¶ms, 0, sizeof(params)); dfile = silcpurple_session_file(purple_account_get_username(sg->account)); @@ -397,6 +389,14 @@ params.ignore_requested_attributes = FALSE; params.pfs = purple_account_get_bool(sg->account, "pfs", FALSE); + /* Progress */ + if (params.detach_data) { + purple_connection_update_progress(gc, _("Resuming session"), 2, 5); + sg->resuming = TRUE; + } else { + purple_connection_update_progress(gc, _("Performing key exchange"), 2, 5); + } + /* Perform SILC Key Exchange. */ silc_client_key_exchange(sg->client, ¶ms, sg->public_key, sg->private_key, stream, SILC_CONN_SERVER, @@ -433,6 +433,83 @@ silcpurple_stream_created, gc); } +static void silcpurple_continue_running(SilcPurple sg) +{ + PurpleConnection *gc = sg->gc; + PurpleAccount *account = purple_connection_get_account(gc); + + /* Connect to the SILC server */ + if (purple_proxy_connect(gc, account, + purple_account_get_string(account, "server", + "silc.silcnet.org"), + purple_account_get_int(account, "port", 706), + silcpurple_login_connected, gc) == NULL) + { + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, + _("Unable to create connection")); + gc->proto_data = NULL; + silc_free(sg); + return; + } +} + +static void silcpurple_got_password_cb(PurpleConnection *gc, PurpleRequestFields *fields) +{ + SilcPurple sg = (SilcPurple)gc->proto_data; + PurpleAccount *account = purple_connection_get_account(gc); + char pkd[256], prd[256]; + const char *password; + gboolean remember; + + /* The password prompt dialog doesn't get disposed if the account disconnects */ + if (!PURPLE_CONNECTION_IS_VALID(gc)) + return; + + password = purple_request_fields_get_string(fields, "password"); + remember = purple_request_fields_get_bool(fields, "remember"); + + if (!password || !*password) + { + purple_notify_error(gc, NULL, _("Password is required to sign on."), NULL); + gc->proto_data = NULL; + silc_free(sg); + return; + } + + if (remember) + purple_account_set_remember_password(account, TRUE); + + purple_account_set_password(account, password); + + /* Load SILC key pair */ + g_snprintf(pkd, sizeof(pkd), "%s" G_DIR_SEPARATOR_S "public_key.pub", silcpurple_silcdir()); + g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.prv", silcpurple_silcdir()); + if (!silc_load_key_pair((char *)purple_account_get_string(account, "public-key", pkd), + (char *)purple_account_get_string(account, "private-key", prd), + password, + &sg->public_key, &sg->private_key)) { + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, + _("Could not load SILC key pair")); + gc->proto_data = NULL; + silc_free(sg); + return; + } + silcpurple_continue_running(sg); +} + +static void silcpurple_no_password_cb(PurpleConnection *gc, PurpleRequestFields *fields) +{ + SilcPurple sg; + /* The password prompt dialog doesn't get disposed if the account disconnects */ + if (!PURPLE_CONNECTION_IS_VALID(gc)) + return; + sg = gc->proto_data; + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, + _("Could not load SILC key pair")); + gc->proto_data = NULL; + silc_free(sg); +} + static void silcpurple_running(SilcClient client, void *context) { SilcPurple sg = context; @@ -451,26 +528,18 @@ (char *)purple_account_get_string(account, "private-key", prd), (gc->password == NULL) ? "" : gc->password, &sg->public_key, &sg->private_key)) { + if (!purple_account_get_password(account)) { + purple_account_request_password(account, G_CALLBACK(silcpurple_got_password_cb), + G_CALLBACK(silcpurple_no_password_cb), gc); + return; + } purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, _("Could not load SILC key pair")); gc->proto_data = NULL; silc_free(sg); return; } - - /* Connect to the SILC server */ - if (purple_proxy_connect(gc, account, - purple_account_get_string(account, "server", - "silc.silcnet.org"), - purple_account_get_int(account, "port", 706), - silcpurple_login_connected, gc) == NULL) - { - purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Unable to create connection")); - gc->proto_data = NULL; - silc_free(sg); - return; - } + silcpurple_continue_running(sg); } static void @@ -550,8 +619,12 @@ _("Cannot initialize SILC protocol")); gc->proto_data = NULL; silc_free(sg); + free(hostname); + free(username); return; } + free(hostname); + free(username); /* Check the ~/.silc dir and create it, and new key pair if necessary. */ if (!silcpurple_check_silc_dir(gc)) { @@ -1188,11 +1261,11 @@ static void silcpurple_change_passwd(PurpleConnection *gc, const char *old, const char *new) { - char prd[256]; + char prd[256]; g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.pub", silcpurple_silcdir()); silc_change_private_key_passphrase(purple_account_get_string(gc->account, "private-key", - prd), old, new); + prd), old ? old : "", new ? new : ""); } static void
--- a/libpurple/protocols/silc10/silc.c Thu Apr 24 01:43:25 2008 +0000 +++ b/libpurple/protocols/silc10/silc.c Thu Apr 24 01:46:38 2008 +0000 @@ -962,11 +962,11 @@ static void silcpurple_change_passwd(PurpleConnection *gc, const char *old, const char *new) { - char prd[256]; + char prd[256]; g_snprintf(prd, sizeof(prd), "%s" G_DIR_SEPARATOR_S "private_key.pub", silcpurple_silcdir()); silc_change_private_key_passphrase(purple_account_get_string(gc->account, "private-key", - prd), old, new); + prd), old ? old : "", new ? new : ""); } static void
--- a/pidgin/gtkblist.c Thu Apr 24 01:43:25 2008 +0000 +++ b/pidgin/gtkblist.c Thu Apr 24 01:46:38 2008 +0000 @@ -695,6 +695,7 @@ { purple_blist_node_set_bool(node, "show_offline", !purple_blist_node_get_bool(node, "show_offline")); + pidgin_blist_update(purple_get_blist(), node); } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { @@ -704,6 +705,7 @@ purple_blist_node_set_bool(node, "show_offline", setting); for (bnode = node->child; bnode != NULL; bnode = bnode->next) { purple_blist_node_set_bool(bnode, "show_offline", setting); + pidgin_blist_update(purple_get_blist(), bnode); } } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { PurpleBlistNode *cnode, *bnode; @@ -714,10 +716,10 @@ purple_blist_node_set_bool(cnode, "show_offline", setting); for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { purple_blist_node_set_bool(bnode, "show_offline", setting); + pidgin_blist_update(purple_get_blist(), bnode); } } } - pidgin_blist_update(purple_get_blist(), node); } static void gtk_blist_show_systemlog_cb(void)
--- a/pidgin/gtkmenutray.c Thu Apr 24 01:43:25 2008 +0000 +++ b/pidgin/gtkmenutray.c Thu Apr 24 01:46:38 2008 +0000 @@ -134,8 +134,6 @@ if(!GTK_IS_WIDGET(menu_tray->tray)) menu_tray->tray = gtk_hbox_new(FALSE, 0); - menu_tray->tooltips = gtk_tooltips_new(); - #if GTK_CHECK_VERSION(2,2,0) settings = gtk_settings_get_for_screen(gtk_widget_get_screen(widget)); @@ -235,7 +233,7 @@ pidgin_menu_tray_set_tooltip(PidginMenuTray *menu_tray, GtkWidget *widget, const char *tooltip) { if (!menu_tray->tooltips) - return; + menu_tray->tooltips = gtk_tooltips_new(); /* Should we check whether widget is a child of menu_tray? */