mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
pg_basebackup: Fix comparison handling of tablespace mappings on Windows
A candidate path needs to be canonicalized before being checked against the mappings, because the mappings are also canonicalized. This is especially relevant on Windows Reported-by: nb <nbedxp@gmail.com> Author: Michael Paquier <michael.paquier@gmail.com> Reviewed-by: Ashutosh Sharma <ashu.coek88@gmail.com>
This commit is contained in:
parent
63d6b97fd9
commit
067a2259fd
@ -298,6 +298,11 @@ tablespace_list_append(const char *arg)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Comparisons done with these values should involve similarly
|
||||||
|
* canonicalized path values. This is particularly sensitive on Windows
|
||||||
|
* where path values may not necessarily use Unix slashes.
|
||||||
|
*/
|
||||||
canonicalize_path(cell->old_dir);
|
canonicalize_path(cell->old_dir);
|
||||||
canonicalize_path(cell->new_dir);
|
canonicalize_path(cell->new_dir);
|
||||||
|
|
||||||
@ -1303,9 +1308,14 @@ static const char *
|
|||||||
get_tablespace_mapping(const char *dir)
|
get_tablespace_mapping(const char *dir)
|
||||||
{
|
{
|
||||||
TablespaceListCell *cell;
|
TablespaceListCell *cell;
|
||||||
|
char canon_dir[MAXPGPATH];
|
||||||
|
|
||||||
|
/* Canonicalize path for comparison consistency */
|
||||||
|
strlcpy(canon_dir, dir, sizeof(canon_dir));
|
||||||
|
canonicalize_path(canon_dir);
|
||||||
|
|
||||||
for (cell = tablespace_dirs.head; cell; cell = cell->next)
|
for (cell = tablespace_dirs.head; cell; cell = cell->next)
|
||||||
if (strcmp(dir, cell->old_dir) == 0)
|
if (strcmp(canon_dir, cell->old_dir) == 0)
|
||||||
return cell->new_dir;
|
return cell->new_dir;
|
||||||
|
|
||||||
return dir;
|
return dir;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user