From 7bd6507eec7cff0e2a4673a0feaca3378f2d0f45 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 14 Mar 2001 16:05:00 +0000 Subject: uses getpwuid() to find user's home dir --- lib/netrc.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'lib/netrc.c') diff --git a/lib/netrc.c b/lib/netrc.c index 598f4515d..f8f16058c 100644 --- a/lib/netrc.c +++ b/lib/netrc.c @@ -27,6 +27,17 @@ #include #include +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_PWD_H +#include +#endif + + #include #include "strequal.h" @@ -60,7 +71,7 @@ int Curl_parsenetrc(char *host, char netrcbuffer[256]; int retcode=1; - char *home = curl_getenv("HOME"); /* portable environment reader */ + char *home = NULL; int state=NOTHING; char state_login=0; @@ -68,16 +79,29 @@ int Curl_parsenetrc(char *host, #define NETRC DOT_CHAR "netrc" - if(!home) - return -1; - - if(strlen(home)>(sizeof(netrcbuffer)-strlen(NETRC))) { - free(home); - return -1; +#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID) + struct passwd *pw; + pw= getpwuid(geteuid()); + if (pw) + strncat(netrcbuffer, pw->pw_dir, 255); +#else + void *pw=NULL; +#endif + + if(NULL == pw) { + home = curl_getenv("HOME"); /* portable environment reader */ + if(!home) { + return -1; + } + + if(strlen(home)>(sizeof(netrcbuffer)-strlen(NETRC))) { + free(home); + return -1; + } + + sprintf(netrcbuffer, "%s%s%s", home, DIR_CHAR, NETRC); } - sprintf(netrcbuffer, "%s%s%s", home, DIR_CHAR, NETRC); - file = fopen(netrcbuffer, "r"); if(file) { char *tok; -- cgit v1.2.3