Prefer GnuPG-2 engines over GnuPG-1.
* src/util.h: Move some prototypes to ... * src/sys-util.h: New. * src/Makefile.am (main_sources): Add sys-util.h. * configure.ac (AH_VERBATIM): Add DIRSEP_C and DIRSEP_S. * src/dirinfo.c: Include sys-util.h. (WANT_GPG_NAME, WANT_GPGSM_NAME, WANT_G13_NAME) (WANT_UISRV_SOCKET): New. (dirinfo): Add corresponding fields. (parse_output): Add arg COMPONENTS and set new fields. (read_gpgconf_dirs): Add arg components and act upon it. (get_gpgconf_item): Call read_gpgconf_dirs two times. Add debug output. (_gpgme_get_default_gpg_name): New. (_gpgme_get_default_gpgsm_name): New. (_gpgme_get_default_g13_name): New. (_gpgme_get_default_gpgconf_name): New. (_gpgme_get_default_uisrv_socket): New. * src/engine-gpg.c, src/engine-g13.c, src/engine-gpgconf.c * src/engine-gpgsm.c, src/engine-uiserver.c: Change to use _gpgme_get_default_ instead of those from sys-util.h. * src/posix-util.c (_gpgme_get_gpg_path): Include sys-util.h. (_gpgme_get_uiserver_socket_path): Remove. * src/w32-util.c (_gpgme_get_gpg_path): Include sys-util.h. (_gpgme_get_uiserver_socket_path): Remove. -- The default engines names are now taken from the output of gpgconf. If gpgconf is not installed gpg 1 is assumed and locate the same was as gpgconf.
This commit is contained in:
parent
3881ea4e83
commit
a4c80126ae
6
NEWS
6
NEWS
@ -1,6 +1,12 @@
|
|||||||
Noteworthy changes in version 1.4.3 (unreleased)
|
Noteworthy changes in version 1.4.3 (unreleased)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
|
* The default engine names are now taken from the output of gpgconf.
|
||||||
|
If gpgconf is not found the use of gpg 1 is assumed.
|
||||||
|
|
||||||
|
* Under Windows the default engines names are first searched in the
|
||||||
|
installation directory of the gpgme DLL.
|
||||||
|
|
||||||
* Interface changes relative to the 1.4.2 release:
|
* Interface changes relative to the 1.4.2 release:
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
gpgme_signers_count NEW.
|
gpgme_signers_count NEW.
|
||||||
|
@ -920,11 +920,15 @@ AM_CONDITIONAL(HAVE_UISERVER, test "$uiserver" != "no")
|
|||||||
# Add a few constants to help porting to W32
|
# Add a few constants to help porting to W32
|
||||||
AH_VERBATIM([SEPCONSTANTS],
|
AH_VERBATIM([SEPCONSTANTS],
|
||||||
[
|
[
|
||||||
/* Separators as used in $PATH. */
|
/* Separators as used in $PATH and file name. */
|
||||||
#ifdef HAVE_DOSISH_SYSTEM
|
#ifdef HAVE_DOSISH_SYSTEM
|
||||||
#define PATHSEP_C ';'
|
#define PATHSEP_C ';'
|
||||||
|
#define DIRSEP_C '\\'
|
||||||
|
#define DIRSEP_S "\\"
|
||||||
#else
|
#else
|
||||||
#define PATHSEP_C ':'
|
#define PATHSEP_C ':'
|
||||||
|
#define DIRSEP_C '/'
|
||||||
|
#define DIRSEP_S "/"
|
||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ main_sources = \
|
|||||||
$(uiserver_components) \
|
$(uiserver_components) \
|
||||||
$(g13_components) vfs-mount.c vfs-create.c \
|
$(g13_components) vfs-mount.c vfs-create.c \
|
||||||
gpgconf.c \
|
gpgconf.c \
|
||||||
sema.h priv-io.h $(system_components) dirinfo.c \
|
sema.h priv-io.h $(system_components) sys-util.h dirinfo.c \
|
||||||
debug.c debug.h gpgme.c version.c error.c
|
debug.c debug.h gpgme.c version.c error.c
|
||||||
|
|
||||||
libgpgme_la_SOURCES = $(main_sources) \
|
libgpgme_la_SOURCES = $(main_sources) \
|
||||||
|
166
src/dirinfo.c
166
src/dirinfo.c
@ -1,5 +1,5 @@
|
|||||||
/* dirinfo.c - Get directory information
|
/* dirinfo.c - Get directory information
|
||||||
* Copyright (C) 2009 g10 Code GmbH
|
* Copyright (C) 2009, 2013 g10 Code GmbH
|
||||||
*
|
*
|
||||||
* This file is part of GPGME.
|
* This file is part of GPGME.
|
||||||
*
|
*
|
||||||
@ -29,6 +29,7 @@
|
|||||||
#include "priv-io.h"
|
#include "priv-io.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "sema.h"
|
#include "sema.h"
|
||||||
|
#include "sys-util.h"
|
||||||
|
|
||||||
DEFINE_STATIC_LOCK (dirinfo_lock);
|
DEFINE_STATIC_LOCK (dirinfo_lock);
|
||||||
|
|
||||||
@ -36,7 +37,11 @@ DEFINE_STATIC_LOCK (dirinfo_lock);
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
WANT_HOMEDIR,
|
WANT_HOMEDIR,
|
||||||
WANT_AGENT_SOCKET
|
WANT_AGENT_SOCKET,
|
||||||
|
WANT_GPG_NAME,
|
||||||
|
WANT_GPGSM_NAME,
|
||||||
|
WANT_G13_NAME,
|
||||||
|
WANT_UISRV_SOCKET
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Values retrieved via gpgconf and cached here. */
|
/* Values retrieved via gpgconf and cached here. */
|
||||||
@ -44,13 +49,18 @@ static struct {
|
|||||||
int valid; /* Cached information is valid. */
|
int valid; /* Cached information is valid. */
|
||||||
char *homedir;
|
char *homedir;
|
||||||
char *agent_socket;
|
char *agent_socket;
|
||||||
|
char *gpg_name;
|
||||||
|
char *gpgsm_name;
|
||||||
|
char *g13_name;
|
||||||
|
char *uisrv_socket;
|
||||||
} dirinfo;
|
} dirinfo;
|
||||||
|
|
||||||
|
|
||||||
/* Parse the output of "gpgconf --list-dirs". This function expects
|
/* Parse the output of "gpgconf --list-dirs". This function expects
|
||||||
that DIRINFO_LOCK is held by the caller. */
|
that DIRINFO_LOCK is held by the caller. If COMPONENTS is set, the
|
||||||
|
output of --list-components is expected. */
|
||||||
static void
|
static void
|
||||||
parse_output (char *line)
|
parse_output (char *line, int components)
|
||||||
{
|
{
|
||||||
char *value, *p;
|
char *value, *p;
|
||||||
|
|
||||||
@ -58,6 +68,14 @@ parse_output (char *line)
|
|||||||
if (!value)
|
if (!value)
|
||||||
return;
|
return;
|
||||||
*value++ = 0;
|
*value++ = 0;
|
||||||
|
if (components)
|
||||||
|
{
|
||||||
|
/* Skip the second field. */
|
||||||
|
value = strchr (value, ':');
|
||||||
|
if (!value)
|
||||||
|
return;
|
||||||
|
*value++ = 0;
|
||||||
|
}
|
||||||
p = strchr (value, ':');
|
p = strchr (value, ':');
|
||||||
if (p)
|
if (p)
|
||||||
*p = 0;
|
*p = 0;
|
||||||
@ -66,19 +84,45 @@ parse_output (char *line)
|
|||||||
if (!*value)
|
if (!*value)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!strcmp (line, "homedir") && !dirinfo.homedir)
|
if (components)
|
||||||
dirinfo.homedir = strdup (value);
|
{
|
||||||
else if (!strcmp (line, "agent-socket") && !dirinfo.agent_socket)
|
if (!strcmp (line, "gpg") && !dirinfo.gpg_name)
|
||||||
dirinfo.agent_socket = strdup (value);
|
dirinfo.gpg_name = strdup (value);
|
||||||
|
else if (!strcmp (line, "gpgsm") && !dirinfo.gpgsm_name)
|
||||||
|
dirinfo.gpgsm_name = strdup (value);
|
||||||
|
else if (!strcmp (line, "g13") && !dirinfo.g13_name)
|
||||||
|
dirinfo.g13_name = strdup (value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!strcmp (line, "homedir") && !dirinfo.homedir)
|
||||||
|
{
|
||||||
|
const char name[] = "S.uiserver";
|
||||||
|
|
||||||
|
dirinfo.homedir = strdup (value);
|
||||||
|
if (dirinfo.homedir)
|
||||||
|
{
|
||||||
|
dirinfo.uisrv_socket = malloc (strlen (dirinfo
|
||||||
|
.homedir)
|
||||||
|
+ 1 + strlen (name) + 1);
|
||||||
|
if (dirinfo.uisrv_socket)
|
||||||
|
strcpy (stpcpy (stpcpy (dirinfo.uisrv_socket, dirinfo.homedir),
|
||||||
|
DIRSEP_S), name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp (line, "agent-socket") && !dirinfo.agent_socket)
|
||||||
|
dirinfo.agent_socket = strdup (value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Read the directory information from gpgconf. This function expects
|
/* Read the directory information from gpgconf. This function expects
|
||||||
that DIRINFO_LOCK is held by the caller. */
|
that DIRINFO_LOCK is held by the caller. PGNAME is the name of the
|
||||||
|
gpgconf binary. If COMPONENTS is set, not the directories bit the
|
||||||
|
name of the componeNts are read. */
|
||||||
static void
|
static void
|
||||||
read_gpgconf_dirs (void)
|
read_gpgconf_dirs (const char *pgmname, int components)
|
||||||
{
|
{
|
||||||
const char *pgmname;
|
|
||||||
char linebuf[1024] = {0};
|
char linebuf[1024] = {0};
|
||||||
int linelen = 0;
|
int linelen = 0;
|
||||||
char * argv[3];
|
char * argv[3];
|
||||||
@ -89,12 +133,8 @@ read_gpgconf_dirs (void)
|
|||||||
int nread;
|
int nread;
|
||||||
char *mark = NULL;
|
char *mark = NULL;
|
||||||
|
|
||||||
pgmname = _gpgme_get_gpgconf_path ();
|
|
||||||
if (!pgmname)
|
|
||||||
return; /* No way. */
|
|
||||||
|
|
||||||
argv[0] = (char *)pgmname;
|
argv[0] = (char *)pgmname;
|
||||||
argv[1] = "--list-dirs";
|
argv[1] = components? "--list-components" : "--list-dirs";
|
||||||
argv[2] = NULL;
|
argv[2] = NULL;
|
||||||
|
|
||||||
if (_gpgme_io_pipe (rp, 1) < 0)
|
if (_gpgme_io_pipe (rp, 1) < 0)
|
||||||
@ -132,7 +172,7 @@ read_gpgconf_dirs (void)
|
|||||||
else
|
else
|
||||||
mark[0] = '\0';
|
mark[0] = '\0';
|
||||||
|
|
||||||
parse_output (line);
|
parse_output (line, components);
|
||||||
}
|
}
|
||||||
|
|
||||||
nused = lastmark? (lastmark + 1 - linebuf) : 0;
|
nused = lastmark? (lastmark + 1 - linebuf) : 0;
|
||||||
@ -147,14 +187,38 @@ read_gpgconf_dirs (void)
|
|||||||
|
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
get_gpgconf_dir (int what)
|
get_gpgconf_item (int what)
|
||||||
{
|
{
|
||||||
const char *result = NULL;
|
const char *result = NULL;
|
||||||
|
|
||||||
LOCK (dirinfo_lock);
|
LOCK (dirinfo_lock);
|
||||||
if (!dirinfo.valid)
|
if (!dirinfo.valid)
|
||||||
{
|
{
|
||||||
read_gpgconf_dirs ();
|
const char *pgmname;
|
||||||
|
|
||||||
|
pgmname = _gpgme_get_gpgconf_path ();
|
||||||
|
if (pgmname && access (pgmname, F_OK))
|
||||||
|
{
|
||||||
|
_gpgme_debug (DEBUG_INIT,
|
||||||
|
"gpgme_dinfo: gpgconf='%s' [not installed]\n", pgmname);
|
||||||
|
pgmname = NULL; /* Not available. */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: gpgconf='%s'\n",
|
||||||
|
pgmname? pgmname : "[null]");
|
||||||
|
if (!pgmname)
|
||||||
|
{
|
||||||
|
/* Probably gpgconf is not installed. Assume we are using
|
||||||
|
GnuPG-1. */
|
||||||
|
pgmname = _gpgme_get_gpg_path ();
|
||||||
|
if (pgmname)
|
||||||
|
dirinfo.gpg_name = strdup (pgmname);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
read_gpgconf_dirs (pgmname, 0);
|
||||||
|
read_gpgconf_dirs (pgmname, 1);
|
||||||
|
}
|
||||||
/* Even if the reading of the directories failed (e.g. due to an
|
/* Even if the reading of the directories failed (e.g. due to an
|
||||||
too old version gpgconf or no gpgconf at all), we need to
|
too old version gpgconf or no gpgconf at all), we need to
|
||||||
mark the entries as valid so that we won't try over and over
|
mark the entries as valid so that we won't try over and over
|
||||||
@ -162,11 +226,33 @@ get_gpgconf_dir (int what)
|
|||||||
the read values later because they are practically statically
|
the read values later because they are practically statically
|
||||||
allocated. */
|
allocated. */
|
||||||
dirinfo.valid = 1;
|
dirinfo.valid = 1;
|
||||||
|
if (dirinfo.gpg_name)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: gpg='%s'\n",
|
||||||
|
dirinfo.gpg_name);
|
||||||
|
if (dirinfo.g13_name)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: g13='%s'\n",
|
||||||
|
dirinfo.g13_name);
|
||||||
|
if (dirinfo.gpgsm_name)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: gpgsm='%s'\n",
|
||||||
|
dirinfo.gpgsm_name);
|
||||||
|
if (dirinfo.homedir)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: homedir='%s'\n",
|
||||||
|
dirinfo.homedir);
|
||||||
|
if (dirinfo.agent_socket)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: agent='%s'\n",
|
||||||
|
dirinfo.agent_socket);
|
||||||
|
if (dirinfo.uisrv_socket)
|
||||||
|
_gpgme_debug (DEBUG_INIT, "gpgme_dinfo: uisrv='%s'\n",
|
||||||
|
dirinfo.uisrv_socket);
|
||||||
}
|
}
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case WANT_HOMEDIR: result = dirinfo.homedir; break;
|
case WANT_HOMEDIR: result = dirinfo.homedir; break;
|
||||||
case WANT_AGENT_SOCKET: result = dirinfo.agent_socket; break;
|
case WANT_AGENT_SOCKET: result = dirinfo.agent_socket; break;
|
||||||
|
case WANT_GPG_NAME: result = dirinfo.gpg_name; break;
|
||||||
|
case WANT_GPGSM_NAME: result = dirinfo.gpgsm_name; break;
|
||||||
|
case WANT_G13_NAME: result = dirinfo.g13_name; break;
|
||||||
|
case WANT_UISRV_SOCKET: result = dirinfo.uisrv_socket; break;
|
||||||
}
|
}
|
||||||
UNLOCK (dirinfo_lock);
|
UNLOCK (dirinfo_lock);
|
||||||
return result;
|
return result;
|
||||||
@ -177,13 +263,51 @@ get_gpgconf_dir (int what)
|
|||||||
const char *
|
const char *
|
||||||
_gpgme_get_default_homedir (void)
|
_gpgme_get_default_homedir (void)
|
||||||
{
|
{
|
||||||
return get_gpgconf_dir (WANT_HOMEDIR);
|
return get_gpgconf_item (WANT_HOMEDIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the default gpg-agent socket name. Returns NULL if not known. */
|
/* Return the default gpg-agent socket name. Returns NULL if not known. */
|
||||||
const char *
|
const char *
|
||||||
_gpgme_get_default_agent_socket (void)
|
_gpgme_get_default_agent_socket (void)
|
||||||
{
|
{
|
||||||
return get_gpgconf_dir (WANT_AGENT_SOCKET);
|
return get_gpgconf_item (WANT_AGENT_SOCKET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the default gpg file name. Returns NULL if not known. */
|
||||||
|
const char *
|
||||||
|
_gpgme_get_default_gpg_name (void)
|
||||||
|
{
|
||||||
|
return get_gpgconf_item (WANT_GPG_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the default gpgsm file name. Returns NULL if not known. */
|
||||||
|
const char *
|
||||||
|
_gpgme_get_default_gpgsm_name (void)
|
||||||
|
{
|
||||||
|
return get_gpgconf_item (WANT_GPGSM_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the default g13 file name. Returns NULL if not known. */
|
||||||
|
const char *
|
||||||
|
_gpgme_get_default_g13_name (void)
|
||||||
|
{
|
||||||
|
return get_gpgconf_item (WANT_G13_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the default gpgconf file name. Returns NULL if not known.
|
||||||
|
Because gpgconf is the binary used to retrieved all these default
|
||||||
|
names, this function is merely a simple wrapper around the function
|
||||||
|
used to locate this binary. */
|
||||||
|
const char *
|
||||||
|
_gpgme_get_default_gpgconf_name (void)
|
||||||
|
{
|
||||||
|
return _gpgme_get_gpgconf_path ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the default UI-server socket name. Returns NULL if not
|
||||||
|
known. */
|
||||||
|
const char *
|
||||||
|
_gpgme_get_default_uisrv_socket (void)
|
||||||
|
{
|
||||||
|
return get_gpgconf_item (WANT_UISRV_SOCKET);
|
||||||
|
}
|
||||||
|
@ -100,7 +100,7 @@ static char *
|
|||||||
g13_get_version (const char *file_name)
|
g13_get_version (const char *file_name)
|
||||||
{
|
{
|
||||||
return _gpgme_get_program_version (file_name ? file_name
|
return _gpgme_get_program_version (file_name ? file_name
|
||||||
: _gpgme_get_g13_path ());
|
: _gpgme_get_default_g13_name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -251,11 +251,11 @@ g13_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
|
|
||||||
#if USE_DESCRIPTOR_PASSING
|
#if USE_DESCRIPTOR_PASSING
|
||||||
err = assuan_pipe_connect
|
err = assuan_pipe_connect
|
||||||
(g13->assuan_ctx, file_name ? file_name : _gpgme_get_g13_path (),
|
(g13->assuan_ctx, file_name ? file_name : _gpgme_get_default_g13_name (),
|
||||||
argv, NULL, NULL, NULL, ASSUAN_PIPE_CONNECT_FDPASSING);
|
argv, NULL, NULL, NULL, ASSUAN_PIPE_CONNECT_FDPASSING);
|
||||||
#else
|
#else
|
||||||
err = assuan_pipe_connect
|
err = assuan_pipe_connect
|
||||||
(g13->assuan_ctx, file_name ? file_name : _gpgme_get_g13_path (),
|
(g13->assuan_ctx, file_name ? file_name : _gpgme_get_default_g13_name (),
|
||||||
argv, NULL, NULL, NULL, 0);
|
argv, NULL, NULL, NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
if (err)
|
if (err)
|
||||||
@ -757,7 +757,7 @@ g13_io_event (void *engine, gpgme_event_io_t type, void *type_data)
|
|||||||
struct engine_ops _gpgme_engine_ops_g13 =
|
struct engine_ops _gpgme_engine_ops_g13 =
|
||||||
{
|
{
|
||||||
/* Static functions. */
|
/* Static functions. */
|
||||||
_gpgme_get_g13_path,
|
_gpgme_get_default_g13_name,
|
||||||
NULL,
|
NULL,
|
||||||
g13_get_version,
|
g13_get_version,
|
||||||
g13_get_req_version,
|
g13_get_req_version,
|
||||||
|
@ -296,7 +296,7 @@ static char *
|
|||||||
gpg_get_version (const char *file_name)
|
gpg_get_version (const char *file_name)
|
||||||
{
|
{
|
||||||
return _gpgme_get_program_version (file_name ? file_name
|
return _gpgme_get_program_version (file_name ? file_name
|
||||||
: _gpgme_get_gpg_path ());
|
: _gpgme_get_default_gpg_name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1296,7 +1296,7 @@ start (engine_gpg_t gpg)
|
|||||||
if (!gpg)
|
if (!gpg)
|
||||||
return gpg_error (GPG_ERR_INV_VALUE);
|
return gpg_error (GPG_ERR_INV_VALUE);
|
||||||
|
|
||||||
if (!gpg->file_name && !_gpgme_get_gpg_path ())
|
if (!gpg->file_name && !_gpgme_get_default_gpg_name ())
|
||||||
return trace_gpg_error (GPG_ERR_INV_ENGINE);
|
return trace_gpg_error (GPG_ERR_INV_ENGINE);
|
||||||
|
|
||||||
if (gpg->lc_ctype)
|
if (gpg->lc_ctype)
|
||||||
@ -1352,7 +1352,7 @@ start (engine_gpg_t gpg)
|
|||||||
fd_list[n].dup_to = -1;
|
fd_list[n].dup_to = -1;
|
||||||
|
|
||||||
status = _gpgme_io_spawn (gpg->file_name ? gpg->file_name :
|
status = _gpgme_io_spawn (gpg->file_name ? gpg->file_name :
|
||||||
_gpgme_get_gpg_path (), gpg->argv,
|
_gpgme_get_default_gpg_name (), gpg->argv,
|
||||||
IOSPAWN_FLAG_ALLOW_SET_FG,
|
IOSPAWN_FLAG_ALLOW_SET_FG,
|
||||||
fd_list, NULL, NULL, &pid);
|
fd_list, NULL, NULL, &pid);
|
||||||
{
|
{
|
||||||
@ -2401,7 +2401,7 @@ gpg_set_pinentry_mode (void *engine, gpgme_pinentry_mode_t mode)
|
|||||||
struct engine_ops _gpgme_engine_ops_gpg =
|
struct engine_ops _gpgme_engine_ops_gpg =
|
||||||
{
|
{
|
||||||
/* Static functions. */
|
/* Static functions. */
|
||||||
_gpgme_get_gpg_path,
|
_gpgme_get_default_gpg_name,
|
||||||
NULL,
|
NULL,
|
||||||
gpg_get_version,
|
gpg_get_version,
|
||||||
gpg_get_req_version,
|
gpg_get_req_version,
|
||||||
|
@ -61,7 +61,7 @@ static char *
|
|||||||
gpgconf_get_version (const char *file_name)
|
gpgconf_get_version (const char *file_name)
|
||||||
{
|
{
|
||||||
return _gpgme_get_program_version (file_name ? file_name
|
return _gpgme_get_program_version (file_name ? file_name
|
||||||
: _gpgme_get_gpgconf_path ());
|
: _gpgme_get_default_gpgconf_name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ gpgconf_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
return gpg_error_from_syserror ();
|
return gpg_error_from_syserror ();
|
||||||
|
|
||||||
gpgconf->file_name = strdup (file_name ? file_name
|
gpgconf->file_name = strdup (file_name ? file_name
|
||||||
: _gpgme_get_gpgconf_path ());
|
: _gpgme_get_default_gpgconf_name ());
|
||||||
if (!gpgconf->file_name)
|
if (!gpgconf->file_name)
|
||||||
err = gpg_error_from_syserror ();
|
err = gpg_error_from_syserror ();
|
||||||
|
|
||||||
@ -923,7 +923,7 @@ _gpgme_conf_release (gpgme_conf_comp_t conf)
|
|||||||
struct engine_ops _gpgme_engine_ops_gpgconf =
|
struct engine_ops _gpgme_engine_ops_gpgconf =
|
||||||
{
|
{
|
||||||
/* Static functions. */
|
/* Static functions. */
|
||||||
_gpgme_get_gpgconf_path,
|
_gpgme_get_default_gpgconf_name,
|
||||||
NULL,
|
NULL,
|
||||||
gpgconf_get_version,
|
gpgconf_get_version,
|
||||||
gpgconf_get_req_version,
|
gpgconf_get_req_version,
|
||||||
|
@ -120,7 +120,7 @@ static char *
|
|||||||
gpgsm_get_version (const char *file_name)
|
gpgsm_get_version (const char *file_name)
|
||||||
{
|
{
|
||||||
return _gpgme_get_program_version (file_name ? file_name
|
return _gpgme_get_program_version (file_name ? file_name
|
||||||
: _gpgme_get_gpgsm_path ());
|
: _gpgme_get_default_gpgsm_name ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -340,7 +340,8 @@ gpgsm_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
|
|
||||||
#if USE_DESCRIPTOR_PASSING
|
#if USE_DESCRIPTOR_PASSING
|
||||||
err = assuan_pipe_connect
|
err = assuan_pipe_connect
|
||||||
(gpgsm->assuan_ctx, file_name ? file_name : _gpgme_get_gpgsm_path (),
|
(gpgsm->assuan_ctx,
|
||||||
|
file_name ? file_name : _gpgme_get_default_gpgsm_name (),
|
||||||
argv, NULL, NULL, NULL, ASSUAN_PIPE_CONNECT_FDPASSING);
|
argv, NULL, NULL, NULL, ASSUAN_PIPE_CONNECT_FDPASSING);
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
@ -352,7 +353,8 @@ gpgsm_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
achild_fds[i] = (assuan_fd_t) child_fds[i];
|
achild_fds[i] = (assuan_fd_t) child_fds[i];
|
||||||
|
|
||||||
err = assuan_pipe_connect
|
err = assuan_pipe_connect
|
||||||
(gpgsm->assuan_ctx, file_name ? file_name : _gpgme_get_gpgsm_path (),
|
(gpgsm->assuan_ctx,
|
||||||
|
file_name ? file_name : _gpgme_get_default_gpgsm_name (),
|
||||||
argv, achild_fds, NULL, NULL, 0);
|
argv, achild_fds, NULL, NULL, 0);
|
||||||
|
|
||||||
/* For now... */
|
/* For now... */
|
||||||
@ -1945,7 +1947,7 @@ gpgsm_passwd (void *engine, gpgme_key_t key, unsigned int flags)
|
|||||||
struct engine_ops _gpgme_engine_ops_gpgsm =
|
struct engine_ops _gpgme_engine_ops_gpgsm =
|
||||||
{
|
{
|
||||||
/* Static functions. */
|
/* Static functions. */
|
||||||
_gpgme_get_gpgsm_path,
|
_gpgme_get_default_gpgsm_name,
|
||||||
NULL,
|
NULL,
|
||||||
gpgsm_get_version,
|
gpgsm_get_version,
|
||||||
gpgsm_get_req_version,
|
gpgsm_get_req_version,
|
||||||
|
@ -296,7 +296,7 @@ uiserver_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
|
|
||||||
err = assuan_socket_connect (uiserver->assuan_ctx,
|
err = assuan_socket_connect (uiserver->assuan_ctx,
|
||||||
file_name ?
|
file_name ?
|
||||||
file_name : _gpgme_get_uiserver_socket_path (),
|
file_name : _gpgme_get_default_uisrv_socket (),
|
||||||
0, ASSUAN_SOCKET_SERVER_FDPASSING);
|
0, ASSUAN_SOCKET_SERVER_FDPASSING);
|
||||||
if (err)
|
if (err)
|
||||||
goto leave;
|
goto leave;
|
||||||
@ -1302,7 +1302,7 @@ uiserver_io_event (void *engine, gpgme_event_io_t type, void *type_data)
|
|||||||
struct engine_ops _gpgme_engine_ops_uiserver =
|
struct engine_ops _gpgme_engine_ops_uiserver =
|
||||||
{
|
{
|
||||||
/* Static functions. */
|
/* Static functions. */
|
||||||
_gpgme_get_uiserver_socket_path,
|
_gpgme_get_default_uisrv_socket,
|
||||||
NULL,
|
NULL,
|
||||||
uiserver_get_version,
|
uiserver_get_version,
|
||||||
uiserver_get_req_version,
|
uiserver_get_req_version,
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include "sys-util.h"
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_gpgme_get_gpg_path (void)
|
_gpgme_get_gpg_path (void)
|
||||||
@ -70,29 +71,6 @@ _gpgme_get_g13_path (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
|
||||||
_gpgme_get_uiserver_socket_path (void)
|
|
||||||
{
|
|
||||||
static char *socket_path;
|
|
||||||
const char *homedir;
|
|
||||||
const char name[] = "S.uiserver";
|
|
||||||
|
|
||||||
if (socket_path)
|
|
||||||
return socket_path;
|
|
||||||
|
|
||||||
homedir = _gpgme_get_default_homedir ();
|
|
||||||
if (! homedir)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
socket_path = malloc (strlen (homedir) + 1 + strlen (name) + 1);
|
|
||||||
if (! socket_path)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
strcpy (stpcpy (stpcpy (socket_path, homedir), "/"), name);
|
|
||||||
return socket_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* See w32-util.c */
|
/* See w32-util.c */
|
||||||
int
|
int
|
||||||
_gpgme_get_conf_int (const char *key, int *value)
|
_gpgme_get_conf_int (const char *key, int *value)
|
||||||
|
29
src/sys-util.h
Normal file
29
src/sys-util.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* sys-util.h - System utilities not generally used.
|
||||||
|
* Copyright (C) 2013 g10 Code GmbH
|
||||||
|
*
|
||||||
|
* This file is part of GPGME.
|
||||||
|
*
|
||||||
|
* GPGME is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GPGME is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SYS_UTIL_H
|
||||||
|
#define SYS_UTIL_H
|
||||||
|
|
||||||
|
/*-- {posix,w32}-util.c --*/
|
||||||
|
const char *_gpgme_get_gpg_path (void);
|
||||||
|
const char *_gpgme_get_gpgsm_path (void);
|
||||||
|
const char *_gpgme_get_gpgconf_path (void);
|
||||||
|
const char *_gpgme_get_g13_path (void);
|
||||||
|
|
||||||
|
#endif /* SYS_UTIL_H */
|
11
src/util.h
11
src/util.h
@ -47,18 +47,17 @@
|
|||||||
|
|
||||||
|
|
||||||
/*-- {posix,w32}-util.c --*/
|
/*-- {posix,w32}-util.c --*/
|
||||||
const char *_gpgme_get_gpg_path (void);
|
|
||||||
const char *_gpgme_get_gpgsm_path (void);
|
|
||||||
const char *_gpgme_get_gpgconf_path (void);
|
|
||||||
const char *_gpgme_get_g13_path (void);
|
|
||||||
const char *_gpgme_get_uiserver_socket_path (void);
|
|
||||||
|
|
||||||
int _gpgme_get_conf_int (const char *key, int *value);
|
int _gpgme_get_conf_int (const char *key, int *value);
|
||||||
void _gpgme_allow_set_foreground_window (pid_t pid);
|
void _gpgme_allow_set_foreground_window (pid_t pid);
|
||||||
|
|
||||||
/*-- dirinfo.c --*/
|
/*-- dirinfo.c --*/
|
||||||
const char *_gpgme_get_default_homedir (void);
|
const char *_gpgme_get_default_homedir (void);
|
||||||
const char *_gpgme_get_default_agent_socket (void);
|
const char *_gpgme_get_default_agent_socket (void);
|
||||||
|
const char *_gpgme_get_default_gpg_name (void);
|
||||||
|
const char *_gpgme_get_default_gpgsm_name (void);
|
||||||
|
const char *_gpgme_get_default_g13_name (void);
|
||||||
|
const char *_gpgme_get_default_gpgconf_name (void);
|
||||||
|
const char *_gpgme_get_default_uisrv_socket (void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include "ath.h"
|
#include "ath.h"
|
||||||
#include "sema.h"
|
#include "sema.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "sys-util.h"
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_W32CE_SYSTEM
|
#ifndef HAVE_W32CE_SYSTEM
|
||||||
@ -492,29 +493,6 @@ _gpgme_get_g13_path (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *
|
|
||||||
_gpgme_get_uiserver_socket_path (void)
|
|
||||||
{
|
|
||||||
static char *socket_path;
|
|
||||||
const char *homedir;
|
|
||||||
const char name[] = "S.uiserver";
|
|
||||||
|
|
||||||
if (socket_path)
|
|
||||||
return socket_path;
|
|
||||||
|
|
||||||
homedir = _gpgme_get_default_homedir ();
|
|
||||||
if (! homedir)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
socket_path = malloc (strlen (homedir) + 1 + strlen (name) + 1);
|
|
||||||
if (! socket_path)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
strcpy (stpcpy (stpcpy (socket_path, homedir), "\\"), name);
|
|
||||||
return socket_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_gpgme_get_w32spawn_path (void)
|
_gpgme_get_w32spawn_path (void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user