Testing Done:
Added XMPP account, saved password, disabled and re-enabled account which kept the password. Restarted Pidgin and password was still saved. Removed XMPP account, and password was deleted from Credential Manager.
I'm not sure that the password needs to be converted from UTF-8 to "Unicode", as I did not test modifying the password in Credential Manager.
Bugs closed: PIDGIN-17489
Reviewed at https://reviews.imfreedom.org/r/466/
/* purple
*
* Purple is the legal property of its developers, whose names are too numerous
* to list here. Please refer to the COPYRIGHT file distributed with this
* source distribution.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#include<glib/gi18n-lib.h>
#include"internal.h"
#include"debug.h"
#include"idle.h"
#include"notify.h"
#include"purplemarkup.h"
#include"savedstatuses.h"
#include"request.h"
#include"status.h"
#include"xmlnode.h"
/*
* The maximum number of transient statuses to save. This
* is used during the shutdown process to clean out old
* transient statuses.
*/
#define MAX_TRANSIENTS 5
/*
* The default message to use when the user becomes auto-away.
*/
#define DEFAULT_AUTOAWAY_MESSAGE _("I'm not here right now")
/*
* The information stores a snap-shot of the statuses of all
* your accounts. Basically these are your saved away messages.
* There is an overall status and message that applies to
* all your accounts, and then each individual account can
* optionally have a different custom status and message.
*
* The changes to status.xml caused by the new status API
* are fully backward compatible. The new status API just
* adds the optional sub-statuses to the XML file.
*/
struct_PurpleSavedStatus
{
char*title;
PurpleStatusPrimitivetype;
char*message;
/* The timestamp when this saved status was created. This must be unique. */
time_tcreation_time;
time_tlastused;
unsignedintusage_count;
GList*substatuses;/* A list of PurpleSavedStatusSub's. */
};
/*
* TODO: If a PurpleStatusType is deleted, need to also delete any
* associated PurpleSavedStatusSub's?
*/
struct_PurpleSavedStatusSub
{
PurpleAccount*account;
constPurpleStatusType*type;
char*message;
};
staticGList*saved_statuses=NULL;
staticguintsave_timer=0;
staticgbooleanstatuses_loaded=FALSE;
/*
* This hash table keeps track of which timestamps we've
* used so that we don't have two saved statuses with the
* same 'creation_time' timestamp. The 'created' timestamp
* is used as a unique identifier.
*
* So the key in this hash table is the creation_time and
* the value is a pointer to the PurpleSavedStatus.