utmp uses 32 bytes for username, last(1) truncates it to 31 when calls getpwnam().
Reported-by: Radka Skvarilova <rskvaril@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
An empty entry is a valid type of wtmp entry. It means that an empty file or file with zeros is not interpreted as an error.
+The utmp file format uses fixed sizes of strings, which means that very long strings are impossible to store in the file and impossible to display by last. The usual limits are 32 bytes for a user and line name and 256 bytes for a hostname.
+
== AUTHORS
mailto:miquels@cistron.nl[Miquel van Smoorenburg]
{
struct passwd *pw;
char path[sizeof(ut->ut_line) + 16];
+ char user[sizeof(ut->ut_user) + 1];
int ret = 0;
if (ut->ut_tv.tv_sec < ctl->boot_time.tv_sec)
return 1;
- ut->ut_user[sizeof(ut->ut_user) - 1] = '\0';
- pw = getpwnam(ut->ut_user);
+
+ mem2strcpy(user, ut->ut_user, sizeof(ut->ut_user), sizeof(user));
+ pw = getpwnam(user);
if (!pw)
return 1;
snprintf(path, sizeof(path), "/proc/%u/loginuid", ut->ut_pid);