Thread: pg_hba.conf additional comment re local line
The attached tiny patch will possibly help to avoid some confusion by Windows users about the "local" line in pg_hba.conf (and thus help reduce queries to us ;-) ). It also removes an essentially content-free suffix in 2 nearby comment lines. cheers andrew Index: src/backend/libpq/pg_hba.conf.sample =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/libpq/pg_hba.conf.sample,v retrieving revision 1.53 diff -c -w -r1.53 pg_hba.conf.sample *** src/backend/libpq/pg_hba.conf.sample 26 Aug 2004 16:50:05 -0000 1.53 --- src/backend/libpq/pg_hba.conf.sample 21 Sep 2004 16:41:30 -0000 *************** *** 60,67 **** # TYPE DATABASE USER CIDR-ADDRESS METHOD local all all @authmethod@ ! # IPv4-style local connections: host all all 127.0.0.1/32 @authmethod@ ! # IPv6-style local connections: host all all ::1/128 @authmethod@ --- 60,68 ---- # TYPE DATABASE USER CIDR-ADDRESS METHOD + # "local" is for Unix domain socket connections, and does not apply to Windows local all all @authmethod@ ! # IPv4 local connections: host all all 127.0.0.1/32 @authmethod@ ! # IPv6 local connections: host all all ::1/128 @authmethod@
Andrew Dunstan wrote: > The attached tiny patch will possibly help to avoid some confusion by > Windows users about the "local" line in pg_hba.conf (and thus help > reduce queries to us ;-) ). It also removes an essentially > content-free suffix in 2 nearby comment lines. Maybe initdb should just remove those lines on Windows. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Peter Eisentraut wrote: >Andrew Dunstan wrote: > > >>The attached tiny patch will possibly help to avoid some confusion by >>Windows users about the "local" line in pg_hba.conf (and thus help >>reduce queries to us ;-) ). It also removes an essentially >>content-free suffix in 2 nearby comment lines. >> >> > >Maybe initdb should just remove those lines on Windows. > > > You are probably right. initdb's filtering capabilities are (by design) rather primitive - I didn't want to clutter it up with regex code - so it's a bit less easy than it might otherwise be. This patch was done as a "quick fix". If someone doesn't beat me to it I will try to look at initdb in the next week or so. cheers andrew
Andrew Dunstan <andrew@dunslane.net> writes: > The attached tiny patch will possibly help to avoid some confusion by > Windows users about the "local" line in pg_hba.conf (and thus help > reduce queries to us ;-) ). I was wondering if we could teach initdb to remove that line altogether in Windows installations. regards, tom lane
Tom Lane wrote: >Andrew Dunstan <andrew@dunslane.net> writes: > > >>The attached tiny patch will possibly help to avoid some confusion by >>Windows users about the "local" line in pg_hba.conf (and thus help >>reduce queries to us ;-) ). >> >> > >I was wondering if we could teach initdb to remove that line altogether >in Windows installations. > > > See later email. Of course it can be done. Probably the simplest way is a new small routine called, say filter_token, which would remove lines containing a given token: static char **filter_token(char **lines, char *token); Then we could have something like: #ifdef WIN32 (orwhatever we are calling it now) conflines = filter_token(conflines,"@remove-line-for-win32@"); #else conflines = replace_token(conflines, "@remove-line-for-win32@",""); #endif Incidentally, even Unix users frequently get confused about the "local" line - one of the commonest newbie mistakes is to think it means localhost. So marking it clearly as being for Unix domain sockets would still be a Good Thing (tm). cheers andrew > regards, tom lane > >---------------------------(end of broadcast)--------------------------- >TIP 7: don't forget to increase your free space map settings > > >
The original of this seems to have gotten lost in the ether somewhere. It might turn up some day ... andrew Tom Lane wrote: >Andrew Dunstan <andrew@dunslane.net> writes: > > >>The attached tiny patch will possibly help to avoid some confusion by >>Windows users about the "local" line in pg_hba.conf (and thus help >>reduce queries to us ;-) ). >> >> > >I was wondering if we could teach initdb to remove that line altogether >in Windows installations. > > > > I think this does what Tom and Peter suggested. I don't have a Windows box to test it on, though. cheers andrew Index: src/backend/libpq/pg_hba.conf.sample =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/libpq/pg_hba.conf.sample,v retrieving revision 1.53 diff -c -w -r1.53 pg_hba.conf.sample *** src/backend/libpq/pg_hba.conf.sample 26 Aug 2004 16:50:05 -0000 1.53 --- src/backend/libpq/pg_hba.conf.sample 22 Sep 2004 14:17:41 -0000 *************** *** 60,67 **** # TYPE DATABASE USER CIDR-ADDRESS METHOD ! local all all @authmethod@ ! # IPv4-style local connections: host all all 127.0.0.1/32 @authmethod@ ! # IPv6-style local connections: host all all ::1/128 @authmethod@ --- 60,68 ---- # TYPE DATABASE USER CIDR-ADDRESS METHOD ! @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 local connections: host all all ::1/128 @authmethod@ Index: src/bin/initdb/initdb.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/bin/initdb/initdb.c,v retrieving revision 1.54 diff -c -w -r1.54 initdb.c *** src/bin/initdb/initdb.c 2 Sep 2004 17:58:41 -0000 1.54 --- src/bin/initdb/initdb.c 22 Sep 2004 14:17:42 -0000 *************** *** 147,152 **** --- 147,153 ---- static void *xmalloc(size_t size); static char *xstrdup(const char *s); static char **replace_token(char **lines, char *token, char *replacement); + static char **filter_lines_with_token(char **lines, char *token); static char **readfile(char *path); static void writefile(char *path, char **lines); static int mkdir_p(char *path, mode_t omode); *************** *** 311,316 **** --- 312,348 ---- } /* + * make a copy of lines without any that contain the token + * a sort of poor man's grep -v + * + */ + + 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; + } + + /* * get the lines from a text file */ static char ** *************** *** 1093,1098 **** --- 1125,1136 ---- 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",
Patch applied. Thanks. I adjusted the code slightly and I tested !HAVE_UNIX_SOCKETS rather than Win32. --------------------------------------------------------------------------- Andrew Dunstan wrote: > > The original of this seems to have gotten lost in the ether somewhere. > It might turn up some day ... > > andrew > > Tom Lane wrote: > > >Andrew Dunstan <andrew@dunslane.net> writes: > > > > > >>The attached tiny patch will possibly help to avoid some confusion by > >>Windows users about the "local" line in pg_hba.conf (and thus help > >>reduce queries to us ;-) ). > >> > >> > > > >I was wondering if we could teach initdb to remove that line altogether > >in Windows installations. > > > > > > > > > > I think this does what Tom and Peter suggested. I don't have a Windows > box to test it on, though. > > cheers > > andrew > > > > ---------------------------(end of broadcast)--------------------------- > TIP 7: don't forget to increase your free space map settings -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073