mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-20 14:37:08 +01:00
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>
This commit is contained in:
parent
c8f6f6bbc8
commit
dabc314b71
@ -61,6 +61,7 @@
|
|||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "sysutils.h"
|
#include "sysutils.h"
|
||||||
|
#include "i18n.h"
|
||||||
#include "zb32.h"
|
#include "zb32.h"
|
||||||
|
|
||||||
/* The GnuPG homedir. This is only accessed by the functions
|
/* 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
|
/* Return the homedir. The returned string is valid until another
|
||||||
* gnupg-set-homedir call. This is always an absolute directory name.
|
* gnupg-set-homedir call. This is always an absolute directory name.
|
||||||
* The function replaces the former global var opt.homedir. */
|
* The function replaces the former global var opt.homedir. */
|
||||||
|
@ -260,6 +260,7 @@ const char *get_keyalgo_string (enum gcry_pk_algos algo,
|
|||||||
const char *standard_homedir (void);
|
const char *standard_homedir (void);
|
||||||
const char *default_homedir (void);
|
const char *default_homedir (void);
|
||||||
void gnupg_set_homedir (const char *newdir);
|
void gnupg_set_homedir (const char *newdir);
|
||||||
|
void gnupg_maybe_make_homedir (const char *fname, int quiet);
|
||||||
const char *gnupg_homedir (void);
|
const char *gnupg_homedir (void);
|
||||||
int gnupg_default_homedir_p (void);
|
int gnupg_default_homedir_p (void);
|
||||||
const char *gnupg_daemon_rootdir (void);
|
const char *gnupg_daemon_rootdir (void);
|
||||||
|
@ -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
|
void
|
||||||
try_make_homedir (const char *fname)
|
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 )
|
if ( opt.dry_run || opt.no_homedir_creation )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (
|
gnupg_maybe_make_homedir (fname, opt.quiet);
|
||||||
#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 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ common/ksba-io-support.c
|
|||||||
common/utf8conv.c
|
common/utf8conv.c
|
||||||
common/dotlock.c
|
common/dotlock.c
|
||||||
common/init.c
|
common/init.c
|
||||||
|
common/homedir.c
|
||||||
|
|
||||||
g10/armor.c
|
g10/armor.c
|
||||||
g10/build-packet.c
|
g10/build-packet.c
|
||||||
|
25
sm/keydb.c
25
sm/keydb.c
@ -168,33 +168,10 @@ gpgsm_keydb_deinit_session_data (ctrl_t ctrl)
|
|||||||
static void
|
static void
|
||||||
try_make_homedir (const char *fname)
|
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 )
|
if ( opt.dry_run || opt.no_homedir_creation )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (
|
gnupg_maybe_make_homedir (fname, opt.quiet);
|
||||||
#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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user