aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2003-09-03 22:05:09 +0000
committerPeter Eisentraut <peter_e@gmx.net>2003-09-03 22:05:09 +0000
commit29a20145fd2d1859eb3ec1788240244d0b50f68f (patch)
tree6b83ccf2e9b2c6104c3ebb9f4a4b78581d9c827b
parent4e85f760e6b1cccfb82be8078257ade01435573e (diff)
downloadpostgresql-29a20145fd2d1859eb3ec1788240244d0b50f68f.tar.gz
postgresql-29a20145fd2d1859eb3ec1788240244d0b50f68f.zip
Pass session_authorization to the client and make psql update its prompt
accordingly.
-rw-r--r--doc/src/sgml/libpq.sgml5
-rw-r--r--doc/src/sgml/protocol.sgml5
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml23
-rw-r--r--src/backend/utils/misc/guc.c4
-rw-r--r--src/bin/psql/common.c25
-rw-r--r--src/bin/psql/common.h3
-rw-r--r--src/bin/psql/prompt.c4
7 files changed, 54 insertions, 15 deletions
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
index fd06b51905c..27bb09e8201 100644
--- a/doc/src/sgml/libpq.sgml
+++ b/doc/src/sgml/libpq.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.134 2003/09/01 23:04:49 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.135 2003/09/03 22:05:01 petere Exp $
-->
<chapter id="libpq">
@@ -857,7 +857,8 @@ is not known.
Parameters reported as of the current release include
<literal>server_version</> (cannot change after startup);
<literal>client_encoding</>,
-<literal>is_superuser</>, and
+<literal>is_superuser</>,
+<literal>session_authorization</literal>, and
<literal>DateStyle</>.
</para>
diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml
index 5127bd66d52..09768a46cf7 100644
--- a/doc/src/sgml/protocol.sgml
+++ b/doc/src/sgml/protocol.sgml
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.42 2003/09/01 23:04:49 petere Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/protocol.sgml,v 1.43 2003/09/03 22:05:07 petere Exp $ -->
<chapter id="protocol">
<title>Frontend/Backend Protocol</title>
@@ -1006,7 +1006,8 @@
<literal>server_version</> (a pseudo-parameter that cannot change after
startup);
<literal>client_encoding</>,
- <literal>is_superuser</>, and
+ <literal>is_superuser</>,
+ <literal>session_authorization</literal>, and
<literal>DateStyle</>.
This set might change in the future, or even become configurable.
Accordingly, a frontend should simply ignore ParameterStatus for
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 35e33e7fe21..1d6da0e3b2d 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.95 2003/08/31 17:32:24 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.96 2003/09/03 22:05:08 petere Exp $
PostgreSQL documentation
-->
@@ -2214,8 +2214,14 @@ testdb=> <userinput>\set content '\'' `sed -e "s/'/\\\\\\'/g" < my_file.txt` '\'
<varlistentry>
<term><literal>%n</literal></term>
- <listitem><para>The user name you are connected as (not your local system
- user name).</para></listitem>
+ <listitem>
+ <para>
+ The database session user name. (The expansion of this
+ value might change during a database session as the result
+ of the command <command>SET SESSION
+ AUTHORIZATION</command>.)
+ </para>
+ </listitem>
</varlistentry>
<varlistentry>
@@ -2231,8 +2237,15 @@ testdb=> <userinput>\set content '\'' `sed -e "s/'/\\\\\\'/g" < my_file.txt` '\'
<varlistentry>
<term><literal>%#</literal></term>
- <listitem><para>If the current user is a database superuser, then a
- <literal>#</literal>, otherwise a <literal>&gt;</literal>.</para></listitem>
+ <listitem>
+ <para>
+ If the session user is a database superuser, then a
+ <literal>#</literal>, otherwise a <literal>&gt;</literal>.
+ (The expansion of this value might change during a database
+ session as the result of the command <command>SET SESSION
+ AUTHORIZATION</command>.)
+ </para>
+ </listitem>
</varlistentry>
<varlistentry>
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index fbf7cc5bff8..f7571151175 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.153 2003/09/01 23:04:49 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.154 2003/09/03 22:05:08 petere Exp $
*
*--------------------------------------------------------------------
*/
@@ -1501,7 +1501,7 @@ static struct config_string ConfigureNamesString[] =
{"session_authorization", PGC_USERSET, UNGROUPED,
gettext_noop("Current session userid"),
NULL,
- GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
+ GUC_REPORT | GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE
},
&session_authorization_string,
NULL, assign_session_authorization, show_session_authorization
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index cead3c65904..70551a2a3d5 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2003, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.72 2003/08/14 18:48:35 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.73 2003/09/03 22:05:08 petere Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -724,3 +724,26 @@ is_superuser(void)
return false;
}
+
+
+/*
+ * Return the session user of the current connection.
+ *
+ * Note: this will correctly detect the session user only with a
+ * protocol-3.0 or newer backend; otherwise it will return the
+ * connection user.
+ */
+const char *
+session_username(void)
+{
+ const char *val;
+
+ if (!pset.db)
+ return NULL;
+
+ val = PQparameterStatus(pset.db, "session_authorization");
+ if (val)
+ return val;
+ else
+ return PQuser(pset.db);
+}
diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h
index 08ec84acdf2..f5719bb2584 100644
--- a/src/bin/psql/common.h
+++ b/src/bin/psql/common.h
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2003, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/common.h,v 1.28 2003/08/08 04:52:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.h,v 1.29 2003/09/03 22:05:09 petere Exp $
*/
#ifndef COMMON_H
#define COMMON_H
@@ -37,6 +37,7 @@ extern PGresult *PSQLexec(const char *query, bool start_xact);
extern bool SendQuery(const char *query);
extern bool is_superuser(void);
+extern const char *session_username(void);
/* Parse a numeric character code from the string pointed at by *buf, e.g.
* one written as 0x0c (hexadecimal) or 015 (octal); advance *buf to the last
diff --git a/src/bin/psql/prompt.c b/src/bin/psql/prompt.c
index 4e9eb36c800..fbc0f44381f 100644
--- a/src/bin/psql/prompt.c
+++ b/src/bin/psql/prompt.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2003, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.28 2003/08/04 23:59:40 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/prompt.c,v 1.29 2003/09/03 22:05:09 petere Exp $
*/
#include "postgres_fe.h"
#include "prompt.h"
@@ -160,7 +160,7 @@ get_prompt(promptStatus_t status)
/* DB server user name */
case 'n':
if (pset.db)
- strncpy(buf, PQuser(pset.db), MAX_PROMPT_SIZE);
+ strncpy(buf, session_username(), MAX_PROMPT_SIZE);
break;
case '0':