From: ed Date: Sun, 25 Aug 2019 19:11:24 +0000 (+0100) Subject: pwck.c: only check home dirs if set and not a system user X-Git-Tag: 4.8~16^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F177%2Fhead;p=thirdparty%2Fshadow.git pwck.c: only check home dirs if set and not a system user Closes #126 Changelog: pwck, better to look at array than to use strnlen. --- diff --git a/src/pwck.c b/src/pwck.c index f022e473d..581cfddf6 100644 --- a/src/pwck.c +++ b/src/pwck.c @@ -382,6 +382,8 @@ static void check_pw_file (int *errors, bool *changed) struct commonio_entry *pfe, *tpfe; struct passwd *pwd; struct spwd *spw; + uid_t min_sys_id = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL); + uid_t max_sys_id = (uid_t) getdef_ulong ("SYS_UID_MAX", 999UL); /* * Loop through the entire password file. @@ -510,15 +512,20 @@ static void check_pw_file (int *errors, bool *changed) } /* - * Make sure the home directory exists + * If uid is system and has a home directory, then check */ - if (!quiet && (access (pwd->pw_dir, F_OK) != 0)) { + if (!(pwd->pw_uid >= min_sys_id && pwd->pw_uid <= max_sys_id && pwd->pw_dir && pwd->pw_dir[0])) { /* - * Home directory doesn't exist, give a warning + * Make sure the home directory exists */ - printf (_("user '%s': directory '%s' does not exist\n"), - pwd->pw_name, pwd->pw_dir); - *errors += 1; + if (!quiet && (access (pwd->pw_dir, F_OK) != 0)) { + /* + * Home directory doesn't exist, give a warning + */ + printf (_("user '%s': directory '%s' does not exist\n"), + pwd->pw_name, pwd->pw_dir); + *errors += 1; + } } /*