diff options
author | Werner Koch <[email protected]> | 2020-11-04 14:36:52 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2020-11-04 15:13:04 +0000 |
commit | dabc314b71378f585fac2753149f3358e32ec621 (patch) | |
tree | 794801571013593468a401a2622e52705fbf5b36 /common/homedir.c | |
parent | w32: Add another pinentry search path (diff) | |
download | gnupg-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.c | 33 |
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. */ |