Fri, 15 Aug 2008 16:58:06 +0000
Fixed two bugs that caused everything to go wrong when accounts were connected
or disconnected.
--- a/libpurple/account.c Fri Aug 15 03:41:24 2008 +0000 +++ b/libpurple/account.c Fri Aug 15 16:58:06 2008 +0000 @@ -1168,7 +1168,7 @@ purple_account_set_remember_password(account, TRUE); /* XXX this might be a problem if a read occurs before the write is finished */ - purple_account_set_password_async(account, g_strdup(entry), g_free, NULL, NULL); + purple_account_set_password(account, entry); purple_connection_new(account, FALSE, entry); } @@ -1615,7 +1615,7 @@ account->password = g_strdup(password); else - purple_keyring_set_password_async(account, g_strdup(password), g_free, NULL, NULL); + purple_keyring_set_password_sync(account, password); schedule_accounts_save(); }
--- a/libpurple/connection.c Fri Aug 15 03:41:24 2008 +0000 +++ b/libpurple/connection.c Fri Aug 15 16:58:06 2008 +0000 @@ -443,7 +443,12 @@ { g_return_val_if_fail(gc != NULL, NULL); - return gc->password ? gc->password : purple_account_get_password(gc->account); + if (gc->password) { + return gc->password; + } else { + purple_debug_info("connection", + "Password was unknown, getting password from account"); + return purple_account_get_password(gc->account); } void @@ -452,7 +457,7 @@ gpointer data) { char * password; - g_return_val_if_fail(gc != NULL, NULL); + g_return_if_fail(gc != NULL); if (gc->password != NULL) { /* casted to prevent warning */ @@ -517,11 +522,9 @@ GError * error, gpointer data) { - /* FIXME : handle error */ - char * pw = g_strdup(password); - + /* FIXME : needs to be async */ purple_account_disconnect(account); - purple_account_set_password_async(account, g_strdup(pw), g_free, NULL, NULL); + purple_account_set_password(account, password); } void
--- a/libpurple/plugins/keyrings/gnomekeyring.c Fri Aug 15 03:41:24 2008 +0000 +++ b/libpurple/plugins/keyrings/gnomekeyring.c Fri Aug 15 16:58:06 2008 +0000 @@ -239,6 +239,8 @@ GError * error; PurpleAccount * account = storage->account; + g_return_if_fail(storage != NULL); + if (result != GNOME_KEYRING_RESULT_OK) { switch(result) { @@ -290,6 +292,7 @@ if(cb != NULL) cb(account, NULL, storage->user_data); + return; }