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:
Tobias Stoeckmann
2024-02-03 01:07:58 +01:00
committed by Serge Hallyn
parent 37b02a5f88
commit 403a2e3771
2 changed files with 6 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);