mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common,w32: Remove duplicated backslashes when setting the homedir.
* common/homedir.c (copy_dir_with_fixup) [W32]: Fold double backslashes. -- This is in general no problem but when we hash or compare the directory to test whether tit is the standard home directory, we may use a different socket file and thus a second instance of a daemon. GnuPG-bug-id: 6833
This commit is contained in:
parent
5ce7f8189e
commit
cc9568cd59
2 changed files with 29 additions and 2 deletions
|
@ -176,7 +176,8 @@ static char *
|
|||
copy_dir_with_fixup (const char *newdir)
|
||||
{
|
||||
char *result = NULL;
|
||||
char *p;
|
||||
char *p, *p0;
|
||||
const char *s;
|
||||
|
||||
if (!*newdir)
|
||||
return NULL;
|
||||
|
@ -208,6 +209,29 @@ copy_dir_with_fixup (const char *newdir)
|
|||
*p-- = 0;
|
||||
}
|
||||
|
||||
/* Hack to mitigate badly doubled backslashes. */
|
||||
s = result? result : newdir;
|
||||
if (s[0] == '\\' && s[1] == '\\' && s[2] != '\\')
|
||||
{
|
||||
/* UNC (\\Servername\file) or Long UNC (\\?\Servername\file)
|
||||
* Does not seem to be double quoted. */
|
||||
}
|
||||
else if (strstr (s, "\\\\"))
|
||||
{
|
||||
/* Double quotes detected. Fold them into one because that is
|
||||
* what what Windows does. This way we get a unique hash
|
||||
* regardless of the number of doubled backslashes. */
|
||||
if (!result)
|
||||
result = xstrdup (newdir);
|
||||
for (p0=p=result; *p; p++)
|
||||
{
|
||||
*p0++ = *p;
|
||||
while (*p == '\\' && p[1] == '\\')
|
||||
p++;
|
||||
}
|
||||
*p0 = 0;
|
||||
}
|
||||
|
||||
#else /*!HAVE_W32_SYSTEM*/
|
||||
|
||||
if (newdir[strlen (newdir)-1] == '/')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue