Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2
pidgin
pidgin-gnome-keyring.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pidgin-gnome-keyring.patch of Package pidgin
diff -Naur pidgin-2.10.10.orig/configure.ac pidgin-2.10.10/configure.ac --- pidgin-2.10.10.orig/configure.ac +++ pidgin-2.10.10/configure.ac @@ -2124,6 +2124,20 @@ fi dnl ####################################################################### +dnl # Check for gnome-keyring +dnl #--enable-gnome-keyring=(yes|no) +dnl ####################################################################### +AC_ARG_ENABLE(gnome-keyring, + AC_HELP_STRING([--enable-gnome-keyring], + [use gnome keyring for storing password [default=no]]),, + enable_gnome_keyring=no) +if test "x$enable_gnome_keyring" = "xyes"; then + PKG_CHECK_MODULES(PURPLE_KEYRING, + gnome-keyring-1, + AC_DEFINE(PURPLE_ENABLE_KEYRING, [], [Set if we should use gnome-keyring])) +fi + +dnl ####################################################################### dnl # Check for Tcl dnl ####################################################################### AC_ARG_ENABLE(tcl, [AC_HELP_STRING([--disable-tcl], diff -Naur pidgin-2.10.10.orig/libpurple/account.c pidgin-2.10.10/libpurple/account.c --- pidgin-2.10.10.orig/libpurple/account.c +++ pidgin-2.10.10/libpurple/account.c @@ -54,6 +54,13 @@ #define PURPLE_ACCOUNT_GET_PRIVATE(account) \ ((PurpleAccountPrivate *) (account->priv)) +#ifdef PURPLE_ENABLE_KEYRING +#include <gnome-keyring.h> + +static char * purple_account_get_password_from_keyring (const char *_prpl, const char *_user); +static gboolean purple_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *password); +#endif + /* TODO: Should use PurpleValue instead of this? What about "ui"? */ typedef struct { @@ -393,8 +400,13 @@ if (purple_account_get_remember_password(account) && ((tmp = purple_account_get_password(account)) != NULL)) { +#ifdef PURPLE_ENABLE_KEYRING + purple_account_set_password_in_keyring( purple_account_get_protocol_id(account), + purple_account_get_username(account), tmp); +#else child = xmlnode_new_child(node, "password"); xmlnode_insert_data(child, tmp, -1); +#endif } else if (_purple_account_is_password_encrypted(account)) { const char *keyring = NULL; const char *mode = NULL; @@ -909,37 +921,51 @@ } ret = purple_account_new(name, _purple_oscar_convert(name, protocol_id)); /* XXX: */ - g_free(name); - g_free(protocol_id); /* Read the password */ - child = xmlnode_get_child(node, "password"); - if (child != NULL) { - const char *keyring_id = xmlnode_get_attrib(child, "keyring_id"); - const char *mode = xmlnode_get_attrib(child, "mode"); - gboolean is_plaintext; - - data = xmlnode_get_data(child); - - if (keyring_id == NULL || keyring_id[0] == '\0') - is_plaintext = TRUE; - else if (g_strcmp0(keyring_id, "keyring-internal") != 0) - is_plaintext = FALSE; - else if (mode == NULL || mode[0] == '\0' || g_strcmp0(mode, "cleartext") == 0) - is_plaintext = TRUE; - else - is_plaintext = FALSE; - - if (is_plaintext) { - purple_account_set_remember_password(ret, TRUE); - purple_account_set_password(ret, data); - } else { - purple_debug_warning("account", "found encrypted password, " - "but it's not supported in 2.x.y\n"); - _purple_account_set_encrypted_password(ret, keyring_id, mode, data); - } + gboolean got_pwd = FALSE; +#ifdef PURPLE_ENABLE_KEYRING + data = purple_account_get_password_from_keyring(protocol_id, name); + if (data) + { + got_pwd = TRUE; + purple_account_set_remember_password(ret, TRUE); + purple_account_set_password(ret, data); g_free(data); } +#endif + if (!got_pwd) + { + child = xmlnode_get_child(node, "password"); + if (child != NULL) { + const char *keyring_id = xmlnode_get_attrib(child, "keyring_id"); + const char *mode = xmlnode_get_attrib(child, "mode"); + gboolean is_plaintext; + + data = xmlnode_get_data(child); + + if (keyring_id == NULL || keyring_id[0] == '\0') + is_plaintext = TRUE; + else if (g_strcmp0(keyring_id, "keyring-internal") != 0) + is_plaintext = FALSE; + else if (mode == NULL || mode[0] == '\0' || g_strcmp0(mode, "cleartext") == 0) + is_plaintext = TRUE; + else + is_plaintext = FALSE; + + if (is_plaintext) { + purple_account_set_remember_password(ret, TRUE); + purple_account_set_password(ret, data); + } else { + purple_debug_warning("account", "found encrypted password, " + "but it's not supported in 2.x.y\n"); + _purple_account_set_encrypted_password(ret, keyring_id, mode, data); + } + g_free(data); + } + } + g_free(name); + g_free(protocol_id); /* Read the alias */ child = xmlnode_get_child(node, "alias"); @@ -3305,6 +3331,63 @@ purple_signals_unregister_by_instance(handle); } +#ifdef PURPLE_ENABLE_KEYRING +static char * +purple_account_get_password_from_keyring(const char *_prpl, const char *_user) +{ + GnomeKeyringNetworkPasswordData *found_item; + GnomeKeyringResult result; + GList *matches; + char *password; + + matches = NULL; + + result = gnome_keyring_find_network_password_sync ( + _user, /* user */ + NULL, /* domain */ + "gaim.local", /* server */ + NULL, /* object */ + _prpl, /* protocol */ + NULL, /* authtype */ + 1863, /* port */ + &matches); + + if (result != GNOME_KEYRING_RESULT_OK) + return NULL; + + g_assert (matches != NULL && matches->data != NULL); + + found_item = (GnomeKeyringNetworkPasswordData *) matches->data; + + password = g_strdup (found_item->password); + + gnome_keyring_network_password_list_free (matches); + + return password; +} + +static gboolean +purple_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *_password) +{ + GnomeKeyringResult result; + guint32 item_id; + + result = gnome_keyring_set_network_password_sync ( + NULL, /* default keyring */ + _user, /* user */ + NULL, /* domain */ + "gaim.local", /* server */ + NULL, /* object */ + _prpl, /* protocol */ + NULL, /* authtype */ + 1863, /* port */ + _password, /* password */ + &item_id); + + return result == GNOME_KEYRING_RESULT_OK; +} +#endif + /* libpurple 3.0.0 compatibility */ static void diff -Naur pidgin-2.10.10.orig/libpurple/Makefile.am pidgin-2.10.10/libpurple/Makefile.am --- pidgin-2.10.10.orig/libpurple/Makefile.am +++ pidgin-2.10.10/libpurple/Makefile.am @@ -305,6 +305,7 @@ $(GLIB_LIBS) \ $(LIBXML_LIBS) \ $(NETWORKMANAGER_LIBS) \ + $(PURPLE_KEYRING_LIBS) \ $(INTLLIBS) \ $(FARSTREAM_LIBS) \ $(GSTREAMER_LIBS) \ @@ -326,7 +327,8 @@ $(GSTREAMER_CFLAGS) \ $(GSTINTERFACES_CFLAGS) \ $(IDN_CFLAGS) \ - $(NETWORKMANAGER_CFLAGS) + $(NETWORKMANAGER_CFLAGS) \ + $(PURPLE_KEYRING_CFLAGS) # INSTALL_SSL_CERTIFICATES is true when SSL_CERTIFICATES_DIR is empty. # We want to use SSL_CERTIFICATES_DIR when it's not empty.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor