diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
new file mode 100644
index e10c970..3312678
*** a/src/interfaces/libpq/fe-auth.c
--- b/src/interfaces/libpq/fe-auth.c
*************** pg_fe_getauthname(void)
*** 741,756 ****
  	 */
  	pglock_thread();
  
- 	if (!name)
- 	{
  #ifdef WIN32
! 		if (GetUserName(username, &namesize))
! 			name = username;
  #else
! 		if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0)
! 			name = pw->pw_name;
  #endif
- 	}
  
  	authn = name ? strdup(name) : NULL;
  
--- 741,753 ----
  	 */
  	pglock_thread();
  
  #ifdef WIN32
! 	if (GetUserName(username, &namesize))
! 		name = username;
  #else
! 	if (pqGetpwuid(geteuid(), &pwdstr, pwdbuf, sizeof(pwdbuf), &pw) == 0)
! 		name = pw->pw_name;
  #endif
  
  	authn = name ? strdup(name) : NULL;
  
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
new file mode 100644
index 1f0eeaf..669bcf5
*** a/src/interfaces/libpq/fe-connect.c
--- b/src/interfaces/libpq/fe-connect.c
*************** conninfo_add_defaults(PQconninfoOption *
*** 4483,4488 ****
--- 4483,4495 ----
  		if (strcmp(option->keyword, "user") == 0)
  		{
  			option->val = pg_fe_getauthname();
+ 			if (!option->val)
+ 			{
+ 				if (errorMessage)
+ 					printfPQExpBuffer(errorMessage,
+ 									  libpq_gettext("out of memory\n"));
+ 				return false;
+ 			}
  			continue;
  		}
  	}
