1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-25 13:17:41 +03:00

Add db-local user names, per discussion on hackers.

This commit is contained in:
Bruce Momjian
2002-08-18 03:03:26 +00:00
parent 4b26e7d24b
commit 2c6b34d959
7 changed files with 62 additions and 14 deletions

View File

@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.284 2002/08/17 15:12:06 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.285 2002/08/18 03:03:25 momjian Exp $
*
* NOTES
*
@@ -116,7 +116,6 @@
sigset_t UnBlockSig,
BlockSig,
AuthBlockSig;
#else
int UnBlockSig,
BlockSig,
@@ -191,6 +190,8 @@ int CheckPointTimeout = 300;
bool HostnameLookup; /* for ps display */
bool ShowPortNumber;
bool Log_connections = false;
bool Db_user_namespace = false;
/* Startup/shutdown state */
static pid_t StartupPID = 0,
@@ -1155,6 +1156,26 @@ ProcessStartupPacket(Port *port, bool SSLdone)
if (port->user[0] == '\0')
elog(FATAL, "no PostgreSQL user name specified in startup packet");
if (Db_user_namespace)
{
/*
* If user@, it is a global user, remove '@'.
* We only want to do this if there is an '@' at the end and no
* earlier in the user string or they may fake as a local user
* of another database attaching to this database.
*/
if (strchr(port->user, '@') == port->user + strlen(port->user)-1)
*strchr(port->user, '@') = '\0';
else
{
/* Append '@' and dbname */
char hold_user[SM_DATABASE_USER+1];
snprintf(hold_user, SM_DATABASE_USER+1, "%s@%s", port->user,
port->database);
strcpy(port->user, hold_user);
}
}
/*
* If we're going to reject the connection due to database state, say
* so now instead of wasting cycles on an authentication exchange.
@@ -2581,11 +2602,10 @@ CreateOptsFile(int argc, char *argv[])
if (FindExec(fullprogname, argv[0], "postmaster") < 0)
return false;
filename = palloc(strlen(DataDir) + 20);
filename = palloc(strlen(DataDir) + 17);
sprintf(filename, "%s/postmaster.opts", DataDir);
fp = fopen(filename, "w");
if (fp == NULL)
if ((fp = fopen(filename, "w")) == NULL)
{
postmaster_error("cannot create file %s: %s",
filename, strerror(errno));