This is a followup to commit c7af9d0b5ebaa1fdb08ff5d8a56004998bcd8103.
This patch does as expected for me! But it's been some years since I
wrote C code, so I copy existing functions and fought through compiler
errors to write this — please give a close review.
* gnu/packages/patches/gnupg-default-pinentry.patch: Use $HOME to find
the user's Guix profile and installed pinentry.
---
.../patches/gnupg-default-pinentry.patch | 39 +++++++++++++++----
1 file changed, 32 insertions(+), 7 deletions(-)
Toggle diff (54 lines)
diff --git a/gnu/packages/patches/gnupg-default-pinentry.patch b/gnu/packages/patches/gnupg-default-pinentry.patch
index 272f4b53dc..5a3189b98a 100644
--- a/gnu/packages/patches/gnupg-default-pinentry.patch
+++ b/gnu/packages/patches/gnupg-default-pinentry.patch
@@ -1,15 +1,40 @@
-Default to the pinentry program installed in ~/.guix-profile.
-
diff --git a/common/homedir.c b/common/homedir.c
-index e9e75d0..74e0aaf 100644
+index 4b6e46e88..de71e97b1 100644
--- a/common/homedir.c
+++ b/common/homedir.c
-@@ -968,7 +968,7 @@ get_default_pinentry_name (int reset)
+@@ -67,6 +67,10 @@
+ * gnupg_homedir and gnupg_set_homedir. Malloced. */
+ static char *the_gnupg_homedir;
+
++/* The user's home directory. Used in Guix to help GnuPG find the
++ * pinentry. */
++static char *the_user_homedir;
++
+ /* Flag indicating that home directory is not the default one. */
+ static byte non_default_homedir;
+
+@@ -509,6 +513,16 @@ gnupg_homedir (void)
+ return the_gnupg_homedir;
+ }
+
++/* Return the user's home directory */
++const char *
++user_homedir (void)
++{
++ const char *dir;
++ dir = getenv("HOME");
++ if (!the_user_homedir)
++ the_user_homedir = make_absfilename (dir, NULL);
++ return the_user_homedir;
++}
+
+ /* Return whether the home dir is the default one. */
+ int
+@@ -971,6 +985,7 @@ get_default_pinentry_name (int reset)
} names[] = {
/* The first entry is what we return in case we found no
other pinentry. */
-- { gnupg_bindir, DIRSEP_S "pinentry" EXEEXT_S },
-+ { gnupg_homedir, "/.guix-profile/bin/pinentry" },
++ { user_homedir, "/.guix-profile/bin/pinentry" },
+ { gnupg_bindir, DIRSEP_S "pinentry" EXEEXT_S },
#ifdef HAVE_W32_SYSTEM
/* Try Gpg4win directory (with bin and without.) */
- { w32_rootdir, "\\..\\Gpg4win\\bin\\pinentry.exe" },
--
2.26.0