diff options
Diffstat (limited to '')
-rw-r--r-- | lib/chkname.c (renamed from libmisc/chkname.c) | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/libmisc/chkname.c b/lib/chkname.c index e31ee8c..995562f 100644 --- a/libmisc/chkname.c +++ b/lib/chkname.c @@ -1,11 +1,10 @@ -/* - * SPDX-FileCopyrightText: 1990 - 1994, Julianne Frances Haugh - * SPDX-FileCopyrightText: 1996 - 2000, Marek Michałkiewicz - * SPDX-FileCopyrightText: 2001 - 2005, Tomasz Kłoczko - * SPDX-FileCopyrightText: 2005 - 2008, Nicolas François - * - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh +// SPDX-FileCopyrightText: 1996-2000, Marek Michałkiewicz +// SPDX-FileCopyrightText: 2001-2005, Tomasz Kłoczko +// SPDX-FileCopyrightText: 2005-2008, Nicolas François +// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org> +// SPDX-License-Identifier: BSD-3-Clause + /* * is_valid_user_name(), is_valid_group_name() - check the new user/group @@ -15,16 +14,39 @@ * false - bad name */ + #include <config.h> #ident "$Id$" #include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <stddef.h> +#include <unistd.h> + #include "defines.h" #include "chkname.h" + int allow_bad_names = false; + +size_t +login_name_max_size(void) +{ + long conf; + + errno = 0; + conf = sysconf(_SC_LOGIN_NAME_MAX); + if (conf == -1 && errno != 0) + return LOGIN_NAME_MAX; + + return conf; +} + + static bool is_valid_name (const char *name) { if (allow_bad_names) { @@ -32,8 +54,8 @@ static bool is_valid_name (const char *name) } /* - * User/group names must match gnu e-regex: - * [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]? + * User/group names must match BRE regex: + * [a-zA-Z0-9_.][a-zA-Z0-9_.-]*$\? * * as a non-POSIX, extension, allow "$" as the last char for * sake of Samba 3.x "add machine script" @@ -72,19 +94,17 @@ static bool is_valid_name (const char *name) return !numeric; } -bool is_valid_user_name (const char *name) + +bool +is_valid_user_name(const char *name) { - /* - * User names are limited by whatever utmp can - * handle. - */ - if (strlen (name) > USER_NAME_MAX_LENGTH) { + if (strlen(name) >= login_name_max_size()) return false; - } - return is_valid_name (name); + return is_valid_name(name); } + bool is_valid_group_name (const char *name) { /* @@ -98,4 +118,3 @@ bool is_valid_group_name (const char *name) return is_valid_name (name); } - |