summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2004-08-01 06:19:26 +0000
committerBruce Momjian <bruce@momjian.us>2004-08-01 06:19:26 +0000
commitca9540d34f0ad97c5659cac30aab8a016bd9868c (patch)
tree38d0c9860cece52a106716af6ba22d95066ff5c2
parente7029b212755594bbfb4325fffd2dbd7b00eef08 (diff)
downloadpostgresql-ca9540d34f0ad97c5659cac30aab8a016bd9868c.tar.gz
Add docs for initdb --auth.
-rwxr-xr-xconfigure5
-rw-r--r--configure.in7
-rw-r--r--doc/src/sgml/ref/initdb.sgml15
-rw-r--r--src/Makefile.global.in4
-rw-r--r--src/backend/commands/dbcommands.c11
-rw-r--r--src/bin/initdb/Makefile7
-rw-r--r--src/bin/initdb/initdb.c27
-rw-r--r--src/include/port.h4
-rw-r--r--src/port/dirmod.c180
9 files changed, 201 insertions, 59 deletions
diff --git a/configure b/configure
index f4c9f36c62..066a857a49 100755
--- 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
diff --git a/configure.in b/configure.in
index e11c1a5dba..fb221e6397 100644
--- a/configure.in
+++ b/configure.in
@@ -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])
diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml
index bc92cedd18..10d65030e4 100644
--- a/doc/src/sgml/ref/initdb.sgml
+++ b/doc/src/sgml/ref/initdb.sgml
@@ -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
-->
@@ -99,6 +99,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>
<listitem>
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 7ccf9b00ef..ab2d600174 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -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)
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index b9e8c83627..bacf5aa31a 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -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.")));
}
diff --git a/src/bin/initdb/Makefile b/src/bin/initdb/Makefile
index 82f3a8ba41..fbfcf9833d 100644
--- a/src/bin/initdb/Makefile
+++ b/src/bin/initdb/Makefile
@@ -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) $< .
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index cd830ecda7..55b782004c 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -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);
@@ -252,30 +251,6 @@ xstrdup(const char *s)
}
/*
- * 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.
*
diff --git a/src/include/port.h b/src/include/port.h
index 9869674a36..ac3634e0ee 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -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 */
diff --git a/src/port/dirmod.c b/src/port/dirmod.c
index a0ab8a7a93..912a0c1ca8 100644
--- a/src/port/dirmod.c
+++ b/src/port/dirmod.c
@@ -10,21 +10,28 @@
* 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