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.
This commit is contained in:
Tom Lane 2007-07-08 18:28:56 +00:00
parent 3f33d7bcb6
commit 5f7b1f8d9d
5 changed files with 47 additions and 41 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.236 2007/07/08 17:11:50 joe Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.237 2007/07/08 18:28:55 tgl Exp $ -->
<chapter id="libpq">
<title><application>libpq</application> - C Library</title>
@ -1034,6 +1034,25 @@ int PQbackendPID(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) 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>
@ -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>

View File

@ -9,7 +9,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/libpq/pqcomm.h,v 1.103 2007/07/08 17:11:51 joe Exp $
* $PostgreSQL: pgsql/src/include/libpq/pqcomm.h,v 1.104 2007/07/08 18:28:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -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;

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.346 2007/07/08 17:11:51 joe Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.347 2007/07/08 18:28:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -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;
@ -3396,6 +3396,19 @@ PQbackendPID(const PGconn *conn)
return conn->be_pid;
}
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)
{
@ -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)
{

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.137 2007/07/08 17:11:51 joe Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.138 2007/07/08 18:28:55 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -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"
/*

View File

@ -12,7 +12,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.120 2007/07/08 17:11:51 joe Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.121 2007/07/08 18:28:56 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -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 */