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
|
* User names length are limited by the kernel
|
||||||
*/
|
*/
|
||||||
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
|
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
|
||||||
if (strlen(name) > maxlen)
|
if (strlen(name) >= maxlen)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return is_valid_name (name);
|
return is_valid_name (name);
|
||||||
|
|||||||
@@ -134,15 +134,15 @@ test_is_valid_user_name_long(void **state)
|
|||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
max = sysconf(_SC_LOGIN_NAME_MAX);
|
max = sysconf(_SC_LOGIN_NAME_MAX);
|
||||||
name = MALLOC(max + 2, char);
|
name = MALLOC(max + 1, char);
|
||||||
assert_true(name != NULL);
|
assert_true(name != NULL);
|
||||||
|
|
||||||
memset(name, '_', max + 1);
|
memset(name, '_', max);
|
||||||
|
|
||||||
name[max + 1] = '\0';
|
|
||||||
assert_true(false == is_valid_user_name(name));
|
|
||||||
|
|
||||||
name[max] = '\0';
|
name[max] = '\0';
|
||||||
|
assert_true(false == is_valid_user_name(name));
|
||||||
|
|
||||||
|
name[max - 1] = '\0';
|
||||||
assert_true(is_valid_user_name(name));
|
assert_true(is_valid_user_name(name));
|
||||||
|
|
||||||
free(name);
|
free(name);
|
||||||
|
|||||||
Reference in New Issue
Block a user