diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/replication/basebackup.c | 4 | ||||
-rw-r--r-- | src/bin/pg_basebackup/t/010_pg_basebackup.pl | 16 | ||||
-rw-r--r-- | src/bin/pg_checksums/pg_checksums.c | 4 | ||||
-rw-r--r-- | src/bin/pg_checksums/t/002_actions.pl | 7 | ||||
-rw-r--r-- | src/bin/pg_rewind/filemap.c | 4 | ||||
-rw-r--r-- | src/bin/pg_rewind/t/003_extrafiles.pl | 5 |
6 files changed, 40 insertions, 0 deletions
diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index dcdbc1cd999..203a1387d45 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1262,6 +1262,10 @@ sendDir(const char *path, int basepathlen, bool sizeonly, List *tablespaces, strlen(PG_TEMP_FILE_PREFIX)) == 0) continue; + /* Skip macOS system files */ + if (strcmp(de->d_name, ".DS_Store") == 0) + continue; + /* * Check if the postmaster has signaled us to exit, and abort with an * error in that case. The error handler further up will call diff --git a/src/bin/pg_basebackup/t/010_pg_basebackup.pl b/src/bin/pg_basebackup/t/010_pg_basebackup.pl index 09c540060a4..013cf8ce46d 100644 --- a/src/bin/pg_basebackup/t/010_pg_basebackup.pl +++ b/src/bin/pg_basebackup/t/010_pg_basebackup.pl @@ -73,6 +73,16 @@ foreach my $filename ( close $file; } +# Test that macOS system files are skipped. Only test on non-macOS systems +# however since creating incorrect .DS_Store files on a macOS system may have +# unintended side effects. +if ($Config{osname} ne 'darwin') +{ + open my $file, '>>', "$pgdata/.DS_Store"; + print $file "DONOTCOPY"; + close $file; +} + # Connect to a database to create global/pg_internal.init. If this is removed # the test to ensure global/pg_internal.init is not copied will return a false # positive. @@ -141,6 +151,12 @@ foreach my $filename ( ok(!-f "$tempdir/backup/$filename", "$filename not copied"); } +# We only test .DS_Store files being skipped on non-macOS systems +if ($Config{osname} ne 'darwin') +{ + ok(!-f "$tempdir/backup/.DS_Store", ".DS_Store not copied"); +} + # Unlogged relation forks other than init should not be copied ok(-f "$tempdir/backup/${baseUnloggedPath}_init", 'unlogged init fork in backup'); diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c index 52e873159d1..9a15b339b74 100644 --- a/src/bin/pg_checksums/pg_checksums.c +++ b/src/bin/pg_checksums/pg_checksums.c @@ -338,6 +338,10 @@ scan_directory(const char *basedir, const char *subdir, bool sizeonly) strlen(PG_TEMP_FILES_DIR)) == 0) continue; + /* Skip macOS system files */ + if (strcmp(de->d_name, ".DS_Store") == 0) + continue; + snprintf(fn, sizeof(fn), "%s/%s", path, de->d_name); if (lstat(fn, &st) < 0) { diff --git a/src/bin/pg_checksums/t/002_actions.pl b/src/bin/pg_checksums/t/002_actions.pl index 29a1a2a9cb6..c018a0facd9 100644 --- a/src/bin/pg_checksums/t/002_actions.pl +++ b/src/bin/pg_checksums/t/002_actions.pl @@ -3,6 +3,7 @@ use strict; use warnings; +use Config; use PostgresNode; use TestLib; use Test::More tests => 63; @@ -110,6 +111,12 @@ append_to_file "$pgdata/global/pgsql_tmp/1.1", "foo"; append_to_file "$pgdata/global/pg_internal.init", "foo"; append_to_file "$pgdata/global/pg_internal.init.123", "foo"; +# These are non-postgres macOS files, which should be ignored by the scan. +# Only perform this test on non-macOS systems though as creating incorrect +# system files may have side effects on macOS. +append_to_file "$pgdata/global/.DS_Store", "foo" + unless ($Config{osname} eq 'darwin'); + # Enable checksums. command_ok([ 'pg_checksums', '--enable', '--no-sync', '-D', $pgdata ], "checksums successfully enabled in cluster"); diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c index fbb97b5cf1a..f818afa3ed6 100644 --- a/src/bin/pg_rewind/filemap.c +++ b/src/bin/pg_rewind/filemap.c @@ -749,6 +749,10 @@ isRelDataFile(const char *path) } } + /* Skip macOS system files */ + if (strstr(path, ".DS_Store") != NULL) + return FILE_ACTION_NONE; + /* * The sscanf tests above can match files that have extra characters at * the end. To eliminate such cases, cross-check that GetRelationPath diff --git a/src/bin/pg_rewind/t/003_extrafiles.pl b/src/bin/pg_rewind/t/003_extrafiles.pl index aa4472750a8..42c2b672b51 100644 --- a/src/bin/pg_rewind/t/003_extrafiles.pl +++ b/src/bin/pg_rewind/t/003_extrafiles.pl @@ -2,6 +2,7 @@ use strict; use warnings; +use Config; use TestLib; use Test::More tests => 5; @@ -44,6 +45,10 @@ sub run_test append_to_file "$test_standby_datadir/tst_standby_dir/standby_subdir/standby_file3", "in standby3"; + # Skip testing .DS_Store files on macOS to avoid risk of side effects + append_to_file + "$test_standby_datadir/tst_standby_dir/.DS_Store", + "macOS system file" unless ($Config{osname} eq 'darwin'); mkdir "$test_master_datadir/tst_master_dir"; append_to_file "$test_master_datadir/tst_master_dir/master_file1", |