mirror of
git://git.gnupg.org/gnupg.git
synced 2024-05-29 21:58:04 +02:00
common: Strip trailing slashes from the homedir.
* common/homedir.c (default_homedir): Strip trailing slashes. (gnupg_set_homedir): Ditto. -- is_gnupg_default_homedir() does not ignore trailing slashes when comparing directory names. This can lead to multiple agents started on the same directory if the homedir was specified with --homedir or GNUPGHOME without or with a number of slashes. We now make sure that the home directory name never ends in a slash (except for the roo of course). GnuPG-bug-id: 3295 Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
0ef50340ef
commit
24c7aa0d58
|
@ -247,7 +247,7 @@ default_homedir (void)
|
||||||
{
|
{
|
||||||
if (!dir || !*dir)
|
if (!dir || !*dir)
|
||||||
{
|
{
|
||||||
char *tmp;
|
char *tmp, *p;
|
||||||
|
|
||||||
tmp = read_w32_registry_string (NULL,
|
tmp = read_w32_registry_string (NULL,
|
||||||
GNUPG_REGISTRY_DIR,
|
GNUPG_REGISTRY_DIR,
|
||||||
|
@ -258,7 +258,13 @@ default_homedir (void)
|
||||||
tmp = NULL;
|
tmp = NULL;
|
||||||
}
|
}
|
||||||
if (tmp)
|
if (tmp)
|
||||||
saved_dir = tmp;
|
{
|
||||||
|
/* Strip trailing backslashes. */
|
||||||
|
p = tmp + strlen (tmp) - 1;
|
||||||
|
while (p > tmp && *p == '\\')
|
||||||
|
*p-- = 0;
|
||||||
|
saved_dir = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!saved_dir)
|
if (!saved_dir)
|
||||||
|
@ -267,10 +273,27 @@ default_homedir (void)
|
||||||
dir = saved_dir;
|
dir = saved_dir;
|
||||||
}
|
}
|
||||||
#endif /*HAVE_W32_SYSTEM*/
|
#endif /*HAVE_W32_SYSTEM*/
|
||||||
|
|
||||||
if (!dir || !*dir)
|
if (!dir || !*dir)
|
||||||
dir = GNUPG_DEFAULT_HOMEDIR;
|
dir = GNUPG_DEFAULT_HOMEDIR;
|
||||||
else if (!is_gnupg_default_homedir (dir))
|
else
|
||||||
non_default_homedir = 1;
|
{
|
||||||
|
/* Strip trailing slashes if any. */
|
||||||
|
if (dir[strlen (dir)-1] == '/')
|
||||||
|
{
|
||||||
|
char *tmp, *p;
|
||||||
|
|
||||||
|
tmp = xstrdup (dir);
|
||||||
|
p = tmp + strlen (tmp) - 1;
|
||||||
|
while (p > tmp && *p == '/')
|
||||||
|
*p-- = 0;
|
||||||
|
|
||||||
|
dir = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_gnupg_default_homedir (dir))
|
||||||
|
non_default_homedir = 1;
|
||||||
|
}
|
||||||
|
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
@ -403,12 +426,40 @@ w32_commondir (void)
|
||||||
void
|
void
|
||||||
gnupg_set_homedir (const char *newdir)
|
gnupg_set_homedir (const char *newdir)
|
||||||
{
|
{
|
||||||
|
char *tmp = NULL;
|
||||||
|
|
||||||
if (!newdir || !*newdir)
|
if (!newdir || !*newdir)
|
||||||
newdir = default_homedir ();
|
newdir = default_homedir ();
|
||||||
else if (!is_gnupg_default_homedir (newdir))
|
else
|
||||||
non_default_homedir = 1;
|
{
|
||||||
|
/* Remove trailing slashes from NEWSDIR. */
|
||||||
|
if (newdir[strlen (newdir)-1] == '/'
|
||||||
|
#ifdef HAVE_W32_SYSTEM
|
||||||
|
|| newdir[strlen (newdir)-1] == '\\'
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
tmp = xstrdup (newdir);
|
||||||
|
p = tmp + strlen (tmp) - 1;
|
||||||
|
while (p > tmp
|
||||||
|
&& (*p == '/'
|
||||||
|
#ifdef HAVE_W32_SYSTEM
|
||||||
|
|| *p == '\\'
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
)
|
||||||
|
*p-- = 0;
|
||||||
|
|
||||||
|
newdir = tmp;
|
||||||
|
}
|
||||||
|
if (!is_gnupg_default_homedir (newdir))
|
||||||
|
non_default_homedir = 1;
|
||||||
|
}
|
||||||
xfree (the_gnupg_homedir);
|
xfree (the_gnupg_homedir);
|
||||||
the_gnupg_homedir = make_absfilename (newdir, NULL);;
|
the_gnupg_homedir = make_absfilename (newdir, NULL);;
|
||||||
|
xfree (tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -486,7 +486,8 @@ AH_BOTTOM([
|
||||||
#define SAFE_VERSION_DOT '.'
|
#define SAFE_VERSION_DOT '.'
|
||||||
#define SAFE_VERSION_DASH '-'
|
#define SAFE_VERSION_DASH '-'
|
||||||
|
|
||||||
/* Some global constants. */
|
/* Some global constants.
|
||||||
|
* Note that the homedir must not end in a slash. */
|
||||||
#ifdef HAVE_DOSISH_SYSTEM
|
#ifdef HAVE_DOSISH_SYSTEM
|
||||||
# ifdef HAVE_DRIVE_LETTERS
|
# ifdef HAVE_DRIVE_LETTERS
|
||||||
# define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
|
# define GNUPG_DEFAULT_HOMEDIR "c:/gnupg"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user