aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2022-08-03 07:26:44 +0000
committerWerner Koch <[email protected]>2022-08-03 07:31:44 +0000
commit5fb2306b97601c2021ecaab5d109c924a1608cce (patch)
tree8eabbe3196794961b1a7890b6950be0c4ca5c178
parentg13: Remove unused variable. (diff)
downloadgnupg-5fb2306b97601c2021ecaab5d109c924a1608cce.tar.gz
gnupg-5fb2306b97601c2021ecaab5d109c924a1608cce.zip
gpgconf: Add config file for Windows Registry dumps.
* tools/gpgconf.c (show_registry_entries_from_file): New. (show_configs): Call it. * doc/examples/gpgconf.rnames: New. * doc/Makefile.am (examples): Add it.
-rw-r--r--doc/Makefile.am3
-rw-r--r--doc/examples/gpgconf.rnames12
-rw-r--r--tools/gpgconf.c71
3 files changed, 85 insertions, 1 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 08a0400fb..2d45f378e 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -25,6 +25,7 @@ examples = examples/README examples/scd-event examples/trustlist.txt \
examples/VS-NfD.prf examples/Automatic.prf \
examples/debug.prf examples/qualified.txt \
examples/common.conf \
+ examples/gpgconf.rnames examples/gpgconf.conf \
examples/systemd-user/README \
examples/systemd-user/dirmngr.service \
examples/systemd-user/dirmngr.socket \
@@ -33,7 +34,7 @@ examples = examples/README examples/scd-event examples/trustlist.txt \
examples/systemd-user/gpg-agent-ssh.socket \
examples/systemd-user/gpg-agent-browser.socket \
examples/systemd-user/gpg-agent-extra.socket \
- examples/gpgconf.conf examples/pwpattern.list
+ examples/pwpattern.list
helpfiles = help.txt help.be.txt help.ca.txt help.cs.txt \
help.da.txt help.de.txt help.el.txt help.eo.txt \
diff --git a/doc/examples/gpgconf.rnames b/doc/examples/gpgconf.rnames
new file mode 100644
index 000000000..0e837327f
--- /dev/null
+++ b/doc/examples/gpgconf.rnames
@@ -0,0 +1,12 @@
+# gpgconf-rnames.lst
+# Additional registry settings to be shown by "gpgconf -X".
+#
+# Example: HKCU\Software\GNU\GnuPG:FooBar
+#
+# HKCU := The class. Other supported classes are HKLM, HKCR, HKU,
+# and HKCC. If no class is given and the string thus starts
+# with a backslash HKCU with a fallback to HKLM is used.
+# Software\GNU\GnuPG := The actual key.
+# FooBar := The name of the item. if a name is not given the default
+# value is used.
+#
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index 7c5db792b..83ad947bb 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -1430,8 +1430,78 @@ show_other_registry_entries (estream_t outfp)
es_fprintf (outfp, "###\n");
xfree (namebuf);
}
+
+
+/* Print registry entries take from a configuration file. */
+static void
+show_registry_entries_from_file (estream_t outfp)
+{
+ gpg_error_t err;
+ char *fname;
+ estream_t fp;
+ char *line = NULL;
+ size_t length_of_line = 0;
+ size_t maxlen;
+ ssize_t len;
+ char *value = NULL;
+ int from_hklm;
+ int any = 0;
+
+ fname = make_filename (gnupg_datadir (), "gpgconf.rnames", NULL);
+ fp = es_fopen (fname, "r");
+ if (!fp)
+ {
+ err = gpg_error_from_syserror ();
+ if (gpg_err_code (err) != GPG_ERR_ENOENT)
+ log_error ("error opening '%s': %s\n", fname, gpg_strerror (err));
+ goto leave;
+ }
+
+ maxlen = 2048; /* Set limit. */
+ while ((len = es_read_line (fp, &line, &length_of_line, &maxlen)) > 0)
+ {
+ if (!maxlen)
+ {
+ err = gpg_error (GPG_ERR_LINE_TOO_LONG);
+ log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+ goto leave;
+ }
+ trim_spaces (line);
+ if (*line == '#')
+ continue;
+
+ xfree (value);
+ value = read_w32_reg_string (line, &from_hklm);
+ if (!value)
+ continue;
+
+ if (!any)
+ {
+ any = 1;
+ es_fprintf (outfp, "### Taken from gpgconf.rnames:\n");
+ }
+
+ es_fprintf (outfp, "### %s\n### ->%s<-%s\n", line, value,
+ from_hklm? " [hklm]":"");
+
+ }
+ if (len < 0 || es_ferror (fp))
+ {
+ err = gpg_error_from_syserror ();
+ log_error ("error reading '%s': %s\n", fname, gpg_strerror (err));
+ }
+
+ leave:
+ if (any)
+ es_fprintf (outfp, "###\n");
+ xfree (value);
+ xfree (line);
+ es_fclose (fp);
+ xfree (fname);
+}
#endif /*HAVE_W32_SYSTEM*/
+
/* Show all config files. */
static void
show_configs (estream_t outfp)
@@ -1539,6 +1609,7 @@ show_configs (estream_t outfp)
if (!any)
es_fprintf (outfp, "###\n");
show_other_registry_entries (outfp);
+ show_registry_entries_from_file (outfp);
#endif /*HAVE_W32_SYSTEM*/
free_strlist (list);