]> granicus.if.org Git - postgresql/commitdiff
My patch to fe-connect.c introduced a new bug which is triggered only, if
authorMarc G. Fournier <scrappy@hub.org>
Sat, 27 Jul 1996 02:27:55 +0000 (02:27 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Sat, 27 Jul 1996 02:27:55 +0000 (02:27 +0000)
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>

src/interfaces/libpq/fe-auth.c

index ebc85ba0f30a682c7eb06b20fd63750fc086610f..27ed3eee6580b4324b830e816b7c1d08c4eccb74 100644 (file)
@@ -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);
 }