char *get_default_keyring() { char *default_keyring; char *default_keyring_dup; GnomeKeyringResult res = gnome_keyring_get_default_keyring_sync(&default_keyring); // An error occured if (res != GNOME_KEYRING_RESULT_OK) { keyring_handle_error(res); return NULL; } // There is no default keyring if (!default_keyring) { fprintf(stderr, "No default keyring found. Please set one or use the -k option.\n"); return NULL; } // Default_keyring has been created via a g_malloc so it must be cleaned with g_free. // I duplicated the variable to allow the caller to clean it with a free. default_keyring_dup = strdup(default_keyring); g_free(default_keyring); return default_keyring_dup; }
/** * e_passwords_init: * * Initializes the e_passwords routines. Must be called before any other * e_passwords_* function. **/ void e_passwords_init (void) { G_LOCK (passwords); if (password_cache == NULL) { password_cache = g_hash_table_new_full ( g_str_hash, g_str_equal, (GDestroyNotify) g_free, (GDestroyNotify) g_free); main_thread = g_thread_self (); gnome_keyring_get_default_keyring_sync (&default_keyring); } G_UNLOCK (passwords); }
SG_bool SG_password__supported() { SG_bool haveDaemon = (SG_bool)gnome_keyring_is_available(); if (haveDaemon) { char *keyring = NULL; GnomeKeyringResult res = gnome_keyring_get_default_keyring_sync(&keyring); if (keyring) g_free(keyring); if (res == GNOME_KEYRING_RESULT_OK) return( SG_TRUE ); } return SG_FALSE; }
static void tny_gnome_keyring_password_getter_forget_password (TnyPasswordGetter *self, const gchar *aid) { GList *list=NULL; GnomeKeyringResult keyringret; gchar *keyring; GnomeKeyringNetworkPasswordData *pwd_data; gnome_keyring_get_default_keyring_sync (&keyring); keyringret = gnome_keyring_find_network_password_sync ( aid /* user */, "Mail", aid /* hostname */, "password", aid /* proto */, "PLAIN", 0, &list); if (keyringret == GNOME_KEYRING_RESULT_OK && list) { pwd_data = list->data; gnome_keyring_item_delete_sync (keyring, pwd_data->item_id); gnome_keyring_network_password_list_free (list); } return; }
static const gchar* tny_gnome_keyring_password_getter_get_password (TnyPasswordGetter *self, const gchar *aid, const gchar *prompt, gboolean *cancel) { gchar *retval = NULL; GList *list; GnomeKeyringResult keyringret; gchar *keyring; gnome_keyring_get_default_keyring_sync (&keyring); keyringret = gnome_keyring_find_network_password_sync (aid, "Mail", aid /* hostname */, "password", aid /* proto */, "PLAIN", 0, &list); if ((keyringret != GNOME_KEYRING_RESULT_OK) || (list == NULL)) { gboolean canc = FALSE; GnomePasswordDialog *dialog = GNOME_PASSWORD_DIALOG (gnome_password_dialog_new (_("Enter password"), prompt, NULL, NULL, TRUE)); gnome_password_dialog_set_domain (dialog, "Mail"); gnome_password_dialog_set_remember (dialog, GNOME_PASSWORD_DIALOG_REMEMBER_FOREVER); gnome_password_dialog_set_readonly_username (dialog, TRUE); /* gnome_password_dialog_set_username (dialog, tny_account_get_user (account)); */ gnome_password_dialog_set_show_username (dialog, FALSE); gnome_password_dialog_set_show_remember (dialog, gnome_keyring_is_available ()); gnome_password_dialog_set_show_domain (dialog, FALSE); gnome_password_dialog_set_show_userpass_buttons (dialog, FALSE); canc = gnome_password_dialog_run_and_block (dialog); if (canc) { guint32 item_id; GnomePasswordDialogRemember r; retval = gnome_password_dialog_get_password (dialog); mlock (retval, strlen (retval)); r = gnome_password_dialog_get_remember (dialog); if (r == GNOME_PASSWORD_DIALOG_REMEMBER_FOREVER) { gnome_keyring_set_network_password_sync (keyring, aid /* user */, "Mail", aid /* hostname */, "password", aid /* proto */, "PLAIN", 0, retval, &item_id); } } else retval = NULL; *cancel = (!canc); /* this causes warnings, but should be done afaik */ gtk_object_destroy (GTK_OBJECT (dialog)); while (gtk_events_pending ()) gtk_main_iteration (); } else { GnomeKeyringNetworkPasswordData *pwd_data; pwd_data = list->data; retval = g_strdup (pwd_data->password); *cancel = FALSE; gnome_keyring_network_password_list_free (list); } return retval; }