aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2017-11-01 10:20:05 -0400
committerPeter Eisentraut <peter_e@gmx.net>2017-11-01 21:44:55 -0400
commit4ba0ffaaee3f1e1c1103802c786c221a56a70497 (patch)
tree6973c8f6121b4292fafa8a5b685c8d0ec429f7db /src
parente0ec1cbffe0065a4c2d344241824bfe383a94181 (diff)
downloadpostgresql-4ba0ffaaee3f1e1c1103802c786c221a56a70497.tar.gz
postgresql-4ba0ffaaee3f1e1c1103802c786c221a56a70497.zip
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>
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 4e3a45f9892..bb098202ad8 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -201,6 +201,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);
@@ -1131,9 +1136,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;