aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2020-11-04 15:36:52 +0100
committerWerner Koch <wk@gnupg.org>2020-11-04 16:13:04 +0100
commitdabc314b71378f585fac2753149f3358e32ec621 (patch)
tree794801571013593468a401a2622e52705fbf5b36
parentc8f6f6bbc8b203e633d382aa84862807c1aeb3d1 (diff)
downloadgnupg-dabc314b71378f585fac2753149f3358e32ec621.tar.gz
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 <wk@gnupg.org>
-rw-r--r--common/homedir.c33
-rw-r--r--common/util.h1
-rw-r--r--g10/openfile.c30
-rw-r--r--po/POTFILES.in1
-rw-r--r--sm/keydb.c25
5 files changed, 42 insertions, 48 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. */
diff --git a/common/util.h b/common/util.h
index 7217a5208..18217af7b 100644
--- a/common/util.h
+++ b/common/util.h
@@ -260,6 +260,7 @@ const char *get_keyalgo_string (enum gcry_pk_algos algo,
const char *standard_homedir (void);
const char *default_homedir (void);
void gnupg_set_homedir (const char *newdir);
+void gnupg_maybe_make_homedir (const char *fname, int quiet);
const char *gnupg_homedir (void);
int gnupg_default_homedir_p (void);
const char *gnupg_daemon_rootdir (void);
diff --git a/g10/openfile.c b/g10/openfile.c
index be186bd81..12a232a19 100644
--- a/g10/openfile.c
+++ b/g10/openfile.c
@@ -369,36 +369,18 @@ open_sigfile (const char *sigfilename, progress_filter_context_t *pfx)
}
+/* Create the 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. */
void
try_make_homedir (const char *fname)
{
- const char *defhome = standard_homedir ();
-
- /* Create the 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 ( opt.dry_run || opt.no_homedir_creation )
return;
- 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 (!opt.quiet )
- log_info ( _("directory '%s' created\n"), fname );
- }
+ gnupg_maybe_make_homedir (fname, opt.quiet);
}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 28d0f3602..a5a23398e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -28,6 +28,7 @@ common/ksba-io-support.c
common/utf8conv.c
common/dotlock.c
common/init.c
+common/homedir.c
g10/armor.c
g10/build-packet.c
diff --git a/sm/keydb.c b/sm/keydb.c
index 71b98d764..e092e4a01 100644
--- a/sm/keydb.c
+++ b/sm/keydb.c
@@ -168,33 +168,10 @@ gpgsm_keydb_deinit_session_data (ctrl_t ctrl)
static void
try_make_homedir (const char *fname)
{
- const char *defhome = standard_homedir ();
-
- /* Create the 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 ( opt.dry_run || opt.no_homedir_creation )
return;
- 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_info (_("can't create directory '%s': %s\n"),
- fname, strerror(errno) );
- else if (!opt.quiet )
- log_info (_("directory '%s' created\n"), fname);
- }
+ gnupg_maybe_make_homedir (fname, opt.quiet);
}