int keyring_modify(const char *keyname, const char *password, const char *new_password) { char *pass = NULL; char *new_pass = NULL; #ifndef HAVE_GNOME_KEYRING_CHANGE_PASSWORD print_error(10, "WARNING", "\nThis feature not supported.\n"); return TRUE; #endif if (keyname == NULL) { print_error(GNOME_KEYRING_RESULT_NO_SUCH_KEYRING, "ERROR", "\nInvalid keyring.\n"); return FALSE; } if (!gnome_keyring_is_available()) { print_error(GNOME_KEYRING_RESULT_NO_KEYRING_DAEMON, "ERROR", "\nFailed to communicate with a gnome-keyring-daemon.\n"); return FALSE; } pass = ask__password(keyname, password, "Enter password for '%s' keyring: "); if (! pass) return FALSE; new_pass = ask__password(keyname, new_password, "Enter new password for '%s' keyring: "); if (! new_pass) { free(pass); return FALSE; } loop = g_main_loop_new(NULL, FALSE); gnome_keyring_change_password(keyname, pass, new_pass, (GnomeKeyringOperationDoneCallback) callback__done, "modify", NULL); g_main_loop_run(loop); if (exit_status) fprintf(stderr, "Changed '%s' keyring password.\n", keyname); if (pass) free(pass); if (new_pass) free(new_pass); return exit_status; }
static void on_keyring_password (GtkAction *action, SeahorseGkrKeyringCommands *self) { SeahorseView *view; SeahorseGkrKeyring *keyring; GList *keys, *l; g_return_if_fail (SEAHORSE_IS_GKR_KEYRING_COMMANDS (self)); g_return_if_fail (GTK_IS_ACTION (action)); view = seahorse_commands_get_view (SEAHORSE_COMMANDS (self)); keys = seahorse_view_get_selected_matching (view, &keyring_predicate); for (l = keys; l; l = g_list_next (l)) { keyring = SEAHORSE_GKR_KEYRING (l->data); g_return_if_fail (SEAHORSE_IS_GKR_KEYRING (l->data)); gnome_keyring_change_password (seahorse_gkr_keyring_get_name (l->data), NULL, NULL, on_change_password_done, g_object_ref (self), g_object_unref); } g_list_free (keys); }