* 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:
nekral-guest 2009-04-22 20:42:48 +00:00
parent eae8b63d4f
commit 3704745289
4 changed files with 31 additions and 11 deletions

View File

@ -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().

View File

@ -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_ */

View File

@ -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;
}

View File

@ -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 */