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>
+
+ * 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().
#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_ */
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;
}
}
#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);
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 */