aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gpgconf.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-03-21 16:41:10 +0000
committerWerner Koch <[email protected]>2024-03-21 16:41:10 +0000
commita0bfbdaaa2d91cda9c6dbf97462b6ac0a112af0e (patch)
treebdc4eee5e9843d6421c0daccd1d55c7e5efc7a19 /tools/gpgconf.c
parentcommon: Use a common gpgconf.ctl parser for Unix and Windows. (diff)
downloadgnupg-a0bfbdaaa2d91cda9c6dbf97462b6ac0a112af0e.tar.gz
gnupg-a0bfbdaaa2d91cda9c6dbf97462b6ac0a112af0e.zip
Allow installation with a gpgconf.ctl changed homedir.
* common/homedir.c (gpgconf_ctl): Add field "gnupg". (parse_gpgconf_ctl): Support keyword "gnupg". (my_gnupg_dirname): New. (my_fixed_default_homedir): New. (gnupg_registry_dir): New. (standard_homedir): Use my_gnupg_dirname and my_fixed_default_homedir. (default_homedir): Use gnupg_registry_dir and my_fixed_default_homedir. (_gnupg_socketdir_internal): Use my_gnupg_dirname. Increase size of prefixbuffer. (gnupg_sysconfdir): Use my_gnupg_dirname. * tools/gpgconf.c (list_dirs): Use gnupg_registry_dir. (show_other_registry_entries): Ditto. -- This will be useful to install versions of GnuPG VS-Desktop and GnuPG Desktop in addition to a standard GnuPG version. Only basic tests on Unix done; Windows testing is still outstanding. GnuPG-bug-id: 7040
Diffstat (limited to 'tools/gpgconf.c')
-rw-r--r--tools/gpgconf.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index 22569a870..a24c60f92 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -315,7 +315,7 @@ list_dirs (estream_t fp, char **names, int special)
#ifdef HAVE_W32_SYSTEM
tmp = read_w32_registry_string (NULL,
- GNUPG_REGISTRY_DIR,
+ gnupg_registry_dir (),
"HomeDir");
if (tmp)
{
@@ -324,14 +324,14 @@ list_dirs (estream_t fp, char **names, int special)
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);
@@ -344,15 +344,15 @@ list_dirs (estream_t fp, char **names, int special)
"### 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);
@@ -360,10 +360,10 @@ list_dirs (estream_t fp, char **names, int special)
if (special)
es_fprintf (fp, "\n"
"### Note: registry %s without value in HKCU or HKLM\n"
- "\n", GNUPG_REGISTRY_DIR);
+ "\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*/
@@ -1456,13 +1456,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:"
@@ -1508,6 +1509,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)