diff options
author | Tom Lane | 2007-07-08 18:28:56 +0000 |
---|---|---|
committer | Tom Lane | 2007-07-08 18:28:56 +0000 |
commit | a5b439c06e5442a8939ad522d84fa6b8cb5953c4 (patch) | |
tree | 5aaa393e5b2a66a2278dc84e3248b62c7c1d63a0 | |
parent | 5feb3680d3494c5d8312354d87400a006493e136 (diff) |
Closer code review for PQconnectionUsedPassword() patch: in particular,
not OK to include postgres_fe.h into libpq-fe.h, hence declare it as
returning int not bool.
-rw-r--r-- | doc/src/sgml/libpq.sgml | 33 | ||||
-rw-r--r-- | src/include/libpq/pqcomm.h | 1 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-connect.c | 34 | ||||
-rw-r--r-- | src/interfaces/libpq/libpq-fe.h | 8 | ||||
-rw-r--r-- | src/interfaces/libpq/libpq-int.h | 2 |
5 files changed, 42 insertions, 36 deletions
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index a105b6a19a..a1c5506a6d 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1035,6 +1035,25 @@ int PQbackendPID(const PGconn *conn); </varlistentry> <varlistentry> + <term><function>PQconnectionUsedPassword</function><indexterm><primary>PQconnectionUsedPassword</></></term> + <listitem> + <para> + Returns true (1) if the connection authentication method + required a password to be supplied. Returns false (0) if not. +<synopsis> +int PQconnectionUsedPassword(const PGconn *conn); +</synopsis> + </para> + + <para> + This function can be applied after either successful or failed + connection attempts. In the case of failure, it can for example + be used to decide whether to prompt the user for a password. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><function>PQgetssl</function><indexterm><primary>PQgetssl</></></term> <listitem> <para> @@ -1059,20 +1078,6 @@ SSL *PQgetssl(const PGconn *conn); </listitem> </varlistentry> - <varlistentry> - <term><function>PQconnectionUsedPassword</function><indexterm><primary>PQconnectionUsedPassword</></></term> - <listitem> - <para> - Returns true (1) if the connection authentication method - required a password to be supplied. Returns false (0) - otherwise. - <synopsis> - bool PQconnectionUsedPassword(const PGconn *conn); - </synopsis> - </para> - </listitem> - </varlistentry> - </variablelist> </para> diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h index 5116cf43ec..5a571a3206 100644 --- a/src/include/libpq/pqcomm.h +++ b/src/include/libpq/pqcomm.h @@ -156,7 +156,6 @@ extern bool Db_user_namespace; #define AUTH_REQ_CRYPT 4 /* crypt password */ #define AUTH_REQ_MD5 5 /* md5 password */ #define AUTH_REQ_SCM_CREDS 6 /* transfer SCM credentials */ -#define AUTH_REQ_UNK 7 /* User has not yet attempted to authenticate */ typedef uint32 AuthRequest; diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index e58b94abdb..babffc34b9 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -1641,10 +1641,6 @@ keep_going: /* We will come back to here until there is return PGRES_POLLING_READING; } - /* save the authentication request type */ - if (conn->areq == AUTH_REQ_UNK) - conn->areq = areq; - /* Get the password salt if there is one. */ if (areq == AUTH_REQ_MD5) { @@ -1670,6 +1666,10 @@ keep_going: /* We will come back to here until there is */ conn->inStart = conn->inCursor; + /* Save the authentication request type, if first one. */ + if (conn->areq == AUTH_REQ_OK) + conn->areq = areq; + /* Respond to the request if necessary. */ /* @@ -1877,7 +1877,7 @@ makeEmptyPGconn(void) conn->std_strings = false; /* unless server says differently */ conn->verbosity = PQERRORS_DEFAULT; conn->sock = -1; - conn->areq = AUTH_REQ_UNK; + conn->areq = AUTH_REQ_OK; /* until we receive something else */ #ifdef USE_SSL conn->allow_ssl_try = true; conn->wait_ssl_try = false; @@ -3397,6 +3397,19 @@ PQbackendPID(const PGconn *conn) } int +PQconnectionUsedPassword(const PGconn *conn) +{ + if (!conn) + return false; + if (conn->areq == AUTH_REQ_MD5 || + conn->areq == AUTH_REQ_CRYPT || + conn->areq == AUTH_REQ_PASSWORD) + return true; + else + return false; +} + +int PQclientEncoding(const PGconn *conn) { if (!conn || conn->status != CONNECTION_OK) @@ -3446,17 +3459,6 @@ PQsetClientEncoding(PGconn *conn, const char *encoding) return status; } -bool -PQconnectionUsedPassword(const PGconn *conn) -{ - if (conn->areq == AUTH_REQ_MD5 || - conn->areq == AUTH_REQ_CRYPT || - conn->areq == AUTH_REQ_PASSWORD) - return true; - else - return false; -} - PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity) { diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index 285b3998e0..b8ef5387ab 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -23,11 +23,10 @@ extern "C" #include <stdio.h> /* - * defines the backend's externally visible types, + * postgres_ext.h defines the backend's externally visible types, * such as Oid. */ #include "postgres_ext.h" -#include "postgres_fe.h" /* Application-visible enum types */ @@ -264,9 +263,9 @@ extern int PQserverVersion(const PGconn *conn); extern char *PQerrorMessage(const PGconn *conn); extern int PQsocket(const PGconn *conn); extern int PQbackendPID(const PGconn *conn); +extern int PQconnectionUsedPassword(const PGconn *conn); extern int PQclientEncoding(const PGconn *conn); extern int PQsetClientEncoding(PGconn *conn, const char *encoding); -extern bool PQconnectionUsedPassword(const PGconn *conn); /* Get the OpenSSL structure associated with a connection. Returns NULL for * unencrypted connections or if any other TLS library is in use. */ @@ -426,7 +425,8 @@ extern void PQfreemem(void *ptr); /* Exists for backward compatibility. bjm 2003-03-24 */ #define PQfreeNotify(ptr) PQfreemem(ptr) -/* Define the string so all uses are consistent. */ +/* Error when no password was given. */ +/* Note: depending on this is deprecated; use PQconnectionUsedPassword(). */ #define PQnoPasswordSupplied "fe_sendauth: no password supplied\n" /* diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index 2cbf924387..98dcb69b14 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -299,7 +299,7 @@ struct pg_conn SockAddr raddr; /* Remote address */ ProtocolVersion pversion; /* FE/BE protocol version in use */ int sversion; /* server version, e.g. 70401 for 7.4.1 */ - AuthRequest areq; /* server demanded password during auth */ + AuthRequest areq; /* auth type demanded by server */ /* Transient state needed while establishing connection */ struct addrinfo *addrlist; /* list of possible backend addresses */ |