[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#64937: "who" reports funny dates
From: |
Bruno Haible |
Subject: |
bug#64937: "who" reports funny dates |
Date: |
Tue, 08 Aug 2023 23:27:24 +0200 |
I wrote:
> > (2) The readutmp module should use a runtime 'if' rather than a
> > compile-time
> > #if, in order to dispatch between the systemd backend and the
> > file-based
> > backend.
This patch implements it.
2023-08-08 Bruno Haible <bruno@clisp.org>
readutmp: Use classical implementation for files != /var/run/utmp.
* lib/readutmp.c (read_utmp_from_systemd): Renamed from read_utmp
[READUTMP_USE_SYSTEMD]. Remove file argument.
(read_utmp): Call it when the file argument is "/var/run/utmp".
diff --git a/lib/readutmp.c b/lib/readutmp.c
index f7e43eb4a6..66b25bc7ae 100644
--- a/lib/readutmp.c
+++ b/lib/readutmp.c
@@ -439,17 +439,9 @@ guess_pty_name (uid_t uid, const struct timespec at)
return NULL;
}
-int
-read_utmp (char const *file, idx_t *n_entries, STRUCT_UTMP **utmp_buf,
- int options)
+static int
+read_utmp_from_systemd (idx_t *n_entries, STRUCT_UTMP **utmp_buf, int options)
{
- /* The current implementation can imitate only UTMP_FILE. */
- if (strcmp (file, UTMP_FILE) != 0)
- {
- errno = ENOTSUP;
- return -1;
- }
-
/* Fill entries, simulating what a utmp file would contain. */
struct utmp_alloc a = {0};
@@ -602,7 +594,9 @@ read_utmp (char const *file, idx_t *n_entries, STRUCT_UTMP
**utmp_buf,
return 0;
}
-# elif defined UTMP_NAME_FUNCTION /* glibc, musl, macOS, FreeBSD, NetBSD,
Minix, AIX, IRIX, Solaris, Cygwin, Android */
+# endif
+
+# if defined UTMP_NAME_FUNCTION /* glibc, musl, macOS, FreeBSD, NetBSD, Minix,
AIX, IRIX, Solaris, Cygwin, Android */
# if !HAVE_UTMPX_H && HAVE_UTMP_H && !HAVE_DECL_GETUTENT
struct utmp *getutent (void);
@@ -612,6 +606,12 @@ int
read_utmp (char const *file, idx_t *n_entries, STRUCT_UTMP **utmp_buf,
int options)
{
+# if READUTMP_USE_SYSTEMD
+ if (strcmp (file, UTMP_FILE) == 0)
+ /* Imitate reading UTMP_FILE, using systemd and Linux APIs. */
+ return read_utmp_from_systemd (n_entries, utmp_buf, options);
+# endif
+
/* Ignore the return value for now.
Solaris' utmpname returns 1 upon success -- which is contrary
to what the GNU libc version does. In addition, older GNU libc
- bug#64937: "who" reports funny dates, (continued)
- Message not available
- bug#64937: "who" reports funny dates, Thorsten Kukuk, 2023/08/06
- bug#64937: "who" reports funny dates, Paul Eggert, 2023/08/06
- bug#64937: "who" reports funny dates, Bruno Haible, 2023/08/07
- bug#64937: "who" reports funny dates, Paul Eggert, 2023/08/07
- bug#64937: "who" reports funny dates, Bruno Haible, 2023/08/08
- bug#64937: "who" reports funny dates, Paul Eggert, 2023/08/08
- bug#64937: "who" reports funny dates,
Bruno Haible <=
- Message not available
- bug#64937: "who" reports funny dates, Thorsten Kukuk, 2023/08/08
- bug#64937: "who" reports funny dates, Bruno Haible, 2023/08/08
- Message not available
- bug#64937: "who" reports funny dates, Thorsten Kukuk, 2023/08/08
- bug#64937: "who" reports funny dates, Robert Pluim, 2023/08/08
- bug#64937: "who" reports funny dates, Bruno Haible, 2023/08/08
- bug#64937: "who" reports funny dates, Robert Pluim, 2023/08/08
- Message not available
- bug#64937: "who" reports funny dates, Thorsten Kukuk, 2023/08/08
- bug#64937: "who" reports funny dates, Bruno Haible, 2023/08/08
- bug#64937: boot time on Linux, Bruno Haible, 2023/08/08
- bug#64937: boot time on Linux, Bruno Haible, 2023/08/09