mirror of
https://github.com/curl/curl.git
synced 2024-12-09 06:30:06 +08:00
netrc: fixed thread safety problem by using getpwuid_r if available
The old way using getpwuid could cause problems in programs that enable reading from netrc files simultaneously in multiple threads. Reported-by: David Woodhouse
This commit is contained in:
parent
6c6ba59e6b
commit
763c51780c
@ -58,6 +58,7 @@ This release includes the following bugfixes:
|
||||
o build: Fixed overridden compiler PDB settings in VC7 to VC12
|
||||
o ntlm_wb: Fixed buffer size not being large enough for NTLMv2 sessions [11]
|
||||
o netrc: don't abort if home dir cannot be found
|
||||
o netrc: fixed thread safety problem by using getpwuid_r if available
|
||||
|
||||
This release includes the following known bugs:
|
||||
|
||||
|
@ -3033,6 +3033,7 @@ AC_CHECK_FUNCS([fork \
|
||||
getppid \
|
||||
getprotobyname \
|
||||
getpwuid \
|
||||
getpwuid_r \
|
||||
getrlimit \
|
||||
gettimeofday \
|
||||
if_nametoindex \
|
||||
|
14
lib/netrc.c
14
lib/netrc.c
@ -76,7 +76,19 @@ int Curl_parsenetrc(const char *host,
|
||||
char *home = curl_getenv("HOME"); /* portable environment reader */
|
||||
if(home) {
|
||||
home_alloc = TRUE;
|
||||
#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
|
||||
#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
|
||||
}
|
||||
else {
|
||||
struct passwd pw, *pw_res;
|
||||
char pwbuf[1024];
|
||||
if(!getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res)
|
||||
&& pw_res) {
|
||||
home = strdup(pw.pw_dir);
|
||||
if(!home)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
home_alloc = TRUE;
|
||||
}
|
||||
#elif defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
|
||||
}
|
||||
else {
|
||||
struct passwd *pw;
|
||||
|
Loading…
Reference in New Issue
Block a user