From 2793e014d442f4eba93c5c1db3967345d3a63588 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Fri, 10 Jul 2020 17:47:23 -0700 Subject: [PATCH] Fixed determining the user's homedir: If $HOME and the /etc/passwd entry for the current user contradict each other, now $HOME takes preference over /etc/passwd. --- ChangeLog.txt | 1 + src/cpp-utils/system/homedir.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f0b72c49..6c5fdf50 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,7 @@ Version 0.10.3 (unreleased) --------------- Fixed bugs: * A comma in the base directory name would make the file system fail to mount, https://github.com/cryfs/cryfs/issues/326 +* Fixed determining the user's homedir: If $HOME and the /etc/passwd entry for the current user contradict each other, now $HOME takes preference over /etc/passwd. Version 0.10.2 --------------- diff --git a/src/cpp-utils/system/homedir.cpp b/src/cpp-utils/system/homedir.cpp index 9b7d6691..4b64090d 100644 --- a/src/cpp-utils/system/homedir.cpp +++ b/src/cpp-utils/system/homedir.cpp @@ -9,13 +9,13 @@ using std::string; #include namespace { bf::path _get_home_directory() { - struct passwd* pwd = getpwuid(getuid()); - string homedir; - if (pwd) { - homedir = pwd->pw_dir; - } else { - // try the $HOME environment variable - homedir = getenv("HOME"); + string homedir = getenv("HOME"); + if (homedir == "") { + // try the /etc/passwd entry + struct passwd* pwd = getpwuid(getuid()); + if (pwd) { + homedir = pwd->pw_dir; + } } if (homedir == "") { throw std::runtime_error("Couldn't determine home directory for user");