Do not spam logs if the owned-homedir check results in a noop

This commit is contained in:
Dave Nicponski 2022-08-07 10:13:11 -04:00
parent 6776e65fd9
commit cb6794a0d9

View file

@ -577,6 +577,7 @@ Path getHome()
{ {
static Path homeDir = []() static Path homeDir = []()
{ {
std::optional<std::string> unownedUserHomeDir = {};
auto homeDir = getEnv("HOME"); auto homeDir = getEnv("HOME");
if (homeDir) { if (homeDir) {
// Only use $HOME if doesn't exist or is owned by the current user. // Only use $HOME if doesn't exist or is owned by the current user.
@ -588,8 +589,7 @@ Path getHome()
homeDir.reset(); homeDir.reset();
} }
} else if (st.st_uid != geteuid()) { } else if (st.st_uid != geteuid()) {
warn("$HOME ('%s') is not owned by you, falling back to the one defined in the 'passwd' file", *homeDir); unownedUserHomeDir.swap(homeDir);
homeDir.reset();
} }
} }
if (!homeDir) { if (!homeDir) {
@ -600,6 +600,9 @@ Path getHome()
|| !pw || !pw->pw_dir || !pw->pw_dir[0]) || !pw || !pw->pw_dir || !pw->pw_dir[0])
throw Error("cannot determine user's home directory"); throw Error("cannot determine user's home directory");
homeDir = pw->pw_dir; homeDir = pw->pw_dir;
if (unownedUserHomeDir.has_value() && unownedUserHomeDir != homeDir) {
warn("$HOME ('%s') is not owned by you, falling back to the one defined in the 'passwd' file ('%s')", *unownedUserHomeDir, *homeDir);
}
} }
return *homeDir; return *homeDir;
}(); }();