summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStef Walter <stef@thewalter.net>2013-07-18 10:09:45 +0200
committerStef Walter <stef@thewalter.net>2013-07-18 13:03:48 +0200
commite8955607080342d6ed5b057567f546a5063e14f1 (patch)
tree7dd9f913629fec29dc7d4e37c46d3cd359f2ede5
parentb0f83b4e0f7672b0ee6c4ea56498cc1422bd57c7 (diff)
downloadp11-kit-e8955607080342d6ed5b057567f546a5063e14f1.tar.gz
Use getpwuid_r() instead of the non-thread-sofe getpwuid()
-rw-r--r--common/path.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/common/path.c b/common/path.c
index 17cde8c..398c51e 100644
--- a/common/path.c
+++ b/common/path.c
@@ -131,11 +131,18 @@ expand_homedir (const char *remainder)
} else {
#ifdef OS_UNIX
+ char buf[1024];
+ struct passwd pws;
struct passwd *pwd;
int error = 0;
+ int ret;
- pwd = getpwuid (getuid ());
- if (!pwd) {
+ ret = getpwuid_r (getuid (), &pws, buf, sizeof (buf), &pwd);
+ if (ret == 0 && !pwd) {
+ ret = -1;
+ errno = ESRCH;
+ }
+ if (ret < 0) {
error = errno;
p11_message ("couldn't lookup home directory for user %d: %s",
getuid (), strerror (errno));