From c93872d891239b13b3c0c985e3f69bfa5a3cd8a3 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Wed, 6 Oct 2004 09:01:18 +0000
Subject: [PATCH] Remove pg_hba.conf 'local' line for Win32 because it doesn't
 support unix domain connections.

Andrew Dunstan
---
 src/backend/libpq/pg_hba.conf.sample |  7 ++---
 src/bin/initdb/initdb.c              | 39 +++++++++++++++++++++++++++-
 2 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/backend/libpq/pg_hba.conf.sample b/src/backend/libpq/pg_hba.conf.sample
index b0d1895590..d3213d9458 100644
--- a/src/backend/libpq/pg_hba.conf.sample
+++ b/src/backend/libpq/pg_hba.conf.sample
@@ -60,8 +60,9 @@
 
 # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
-local   all         all                               @authmethod@
-# IPv4-style local connections:
+@remove-line-for-win32@# "local" is for Unix domain socket connections only
+@remove-line-for-win32@local   all         all                               @authmethod@
+# IPv4 local connections:
 host    all         all         127.0.0.1/32          @authmethod@
-# IPv6-style local connections:
+# IPv6 local connections:
 host    all         all         ::1/128               @authmethod@
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 704ce36d8f..ab61221b1f 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.54 2004/09/02 17:58:41 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.55 2004/10/06 09:01:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -147,6 +147,9 @@ char		backend_exec[MAXPGPATH];
 static void *xmalloc(size_t size);
 static char *xstrdup(const char *s);
 static char **replace_token(char **lines, char *token, char *replacement);
+#ifdef WIN32
+static char **filter_lines_with_token(char **lines, char *token);
+#endif
 static char **readfile(char *path);
 static void writefile(char *path, char **lines);
 static int	mkdir_p(char *path, mode_t omode);
@@ -310,6 +313,34 @@ replace_token(char **lines, char *token, char *replacement)
 
 }
 
+/*
+ * make a copy of lines without any that contain the token
+ * a sort of poor man's grep -v
+ *
+ */
+#ifdef WIN32
+static char **
+filter_lines_with_token(char **lines, char *token)
+{
+	int			numlines = 1;
+	int			i, src, dst;
+	char	  **result;
+
+	for (i = 0; lines[i]; i++)
+		numlines++;
+
+	result = (char **) xmalloc(numlines * sizeof(char *));
+
+	for (src = 0, dst = 0; src < numlines; src++)
+	{
+		if (lines[src] == NULL || strstr(lines[src], token) == NULL)
+			result[dst++] = lines[src];
+	}
+
+	return result;
+}
+#endif
+
 /*
  * get the lines from a text file
  */
@@ -1093,6 +1124,12 @@ setup_config(void)
 
 	conflines = readfile(hba_file);
 
+#ifdef WIN32
+	conflines = filter_lines_with_token(conflines,"@remove-line-for-win32@");
+#else
+	conflines = replace_token(conflines,"@remove-line-for-win32@","");
+#endif
+
 #ifndef HAVE_IPV6
 	conflines = replace_token(conflines,
 							  "host    all         all         ::1",
-- 
2.24.1