diff --git a/lib/chkname.c b/lib/chkname.c index cbfbff51..1c596349 100644 --- a/lib/chkname.c +++ b/lib/chkname.c @@ -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); diff --git a/tests/unit/test_chkname.c b/tests/unit/test_chkname.c index af982940..e0f9f84b 100644 --- a/tests/unit/test_chkname.c +++ b/tests/unit/test_chkname.c @@ -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);