]> granicus.if.org Git - postgresql/commitdiff
Add docs for initdb --auth.
authorBruce Momjian <bruce@momjian.us>
Sun, 1 Aug 2004 06:19:26 +0000 (06:19 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 1 Aug 2004 06:19:26 +0000 (06:19 +0000)
configure
configure.in
doc/src/sgml/ref/initdb.sgml
src/Makefile.global.in
src/backend/commands/dbcommands.c
src/bin/initdb/Makefile
src/bin/initdb/initdb.c
src/include/port.h
src/port/dirmod.c

index f4c9f36c62a9275ba2cc770a65a7df14d0f21753..066a857a49a133de51b7f66c526ca5807037b9ac 100755 (executable)
--- a/configure
+++ b/configure
@@ -12063,11 +12063,6 @@ LIBOBJS="$LIBOBJS open.$ac_objext"
 LIBOBJS="$LIBOBJS rand.$ac_objext" ;;
 esac
 
-# Win32 can't do rename or unlink on an open file
-case $host_os in mingw*|cygwin*)
-LIBOBJS="$LIBOBJS dirmod.$ac_objext" ;;
-esac
-
 if test "$with_readline" = yes; then
   echo "$as_me:$LINENO: checking for rl_completion_append_character" >&5
 echo $ECHO_N "checking for rl_completion_append_character... $ECHO_C" >&6
index e11c1a5dba9ce415c47b2f771e43c8d90be0cc01..fb221e6397b31f32603c3e8afe6f196de3dded84 100644 (file)
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.369 2004/07/20 20:37:13 momjian Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.370 2004/08/01 06:19:16 momjian Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -911,11 +911,6 @@ AC_LIBOBJ(open)
 AC_LIBOBJ(rand) ;;
 esac
 
-# Win32 can't do rename or unlink on an open file
-case $host_os in mingw*|cygwin*)
-AC_LIBOBJ(dirmod) ;;
-esac
-
 if test "$with_readline" = yes; then
   PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
   AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function])
index bc92cedd18b3bec7118502b9af188d6a5290aa35..10d65030e4f1f81dc26dbdbc2d8ddadef635675b 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/initdb.sgml,v 1.31 2004/07/14 17:55:09 petere Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/initdb.sgml,v 1.32 2004/08/01 06:19:18 momjian Exp $
 PostgreSQL documentation
 -->
 
@@ -98,6 +98,19 @@ PostgreSQL documentation
 
    <para>
     <variablelist>
+     <varlistentry>
+      <term><option>-A <replaceable class="parameter">authmethod</replaceable></option></term>
+      <term><option>--auth=<replaceable class="parameter">authmethod</replaceable></option></term>
+      <listitem>
+       <para>
+        This option specifies the authentication method for local users
+        used in <filename>pg_hba.conf</>.  Do not use <literal>trust</>
+        unless you trust all local users on your system.  <literal>Trust</> 
+        is the default for ease of installation.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-D <replaceable class="parameter">directory</replaceable></option></term>
       <term><option>--pgdata=<replaceable class="parameter">directory</replaceable></option></term>
index 7ccf9b00efa170c2a6458858acf5dbea59a0000c..ab2d600174b108825e73575538fb47345f33ddc8 100644 (file)
@@ -1,5 +1,5 @@
 # -*-makefile-*-
-# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.190 2004/07/30 12:26:40 petere Exp $
+# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.191 2004/08/01 06:19:19 momjian Exp $
 
 #------------------------------------------------------------------------------
 # All PostgreSQL makefiles include this file and use the variables it sets,
@@ -347,7 +347,7 @@ endif
 #
 # substitute implementations of the C library
 
-LIBOBJS = @LIBOBJS@ exec.o noblock.o path.o pipe.o pgsleep.o pgstrcasecmp.o sprompt.o thread.o
+LIBOBJS = @LIBOBJS@ dirmod.o exec.o noblock.o path.o pipe.o pgsleep.o pgstrcasecmp.o sprompt.o thread.o
 
 ifneq (,$(LIBOBJS))
 LIBS := -lpgport $(LIBS)
index b9e8c83627437757a8cc13ba3a912146aa1180a0..bacf5aa31af92ddf979313b30556523575e7c05b 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.137 2004/06/25 21:55:53 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.138 2004/08/01 06:19:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -915,7 +915,6 @@ remove_dbtablespaces(Oid db_id)
        Relation rel;
        HeapScanDesc scan;
        HeapTuple tuple;
-       char buf[MAXPGPATH + 100];
 
        rel = heap_openr(TableSpaceRelationName, AccessShareLock);
        scan = heap_beginscan(rel, SnapshotNow, 0, NULL);
@@ -938,17 +937,11 @@ remove_dbtablespaces(Oid db_id)
                        continue;
                }
 
-#ifndef WIN32
-               snprintf(buf, sizeof(buf), "rm -rf '%s'", dstpath);
-#else
-               snprintf(buf, sizeof(buf), "rmdir /s /q \"%s\"", dstpath);
-#endif
-               if (system(buf) != 0)
+               if (!rmtree(dstpath, true))
                {
                        ereport(WARNING,
                                (errmsg("could not remove database directory \"%s\"",
                                                dstpath),
-                                errdetail("Failing system command was: %s", buf),
                                 errhint("Look in the postmaster's stderr log for more information.")));
                }
 
index 82f3a8ba41ba7943e527fbf0bea5452ba702f66b..fbfcf9833d611041447a579b211bf322940d489d 100644 (file)
@@ -5,7 +5,7 @@
 # Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
 #
-# $PostgreSQL: pgsql/src/bin/initdb/Makefile,v 1.41 2004/05/24 01:01:37 momjian Exp $
+# $PostgreSQL: pgsql/src/bin/initdb/Makefile,v 1.42 2004/08/01 06:19:23 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -15,13 +15,16 @@ include $(top_builddir)/src/Makefile.global
 
 override CPPFLAGS := -DFRONTEND -I$(libpq_srcdir) $(CPPFLAGS)
 
-OBJS=  initdb.o exec.o
+OBJS=  initdb.o dirmod.o exec.o
 
 all: submake-libpq submake-libpgport initdb
 
 initdb: $(OBJS) $(libpq_builddir)/libpq.a
        $(CC) $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) -o $@$(X)
 
+dirmod.c: % : $(top_srcdir)/src/port/%
+       rm -f $@ && $(LN_S) $< .
+
 exec.c: % : $(top_srcdir)/src/port/%
        rm -f $@ && $(LN_S) $< .
 
index cd830ecda7a6215baf255e72e363c63b77d54b2e..55b782004c45a7563a002dae64d2f1c7f97b45ff 100644 (file)
@@ -39,7 +39,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.45 2004/08/01 05:59:13 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.46 2004/08/01 06:19:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,7 +146,6 @@ char           backend_exec[MAXPGPATH];
 
 static void *xmalloc(size_t size);
 static char *xstrdup(const char *s);
-static bool rmtree(char *path, bool rmtopdir);
 static char **replace_token(char **lines, char *token, char *replacement);
 static char **readfile(char *path);
 static void writefile(char *path, char **lines);
@@ -251,30 +250,6 @@ xstrdup(const char *s)
        return result;
 }
 
-/*
- * delete a directory tree recursively
- * assumes path points to a valid directory
- * deletes everything under path
- * if rmtopdir is true deletes the directory too
- */
-static bool
-rmtree(char *path, bool rmtopdir)
-{
-       char            buf[MAXPGPATH + 64];
-
-#ifndef WIN32
-       /* doesn't handle .* files, but we don't make any... */
-       snprintf(buf, sizeof(buf), "rm -rf \"%s\"%s", path,
-                        rmtopdir ? "" : "/*");
-#else
-       snprintf(buf, sizeof(buf), "%s /s /q \"%s\"",
-                        rmtopdir ? "rmdir" : "del", path);
-#endif
-
-       return !system(buf);
-}
-
-
 /*
  * make a copy of the array of lines, with token replaced by replacement
  * the first time it occurs on each line.
index 9869674a36239910e4bb6f2b3438ea905fcc178a..ac3634e0eefd1327e42589c1500fb399ff1ef450 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/port.h,v 1.45 2004/07/23 01:58:36 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/port.h,v 1.46 2004/08/01 06:19:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -148,6 +148,8 @@ extern int  pgunlink(const char *path);
 #define unlink(path)           pgunlink(path)
 #endif
 
+extern bool rmtree(char *path, bool rmtopdir);
+
 #ifdef WIN32
 
 /* open() replacement to allow delete of held files */
index a0ab8a7a93834e7d85dbc0d00abe6573d8d76d2d..912a0c1ca8e13b6c0a20effde3ba9165a88322d6 100644 (file)
  *     Win32 (NT, Win2k, XP).  replace() doesn't work on Win95/98/Me.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/dirmod.c,v 1.12 2004/02/26 02:59:26 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/dirmod.c,v 1.13 2004/08/01 06:19:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
-#ifndef TEST_VERSION
-
-#if defined(WIN32) || defined(__CYGWIN__)
-
-
 #ifndef FRONTEND
 #include "postgres.h"
 #else
 #include "postgres_fe.h"
 #endif
+
+#include <unistd.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
+#define _(x) gettext((x))
+
+#ifndef TEST_VERSION
+
+#if defined(WIN32) || defined(__CYGWIN__)
+
+
 #include "miscadmin.h"
 
 #undef rename
@@ -82,7 +89,7 @@ pgunlink(const char *path)
                if (errno != EACCES)
                        /* set errno? */
                        return -1;
-               pg_usleep(100000);                              /* us */
+               pg_usleep(100000);              /* us */
                if (loops == 30)
 #ifndef FRONTEND
                        elog(LOG, "could not unlink \"%s\", continuing to try",
@@ -105,6 +112,165 @@ pgunlink(const char *path)
 
 #endif
 
+#if defined(WIN32) || defined(__CYGWIN__)
+#define rmt_unlink(path) pgunlink(path)
+#else
+#define rmt_unlink(path) unlink(path)
+#endif
+
+#ifdef FRONTEND
+
+static void *
+xmalloc(size_t size)
+{
+    void       *result;
+
+    result = malloc(size);
+    if (!result)
+    {
+        fprintf(stderr, _("out of memory\n"));
+        exit(1);
+    }
+    return result;
+}
+
+static char *
+xstrdup(const char *s)
+{
+    char       *result;
+
+    result = strdup(s);
+    if (!result)
+    {
+        fprintf(stderr, _("out of memory\n"));
+        exit(1);
+    }
+    return result;
+}
+
+#define xfree(n) free(n)
+
+#else
+
+/* on the backend, use palloc and friends */
+
+#define xmalloc(n)     palloc(n)
+#define xstrdup(n)     pstrdup(n)
+#define xfree(n)       pfree(n)
+
+#endif
+
+/*
+ * deallocate memory used for filenames
+ */
+
+static void
+rmt_cleanup(char ** filenames)
+{
+       char ** fn;
+
+       for (fn = filenames; *fn; fn++)
+               xfree(*fn);
+
+       xfree(filenames);
+}
+
+
+
+/*
+ * delete a directory tree recursively
+ * assumes path points to a valid directory
+ * deletes everything under path
+ * if rmtopdir is true deletes the directory too
+ *
+ */
+
+bool
+rmtree(char *path, bool rmtopdir)
+{
+       char            filepath[MAXPGPATH];
+       DIR                *dir;
+       struct dirent *file;
+       char      **filenames;
+       char      **filename;
+       int                     numnames = 0;
+       struct stat statbuf;
+
+       /*
+        * we copy all the names out of the directory before we start
+        * modifying it.
+        */
+
+       dir = opendir(path);
+       if (dir == NULL)
+               return false;
+
+       while ((file = readdir(dir)) != NULL)
+       {
+               if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)
+                       numnames++;
+       }
+
+       rewinddir(dir);
+
+       filenames = xmalloc((numnames + 2) * sizeof(char *));
+       numnames = 0;
+
+       while ((file = readdir(dir)) != NULL)
+       {
+               if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0)
+                       filenames[numnames++] = xstrdup(file->d_name);
+       }
+
+       filenames[numnames] = NULL;
+
+       closedir(dir);
+
+       /* now we have the names we can start removing things */
+
+       for (filename = filenames; *filename; filename++)
+       {
+               snprintf(filepath, MAXPGPATH, "%s/%s", path, *filename);
+
+               if (stat(filepath, &statbuf) != 0)
+               {
+                       rmt_cleanup(filenames);
+                       return false;
+               }
+
+               if (S_ISDIR(statbuf.st_mode))
+               {
+                       /* call ourselves recursively for a directory */
+                       if (!rmtree(filepath, true))
+                       {
+                               rmt_cleanup(filenames);
+                               return false;
+                       }
+               }
+               else
+               {
+                       if (rmt_unlink(filepath) != 0)
+                       {
+                               rmt_cleanup(filenames);
+                               return false;
+                       }
+               }
+       }
+
+       if (rmtopdir)
+       {
+               if (rmdir(path) != 0)
+               {
+                       rmt_cleanup(filenames);
+                       return false;
+               }
+       }
+
+       rmt_cleanup(filenames);
+       return true;
+}
+
+
 #else