mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
* b64enc.c: Include stdio.h and string.h
* gpgsm.c: New option --prefer-system-dirmngr. * call-dirmngr.c (start_dirmngr): Implement this option. * gpgconf-comp.c <dirmngr>: Add the proxy options. <gpgsm>: Add --prefer-system-daemon.
This commit is contained in:
parent
a2ecb6285e
commit
c7b97075aa
16 changed files with 131 additions and 38 deletions
|
@ -35,6 +35,8 @@
|
|||
#include "i18n.h"
|
||||
#include "keydb.h"
|
||||
|
||||
/* The name of the socket for a system daemon. */
|
||||
#define DEFAULT_SOCKET_NAME "/var/run/dirmngr/socket"
|
||||
|
||||
struct membuf {
|
||||
size_t len;
|
||||
|
@ -145,6 +147,7 @@ start_dirmngr (void)
|
|||
int rc;
|
||||
char *infostr, *p;
|
||||
ASSUAN_CONTEXT ctx;
|
||||
int try_default = 0;
|
||||
|
||||
if (dirmngr_ctx)
|
||||
return 0; /* fixme: We need a context for each thread or serialize
|
||||
|
@ -153,6 +156,12 @@ start_dirmngr (void)
|
|||
to take care of the implicit option sending caching. */
|
||||
|
||||
infostr = force_pipe_server? NULL : getenv ("DIRMNGR_INFO");
|
||||
if (opt.prefer_system_dirmngr && !force_pipe_server
|
||||
&&(!infostr || !*infostr))
|
||||
{
|
||||
infostr = DEFAULT_SOCKET_NAME;
|
||||
try_default = 1;
|
||||
}
|
||||
if (!infostr || !*infostr)
|
||||
{
|
||||
const char *pgmname;
|
||||
|
@ -197,26 +206,31 @@ start_dirmngr (void)
|
|||
int pid;
|
||||
|
||||
infostr = xstrdup (infostr);
|
||||
if ( !(p = strchr (infostr, ':')) || p == infostr)
|
||||
if (!try_default && *infostr)
|
||||
{
|
||||
log_error (_("malformed DIRMNGR_INFO environment variable\n"));
|
||||
xfree (infostr);
|
||||
force_pipe_server = 1;
|
||||
return start_dirmngr ();
|
||||
}
|
||||
*p++ = 0;
|
||||
pid = atoi (p);
|
||||
while (*p && *p != ':')
|
||||
p++;
|
||||
prot = *p? atoi (p+1) : 0;
|
||||
if (prot != 1)
|
||||
{
|
||||
log_error (_("dirmngr protocol version %d is not supported\n"),
|
||||
prot);
|
||||
xfree (infostr);
|
||||
force_pipe_server = 1;
|
||||
return start_dirmngr ();
|
||||
if ( !(p = strchr (infostr, ':')) || p == infostr)
|
||||
{
|
||||
log_error (_("malformed DIRMNGR_INFO environment variable\n"));
|
||||
xfree (infostr);
|
||||
force_pipe_server = 1;
|
||||
return start_dirmngr ();
|
||||
}
|
||||
*p++ = 0;
|
||||
pid = atoi (p);
|
||||
while (*p && *p != ':')
|
||||
p++;
|
||||
prot = *p? atoi (p+1) : 0;
|
||||
if (prot != 1)
|
||||
{
|
||||
log_error (_("dirmngr protocol version %d is not supported\n"),
|
||||
prot);
|
||||
xfree (infostr);
|
||||
force_pipe_server = 1;
|
||||
return start_dirmngr ();
|
||||
}
|
||||
}
|
||||
else
|
||||
pid = -1;
|
||||
|
||||
rc = assuan_socket_connect (&ctx, infostr, pid);
|
||||
xfree (infostr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue