From: Lennart Poettering Date: Thu, 7 Mar 2019 09:32:48 +0000 (+0100) Subject: user-util: filter out invalid user record data a bit more thorougly X-Git-Tag: v242-rc1~155^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=71ae7b576cf9d0e4e7280790bb7fb4c5fc3dd34e;p=thirdparty%2Fsystemd.git user-util: filter out invalid user record data a bit more thorougly --- 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;