From b58d8c9a533f20b1a7a7ebae34820731b1449b2b Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Wed, 30 Jan 2008 04:11:19 +0000 Subject: [PATCH] Don't putenv() a string that is allocated in a context that will go away soon. I suspect this explains bug #3902, though I'm still not able to reproduce that. --- src/backend/libpq/auth.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index aaf36d74320..4fb3635d24f 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.162 2008/01/01 19:45:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.163 2008/01/30 04:11:19 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -384,7 +384,6 @@ pg_GSS_recvauth(Port *port) min_stat, lmin_s, gflags; - char *kt_path; int mtype; int ret; StringInfoData buf; @@ -398,11 +397,19 @@ pg_GSS_recvauth(Port *port) * setenv("KRB5_KTNAME", pg_krb_server_keyfile, 0); except setenv() * not always available. */ - if (!getenv("KRB5_KTNAME")) + if (getenv("KRB5_KTNAME") == NULL) { - kt_path = palloc(MAXPGPATH + 13); - snprintf(kt_path, MAXPGPATH + 13, - "KRB5_KTNAME=%s", pg_krb_server_keyfile); + size_t kt_len = strlen(pg_krb_server_keyfile) + 14; + char *kt_path = malloc(kt_len); + + if (!kt_path) + { + ereport(LOG, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); + return STATUS_ERROR; + } + snprintf(kt_path, kt_len, "KRB5_KTNAME=%s", pg_krb_server_keyfile); putenv(kt_path); } } -- GitLab