Fix ut_type for btmp records

According to man utmp ut_type is supposed to be only switched from
LOGIN_PROCESS to USER_PROCESS after succesfull authentication and this
is how sshd behaved before 671c44078.

Fixes: 671c44078 ("use construct_utmp to construct btmp records")
Signed-off-by: Artem Savkov <artem.savkov@gmail.com>
This commit is contained in:
Artem Savkov
2025-11-18 16:26:11 +01:00
committed by Darren Tucker
parent 15fe1ceb29
commit a393759f96
2 changed files with 5 additions and 1 deletions

View File

@@ -651,6 +651,9 @@ construct_utmp(struct logininfo *li,
# ifdef HAVE_TYPE_IN_UTMP
/* This is done here to keep utmp constants out of struct logininfo */
switch (li->type) {
case LTYPE_FAILED:
ut->ut_type = LOGIN_PROCESS;
break;
case LTYPE_LOGIN:
ut->ut_type = USER_PROCESS;
break;
@@ -1732,7 +1735,7 @@ record_failed_login(struct ssh *ssh, const char *username, const char *hostname,
/* Construct a logininfo and turn it into a utmp */
memset(&li, 0, sizeof(li));
li.type = LTYPE_LOGIN;
li.type = LTYPE_FAILED;
li.pid = getpid();
strlcpy(li.line, "ssh:notty", sizeof(li.line));
strlcpy(li.username, username, sizeof(li.username));

View File

@@ -52,6 +52,7 @@ union login_netinfo {
*/
/* types - different to utmp.h 'type' macros */
/* (though set to the same value as linux, openbsd and others...) */
#define LTYPE_FAILED 6
#define LTYPE_LOGIN 7
#define LTYPE_LOGOUT 8