mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
The proper guaranteed buffer size for errors is
INITIAL_EXPBUFFER_SIZE, not PQERRORMSG_LENGTH. Backport only - the proper fix in HEAD is to use PQExpBuffers everywhere.
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
|
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.84.2.3 2003/12/20 18:46:02 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.84.2.4 2007/07/23 18:10:13 mha Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -170,7 +170,7 @@ pg_krb4_authname(char *PQerrormsg)
|
|||||||
status = krb_get_tf_fullname(tkt_string(), name, instance, realm);
|
status = krb_get_tf_fullname(tkt_string(), name, instance, realm);
|
||||||
if (status != KSUCCESS)
|
if (status != KSUCCESS)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb4_authname: krb_get_tf_fullname: %s\n",
|
"pg_krb4_authname: krb_get_tf_fullname: %s\n",
|
||||||
krb_err_txt[status]);
|
krb_err_txt[status]);
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
@@ -228,7 +228,7 @@ pg_krb4_sendauth(char *PQerrormsg, int sock,
|
|||||||
PG_KRB4_VERSION);
|
PG_KRB4_VERSION);
|
||||||
if (status != KSUCCESS)
|
if (status != KSUCCESS)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 4 error: %s\n"),
|
libpq_gettext("Kerberos 4 error: %s\n"),
|
||||||
krb_err_txt[status]);
|
krb_err_txt[status]);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
@@ -291,7 +291,7 @@ pg_krb5_init(char *PQerrormsg)
|
|||||||
retval = krb5_init_context(&pg_krb5_context);
|
retval = krb5_init_context(&pg_krb5_context);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb5_init: krb5_init_context: %s\n",
|
"pg_krb5_init: krb5_init_context: %s\n",
|
||||||
error_message(retval));
|
error_message(retval));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
@@ -300,7 +300,7 @@ pg_krb5_init(char *PQerrormsg)
|
|||||||
retval = krb5_cc_default(pg_krb5_context, &pg_krb5_ccache);
|
retval = krb5_cc_default(pg_krb5_context, &pg_krb5_ccache);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb5_init: krb5_cc_default: %s\n",
|
"pg_krb5_init: krb5_cc_default: %s\n",
|
||||||
error_message(retval));
|
error_message(retval));
|
||||||
krb5_free_context(pg_krb5_context);
|
krb5_free_context(pg_krb5_context);
|
||||||
@@ -311,7 +311,7 @@ pg_krb5_init(char *PQerrormsg)
|
|||||||
&pg_krb5_client);
|
&pg_krb5_client);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb5_init: krb5_cc_get_principal: %s\n",
|
"pg_krb5_init: krb5_cc_get_principal: %s\n",
|
||||||
error_message(retval));
|
error_message(retval));
|
||||||
krb5_cc_close(pg_krb5_context, pg_krb5_ccache);
|
krb5_cc_close(pg_krb5_context, pg_krb5_ccache);
|
||||||
@@ -322,7 +322,7 @@ pg_krb5_init(char *PQerrormsg)
|
|||||||
retval = krb5_unparse_name(pg_krb5_context, pg_krb5_client, &pg_krb5_name);
|
retval = krb5_unparse_name(pg_krb5_context, pg_krb5_client, &pg_krb5_name);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb5_init: krb5_unparse_name: %s\n",
|
"pg_krb5_init: krb5_unparse_name: %s\n",
|
||||||
error_message(retval));
|
error_message(retval));
|
||||||
krb5_free_principal(pg_krb5_context, pg_krb5_client);
|
krb5_free_principal(pg_krb5_context, pg_krb5_client);
|
||||||
@@ -374,7 +374,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
KRB5_NT_SRV_HST, &server);
|
KRB5_NT_SRV_HST, &server);
|
||||||
if (retval)
|
if (retval)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_krb5_sendauth: krb5_sname_to_principal: %s\n",
|
"pg_krb5_sendauth: krb5_sname_to_principal: %s\n",
|
||||||
error_message(retval));
|
error_message(retval));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
@@ -390,7 +390,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
{
|
{
|
||||||
char sebuf[256];
|
char sebuf[256];
|
||||||
|
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("could not set socket to blocking mode: %s\n"), pqStrerror(errno, sebuf, sizeof(sebuf)));
|
libpq_gettext("could not set socket to blocking mode: %s\n"), pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||||
krb5_free_principal(pg_krb5_context, server);
|
krb5_free_principal(pg_krb5_context, server);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
@@ -407,11 +407,11 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
if (retval == KRB5_SENDAUTH_REJECTED && err_ret)
|
if (retval == KRB5_SENDAUTH_REJECTED && err_ret)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_KRB5_ERROR_TEXT_DATA)
|
#if defined(HAVE_KRB5_ERROR_TEXT_DATA)
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
||||||
(int) err_ret->text.length, err_ret->text.data);
|
(int) err_ret->text.length, err_ret->text.data);
|
||||||
#elif defined(HAVE_KRB5_ERROR_E_DATA)
|
#elif defined(HAVE_KRB5_ERROR_E_DATA)
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
libpq_gettext("Kerberos 5 authentication rejected: %*s\n"),
|
||||||
(int) err_ret->e_data->length,
|
(int) err_ret->e_data->length,
|
||||||
(const char *) err_ret->e_data->data);
|
(const char *) err_ret->e_data->data);
|
||||||
@@ -421,7 +421,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"krb5_sendauth: %s\n", error_message(retval));
|
"krb5_sendauth: %s\n", error_message(retval));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,7 +437,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
{
|
{
|
||||||
char sebuf[256];
|
char sebuf[256];
|
||||||
|
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("could not restore non-blocking mode on socket: %s\n"),
|
libpq_gettext("could not restore non-blocking mode on socket: %s\n"),
|
||||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||||
ret = STATUS_ERROR;
|
ret = STATUS_ERROR;
|
||||||
@@ -497,14 +497,14 @@ pg_local_sendauth(char *PQerrormsg, PGconn *conn)
|
|||||||
{
|
{
|
||||||
char sebuf[256];
|
char sebuf[256];
|
||||||
|
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"pg_local_sendauth: sendmsg: %s\n",
|
"pg_local_sendauth: sendmsg: %s\n",
|
||||||
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
pqStrerror(errno, sebuf, sizeof(sebuf)));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
return STATUS_OK;
|
return STATUS_OK;
|
||||||
#else
|
#else
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("SCM_CRED authentication method not supported\n"));
|
libpq_gettext("SCM_CRED authentication method not supported\n"));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -595,13 +595,13 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
|||||||
(struct sockaddr_in *) & conn->raddr.addr,
|
(struct sockaddr_in *) & conn->raddr.addr,
|
||||||
hostname) != STATUS_OK)
|
hostname) != STATUS_OK)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 4 authentication failed\n"));
|
libpq_gettext("Kerberos 4 authentication failed\n"));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 4 authentication not supported\n"));
|
libpq_gettext("Kerberos 4 authentication not supported\n"));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -611,13 +611,13 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
|||||||
if (pg_krb5_sendauth(PQerrormsg, conn->sock,
|
if (pg_krb5_sendauth(PQerrormsg, conn->sock,
|
||||||
hostname) != STATUS_OK)
|
hostname) != STATUS_OK)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 5 authentication failed\n"));
|
libpq_gettext("Kerberos 5 authentication failed\n"));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("Kerberos 5 authentication not supported\n"));
|
libpq_gettext("Kerberos 5 authentication not supported\n"));
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
#endif
|
#endif
|
||||||
@@ -627,13 +627,13 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
|||||||
case AUTH_REQ_PASSWORD:
|
case AUTH_REQ_PASSWORD:
|
||||||
if (password == NULL || *password == '\0')
|
if (password == NULL || *password == '\0')
|
||||||
{
|
{
|
||||||
(void) snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
(void) snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"fe_sendauth: no password supplied\n");
|
"fe_sendauth: no password supplied\n");
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
if (pg_password_sendauth(conn, password, areq) != STATUS_OK)
|
if (pg_password_sendauth(conn, password, areq) != STATUS_OK)
|
||||||
{
|
{
|
||||||
(void) snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
(void) snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
"fe_sendauth: error sending password authentication\n");
|
"fe_sendauth: error sending password authentication\n");
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
@@ -645,7 +645,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("authentication method %u not supported\n"), areq);
|
libpq_gettext("authentication method %u not supported\n"), areq);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
@@ -682,7 +682,7 @@ fe_setauthsvc(const char *name, char *PQerrormsg)
|
|||||||
}
|
}
|
||||||
if (i == n_authsvcs)
|
if (i == n_authsvcs)
|
||||||
{
|
{
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("invalid authentication service name \"%s\", ignored\n"),
|
libpq_gettext("invalid authentication service name \"%s\", ignored\n"),
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
@@ -753,7 +753,7 @@ fe_getauthname(char *PQerrormsg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (authsvc != STARTUP_MSG && authsvc != STARTUP_KRB4_MSG && authsvc != STARTUP_KRB5_MSG)
|
if (authsvc != STARTUP_MSG && authsvc != STARTUP_KRB4_MSG && authsvc != STARTUP_KRB5_MSG)
|
||||||
snprintf(PQerrormsg, PQERRORMSG_LENGTH,
|
snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE,
|
||||||
libpq_gettext("fe_getauthname: invalid authentication system: %d\n"),
|
libpq_gettext("fe_getauthname: invalid authentication system: %d\n"),
|
||||||
authsvc);
|
authsvc);
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.263.2.5 2006/05/21 20:20:24 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.263.2.6 2007/07/23 18:10:13 mha Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -2540,7 +2540,7 @@ conninfo_parse(const char *conninfo, PQExpBuffer errorMessage)
|
|||||||
char *cp2;
|
char *cp2;
|
||||||
PQconninfoOption *options;
|
PQconninfoOption *options;
|
||||||
PQconninfoOption *option;
|
PQconninfoOption *option;
|
||||||
char errortmp[PQERRORMSG_LENGTH];
|
char errortmp[INITIAL_EXPBUFFER_SIZE];
|
||||||
|
|
||||||
/* Make a working copy of PQconninfoOptions */
|
/* Make a working copy of PQconninfoOptions */
|
||||||
options = malloc(sizeof(PQconninfoOptions));
|
options = malloc(sizeof(PQconninfoOptions));
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: libpq-int.h,v 1.82.2.2 2006/05/21 20:20:24 tgl Exp $
|
* $Id: libpq-int.h,v 1.82.2.3 2007/07/23 18:10:13 mha Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -50,7 +50,6 @@ typedef int ssize_t; /* ssize_t doesn't exist in VC (at least
|
|||||||
/*
|
/*
|
||||||
* POSTGRES backend dependent Constants.
|
* POSTGRES backend dependent Constants.
|
||||||
*/
|
*/
|
||||||
#define PQERRORMSG_LENGTH 1024
|
|
||||||
#define CMDSTATUS_LEN 40
|
#define CMDSTATUS_LEN 40
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user