mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Treat EPERM as a non-error case when checking to see if old postmaster
is still alive. This improves our odds of not getting fooled by an unrelated process when checking a stale lock file. Other checks already in place, plus one newly added in checkDataDir(), ensure that we cannot attempt to usurp the place of a postmaster belonging to a different userid, so there is no need to error out. Add comments indicating the importance of these other checks.
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.446 2005/03/10 07:14:03 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.447 2005/03/18 03:48:49 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@@ -952,9 +952,32 @@ checkDataDir(void)
|
||||
DataDir)));
|
||||
}
|
||||
|
||||
/*
|
||||
* Check that the directory belongs to my userid; if not, reject.
|
||||
*
|
||||
* This check is an essential part of the interlock that prevents two
|
||||
* postmasters from starting in the same directory (see CreateLockFile()).
|
||||
* Do not remove or weaken it.
|
||||
*
|
||||
* XXX can we safely enable this check on Windows?
|
||||
*/
|
||||
#if !defined(WIN32) && !defined(__CYGWIN__)
|
||||
if (stat_buf.st_uid != geteuid())
|
||||
ereport(FATAL,
|
||||
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||
errmsg("data directory \"%s\" has wrong ownership",
|
||||
DataDir),
|
||||
errhint("The server must be started by the user that owns the data directory.")));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Check if the directory has group or world access. If so, reject.
|
||||
*
|
||||
* It would be possible to allow weaker constraints (for example, allow
|
||||
* group access) but we cannot make a general assumption that that is
|
||||
* okay; for example there are platforms where nearly all users customarily
|
||||
* belong to the same group. Perhaps this test should be configurable.
|
||||
*
|
||||
* XXX temporarily suppress check when on Windows, because there may not
|
||||
* be proper support for Unix-y file permissions. Need to think of a
|
||||
* reasonable check to apply on Windows.
|
||||
|
||||
Reference in New Issue
Block a user