diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-07-27 02:27:55 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-07-27 02:27:55 +0000 |
commit | c13ef1afed3c5c4d63909b817cc2975b0937c5b1 (patch) | |
tree | 496fb005208e978e6face28dba9a07d1669c8b9b /src/interfaces/libpq/fe-auth.c | |
parent | 1a675fe5b2a4d1b990ce8fa4dd64367bb0abdea4 (diff) | |
download | postgresql-c13ef1afed3c5c4d63909b817cc2975b0937c5b1.tar.gz postgresql-c13ef1afed3c5c4d63909b817cc2975b0937c5b1.zip |
My patch to fe-connect.c introduced a new bug which is triggered only, if
Kerberos is being used (attempt to free static memory).
The error was caused by a confusing doublespeak of fe_getauthname():
Returns a pointer to static memory, if you authenticate via Kerberos,
a pointer to dynamic memory otherwise.
Submitted by: Erich Stamberger <eberger@gewi.kfunigraz.ac.at>
Diffstat (limited to 'src/interfaces/libpq/fe-auth.c')
-rw-r--r-- | src/interfaces/libpq/fe-auth.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index ebc85ba0f30..27ed3eee658 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.2 1996/07/23 03:35:11 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.3 1996/07/27 02:27:55 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -500,7 +500,7 @@ fe_getauthsvc(char* PQerrormsg) } /* - * fe_getauthname -- returns a pointer to static space containing whatever + * fe_getauthname -- returns a pointer to dynamic space containing whatever * name the user has authenticated to the system * if there is an error, return the error message in PQerrormsg */ @@ -508,6 +508,7 @@ char* fe_getauthname(char* PQerrormsg) { char *name = (char *) NULL; + char *authn = (char *) NULL; MsgType authsvc; authsvc = fe_getauthsvc(PQerrormsg); @@ -525,11 +526,7 @@ fe_getauthname(char* PQerrormsg) case STARTUP_MSG: { struct passwd *pw = getpwuid(geteuid()); - if (pw && - pw->pw_name && - (name = (char *) malloc(strlen(pw->pw_name) + 1))) { - (void) strcpy(name, pw->pw_name); - } + if (pw) name = pw->pw_name; } break; default: @@ -538,7 +535,10 @@ fe_getauthname(char* PQerrormsg) authsvc); break; } - return(name); + + if(name && (authn = (char *) malloc(strlen(name) + 1))) + (void) strcpy(authn, name); + return(authn); } |