aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gpgconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gpgconf.c')
-rw-r--r--tools/gpgconf.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index 061a4f727..ac709ae21 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -343,7 +343,7 @@ list_dirs (estream_t fp, char **names, int show_config_mode)
#ifdef HAVE_W32_SYSTEM
tmp = read_w32_registry_string (NULL,
- GNUPG_REGISTRY_DIR,
+ gnupg_registry_dir (),
"HomeDir");
if (tmp)
{
@@ -352,14 +352,14 @@ list_dirs (estream_t fp, char **names, int show_config_mode)
xfree (tmp);
if ((tmp = read_w32_registry_string ("HKEY_CURRENT_USER",
- GNUPG_REGISTRY_DIR,
+ gnupg_registry_dir (),
"HomeDir")))
{
xfree (tmp);
hkcu = 1;
}
if ((tmp = read_w32_registry_string ("HKEY_LOCAL_MACHINE",
- GNUPG_REGISTRY_DIR,
+ gnupg_registry_dir (),
"HomeDir")))
{
xfree (tmp);
@@ -372,15 +372,15 @@ list_dirs (estream_t fp, char **names, int show_config_mode)
"Note: homedir taken from registry key %s%s\\%s:%s\n"
"\n",
hkcu?"HKCU":"", hklm?"HKLM":"",
- GNUPG_REGISTRY_DIR, "HomeDir");
+ gnupg_registry_dir (), "HomeDir");
else
log_info ("Warning: homedir taken from registry key (%s:%s) in%s%s\n",
- GNUPG_REGISTRY_DIR, "HomeDir",
+ gnupg_registry_dir (), "HomeDir",
hkcu?" HKCU":"",
hklm?" HKLM":"");
}
else if ((tmp = read_w32_registry_string (NULL,
- GNUPG_REGISTRY_DIR,
+ gnupg_registry_dir (),
NULL)))
{
xfree (tmp);
@@ -391,7 +391,7 @@ list_dirs (estream_t fp, char **names, int show_config_mode)
"\n", GNUPG_REGISTRY_DIR);
else
log_info ("Warning: registry key (%s) without value in HKCU or HKLM\n",
- GNUPG_REGISTRY_DIR);
+ gnupg_registry_dir ());
}
#else /*!HAVE_W32_SYSTEM*/
@@ -1303,17 +1303,17 @@ show_versions_via_dirmngr (estream_t fp)
const char *pgmname;
const char *argv[2];
estream_t outfp;
- pid_t pid;
+ gnupg_process_t proc;
char *line = NULL;
size_t line_len = 0;
ssize_t length;
- int exitcode;
pgmname = gnupg_module_name (GNUPG_MODULE_NAME_DIRMNGR);
argv[0] = "--gpgconf-versions";
argv[1] = NULL;
- err = gnupg_spawn_process (pgmname, argv, NULL, 0,
- NULL, &outfp, NULL, &pid);
+ err = gnupg_process_spawn (pgmname, argv,
+ GNUPG_PROCESS_STDOUT_PIPE,
+ NULL, NULL, &proc);
if (err)
{
log_error ("error spawning %s: %s", pgmname, gpg_strerror (err));
@@ -1321,6 +1321,7 @@ show_versions_via_dirmngr (estream_t fp)
return;
}
+ gnupg_process_get_streams (proc, 0, NULL, &outfp, NULL);
while ((length = es_read_line (outfp, &line, &line_len, NULL)) > 0)
{
/* Strip newline and carriage return, if present. */
@@ -1341,14 +1342,17 @@ show_versions_via_dirmngr (estream_t fp)
pgmname, gpg_strerror (err));
}
- err = gnupg_wait_process (pgmname, pid, 1, &exitcode);
- if (err)
+ err = gnupg_process_wait (proc, 1);
+ if (!err)
{
+ int exitcode;
+
+ gnupg_process_ctl (proc, GNUPG_PROCESS_GET_EXIT_ID, &exitcode);
log_error ("running %s failed (exitcode=%d): %s\n",
pgmname, exitcode, gpg_strerror (err));
es_fprintf (fp, "[error: can't get further info]\n");
}
- gnupg_release_process (pid);
+ gnupg_process_release (proc);
xfree (line);
}
@@ -1485,13 +1489,14 @@ show_other_registry_entries (estream_t outfp)
static struct {
int group;
const char *name;
+ unsigned int prependregkey:1;
} names[] =
{
{ 1, "HKLM\\Software\\Gpg4win:Install Directory" },
{ 1, "HKLM\\Software\\Gpg4win:Desktop-Version" },
{ 1, "HKLM\\Software\\Gpg4win:VS-Desktop-Version" },
- { 1, "\\" GNUPG_REGISTRY_DIR ":HomeDir" },
- { 1, "\\" GNUPG_REGISTRY_DIR ":DefaultLogFile" },
+ { 1, ":HomeDir", 1 },
+ { 1, ":DefaultLogFile", 1 },
{ 2, "\\Software\\Microsoft\\Office\\Outlook\\Addins\\GNU.GpgOL"
":LoadBehavior" },
{ 2, "HKCU\\Software\\Microsoft\\Office\\16.0\\Outlook\\Options\\Mail:"
@@ -1537,6 +1542,13 @@ show_other_registry_entries (estream_t outfp)
names[idx].name, NULL);
name = namebuf;
}
+ else if (names[idx].prependregkey)
+ {
+ xfree (namebuf);
+ namebuf = xstrconcat ("\\", gnupg_registry_dir (),
+ names[idx].name, NULL);
+ name = namebuf;
+ }
value = read_w32_reg_string (name, &from_hklm);
if (!value)