summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-06-03 02:19:23 +0000
committerKen Raeburn <raeburn@mit.edu>2004-06-03 02:19:23 +0000
commitc2e54c9119d773c9a92897e80206695fa9f6a0e0 (patch)
treec20e36e619169cebb33b0140ef56865253d591f4
parent2e74ca109da51b550958ccf1809f15eadd6ded93 (diff)
downloadkrb5-c2e54c9119d773c9a92897e80206695fa9f6a0e0.tar.gz
krb5-c2e54c9119d773c9a92897e80206695fa9f6a0e0.tar.xz
krb5-c2e54c9119d773c9a92897e80206695fa9f6a0e0.zip
Closer to thread-safe..
* configure.in: Check for getpwuid_r. * prof_file.c (profile_open_file) [HAVE_PWD_H && HAVE_GETPWUID_R]: Use getpwuid_r if available. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16395 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/util/profile/ChangeLog6
-rw-r--r--src/util/profile/configure.in2
-rw-r--r--src/util/profile/prof_file.c10
3 files changed, 17 insertions, 1 deletions
diff --git a/src/util/profile/ChangeLog b/src/util/profile/ChangeLog
index 83e3bb8652..c9ee1cd4ab 100644
--- a/src/util/profile/ChangeLog
+++ b/src/util/profile/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-02 Ken Raeburn <raeburn@mit.edu>
+
+ * configure.in: Check for getpwuid_r.
+ * prof_file.c (profile_open_file) [HAVE_PWD_H && HAVE_GETPWUID_R]:
+ Use getpwuid_r if available.
+
2004-05-24 Ezra Peisach <epeisach@mit.edu>
* configure.in: When generating prtest, use AC_CONFIG_FILES
diff --git a/src/util/profile/configure.in b/src/util/profile/configure.in
index cfe717c104..f8576ea55e 100644
--- a/src/util/profile/configure.in
+++ b/src/util/profile/configure.in
@@ -5,7 +5,7 @@ AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_HEADERS(unistd.h stdlib.h pwd.h)
-AC_CHECK_FUNCS(stat access strdup)
+AC_CHECK_FUNCS(stat access strdup getpwuid_r)
AC_PROG_AWK
KRB5_BUILD_LIBOBJS
KRB5_BUILD_PROGRAM
diff --git a/src/util/profile/prof_file.c b/src/util/profile/prof_file.c
index 12771d234e..c0cbbbddf9 100644
--- a/src/util/profile/prof_file.c
+++ b/src/util/profile/prof_file.c
@@ -144,9 +144,19 @@ errcode_t profile_open_file(const_profile_filespec_t filespec,
if (home_env == NULL) {
uid_t uid;
struct passwd *pw;
+#ifdef HAVE_GETPWUID_R
+ struct passwd pwx;
+ char pwbuf[BUFSIZ];
+#endif
uid = getuid();
+#ifdef HAVE_GETPWUID_R
+ if (getpwuid_r(uid, &pwx, pwbuf, sizeof(pwbuf), &pw) != 0)
+ /* Probably already null, but let's make sure. */
+ pw = NULL;
+#else
pw = getpwuid(uid);
+#endif
if (pw != NULL && pw->pw_dir[0] != 0)
home_env = pw->pw_dir;
}