From 71ae7b576cf9d0e4e7280790bb7fb4c5fc3dd34e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 7 Mar 2019 10:32:48 +0100 Subject: [PATCH] user-util: filter out invalid user record data a bit more thorougly --- src/basic/user-util.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/basic/user-util.c b/src/basic/user-util.c index 260f3d20576..b8d10669299 100644 --- a/src/basic/user-util.c +++ b/src/basic/user-util.c @@ -238,14 +238,21 @@ int get_user_creds( } if (home) { - if (FLAGS_SET(flags, USER_CREDS_CLEAN) && empty_or_root(p->pw_dir)) - *home = NULL; + if (FLAGS_SET(flags, USER_CREDS_CLEAN) && + (empty_or_root(p->pw_dir) || + !path_is_valid(p->pw_dir) || + !path_is_absolute(p->pw_dir))) + *home = NULL; /* Note: we don't insist on normalized paths, since there are setups that have /./ in the path */ else *home = p->pw_dir; } if (shell) { - if (FLAGS_SET(flags, USER_CREDS_CLEAN) && (isempty(p->pw_shell) || is_nologin_shell(p->pw_shell))) + if (FLAGS_SET(flags, USER_CREDS_CLEAN) && + (isempty(p->pw_shell) || + !path_is_valid(p->pw_dir) || + !path_is_absolute(p->pw_shell) || + is_nologin_shell(p->pw_shell))) *shell = NULL; else *shell = p->pw_shell;