diff -up NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.c.grouppswd NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.c --- NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.c.grouppswd 2008-09-13 16:47:27.000000000 -0400 +++ NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.c 2008-10-12 12:25:08.000000000 -0400 @@ -70,6 +70,7 @@ struct GnomeTwoPasswordDialogDetails GtkWidget *remember_session_button; GtkWidget *remember_forever_button; + GtkWidget *remember_group_button; GtkWidget *radio_vbox; GtkWidget *connect_with_no_userpass_button; @@ -463,14 +464,18 @@ gnome_two_password_dialog_new (const cha gtk_widget_show_all (GTK_DIALOG (password_dialog)->vbox); password_dialog->details->remember_session_button = - gtk_check_button_new_with_mnemonic (_("_Remember passwords for this session")); + gtk_radio_button_new_with_mnemonic (NULL, _("_Remember passwords for this session")); password_dialog->details->remember_forever_button = - gtk_check_button_new_with_mnemonic (_("_Save passwords in keyring")); + gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (password_dialog->details->remember_session_button), _("_Save passwords in keyring")); + password_dialog->details->remember_group_button = + gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (password_dialog->details->remember_session_button), _("S_ave group password in keyring")); gtk_box_pack_start (GTK_BOX (vbox), password_dialog->details->remember_session_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), password_dialog->details->remember_forever_button, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), password_dialog->details->remember_group_button, + FALSE, FALSE, 0); gnome_two_password_dialog_set_username (password_dialog, username); gnome_two_password_dialog_set_password (password_dialog, password); @@ -689,9 +694,11 @@ gnome_two_password_dialog_set_show_remem if (show_remember) { gtk_widget_show (password_dialog->details->remember_session_button); gtk_widget_show (password_dialog->details->remember_forever_button); + gtk_widget_show (password_dialog->details->remember_group_button); } else { gtk_widget_hide (password_dialog->details->remember_session_button); gtk_widget_hide (password_dialog->details->remember_forever_button); + gtk_widget_hide (password_dialog->details->remember_group_button); } } @@ -699,32 +706,48 @@ void gnome_two_password_dialog_set_remember (GnomeTwoPasswordDialog *password_dialog, GnomeTwoPasswordDialogRemember remember) { - gboolean session, forever; + gboolean session, forever, group; session = FALSE; forever = FALSE; - if (remember == GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION) { + group = FALSE; + + switch (remember) { + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION: session = TRUE; - } else if (remember == GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER){ + break; + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER: forever = TRUE; + break; + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_GROUP: + group = TRUE; + break; + default: + break; } + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_session_button), session); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_forever_button), forever); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_group_button), + group); } GnomeTwoPasswordDialogRemember gnome_two_password_dialog_get_remember (GnomeTwoPasswordDialog *password_dialog) { - gboolean session, forever; + gboolean session, forever, group; session = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_session_button)); forever = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_forever_button)); + group = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (password_dialog->details->remember_group_button)); if (forever) { return GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER; } else if (session) { return GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION; + } else if (group) { + return GNOME_TWO_PASSWORD_DIALOG_REMEMBER_GROUP; } return GNOME_TWO_PASSWORD_DIALOG_REMEMBER_NOTHING; } diff -up NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.h.grouppswd NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.h --- NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.h.grouppswd 2008-09-13 16:47:27.000000000 -0400 +++ NetworkManager-vpnc-0.7.0/auth-dialog/gnome-two-password-dialog.h 2008-10-12 12:25:08.000000000 -0400 @@ -57,6 +57,7 @@ struct GnomeTwoPasswordDialogClass typedef enum { GNOME_TWO_PASSWORD_DIALOG_REMEMBER_NOTHING, GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION, + GNOME_TWO_PASSWORD_DIALOG_REMEMBER_GROUP, GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER } GnomeTwoPasswordDialogRemember; diff -up NetworkManager-vpnc-0.7.0/auth-dialog/main.c.grouppswd NetworkManager-vpnc-0.7.0/auth-dialog/main.c --- NetworkManager-vpnc-0.7.0/auth-dialog/main.c.grouppswd 2008-09-13 16:47:27.000000000 -0400 +++ NetworkManager-vpnc-0.7.0/auth-dialog/main.c 2008-10-12 12:31:57.000000000 -0400 @@ -74,9 +74,11 @@ get_secrets (const char *vpn_uuid, gnome_two_password_dialog_set_password_secondary_label (dialog, _("_Group Password:")); /* If nothing was found in the keyring, default to not remembering any secrets */ - if (found) { + if (found || *group_password) { /* Otherwise set default remember based on which keyring the secrets were found in */ - if (is_session) + if (!*password && *group_password) + gnome_two_password_dialog_set_remember (dialog, GNOME_TWO_PASSWORD_DIALOG_REMEMBER_GROUP); + else if (is_session) gnome_two_password_dialog_set_remember (dialog, GNOME_TWO_PASSWORD_DIALOG_REMEMBER_SESSION); else gnome_two_password_dialog_set_remember (dialog, GNOME_TWO_PASSWORD_DIALOG_REMEMBER_FOREVER); @@ -97,8 +99,8 @@ get_secrets (const char *vpn_uuid, gtk_widget_show (GTK_WIDGET (dialog)); - if (gnome_two_password_dialog_run_and_block (dialog)) { *password = gnome_two_password_dialog_get_password (dialog); + if (gnome_two_password_dialog_run_and_block (dialog)) { *group_password = gnome_two_password_dialog_get_password_secondary (dialog); switch (gnome_two_password_dialog_get_remember (dialog)) { @@ -110,6 +112,9 @@ get_secrets (const char *vpn_uuid, keyring_helpers_save_secret (vpn_uuid, vpn_name, NULL, VPNC_USER_PASSWORD, *password); keyring_helpers_save_secret (vpn_uuid, vpn_name, NULL, VPNC_GROUP_PASSWORD, *group_password); break; + case GNOME_TWO_PASSWORD_DIALOG_REMEMBER_GROUP: + keyring_helpers_save_secret (vpn_uuid, vpn_name, NULL, VPNC_GROUP_PASSWORD, *group_password); + break; default: break; } @@ -119,7 +124,7 @@ get_secrets (const char *vpn_uuid, gtk_widget_hide (GTK_WIDGET (dialog)); gtk_widget_destroy (GTK_WIDGET (dialog)); - return TRUE; + return (*password && *group_password); } int diff -up NetworkManager-vpnc-0.7.0/common-gnome/keyring-helpers.c.grouppswd NetworkManager-vpnc-0.7.0/common-gnome/keyring-helpers.c --- NetworkManager-vpnc-0.7.0/common-gnome/keyring-helpers.c.grouppswd 2008-10-12 12:30:24.000000000 -0400 +++ NetworkManager-vpnc-0.7.0/common-gnome/keyring-helpers.c 2008-10-12 12:30:53.000000000 -0400 @@ -84,8 +84,6 @@ keyring_helpers_lookup_secrets (const ch g_return_val_if_fail (*group_password == NULL, FALSE); *password = find_one_password (vpn_uuid, VPNC_USER_PASSWORD, is_session); - if (!*password) - return FALSE; *group_password = find_one_password (vpn_uuid, VPNC_GROUP_PASSWORD, is_session); if (!*group_password) { @@ -95,7 +93,7 @@ keyring_helpers_lookup_secrets (const ch return FALSE; } - return TRUE; + return (*password && *group_password); } GnomeKeyringResult