[PINENTRY PATCH] gnome3: Test if Gcr System Prompter is available at startup.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Thu Nov 3 16:43:56 CET 2016
* gnome3/pinentry-gnome3.c (gcr_system_prompt_available): new function
tests whether it is possible to create a GcrSystemPrompt; (main):
use gcr_system_prompt_available() to decide whether to fall back to
curses or not.
Debian-bug-id: 842015
Signed-off-by: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
---
gnome3/pinentry-gnome3.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/gnome3/pinentry-gnome3.c b/gnome3/pinentry-gnome3.c
index d6d7d16..37c7a44 100644
--- a/gnome3/pinentry-gnome3.c
+++ b/gnome3/pinentry-gnome3.c
@@ -258,6 +258,39 @@ gnome3_cmd_handler (pinentry_t pe)
pinentry_cmd_handler_t pinentry_cmd_handler = gnome3_cmd_handler;
+
+/* test whether we can create a system prompt or not. This briefly
+ does create a system prompt, which blocks other tools from making
+ the same concurrent request, so we just create it to test if it is
+ available, and quickly close it.
+*/
+int gcr_system_prompt_available ()
+{
+ GcrSystemPrompt *prompt;
+ GError *error = NULL;
+ int ret = 0;
+
+ prompt = gcr_system_prompt_open (0, NULL, &error);
+ if (prompt)
+ {
+ ret = 1;
+ if (!gcr_system_prompt_close (prompt, NULL, &error))
+ fprintf (stderr, "failed to close test Gcr System Prompt (%d): %s\n",
+ error ? error->code : -1, error ? error->message : "<no GError>");
+ g_clear_object (&prompt);
+ }
+ else
+ /* This one particular failure is OK; we're clearly capable of
+ making a system prompt, even though someone else has the
+ system prompter right now: */
+ if (error && error->code == GCR_SYSTEM_PROMPT_IN_PROGRESS)
+ ret = 1;
+
+ if (error)
+ g_error_free (error);
+ return ret;
+}
+
int
main (int argc, char *argv[])
{
@@ -270,6 +303,12 @@ main (int argc, char *argv[])
" falling back to curses\n");
pinentry_cmd_handler = curses_cmd_handler;
}
+ else if (!gcr_system_prompt_available ())
+ {
+ fprintf (stderr, "No Gcr System Prompter available,"
+ " falling back to curses\n");
+ pinentry_cmd_handler = curses_cmd_handler;
+ }
#endif
pinentry_parse_opts (argc, argv);
--
2.10.1
More information about the Gnupg-devel
mailing list