diff options
Diffstat (limited to 'community/mingetty/0006-use-utmpx-instead-of-legacy-utmp.patch')
-rw-r--r-- | community/mingetty/0006-use-utmpx-instead-of-legacy-utmp.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/community/mingetty/0006-use-utmpx-instead-of-legacy-utmp.patch b/community/mingetty/0006-use-utmpx-instead-of-legacy-utmp.patch new file mode 100644 index 00000000000..5f29bf6dfb5 --- /dev/null +++ b/community/mingetty/0006-use-utmpx-instead-of-legacy-utmp.patch @@ -0,0 +1,68 @@ +From: Jakub Jirutka <jakub@jirutka.cz> +Date: Sat, 11 Sep 2021 17:36:22 +0200 +Subject: [PATCH] Use UTMPX instead of legacy UTMP + +We still have to include <utmp.h> because <utmpx.h> doesn't define +_PATH_WTMP. However, <utmp.h> includes <utmpx.h>, so it doesn't matter +so mach. + +--- a/mingetty.c ++++ b/mingetty.c +@@ -94,12 +97,12 @@ + /* update_utmp() - update our utmp entry */ + static void update_utmp (void) + { +- struct utmp ut; +- struct utmp *utp; +- time_t cur_time; ++ struct utmpx ut; ++ struct utmpx *utp; ++ struct timeval tv; + +- setutent (); +- while ((utp = getutent ())) ++ setutxent (); ++ while ((utp = getutxent ())) + if (utp->ut_type == INIT_PROCESS && utp->ut_pid == pid) + break; + +@@ -118,16 +121,17 @@ + + strncpy (ut.ut_user, "LOGIN", sizeof (ut.ut_user)); + strncpy (ut.ut_line, tty, sizeof (ut.ut_line)); +- time (&cur_time); +- ut.ut_time = cur_time; ++ gettimeofday (&tv, NULL); ++ ut.ut_tv.tv_sec = tv.tv_sec; ++ ut.ut_tv.tv_usec = tv.tv_usec; + ut.ut_type = LOGIN_PROCESS; + ut.ut_pid = pid; + ut.ut_session = sid; + +- pututline (&ut); +- endutent (); ++ pututxline (&ut); ++ endutxent (); + +- updwtmp (_PATH_WTMP, &ut); ++ updwtmpx (_PATH_WTMP, &ut); + } + + /* open_tty - set up tty as standard { input, output, error } */ +@@ -256,12 +260,12 @@ + case 'U': + { + int users = 0; +- struct utmp *ut; +- setutent (); +- while ((ut = getutent ())) ++ struct utmpx *ut; ++ setutxent (); ++ while ((ut = getutxent ())) + if (ut->ut_type == USER_PROCESS) + users++; +- endutent (); ++ endutxent (); + printf ("%d", users); + if (c == 'U') + printf (" user%s", users == 1 ? "" : "s"); |