Stef Walter 807308f
From 51606f299e5ee9d48096db0a5957efe26cbf7cc3 Mon Sep 17 00:00:00 2001
Stef Walter 807308f
From: Stef Walter <stefw@gnome.org>
Stef Walter 807308f
Date: Wed, 8 Aug 2012 06:06:58 +0200
Stef Walter 807308f
Subject: [PATCH 1/2] gpg-agent: Hook up the TTL cache option
Stef Walter 807308f
Stef Walter 807308f
 * So that when the gsettings gpg-cache-method is 'idle' or 'timeout'
Stef Walter 807308f
   we use gpg-cache-ttl to control how long the passphrase is cached
Stef Walter 807308f
   for.
Stef Walter 807308f
 * This is a regression from 3.3.x
Stef Walter 807308f
Stef Walter 807308f
https://bugzilla.gnome.org/show_bug.cgi?id=681081
Stef Walter 807308f
---
Stef Walter 807308f
 daemon/gpg-agent/gkd-gpg-agent-ops.c | 40 ++++++++++++++++++++++--------------
Stef Walter 807308f
 1 file changed, 25 insertions(+), 15 deletions(-)
Stef Walter 807308f
Stef Walter 807308f
diff --git a/daemon/gpg-agent/gkd-gpg-agent-ops.c b/daemon/gpg-agent/gkd-gpg-agent-ops.c
Stef Walter 807308f
index a0e8731..c8414fe 100644
Stef Walter 807308f
--- a/daemon/gpg-agent/gkd-gpg-agent-ops.c
Stef Walter 807308f
+++ b/daemon/gpg-agent/gkd-gpg-agent-ops.c
Stef Walter 807308f
@@ -322,17 +322,6 @@ load_unlock_options (GcrPrompt *prompt)
Stef Walter 807308f
 	g_free (method);
Stef Walter 807308f
 }
Stef Walter 807308f
 
Stef Walter 807308f
-static void
Stef Walter 807308f
-save_unlock_options (GcrPrompt *prompt)
Stef Walter 807308f
-{
Stef Walter 807308f
-	GSettings *settings;
Stef Walter 807308f
-
Stef Walter 807308f
-	settings = gkd_gpg_agent_settings ();
Stef Walter 807308f
-
Stef Walter 807308f
-	if (gcr_prompt_get_choice_chosen (prompt))
Stef Walter 807308f
-		g_settings_set_string (settings, "gpg-cache-method", GCR_UNLOCK_OPTION_ALWAYS);
Stef Walter 807308f
-}
Stef Walter 807308f
-
Stef Walter 807308f
 static GcrPrompt *
Stef Walter 807308f
 open_password_prompt (GckSession *session,
Stef Walter 807308f
                       const gchar *keyid,
Stef Walter 807308f
@@ -405,11 +394,14 @@ do_get_password (GckSession *session, const gchar *keyid, const gchar *errmsg,
Stef Walter 807308f
                  const gchar *prompt_text, const gchar *description, gboolean confirm)
Stef Walter 807308f
 {
Stef Walter 807308f
 	GckBuilder builder = GCK_BUILDER_INIT;
Stef Walter 807308f
+	GSettings *settings;
Stef Walter 807308f
 	GckAttributes *attrs;
Stef Walter 807308f
 	gchar *password = NULL;
Stef Walter 807308f
 	GcrPrompt *prompt;
Stef Walter 807308f
 	gboolean chosen;
Stef Walter 807308f
 	GError *error = NULL;
Stef Walter 807308f
+	gint lifetime;
Stef Walter 807308f
+	gchar *method;
Stef Walter 807308f
 
Stef Walter 807308f
 	g_assert (GCK_IS_SESSION (session));
Stef Walter 807308f
 
Stef Walter 807308f
@@ -430,21 +422,39 @@ do_get_password (GckSession *session, const gchar *keyid, const gchar *errmsg,
Stef Walter 807308f
 	}
Stef Walter 807308f
 
Stef Walter 807308f
 	if (password != NULL && keyid != NULL) {
Stef Walter 807308f
+		settings = gkd_gpg_agent_settings ();
Stef Walter 807308f
 
Stef Walter 807308f
 		/* Load up the save options */
Stef Walter 807308f
 		chosen = gcr_prompt_get_choice_chosen (prompt);
Stef Walter 807308f
 
Stef Walter 807308f
-		if (chosen)
Stef Walter 807308f
+		if (chosen) {
Stef Walter 807308f
+			g_settings_set_string (settings, "gpg-cache-method", GCR_UNLOCK_OPTION_ALWAYS);
Stef Walter 807308f
 			gck_builder_add_string (&builder, CKA_G_COLLECTION, "login");
Stef Walter 807308f
-		else
Stef Walter 807308f
+
Stef Walter 807308f
+		} else {
Stef Walter 807308f
+			method = g_settings_get_string (settings, "gpg-cache-method");
Stef Walter 807308f
+			lifetime = g_settings_get_int (settings, "gpg-cache-ttl");
Stef Walter 807308f
+
Stef Walter 807308f
+			if (g_strcmp0 (method, GCR_UNLOCK_OPTION_IDLE) == 0) {
Stef Walter 807308f
+				gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
Stef Walter 807308f
+				gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_IDLE, lifetime);
Stef Walter 807308f
+
Stef Walter 807308f
+			} else if (g_strcmp0 (method, GCR_UNLOCK_OPTION_TIMEOUT) == 0) {
Stef Walter 807308f
+				gck_builder_add_boolean (&builder, CKA_GNOME_TRANSIENT, TRUE);
Stef Walter 807308f
+				gck_builder_add_ulong (&builder, CKA_G_DESTRUCT_AFTER, lifetime);
Stef Walter 807308f
+
Stef Walter 807308f
+			} else if (g_strcmp0 (method, GCR_UNLOCK_OPTION_SESSION)){
Stef Walter 807308f
+				g_message ("Unsupported gpg-cache-method setting: %s", method);
Stef Walter 807308f
+			}
Stef Walter 807308f
+
Stef Walter 807308f
 			gck_builder_add_string (&builder, CKA_G_COLLECTION, "session");
Stef Walter 807308f
+			g_free (method);
Stef Walter 807308f
+		}
Stef Walter 807308f
 
Stef Walter 807308f
 		/* Now actually save the password */
Stef Walter 807308f
 		attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
Stef Walter 807308f
 		do_save_password (session, keyid, description, password, attrs);
Stef Walter 807308f
 		gck_attributes_unref (attrs);
Stef Walter 807308f
-
Stef Walter 807308f
-		save_unlock_options (prompt);
Stef Walter 807308f
 	}
Stef Walter 807308f
 
Stef Walter 807308f
 	g_clear_object (&prompt);
Stef Walter 807308f
-- 
Stef Walter 807308f
1.7.11.4
Stef Walter 807308f