-<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.264 2008/09/22 13:55:13 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.265 2008/09/22 14:21:44 tgl Exp $ -->
<chapter id="libpq">
<title><application>libpq</application> - C Library</title>
<synopsis>
int PQconnectionNeedsPassword(const PGconn *conn);
</synopsis>
-
</para>
<para>
<listitem>
<para>
Returns true (1) if the connection authentication method
- used a caller-supplied password. Returns false (0) if not.
+ used a password. Returns false (0) if not.
<synopsis>
int PQconnectionUsedPassword(const PGconn *conn);
</synopsis>
-
</para>
<para>
- This function detects whether a password supplied to the connection
- function was actually used. Passwords obtained from other
- sources (such as the <filename>.pgpass</> file) are not considered
- caller-supplied.
+ This function can be applied after either a failed or successful
+ connection attempt to detect whether the server demanded a password.
</para>
</listitem>
</varlistentry>
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.361 2008/09/22 13:55:14 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.362 2008/09/22 14:21:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
static void freePGconn(PGconn *conn);
static void closePGconn(PGconn *conn);
static PQconninfoOption *conninfo_parse(const char *conninfo,
- PQExpBuffer errorMessage, bool use_defaults,
- bool *password_from_string);
+ PQExpBuffer errorMessage, bool use_defaults);
static char *conninfo_getval(PQconninfoOption *connOptions,
const char *keyword);
static void defaultNoticeReceiver(void *arg, const PGresult *res);
/*
* Parse the conninfo string
*/
- connOptions = conninfo_parse(conninfo, &conn->errorMessage, true,
- &conn->pgpass_from_client);
+ connOptions = conninfo_parse(conninfo, &conn->errorMessage, true);
if (connOptions == NULL)
{
conn->status = CONNECTION_BAD;
conn->dbName, conn->pguser);
if (conn->pgpass == NULL)
conn->pgpass = strdup(DefaultPassword);
- conn->pgpass_from_client = false;
}
/*
PQconndefaults(void)
{
PQExpBufferData errorBuf;
- bool password_from_string;
PQconninfoOption *connOptions;
initPQExpBuffer(&errorBuf);
if (errorBuf.data == NULL)
return NULL; /* out of memory already :-( */
- connOptions = conninfo_parse("", &errorBuf, true,
- &password_from_string);
+ connOptions = conninfo_parse("", &errorBuf, true);
termPQExpBuffer(&errorBuf);
return connOptions;
}
if (conn->pgpass)
free(conn->pgpass);
conn->pgpass = strdup(pwd);
- conn->pgpass_from_client = true;
}
/*
PQconninfoParse(const char *conninfo, char **errmsg)
{
PQExpBufferData errorBuf;
- bool password_from_string;
PQconninfoOption *connOptions;
if (errmsg)
initPQExpBuffer(&errorBuf);
if (errorBuf.data == NULL)
return NULL; /* out of memory already :-( */
- connOptions = conninfo_parse(conninfo, &errorBuf, false,
- &password_from_string);
+ connOptions = conninfo_parse(conninfo, &errorBuf, false);
if (connOptions == NULL && errmsg)
*errmsg = errorBuf.data;
else
* left in errorMessage.
* Defaults are supplied (from a service file, environment variables, etc)
* for unspecified options, but only if use_defaults is TRUE.
- * *password_from_string is set TRUE if we got a password from the
- * conninfo string, otherwise FALSE.
*/
static PQconninfoOption *
conninfo_parse(const char *conninfo, PQExpBuffer errorMessage,
- bool use_defaults, bool *password_from_string)
+ bool use_defaults)
{
char *pname;
char *pval;
PQconninfoOption *options;
PQconninfoOption *option;
- *password_from_string = false; /* default result */
-
/* Make a working copy of PQconninfoOptions */
options = malloc(sizeof(PQconninfoOptions));
if (options == NULL)
free(buf);
return NULL;
}
-
- /*
- * Special handling for password
- */
- if (strcmp(option->keyword, "password") == 0)
- *password_from_string = (option->val[0] != '\0');
}
/* Done with the modifiable input string */
{
if (!conn)
return false;
- if (conn->password_needed && conn->pgpass_from_client)
+ if (conn->password_needed)
return true;
else
return false;
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.133 2008/09/19 16:40:40 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.134 2008/09/22 14:21:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
char *dbName; /* database name */
char *pguser; /* Postgres username and password, if any */
char *pgpass;
- bool pgpass_from_client; /* did password come from connect args? */
char *sslmode; /* SSL mode (require,prefer,allow,disable) */
#if defined(KRB5) || defined(ENABLE_GSS) || defined(ENABLE_SSPI)
char *krbsrvname; /* Kerberos service name */