aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/postmaster.c31
-rw-r--r--src/backend/tcop/postgres.c6
-rw-r--r--src/backend/utils/init/miscinit.c14
3 files changed, 31 insertions, 20 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 024f62de019..635880136c1 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.247 2001/10/19 17:03:08 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.248 2001/10/19 18:19:41 tgl Exp $
*
* NOTES
*
@@ -275,6 +275,7 @@ checkDataDir(const char *checkdir)
{
char path[MAXPGPATH];
FILE *fp;
+ struct stat stat_buf;
if (checkdir == NULL)
{
@@ -286,6 +287,22 @@ checkDataDir(const char *checkdir)
progname);
ExitPostmaster(2);
}
+
+ /*
+ * Check if the directory has group or world access. If so, reject.
+ */
+ if (stat(checkdir, &stat_buf) == -1)
+ {
+ if (errno == ENOENT)
+ elog(FATAL, "data directory %s was not found", checkdir);
+ else
+ elog(FATAL, "could not read permissions of directory %s: %m",
+ checkdir);
+ }
+
+ if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
+ elog(FATAL, "data directory %s has group or world access; permissions should be u=rwx (0700)",
+ checkdir);
/* Look for PG_VERSION before looking for pg_control */
ValidatePgVersion(checkdir);
@@ -421,7 +438,7 @@ PostmasterMain(int argc, char *argv[])
IgnoreSystemIndexes(false);
- optind = 1; /* start over */
+ optind = 1; /* start over (should be redundant here) */
#ifdef HAVE_INT_OPTRESET
optreset = 1;
#endif
@@ -2162,6 +2179,11 @@ DoBackend(Port *port)
av[ac] = (char *) NULL;
+ optind = 1; /* reset getopt(3) for subprocess */
+#ifdef HAVE_INT_OPTRESET
+ optreset = 1;
+#endif
+
/*
* Release postmaster's working memory context so that backend can
* recycle the space. Note this does not trash *MyProcPort, because
@@ -2451,7 +2473,10 @@ SSDataBase(int xlop)
av[ac] = (char *) NULL;
- optind = 1;
+ optind = 1; /* reset getopt(3) for subprocess */
+#ifdef HAVE_INT_OPTRESET
+ optreset = 1;
+#endif
BootstrapMain(ac, av);
ExitPostmaster(0);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 95d4b9e8c15..e2f86629335 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.236 2001/10/19 17:03:08 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.237 2001/10/19 18:19:41 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -1192,8 +1192,6 @@ PostgresMain(int argc, char *argv[],
secure = true;
ctx = PGC_POSTMASTER;
- optind = 1; /* reset after postmaster's usage */
-
while ((flag = getopt(argc, argv, "A:B:c:CD:d:Eef:FiNOPo:p:S:st:v:W:x:-:")) != EOF)
switch (flag)
{
@@ -1651,7 +1649,7 @@ PostgresMain(int argc, char *argv[],
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.236 $ $Date: 2001/10/19 17:03:08 $\n");
+ puts("$Revision: 1.237 $ $Date: 2001/10/19 18:19:41 $\n");
}
/*
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 2513d74f763..fc8b6b3ed78 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.79 2001/10/19 17:03:08 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.80 2001/10/19 18:19:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -120,7 +120,6 @@ void
SetDataDir(const char *dir)
{
char *new;
- struct stat stat_buf;
AssertArg(dir);
@@ -163,17 +162,6 @@ SetDataDir(const char *dir)
if (!new)
elog(FATAL, "out of memory");
}
-
- /*
- * Check if the directory has group or world access. If so, reject.
- */
- if (stat(new, &stat_buf) == -1)
- elog(FATAL, "could not read permissions of directory %s: %s",
- new, strerror(errno));
-
- if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
- elog(FATAL, "data directory %s has group or world access; permissions should be u=rwx (0700)",
- new);
if (DataDir)
free(DataDir);