[PINENTRY PATCH v2] gnome3: Test if Gcr System Prompter is available at startup.
Neal H. Walfield
neal at walfield.org
Sat Nov 5 22:26:51 CET 2016
Hi Daniel,
Thanks for fixing this! As discussed offline, I made a few minor
tweaks before comitting (2e17565).
:) Neal
At Thu, 3 Nov 2016 12:31:40 -0400,
Daniel Kahn Gillmor wrote:
>
> * gnome3/pinentry-gnome3.c (gcr_system_prompt_available): New. 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
>
>
> _______________________________________________
> Gnupg-devel mailing list
> Gnupg-devel at gnupg.org
> http://lists.gnupg.org/mailman/listinfo/gnupg-devel
>
More information about the Gnupg-devel
mailing list