* 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> 2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
* src/login.c: Use xmalloc() instead of malloc(). * 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)) #define MAX(x,y) (((x) > (y)) ? (x) : (y))
#endif #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_ */ #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) 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 * User names are limited by whatever utmp can
* handle. * handle.
*/ */
if (strlen (name) > sizeof (ut.ut_user)) { if (strlen (name) > USER_NAME_MAX_LENGTH) {
return false; return false;
} }

View File

@ -610,8 +610,9 @@ int main (int argc, char **argv)
} }
#ifdef RLOGIN #ifdef RLOGIN
if (rflg) { if (rflg) {
username = xmalloc (32 * sizeof (char)); username = xmalloc (USER_NAME_MAX_LENGTH + 1);
if (do_rlogin (hostname, username, 32, term, sizeof term)) { username[USER_NAME_MAX_LENGTH] = '\0';
if (do_rlogin (hostname, username, USER_NAME_MAX_LENGTH, term, sizeof term)) {
preauth_flag = true; preauth_flag = true;
} else { } else {
free (username); free (username);
@ -920,8 +921,9 @@ int main (int argc, char **argv)
exit (1); exit (1);
} }
preauth_flag = false; preauth_flag = false;
username = xmalloc (32); username = xmalloc (USER_NAME_MAX_LENGTH + 1);
login_prompt (_("\n%s login: "), username, 32); username[USER_NAME_MAX_LENGTH] = '\0';
login_prompt (_("\n%s login: "), username, USER_NAME_MAX_LENGTH);
if ('\0' == username) { if ('\0' == username) {
/* Prompt for a new login */ /* Prompt for a new login */