summaryrefslogtreecommitdiff
path: root/src/bin/pg_upgrade/pg_upgrade.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_upgrade/pg_upgrade.c')
-rw-r--r--src/bin/pg_upgrade/pg_upgrade.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
index 1d351881435..cc8e8c94c5e 100644
--- a/src/bin/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -79,7 +79,7 @@ main(int argc, char **argv)
set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_upgrade"));
- /* Ensure that all files created by pg_upgrade are non-world-readable */
+ /* Set default restrictive mask until new cluster permissions are read */
umask(PG_MODE_MASK_OWNER);
parseCommandLine(argc, argv);
@@ -100,6 +100,16 @@ main(int argc, char **argv)
check_cluster_compatibility(live_check);
+ /* Set mask based on PGDATA permissions */
+ if (!GetDataDirectoryCreatePerm(new_cluster.pgdata))
+ {
+ pg_log(PG_FATAL, "unable to read permissions from \"%s\"\n",
+ new_cluster.pgdata);
+ exit(1);
+ }
+
+ umask(pg_mode_mask);
+
check_and_dump_old_cluster(live_check);