From 3a005e75a4e1b63db8e19ea0e73479588ab345a6 Mon Sep 17 00:00:00 2001 From: Robert Milasan Date: Thu, 30 Jul 2015 11:27:13 +0200 Subject: Fix trust command segfaults in expand_homedir() when no matching password record was found Hello, it looks like under some conditions, command trust segfaults in expand_homedir() due to no matching password record was found: Signed-off-by: Robert Milasan Signed-off-by: Stef Walter * Updated path so message is printed and errno is not overwritten https://bugs.freedesktop.org/show_bug.cgi?id=91506 --- common/path.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/common/path.c b/common/path.c index 3c714d5..34c00cb 100644 --- a/common/path.c +++ b/common/path.c @@ -133,18 +133,18 @@ expand_homedir (const char *remainder) #ifdef OS_UNIX char buf[1024]; struct passwd pws; - struct passwd *pwd; - int error = 0; + struct passwd *pwd = NULL; + int error; int ret; + errno = 0; ret = getpwuid_r (getuid (), &pws, buf, sizeof (buf), &pwd); - if (ret == 0 && !pwd) { - ret = -1; - errno = ESRCH; - } - if (ret < 0) { - error = errno; - p11_message_err (errno, "couldn't lookup home directory for user %d", getuid ()); + if (pwd == NULL) { + if (ret == 0) + error = ESRCH; + else + error = errno; + p11_message_err (error, "couldn't lookup home directory for user %d", getuid ()); errno = error; return NULL; } -- cgit v1.2.3