[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