Fix handling of numeric-only names with pw lock
Add a regression test about it PR: 204968 MFC after: 1 week
This commit is contained in:
parent
218be0b2ee
commit
c514e5a523
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=291657
@ -274,7 +274,7 @@ pw_userlock(char *arg1, int mode)
|
||||
char *passtmp = NULL;
|
||||
char *name;
|
||||
bool locked = false;
|
||||
uid_t id;
|
||||
uid_t id = (uid_t)-1;
|
||||
|
||||
if (geteuid() != 0)
|
||||
errx(EX_NOPERM, "you must be root");
|
||||
@ -282,16 +282,19 @@ pw_userlock(char *arg1, int mode)
|
||||
if (arg1 == NULL)
|
||||
errx(EX_DATAERR, "username or id required");
|
||||
|
||||
if (arg1[strspn(arg1, "0123456789")] == '\0') {
|
||||
id = pw_checkid(arg1, UID_MAX);
|
||||
name = NULL;
|
||||
} else
|
||||
name = arg1;
|
||||
name = arg1;
|
||||
if (arg1[strspn(name, "0123456789")] == '\0')
|
||||
id = pw_checkid(name, UID_MAX);
|
||||
|
||||
pwd = (name != NULL) ? GETPWNAM(pw_checkname(name, 0)) : GETPWUID(id);
|
||||
pwd = GETPWNAM(pw_checkname(name, 0));
|
||||
if (pwd == NULL && id != (uid_t)-1) {
|
||||
pwd = GETPWUID(id);
|
||||
if (pwd != NULL)
|
||||
name = pwd->pw_name;
|
||||
}
|
||||
if (pwd == NULL) {
|
||||
if (name == NULL)
|
||||
errx(EX_NOUSER, "no such uid `%ju'", (uintmax_t) id);
|
||||
if (id == (uid_t)-1)
|
||||
errx(EX_NOUSER, "no such name or uid `%ju'", (uintmax_t) id);
|
||||
errx(EX_NOUSER, "no such user `%s'", name);
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,27 @@ user_locking_body() {
|
||||
grep "^test:\*:1001:" $HOME/master.passwd
|
||||
}
|
||||
|
||||
atf_test_case numeric_locking cleanup
|
||||
numeric_locking_body() {
|
||||
populate_etc_skel
|
||||
${PW} useradd test || atf_fail "Creating test user"
|
||||
${PW} lock 1001 || atf_fail "Locking the user"
|
||||
atf_check -s exit:0 -o match:"^test:\*LOCKED\*\*:1001:" \
|
||||
grep "^test:\*LOCKED\*\*:1001:" $HOME/master.passwd
|
||||
${PW} unlock 1001 || atf_fail "Unlocking the user"
|
||||
atf_check -s exit:0 -o match:"^test:\*:1001:" \
|
||||
grep "^test:\*:1001:" $HOME/master.passwd
|
||||
# Now numeric names
|
||||
${PW} useradd -n 1001 || atf_fail "Creating test user"
|
||||
${PW} lock 1001 || atf_fail "Locking the user"
|
||||
atf_check -s exit:0 -o match:"^1001:\*LOCKED\*\*:1002:" \
|
||||
grep "^1001:\*LOCKED\*\*:1002:" $HOME/master.passwd
|
||||
${PW} unlock 1001 || atf_fail "Unlocking the user"
|
||||
atf_check -s exit:0 -o match:"^1001:\*:1002:" \
|
||||
grep "^1001:\*:1002:" $HOME/master.passwd
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
atf_add_test_case user_locking
|
||||
atf_add_test_case numeric_locking
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user