1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-10 05:18:17 +03:00

Merge pull request #34291 from poettering/utmpx-all-the-way

tree-wide: complete the switch to utmpx
This commit is contained in:
Lennart Poettering 2024-09-06 15:22:52 +02:00 committed by GitHub
commit 9a78f9e10c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 17 additions and 25 deletions

View File

@ -9,7 +9,7 @@
#include <sys/file.h>
#include <sys/stat.h>
#include <unistd.h>
#include <utmp.h>
#include <utmpx.h>
#include "sd-messages.h"
@ -802,7 +802,7 @@ bool valid_user_group_name(const char *u, ValidUserFlags flags) {
return false;
if (l > NAME_MAX) /* must fit in a filename: 255 */
return false;
if (l > UT_NAMESIZE - 1) /* must fit in utmp: 31 */
if (l > sizeof_field(struct utmpx, ut_user) - 1) /* must fit in utmp: 31 */
return false;
}

View File

@ -710,8 +710,8 @@ int manager_read_utmp(Manager *m) {
assert(m);
if (utmpxname(_PATH_UTMPX) < 0)
return log_error_errno(errno, "Failed to set utmp path to " _PATH_UTMPX ": %m");
if (utmpxname(UTMPX_FILE) < 0)
return log_error_errno(errno, "Failed to set utmp path to " UTMPX_FILE ": %m");
utmpx = utxent_start();
@ -725,9 +725,9 @@ int manager_read_utmp(Manager *m) {
u = getutxent();
if (!u) {
if (errno == ENOENT)
log_debug_errno(errno, _PATH_UTMPX " does not exist, ignoring.");
log_debug_errno(errno, UTMPX_FILE " does not exist, ignoring.");
else if (errno != 0)
log_warning_errno(errno, "Failed to read " _PATH_UTMPX ", ignoring: %m");
log_warning_errno(errno, "Failed to read " UTMPX_FILE ", ignoring: %m");
return 0;
}
@ -808,9 +808,9 @@ void manager_connect_utmp(Manager *m) {
* Yes, relying on utmp is pretty ugly, but it's good enough for informational purposes, as well as idle
* detection (which, for tty sessions, relies on the TTY used) */
r = sd_event_add_inotify(m->event, &s, _PATH_UTMPX, IN_MODIFY|IN_MOVE_SELF|IN_DELETE_SELF|IN_ATTRIB, manager_dispatch_utmp, m);
r = sd_event_add_inotify(m->event, &s, UTMPX_FILE, IN_MODIFY|IN_MOVE_SELF|IN_DELETE_SELF|IN_ATTRIB, manager_dispatch_utmp, m);
if (r < 0)
log_full_errno(r == -ENOENT ? LOG_DEBUG: LOG_WARNING, r, "Failed to create inotify watch on " _PATH_UTMPX ", ignoring: %m");
log_full_errno(r == -ENOENT ? LOG_DEBUG: LOG_WARNING, r, "Failed to create inotify watch on " UTMPX_FILE ", ignoring: %m");
else {
r = sd_event_source_set_priority(s, SD_EVENT_PRIORITY_IDLE);
if (r < 0)

View File

@ -42,7 +42,7 @@ int utmp_get_runlevel(int *runlevel, int *previous) {
return 0;
}
if (utmpxname(_PATH_UTMPX) < 0)
if (utmpxname(UTMPX_FILE) < 0)
return -errno;
utmpx = utxent_start();
@ -91,7 +91,7 @@ static int write_entry_utmp(const struct utmpx *store) {
* each entry type resp. user; i.e. basically a key/value
* table. */
if (utmpxname(_PATH_UTMPX) < 0)
if (utmpxname(UTMPX_FILE) < 0)
return -errno;
utmpx = utxent_start();

View File

@ -51,7 +51,7 @@ static int wall_utmp(
/* libc's setutxent() unfortunately doesn't inform us about success, i.e. whether /var/run/utmp
* exists. Hence we have to check manually first. */
if (access(_PATH_UTMPX, F_OK) < 0) {
if (access(UTMPX_FILE, F_OK) < 0) {
if (errno == ENOENT)
return -ENOPROTOOPT;

View File

@ -1,7 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <getopt.h>
#include <utmp.h>
#include "alloc-util.h"
#include "build.h"

View File

@ -7,15 +7,9 @@
#include "utmp-wtmp.h"
#include "tests.h"
#ifndef UT_LINESIZE
# define UT_LINESIZE 32
#endif
#ifndef UT_NAMESIZE
# define UT_NAMESIZE 32
#endif
#ifndef UT_HOSTSIZE
# define UT_HOSTSIZE 256
#endif
#define UTX_LINESIZE sizeof_field(struct utmpx, ut_line)
#define UTX_NAMESIZE sizeof_field(struct utmpx, ut_user)
#define UTX_HOSTSIZE sizeof_field(struct utmpx, ut_host)
TEST(dump_run_utmp) {
_unused_ _cleanup_(utxent_cleanup) bool utmpx = false;
@ -46,11 +40,11 @@ TEST(dump_run_utmp) {
log_info("%14s %10"PID_PRI" line=%-7.*s id=%-4.4s name=%-8.*s session=%lu host=%.*s addr=%s",
type,
u->ut_pid,
UT_LINESIZE, u->ut_line,
(int) UTX_LINESIZE, u->ut_line,
u->ut_id,
UT_NAMESIZE, u->ut_user,
(int) UTX_NAMESIZE, u->ut_user,
(long unsigned) u->ut_session,
UT_HOSTSIZE, u->ut_host,
(int) UTX_HOSTSIZE, u->ut_host,
IN_ADDR_TO_STRING(is_ipv4 ? AF_INET : AF_INET6, &addr));
}
}

View File

@ -1,7 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <getopt.h>
#include <utmp.h>
#include "build.h"
#include "dirent-util.h"