* lib/defines.h: Define USER_NAME_MAX_LENGTH, based on utmp and
default to 32. * libmisc/chkname.c: Use USER_NAME_MAX_LENGTH. * src/login.c: Use USER_NAME_MAX_LENGTH instead of the default 32. username also needs to be bigger than USER_NAME_MAX_LENGTH because it has to be nul-terminated.
This commit is contained in:
parent
eae8b63d4f
commit
3704745289
@ -1,3 +1,12 @@
|
||||
2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
|
||||
|
||||
* lib/defines.h: Define USER_NAME_MAX_LENGTH, based on utmp and
|
||||
default to 32.
|
||||
* libmisc/chkname.c: Use USER_NAME_MAX_LENGTH.
|
||||
* src/login.c: Use USER_NAME_MAX_LENGTH instead of the default 32.
|
||||
username also needs to be bigger than USER_NAME_MAX_LENGTH because
|
||||
it has to be nul-terminated.
|
||||
|
||||
2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
|
||||
|
||||
* src/login.c: Use xmalloc() instead of malloc().
|
||||
|
@ -356,4 +356,19 @@ extern char *strerror ();
|
||||
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
|
||||
#endif
|
||||
|
||||
/* Maximum length of usernames */
|
||||
#ifdef HAVE_UTMPX_H
|
||||
# define USER_NAME_MAX_LENGTH (sizeof (((struct utmpx *)NULL)->ut_user))
|
||||
#else
|
||||
# ifdef HAVE_STRUCT_UTMP_UT_USER
|
||||
# define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_user))
|
||||
# else
|
||||
# ifdef HAVE_STRUCT_UTMP_UT_NAME
|
||||
# define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_name))
|
||||
# else
|
||||
# define USER_NAME_MAX_LENGTH 32
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* _DEFINES_H_ */
|
||||
|
@ -77,17 +77,11 @@ static bool is_valid_name (const char *name)
|
||||
|
||||
bool is_valid_user_name (const char *name)
|
||||
{
|
||||
#if HAVE_UTMPX_H
|
||||
struct utmpx ut;
|
||||
#else
|
||||
struct utmp ut;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* User names are limited by whatever utmp can
|
||||
* handle.
|
||||
*/
|
||||
if (strlen (name) > sizeof (ut.ut_user)) {
|
||||
if (strlen (name) > USER_NAME_MAX_LENGTH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
10
src/login.c
10
src/login.c
@ -610,8 +610,9 @@ int main (int argc, char **argv)
|
||||
}
|
||||
#ifdef RLOGIN
|
||||
if (rflg) {
|
||||
username = xmalloc (32 * sizeof (char));
|
||||
if (do_rlogin (hostname, username, 32, term, sizeof term)) {
|
||||
username = xmalloc (USER_NAME_MAX_LENGTH + 1);
|
||||
username[USER_NAME_MAX_LENGTH] = '\0';
|
||||
if (do_rlogin (hostname, username, USER_NAME_MAX_LENGTH, term, sizeof term)) {
|
||||
preauth_flag = true;
|
||||
} else {
|
||||
free (username);
|
||||
@ -920,8 +921,9 @@ int main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
preauth_flag = false;
|
||||
username = xmalloc (32);
|
||||
login_prompt (_("\n%s login: "), username, 32);
|
||||
username = xmalloc (USER_NAME_MAX_LENGTH + 1);
|
||||
username[USER_NAME_MAX_LENGTH] = '\0';
|
||||
login_prompt (_("\n%s login: "), username, USER_NAME_MAX_LENGTH);
|
||||
|
||||
if ('\0' == username) {
|
||||
/* Prompt for a new login */
|
||||
|
Loading…
Reference in New Issue
Block a user