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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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->new_dir);
|
||||
|
||||
@ -1303,9 +1308,14 @@ static const char *
|
||||
get_tablespace_mapping(const char *dir)
|
||||
{
|
||||
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)
|
||||
if (strcmp(dir, cell->old_dir) == 0)
|
||||
if (strcmp(canon_dir, cell->old_dir) == 0)
|
||||
return cell->new_dir;
|
||||
|
||||
return dir;
|
||||
|
Loading…
x
Reference in New Issue
Block a user