OSDN Git Service

Set optreset on platforms that have it before launching postmaster
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Oct 2001 18:19:41 +0000 (18:19 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Oct 2001 18:19:41 +0000 (18:19 +0000)
subprocesses; perhaps this will fix portability problem just noted by
Lockhart.  Also, move test for bad permissions of DataDir to a more
logical place.

src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/backend/utils/init/miscinit.c

index 024f62d..6358801 100644 (file)
@@ -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);
index 95d4b9e..e2f8662 100644 (file)
@@ -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");
        }
 
        /*
index 2513d74..fc8b6b3 100644 (file)
@@ -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);