示例#1
0
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);
}