mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									1a675fe5b2
								
							
						
					
					
						commit
						c13ef1afed
					
				@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user