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:
committed by
Serge Hallyn
parent
403a2e3771
commit
6a1f45d932
+7
-2
@@ -20,6 +20,8 @@
|
|||||||
#ident "$Id$"
|
#ident "$Id$"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "chkname.h"
|
#include "chkname.h"
|
||||||
|
|
||||||
@@ -74,13 +76,16 @@ static bool is_valid_name (const char *name)
|
|||||||
|
|
||||||
bool is_valid_user_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
|
* User names length are limited by the kernel
|
||||||
*/
|
*/
|
||||||
|
errno = 0;
|
||||||
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
|
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 false;
|
||||||
|
|
||||||
return is_valid_name (name);
|
return is_valid_name (name);
|
||||||
|
|||||||
Reference in New Issue
Block a user