Signed-off-by: Murilo Opsfelder Araujo <[email protected]>
Conflicts:
auth-dialog/main.c
---
auth-dialog/main.c | 72 +++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 58 insertions(+), 14 deletions(-)
diff --git a/auth-dialog/main.c b/auth-dialog/main.c
index fe1620b..e69b618 100644
--- a/auth-dialog/main.c
+++ b/auth-dialog/main.c
@@ -152,9 +152,50 @@ struct gconf_key {
struct gconf_key *next;
};
+/* This struct holds all information we need to add a password to
+ * gnome-keyring. It’s used in success_passwords. */
+struct keyring_password {
+ char *description;
+ char *password;
+ char *vpn_uuid;
+ char *auth_id;
+ char *label;
+};
+
+static void keyring_password_free(gpointer data);
+static void keyring_store_passwords(gpointer key, gpointer value, gpointer
user_data);
+
+static void keyring_password_free(gpointer data)
+{
+ struct keyring_password *kp = (struct keyring_password*)data;
+ g_free(kp->description);
+ g_free(kp->password);
+ g_free(kp->vpn_uuid);
+ g_free(kp->auth_id);
+ g_free(kp->label);
+ g_free(kp);
+}
+
+static void keyring_store_passwords(gpointer key, gpointer value, gpointer
user_data)
+{
+ struct keyring_password *kp = (struct keyring_password*)value;
+ gnome_keyring_store_password_sync (
+ OPENCONNECT_SCHEMA,
+ GNOME_KEYRING_DEFAULT,
+ kp->description,
+ kp->password,
+ "vpn_uuid", kp->vpn_uuid,
+ "auth_id", kp->auth_id,
+ "label", kp->label,
+ NULL
+ );
+}
+
+
typedef struct auth_ui_data {
char *vpn_name;
char *vpn_uuid;
+ GHashTable *success_passwords;
struct openconnect_info *vpninfo;
struct gconf_key *success_keys;
GtkWidget *dialog;
@@ -740,22 +781,16 @@ static int nm_process_auth_form (void *cbdata, struct
oc_auth_form *form)
if (data->opt->type == OC_FORM_OPT_PASSWORD) {
/* store the password in gnome-keyring
*/
- char *description;
//int result;
- description =
g_strdup_printf(_("OpenConnect: %s: %s:%s"), ui_data->vpn_name, form->auth_id,
data->opt->name);
- gnome_keyring_store_password_sync (
- OPENCONNECT_SCHEMA,
- GNOME_KEYRING_DEFAULT,
- description,
- data->entry_text, /*
password */
- "vpn_uuid",
ui_data->vpn_uuid,
- "auth_id",
form->auth_id,
- "label",
data->opt->name,
- NULL
- );
- // TODO: err
- g_free(description);
+ struct keyring_password *kp =
g_new(struct keyring_password, 1);
+ kp->description =
g_strdup_printf(_("OpenConnect: %s: %s:%s"), ui_data->vpn_name, form->auth_id,
data->opt->name);
+ kp->password =
g_strdup(data->entry_text);
+ kp->vpn_uuid =
g_strdup(ui_data->vpn_uuid);
+ kp->auth_id = g_strdup(form->auth_id);
+ kp->label = g_strdup(data->opt->name);
+ g_hash_table_insert
(ui_data->success_passwords,
+
g_strdup(kp->description), kp);
}
}
g_slice_free (ui_fragment_data, data);
@@ -1287,6 +1322,7 @@ static gboolean cookie_obtained(auth_ui_data *ui_data)
g_free(k->value);
g_free(k);
}
+ g_hash_table_remove_all (ui_data->success_passwords);
connect_host(ui_data);
return FALSE;
}
@@ -1327,6 +1363,11 @@ static gboolean cookie_obtained(auth_ui_data *ui_data)
openconnect_clear_cookie(ui_data->vpninfo);
printf("\n\n");
fflush(stdout);
+ g_hash_table_foreach(
+ ui_data->success_passwords,
+ keyring_store_passwords,
+ NULL);
+
ui_data->retval = 0;
gtk_main_quit();
@@ -1344,6 +1385,7 @@ static gboolean cookie_obtained(auth_ui_data *ui_data)
g_free(k->value);
g_free(k);
}
+ g_hash_table_remove_all (ui_data->success_passwords);
return FALSE;
}
@@ -1598,6 +1640,8 @@ static auth_ui_data *init_ui_data (char *vpn_name, char
*vpn_uuid)
ui_data->cert_response_changed = g_cond_new();
ui_data->vpn_name = vpn_name;
ui_data->vpn_uuid = vpn_uuid;
+ ui_data->success_passwords = g_hash_table_new_full (g_str_hash,
g_str_equal,
+ g_free,
keyring_password_free);
if (pipe(ui_data->cancel_pipes)) {
/* This should never happen, and the world is probably about
to come crashing down around our ears. But attempt to cope
--
1.8.0
_______________________________________________
networkmanager-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/networkmanager-list