Explicit config patch 7.2B4 - Mailing list pgsql-hackers
From | mlw |
---|---|
Subject | Explicit config patch 7.2B4 |
Date | |
Msg-id | 3C1CB14E.5AEFF2F@mohawksoft.com Whole thread Raw |
Responses |
Re: Explicit config patch 7.2B4
Re: Explicit config patch 7.2B4 |
List | pgsql-hackers |
I guess I will maintain this for people who want it. This allows postmaster -C /etc/pgsql/mydb.conf The "-C" option specifies a configuration file. In the config file there are two more options: datadir = '/u01/postgres' hbaconfig = '/etc/pgsql/pg_hba.conf' The "datadir" option specifies where the postgresql data directory resides. (My original patch used the setting "pgdatadir" in which the "pg" seemed redundant.) The "hbaconfig" specifies where postgresql will look for the pg_hba.conf file. If the "-D" option is specified on the command line, it overides the "datadir" option in the config file. (This is a different behavior than my original patch) If No "datadir" is specified, it must be specified either on the command line or the normal PGDATA environment variable. If no "hbaconfig" setting is set, the it will look for pg_hba.config in the data directory as always. One can start many databases with the same settings as: postmaster -C /path/default.conf -p 5432 -D /path/name1 postmaster -C /path/default.conf -p 5433 -D /path/name2 postmaster -C /path/default.conf -p 5434 -D /path/name3diff -r -u postgresql-7.2b4/src/backend/libpq/hba.c postgresql-7.2b4_config/src/backend/libpq/hba.c --- postgresql-7.2b4/src/backend/libpq/hba.c Sun Nov 11 23:29:23 2001 +++ postgresql-7.2b4_config/src/backend/libpq/hba.c Sun Dec 16 08:27:06 2001 @@ -31,6 +31,8 @@ #include <unistd.h> #include "libpq/libpq.h" +#include "utils/guc.h" + #include "miscadmin.h" #include "nodes/pg_list.h" #include "storage/fd.h" @@ -476,11 +478,20 @@ { char *conf_file; /* The name of the config file we have to * read */ - - /* put together the full pathname to the config file */ - bufsize = (strlen(DataDir) + strlen(CONF_FILE) + 2) * sizeof(char); - conf_file = (char *) palloc(bufsize); - snprintf(conf_file, bufsize, "%s/%s", DataDir, CONF_FILE); + /* Explicit HBA in config file */ + if(explicit_hbaconfig && strlen(explicit_hbaconfig)) + { + bufsize = strlen(explicit_hbaconfig)+1; + conf_file = (char *) palloc(bufsize); + strcpy(conf_file, explicit_hbaconfig); + } + else + { + /* put together the full pathname to the config file */ + bufsize = (strlen(DataDir) + strlen(CONF_FILE) + 2) * sizeof(char); + conf_file = (char *) palloc(bufsize); + snprintf(conf_file, bufsize, "%s/%s", DataDir, CONF_FILE); + } file = AllocateFile(conf_file, "r"); if (file == NULL) diff -r -u postgresql-7.2b4/src/backend/postmaster/postmaster.c postgresql-7.2b4_config/src/backend/postmaster/postmaster.c --- postgresql-7.2b4/src/backend/postmaster/postmaster.c Tue Dec 4 11:17:48 2001 +++ postgresql-7.2b4_config/src/backend/postmaster/postmaster.c Sun Dec 16 09:14:30 2001 @@ -419,10 +419,13 @@ * with the wrong argument. Death and destruction will occur. */ opterr = 1; - while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != EOF) + while ((opt = getopt(argc, argv, "A:a:B:b:c:C:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != EOF) { switch (opt) { + case 'C': + explicit_pgconfig = optarg; + break; case 'D': potential_DataDir = optarg; break; @@ -444,10 +447,24 @@ ExitPostmaster(1); } - checkDataDir(potential_DataDir); /* issues error messages */ - SetDataDir(potential_DataDir); + if(explicit_pgconfig) + { + /* Allow command line option to overide config file. */ + ProcessConfigFile(PGC_POSTMASTER); + + if(!potential_DataDir && pgdatadir) + potential_DataDir = pgdatadir; + + checkDataDir(potential_DataDir); + SetDataDir(potential_DataDir); + } + else + { + checkDataDir(potential_DataDir); /* issues error messages */ + SetDataDir(potential_DataDir); - ProcessConfigFile(PGC_POSTMASTER); + ProcessConfigFile(PGC_POSTMASTER); + } IgnoreSystemIndexes(false); @@ -457,7 +474,7 @@ optreset = 1; /* some systems need this too */ #endif - while ((opt = getopt(argc, argv, "A:a:B:b:c:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != EOF) + while ((opt = getopt(argc, argv, "A:a:B:b:c:C:D:d:Fh:ik:lm:MN:no:p:Ss-:")) != EOF) { switch (opt) { @@ -477,6 +494,9 @@ case 'b': /* Can no longer set the backend executable file to use. */ break; + case 'C': + /* Can no longer set configuration file */ + break; case 'D': /* already done above */ break; Only in postgresql-7.2b4_config/src/backend/postmaster: postmaster.c.orig diff -r -u postgresql-7.2b4/src/backend/utils/misc/guc-file.c postgresql-7.2b4_config/src/backend/utils/misc/guc-file.c --- postgresql-7.2b4/src/backend/utils/misc/guc-file.c Wed Dec 12 08:33:26 2001 +++ postgresql-7.2b4_config/src/backend/utils/misc/guc-file.c Sun Dec 16 08:33:32 2001 @@ -1682,16 +1682,29 @@ Assert(DataDir); elevel = (context == PGC_SIGHUP) ? DEBUG : ERROR; - /* - * Open file - */ - filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); + /* Added for explicit config file */ + if(!explicit_pgconfig) + { + /* + * Use environmental config + */ + filename = malloc(strlen(DataDir) + strlen(CONFIG_FILENAME) + 2); + sprintf(filename, "%s/" CONFIG_FILENAME, DataDir); + } + else + { + /* + * Use explicit file + */ + filename = strdup(explicit_pgconfig); + } + if (filename == NULL) { elog(elevel, "out of memory"); return; } - sprintf(filename, "%s/" CONFIG_FILENAME, DataDir); + fp = AllocateFile(filename, "r"); if (!fp) diff -r -u postgresql-7.2b4/src/backend/utils/misc/guc.c postgresql-7.2b4_config/src/backend/utils/misc/guc.c --- postgresql-7.2b4/src/backend/utils/misc/guc.c Tue Oct 30 00:38:56 2001 +++ postgresql-7.2b4_config/src/backend/utils/misc/guc.c Sun Dec 16 08:34:17 2001 @@ -39,6 +39,10 @@ #include "utils/datetime.h" #include "pgstat.h" +/* Added for config file only startup MLW */ +char *explicit_pgconfig = NULL; +char *explicit_hbaconfig = NULL; +char *pgdatadir = NULL; /* XXX these should be in other modules' header files */ extern bool Log_connections; @@ -594,7 +598,14 @@ XLOG_sync_method_default, check_xlog_sync_method, assign_xlog_sync_method }, - + { + "hbaconfig", PGC_POSTMASTER, &explicit_hbaconfig, + "", NULL, NULL + }, + { + "datadir", PGC_POSTMASTER, &pgdatadir, + "", NULL, NULL + }, { NULL, 0, NULL, NULL, NULL, NULL } diff -r -u postgresql-7.2b4/src/backend/utils/misc/postgresql.conf.sample postgresql-7.2b4_config/src/backend/utils/misc/postgresql.conf.sample --- postgresql-7.2b4/src/backend/utils/misc/postgresql.conf.sample Sun Sep 30 14:57:45 2001 +++ postgresql-7.2b4_config/src/backend/utils/misc/postgresql.conf.sample Sun Dec 16 08:34:38 2001 @@ -19,6 +19,15 @@ #======================================================================== +# Explicit configuration + +# Allows postgres to use an pg_hba.conf file +# which is not in the database directory. +# hbaconfig = '/etc/pghba.conf' + +# Allows Postgres to find its data directory +# from this configuration file. +# datadir = '/u01/postgres' # # Connection Parameters diff -r -u postgresql-7.2b4/src/include/utils/guc.h postgresql-7.2b4_config/src/include/utils/guc.h --- postgresql-7.2b4/src/include/utils/guc.h Mon Nov 5 12:46:36 2001 +++ postgresql-7.2b4_config/src/include/utils/guc.h Sun Dec 16 08:27:06 2001 @@ -73,4 +73,9 @@ extern bool SQL_inheritance; extern bool Australian_timezones; +/* Added MLW */ +extern char *explicit_pgconfig; +extern char *explicit_hbaconfig; +extern char *pgdatadir; + #endif /* GUC_H */
pgsql-hackers by date: