generic: use ut_user utmp/utmpx member if available

partially fixes build on FreeBSD

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-02-04 13:23:25 +02:00
parent 221eb49faa
commit fb3284e764
3 changed files with 10 additions and 0 deletions

View file

@ -118,6 +118,7 @@ if (UNIX)
else (login_in_libc OR login_in_libutil)
set(HAVE_LOGIN)
endif (login_in_libc OR login_in_libutil)
check_struct_has_member("struct ${utmp}" "ut_user" "${utmp}.h" HAVE_STRUCT_UTMP_UT_USER)
check_struct_has_member("struct ${utmp}" "ut_type" "${utmp}.h" HAVE_STRUCT_UTMP_UT_TYPE)
check_struct_has_member("struct ${utmp}" "ut_pid" "${utmp}.h" HAVE_STRUCT_UTMP_UT_PID)
check_struct_has_member("struct ${utmp}" "ut_session" "${utmp}.h" HAVE_STRUCT_UTMP_UT_SESSION)

View file

@ -20,6 +20,7 @@
#cmakedefine HAVE_LOGIN 1
#cmakedefine HAVE_UTMPX 1
#cmakedefine HAVE_LOGINX 1
#cmakedefine HAVE_STRUCT_UTMP_UT_USER 1
#cmakedefine HAVE_STRUCT_UTMP_UT_TYPE 1
#cmakedefine HAVE_STRUCT_UTMP_UT_PID 1
#cmakedefine HAVE_STRUCT_UTMP_UT_SESSION 1

View file

@ -464,7 +464,11 @@ void KPty::login(const char *user, const char *remotehost)
// note: strncpy without terminators _is_ correct here. man 4 utmp
if (user)
#ifdef HAVE_STRUCT_UTMP_UT_USER
strncpy(l_struct.ut_user, user, sizeof(l_struct.ut_user));
#else
strncpy(l_struct.ut_name, user, sizeof(l_struct.ut_name));
#endif
if (remotehost) {
strncpy(l_struct.ut_host, remotehost, sizeof(l_struct.ut_host));
@ -561,7 +565,11 @@ void KPty::logout()
setutent();
if ((ut = getutline(&l_struct))) {
# endif
# ifdef HAVE_STRUCT_UTMP_UT_USER
memset(ut->ut_user, 0, sizeof(*ut->ut_user));
# else
memset(ut->ut_name, 0, sizeof(*ut->ut_name));
# endif
memset(ut->ut_host, 0, sizeof(*ut->ut_host));
# ifdef HAVE_STRUCT_UTMP_UT_SYSLEN
ut->ut_syslen = 0;