1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-04-17 15:44:34 +02:00

gpgconf: Show also stuff from the Registry emulation.

* tools/gpgconf.c (my_read_reg_string): New.  Use it for the registry
listing stuff.
(show_registry_entries_from_file): Use also on Unix.
This commit is contained in:
Werner Koch 2025-04-09 10:56:09 +02:00
parent 1ed8b0e7b4
commit 07dc08aa81
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -1486,6 +1486,84 @@ show_configs_one_file (const char *fname, int global, estream_t outfp,
}
/* Read registry string wrapper which also support the GnuPG Registry
* emulation. */
static char *
my_read_reg_string (const char *name, int *r_hklm_fallback)
{
#ifdef HAVE_W32_SYSTEM
return read_w32_reg_string (name, r_hklm_fallback);
#elif GPGRT_VERSION_NUMBER >= 0x013400 /* 1.52 */
static gpgrt_nvc_t registry;
static int no_registry;
const char *s;
gpgrt_nve_t e;
char *namebuffer = NULL;
char *p;
if (r_hklm_fallback)
*r_hklm_fallback = 0; /* We only support HKLM */
if (no_registry)
return NULL;
/* Read and parse the registry if not yet done. */
if (!registry)
{
gpg_error_t err;
int lnr;
char *fname;
estream_t fp;
fname = make_filename (gnupg_sysconfdir (), "Registry", NULL);
fp = es_fopen (fname, "r");
if (!fp)
{
no_registry = 1;
return NULL;
}
if (opt.verbose)
log_info ("Note: Using Registry emulation file '%s'\n", fname);
err = gpgrt_nvc_parse (&registry, &lnr, fp, GPGRT_NVC_SECTION);
es_fclose (fp);
if (err)
{
log_info ("%s:%d: error parsing Registry emulation file: %s\n",
fname, lnr, gpg_strerror (err));
no_registry = 1;
xfree (fname);
return NULL;
}
xfree (fname);
}
if (name)
{
namebuffer = xstrdup (name);
for (p=namebuffer; *p; p++)
if (*p == '\\')
*p = '/';
name = namebuffer;
}
e = gpgrt_nvc_lookup (registry, name);
if (!e && *name != '/')
{
/* Strip any HKLM or HKCU prefix and try again. */
name = strchr (name, '/');
if (name)
e = gpgrt_nvc_lookup (registry, name);
}
xfree (namebuffer);
s = e? gpgrt_nve_value (e) : NULL;
return s? xtrystrdup (s) : NULL;
#else /* GpgRT too old */
return NULL;
#endif
}
#ifdef HAVE_W32_SYSTEM
/* Print registry entries relevant to the GnuPG system and related
* software. */
@ -1566,7 +1644,7 @@ show_other_registry_entries (estream_t outfp)
name = namebuf;
}
value = read_w32_reg_string (name, &from_hklm);
value = my_read_reg_string (name, &from_hklm);
if (!value)
continue;
@ -1592,6 +1670,7 @@ show_other_registry_entries (estream_t outfp)
xfree (namebuf);
}
#endif /*HAVE_W32_SYSTEM*/
/* Print registry entries take from a configuration file. */
@ -1633,7 +1712,7 @@ show_registry_entries_from_file (estream_t outfp)
continue;
xfree (value);
value = read_w32_reg_string (line, &from_hklm);
value = my_read_reg_string (line, &from_hklm);
if (!value)
continue;
@ -1659,7 +1738,6 @@ show_registry_entries_from_file (estream_t outfp)
es_fclose (fp);
xfree (fname);
}
#endif /*HAVE_W32_SYSTEM*/
/* Show all config files. */
@ -1759,7 +1837,6 @@ show_configs (estream_t outfp)
es_fprintf (outfp, "#+end_example\n");
}
#ifdef HAVE_W32_SYSTEM
es_fprintf (outfp, "** Registry entries\n");
es_fprintf (outfp, "#+begin_example\n");
any = 0;
@ -1776,7 +1853,7 @@ show_configs (estream_t outfp)
any = 1;
es_fprintf (outfp, "Encountered in config files:\n");
}
if ((p = read_w32_reg_string (sl->d, &from_hklm)))
if ((p = my_read_reg_string (sl->d, &from_hklm)))
es_fprintf (outfp, " %s ->%s<-%s\n", sl->d, p,
from_hklm? " [hklm]":"");
else
@ -1784,10 +1861,11 @@ show_configs (estream_t outfp)
xfree (p);
}
}
#ifdef HAVE_W32_SYSTEM
show_other_registry_entries (outfp);
#endif /*HAVE_W32_SYSTEM*/
show_registry_entries_from_file (outfp);
es_fprintf (outfp, "#+end_example\n");
#endif /*HAVE_W32_SYSTEM*/
free_strlist (list);