lib/chkname.c: Take NUL byte into account
The _SC_LOGIN_NAME_MAX value includes space for the NUL byte. The length of name must smaller than this value to be valid. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
This commit is contained in:
committed by
Serge Hallyn
parent
37b02a5f88
commit
403a2e3771
@@ -80,7 +80,7 @@ bool is_valid_user_name (const char *name)
|
||||
* User names length are limited by the kernel
|
||||
*/
|
||||
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
|
||||
if (strlen(name) > maxlen)
|
||||
if (strlen(name) >= maxlen)
|
||||
return false;
|
||||
|
||||
return is_valid_name (name);
|
||||
|
||||
@@ -134,15 +134,15 @@ test_is_valid_user_name_long(void **state)
|
||||
char *name;
|
||||
|
||||
max = sysconf(_SC_LOGIN_NAME_MAX);
|
||||
name = MALLOC(max + 2, char);
|
||||
name = MALLOC(max + 1, char);
|
||||
assert_true(name != NULL);
|
||||
|
||||
memset(name, '_', max + 1);
|
||||
|
||||
name[max + 1] = '\0';
|
||||
assert_true(false == is_valid_user_name(name));
|
||||
memset(name, '_', max);
|
||||
|
||||
name[max] = '\0';
|
||||
assert_true(false == is_valid_user_name(name));
|
||||
|
||||
name[max - 1] = '\0';
|
||||
assert_true(is_valid_user_name(name));
|
||||
|
||||
free(name);
|
||||
|
||||
Reference in New Issue
Block a user