initdb -S should now have an explicit check that $PGDATA is valid.

The fsync code from the backend essentially assumes that somebody's already
validated PGDATA, at least to the extent of it being a readable directory.
That's safe enough for initdb's normal code path too, but "initdb -S"
doesn't have any other processing at all that touches the target directory.
To have reasonable error-case behavior, add a pg_check_dir call.
Per gripe from Peter E.
This commit is contained in:
Tom Lane 2015-05-29 17:02:58 -04:00
parent 57e1138bcc
commit 1943c000b7
1 changed files with 10 additions and 1 deletions

View File

@ -3564,10 +3564,19 @@ main(int argc, char *argv[])
exit(1);
}
/* If we only need to fsync, just to it and exit */
/* If we only need to fsync, just do it and exit */
if (sync_only)
{
setup_pgdata();
/* must check that directory is readable */
if (pg_check_dir(pg_data) <= 0)
{
fprintf(stderr, _("%s: could not access directory \"%s\": %s\n"),
progname, pg_data, strerror(errno));
exit_nicely();
}
fsync_pgdata();
return 0;
}