summaryrefslogtreecommitdiffstats
path: root/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_auth_gnome_keyring/gnome_keyring.c')
-rw-r--r--subversion/libsvn_auth_gnome_keyring/gnome_keyring.c178
1 files changed, 28 insertions, 150 deletions
diff --git a/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c b/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
index 48dfa35..030023a 100644
--- a/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
+++ b/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
@@ -49,120 +49,19 @@
/*-----------------------------------------------------------------------*/
-struct gnome_keyring_baton
-{
- const char *keyring_name;
- GnomeKeyringInfo *info;
- GMainLoop *loop;
-};
-
-
-/* Callback function to destroy gnome_keyring_baton. */
-static void
-callback_destroy_data_keyring(void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (data == NULL)
- return;
-
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
-
- if (key_info->info)
- {
- gnome_keyring_info_free(key_info->info);
- key_info->info = NULL;
- }
-
- return;
-}
-
-
-/* Callback function to complete the keyring operation. */
-static void
-callback_done(GnomeKeyringResult result,
- gpointer data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- g_main_loop_quit(key_info->loop);
- return;
-}
-
-
-/* Callback function to get the keyring info. */
-static void
-callback_get_info_keyring(GnomeKeyringResult result,
- GnomeKeyringInfo *info,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && info != NULL)
- {
- key_info->info = gnome_keyring_info_copy(info);
- }
- else
- {
- if (key_info->info != NULL)
- gnome_keyring_info_free(key_info->info);
-
- key_info->info = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
-
-/* Callback function to get the default keyring string name. */
-static void
-callback_default_keyring(GnomeKeyringResult result,
- const char *string,
- void *data)
-{
- struct gnome_keyring_baton *key_info = data;
-
- if (result == GNOME_KEYRING_RESULT_OK && string != NULL)
- {
- key_info->keyring_name = strdup(string);
- }
- else
- {
- free((void*)key_info->keyring_name);
- key_info->keyring_name = NULL;
- }
-
- g_main_loop_quit(key_info->loop);
-
- return;
-}
-
/* Returns the default keyring name, allocated in RESULT_POOL. */
static char*
get_default_keyring_name(apr_pool_t *result_pool)
{
- char *def = NULL;
- struct gnome_keyring_baton key_info;
-
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ char *name, *def;
+ GnomeKeyringResult gkr;
- /* Finds default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_default_keyring(callback_default_keyring, &key_info, NULL);
- g_main_loop_run(key_info.loop);
+ gkr = gnome_keyring_get_default_keyring_sync(&name);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return NULL;
- if (key_info.keyring_name == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return NULL;
- }
-
- def = apr_pstrdup(result_pool, key_info.keyring_name);
- callback_destroy_data_keyring(&key_info);
+ def = apr_pstrdup(result_pool, name);
+ g_free(name);
return def;
}
@@ -171,28 +70,22 @@ get_default_keyring_name(apr_pool_t *result_pool)
static svn_boolean_t
check_keyring_is_locked(const char *keyring_name)
{
- struct gnome_keyring_baton key_info;
+ GnomeKeyringInfo *info;
+ svn_boolean_t locked;
+ GnomeKeyringResult gkr;
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring, &key_info,
- NULL);
- g_main_loop_run(key_info.loop);
+ if (gnome_keyring_info_get_is_locked(info))
+ locked = TRUE;
+ else
+ locked = FALSE;
- if (key_info.info == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return FALSE;
- }
+ gnome_keyring_info_free(info);
- /* Check if keyring is locked. */
- if (gnome_keyring_info_get_is_locked(key_info.info))
- return TRUE;
- else
- return FALSE;
+ return locked;
}
/* Unlock the KEYRING_NAME with the KEYRING_PASSWORD. If KEYRING was
@@ -202,34 +95,19 @@ unlock_gnome_keyring(const char *keyring_name,
const char *keyring_password,
apr_pool_t *pool)
{
- struct gnome_keyring_baton key_info;
-
- key_info.info = NULL;
- key_info.keyring_name = NULL;
+ GnomeKeyringInfo *info;
+ GnomeKeyringResult gkr;
- /* Get details about the default keyring. */
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_get_info(keyring_name, callback_get_info_keyring,
- &key_info, NULL);
- g_main_loop_run(key_info.loop);
+ gkr = gnome_keyring_get_info_sync(keyring_name, &info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
+ return FALSE;
- if (key_info.info == NULL)
- {
- callback_destroy_data_keyring(&key_info);
- return FALSE;
- }
- else
- {
- key_info.loop = g_main_loop_new(NULL, FALSE);
- gnome_keyring_unlock(keyring_name, keyring_password,
- callback_done, &key_info, NULL);
- g_main_loop_run(key_info.loop);
- }
- callback_destroy_data_keyring(&key_info);
- if (check_keyring_is_locked(keyring_name))
+ gkr = gnome_keyring_unlock_sync(keyring_name, keyring_password);
+ gnome_keyring_info_free(info);
+ if (gkr != GNOME_KEYRING_RESULT_OK)
return FALSE;
- return TRUE;
+ return check_keyring_is_locked(keyring_name);
}
OpenPOWER on IntegriCloud