From: Magnus Hagander Date: Mon, 23 Jul 2007 18:12:56 +0000 (+0000) Subject: The correct min buffer size is X-Git-Tag: REL8_0_14~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5fd6d0fd196c71894879dcf15f72259f339d859d;p=thirdparty%2Fpostgresql.git The correct min buffer size is INITIAL_EXPBUFFER_SIZE, not PQERRORMSG_LENGTH. Backpatch only, the proper fix in HEAD is to use PQExpBuffers everywhere. --- diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index ee01b42f56e..b028700551a 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -10,7 +10,7 @@ * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes). * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.99.4.1 2005/03/25 00:35:19 tgl Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.99.4.2 2007/07/23 18:12:56 mha Exp $ * *------------------------------------------------------------------------- */ @@ -170,7 +170,7 @@ pg_krb4_authname(char *PQerrormsg) status = krb_get_tf_fullname(tkt_string(), name, instance, realm); if (status != KSUCCESS) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb4_authname: krb_get_tf_fullname: %s\n", krb_err_txt[status]); return NULL; @@ -228,7 +228,7 @@ pg_krb4_sendauth(char *PQerrormsg, int sock, PG_KRB4_VERSION); if (status != KSUCCESS) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("Kerberos 4 error: %s\n"), krb_err_txt[status]); return STATUS_ERROR; @@ -294,7 +294,7 @@ pg_krb5_init(char *PQerrormsg) retval = krb5_init_context(&pg_krb5_context); if (retval) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_init: krb5_init_context: %s\n", error_message(retval)); return STATUS_ERROR; @@ -303,7 +303,7 @@ pg_krb5_init(char *PQerrormsg) retval = krb5_cc_default(pg_krb5_context, &pg_krb5_ccache); if (retval) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_init: krb5_cc_default: %s\n", error_message(retval)); krb5_free_context(pg_krb5_context); @@ -314,7 +314,7 @@ pg_krb5_init(char *PQerrormsg) &pg_krb5_client); if (retval) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_init: krb5_cc_get_principal: %s\n", error_message(retval)); krb5_cc_close(pg_krb5_context, pg_krb5_ccache); @@ -325,7 +325,7 @@ pg_krb5_init(char *PQerrormsg) retval = krb5_unparse_name(pg_krb5_context, pg_krb5_client, &pg_krb5_name); if (retval) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_init: krb5_unparse_name: %s\n", error_message(retval)); krb5_free_principal(pg_krb5_context, pg_krb5_client); @@ -370,7 +370,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) if (!hostname) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_sendauth: hostname must be specified for Kerberos authentication\n"); return STATUS_ERROR; } @@ -383,7 +383,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) KRB5_NT_SRV_HST, &server); if (retval) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_krb5_sendauth: krb5_sname_to_principal: %s\n", error_message(retval)); return STATUS_ERROR; @@ -398,7 +398,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) { 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))); krb5_free_principal(pg_krb5_context, server); return STATUS_ERROR; @@ -415,11 +415,11 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) if (retval == KRB5_SENDAUTH_REJECTED && err_ret) { #if defined(HAVE_KRB5_ERROR_TEXT_DATA) - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("Kerberos 5 authentication rejected: %*s\n"), (int) err_ret->text.length, err_ret->text.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"), (int) err_ret->e_data->length, (const char *) err_ret->e_data->data); @@ -429,7 +429,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) } else { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "krb5_sendauth: %s\n", error_message(retval)); } @@ -445,7 +445,7 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname) { char sebuf[256]; - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("could not restore non-blocking mode on socket: %s\n"), pqStrerror(errno, sebuf, sizeof(sebuf))); ret = STATUS_ERROR; @@ -505,14 +505,14 @@ pg_local_sendauth(char *PQerrormsg, PGconn *conn) { char sebuf[256]; - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, "pg_local_sendauth: sendmsg: %s\n", pqStrerror(errno, sebuf, sizeof(sebuf))); return STATUS_ERROR; } return STATUS_OK; #else - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("SCM_CRED authentication method not supported\n")); return STATUS_ERROR; #endif @@ -611,7 +611,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname, pgunlock_thread(); break; #else - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("Kerberos 4 authentication not supported\n")); return STATUS_ERROR; #endif @@ -629,7 +629,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname, pgunlock_thread(); break; #else - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("Kerberos 5 authentication not supported\n")); return STATUS_ERROR; #endif @@ -639,13 +639,13 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname, case AUTH_REQ_PASSWORD: if (password == NULL || *password == '\0') { - (void) snprintf(PQerrormsg, PQERRORMSG_LENGTH, + (void) snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, PQnoPasswordSupplied); return STATUS_ERROR; } 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"); return STATUS_ERROR; } @@ -657,7 +657,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname, break; default: - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("authentication method %u not supported\n"), areq); return STATUS_ERROR; } @@ -694,7 +694,7 @@ fe_setauthsvc(const char *name, char *PQerrormsg) } if (i == n_authsvcs) { - snprintf(PQerrormsg, PQERRORMSG_LENGTH, + snprintf(PQerrormsg, INITIAL_EXPBUFFER_SIZE, libpq_gettext("invalid authentication service name \"%s\", ignored\n"), name); } @@ -767,7 +767,7 @@ fe_getauthname(char *PQerrormsg) } 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"), authsvc); diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 36b5ce3479f..1c766a68ed3 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.301.4.5 2006/05/21 20:20:04 tgl Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.301.4.6 2007/07/23 18:12:56 mha Exp $ * *------------------------------------------------------------------------- */ @@ -2661,7 +2661,7 @@ conninfo_parse(const char *conninfo, PQExpBuffer errorMessage) char *cp2; PQconninfoOption *options; PQconninfoOption *option; - char errortmp[PQERRORMSG_LENGTH]; + char errortmp[INITIAL_EXPBUFFER_SIZE]; /* Make a working copy of PQconninfoOptions */ options = malloc(sizeof(PQconninfoOptions)); diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h index f63e0e054d1..ee23b0c9547 100644 --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.100.4.1 2006/05/21 20:20:05 tgl Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.100.4.2 2007/07/23 18:12:56 mha Exp $ * *------------------------------------------------------------------------- */ @@ -53,7 +53,6 @@ typedef int ssize_t; /* ssize_t doesn't exist in VC (at least /* * POSTGRES backend dependent Constants. */ -#define PQERRORMSG_LENGTH 1024 #define CMDSTATUS_LEN 40 /*