aboutsummaryrefslogtreecommitdiffstats
path: root/common/homedir.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2020-11-04 14:36:52 +0000
committerWerner Koch <[email protected]>2020-11-04 15:13:04 +0000
commitdabc314b71378f585fac2753149f3358e32ec621 (patch)
tree794801571013593468a401a2622e52705fbf5b36 /common/homedir.c
parentw32: Add another pinentry search path (diff)
downloadgnupg-dabc314b71378f585fac2753149f3358e32ec621.tar.gz
gnupg-dabc314b71378f585fac2753149f3358e32ec621.zip
common: Fix duplicate implementation of try_make_homedir.
* g10/openfile.c (try_make_homedir): Move core of the code to ... * common/homedir.c (gnupg_maybe_make_homedir): new. * sm/keydb.c (try_make_homedir): Implement using new function. * common/homedir.c: Include i18n.h. * po/POTFILES.in: Add common/homedir.c. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'common/homedir.c')
-rw-r--r--common/homedir.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/common/homedir.c b/common/homedir.c
index 15475c256..830b1e2ce 100644
--- a/common/homedir.c
+++ b/common/homedir.c
@@ -61,6 +61,7 @@
#include "util.h"
#include "sysutils.h"
+#include "i18n.h"
#include "zb32.h"
/* The GnuPG homedir. This is only accessed by the functions
@@ -489,6 +490,38 @@ gnupg_set_homedir (const char *newdir)
}
+/* Create the homedir directory only if the supplied directory name is
+ * the same as the default one. This way we avoid to create arbitrary
+ * directories when a non-default home directory is used. To cope
+ * with HOME, we do compare only the suffix if we see that the default
+ * homedir does start with a tilde. If the mkdir fails the function
+ * terminates the process. If QUIET is set not diagnostic is printed
+ * on homedir creation. */
+void
+gnupg_maybe_make_homedir (const char *fname, int quiet)
+{
+ const char *defhome = standard_homedir ();
+
+ if (
+#ifdef HAVE_W32_SYSTEM
+ ( !compare_filenames (fname, defhome) )
+#else
+ ( *defhome == '~'
+ && (strlen(fname) >= strlen (defhome+1)
+ && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
+ || (*defhome != '~' && !compare_filenames( fname, defhome ) )
+#endif
+ )
+ {
+ if (gnupg_mkdir (fname, "-rwx"))
+ log_fatal ( _("can't create directory '%s': %s\n"),
+ fname, strerror(errno) );
+ else if (!quiet )
+ log_info ( _("directory '%s' created\n"), fname );
+ }
+}
+
+
/* Return the homedir. The returned string is valid until another
* gnupg-set-homedir call. This is always an absolute directory name.
* The function replaces the former global var opt.homedir. */