Em Ter, 2007-02-27 às 12:55 +0100, Lionel Vaux escreveu: > On a clean etch install, when I launch some app using gksu, the > password is not remembered when the option "Save in the keyring" > is selected. The problem is that the default keyring does not exist, > and I am not prompted to create it.
I haven't noticed this problem. I thought the default keyring was created by default, thanks for your bug report! > If I create a keyring with name "default" using gnome-keyring-manager, > then gksu correctly saves the password. > > Please prompt to create a default keyring if one does not exist. The attached patch should fix the problem. Can you please try it? I tried with a newly created user, and it works for me. Most of the patch is actually a better way of showing debug messages if -d is passed as argument. I don't have the time to create a patched package right now, but if I have the time I'll create one later today. If it works for you we'll try to get the release team approval for this change to go into Etch. I don't think there will be problems. Thanks again, See you, -- Gustavo Noronha <[EMAIL PROTECTED]> http://kov.eti.br/
Index: libgksu/libgksu.c =================================================================== --- libgksu/libgksu.c (revisão 781) +++ libgksu/libgksu.c (cópia de trabalho) @@ -648,7 +648,7 @@ gnome_keyring_attribute_list_free (attributes); if ( (result == GNOME_KEYRING_RESULT_OK) && - (g_list_length(list) == 1) + (g_list_length(list) >= 1) ) { GnomeKeyringFound *found = list->data; @@ -689,6 +689,7 @@ static GMainLoop *keyring_loop = NULL; GnomeKeyringAttributeList *attributes; GnomeKeyringAttribute attribute; + GnomeKeyringResult result; gchar *keyring_name; gchar *key_name; @@ -718,6 +719,14 @@ keyring_name = gconf_client_get_string (gconf_client, BASE_PATH"save-keyring", NULL); if (keyring_name == NULL) keyring_name = g_strdup ("session"); + + /* make sure the keyring exists; if an error occurs, use + the session keyring */ + result = gnome_keyring_create_sync(keyring_name, NULL); + if ((result != GNOME_KEYRING_RESULT_OK) && + (result != GNOME_KEYRING_RESULT_ALREADY_EXISTS)) + keyring_name = g_strdup ("session"); + gnome_keyring_item_create (keyring_name, GNOME_KEYRING_ITEM_GENERIC_SECRET, key_name, @@ -1983,14 +1992,22 @@ /* try to get the password from the GNOME Keyring first */ password = get_gnome_keyring_password (context); - if (context->debug) - fprintf (stderr, "password: %s\n", password); if (password == NULL) - password = ask_pass (context, buf, ask_pass_data, error); + { + password = ask_pass (context, buf, ask_pass_data, error); + if (context->debug) + { + fprintf (stderr, "no password on keyring\n"); + if (password == NULL) + fprintf (stderr, "no password from ask_pass!\n"); + } + } else - used_gnome_keyring = TRUE; - if (context->debug) - fprintf (stderr, "password: %s\n", password); + { + if (context->debug) + fprintf (stderr, "password from keyring found\n"); + used_gnome_keyring = TRUE; + } if (password == NULL || (error && (*error))) { if (context->debug)