lib/chkname.c: Support unlimited user name lengths

If the system does not have a user name length limit, support it
accordingly. If the system has no _SC_LOGIN_NAME_MAX, use
LOGIN_NAME_MAX constant instead.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
This commit is contained in:
Tobias Stoeckmann 2024-02-03 01:10:22 +01:00 committed by Serge Hallyn
parent 403a2e3771
commit 6a1f45d932

View File

@ -20,6 +20,8 @@
#ident "$Id$"
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include "defines.h"
#include "chkname.h"
@ -74,13 +76,16 @@ static bool is_valid_name (const char *name)
bool is_valid_user_name (const char *name)
{
size_t maxlen;
long maxlen;
/*
* User names length are limited by the kernel
*/
errno = 0;
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
if (strlen(name) >= maxlen)
if (maxlen == -1 && errno != 0)
maxlen = LOGIN_NAME_MAX;
if (maxlen != -1 && strlen(name) >= (size_t)maxlen)
return false;
return is_valid_name (name);