1
0
mirror of https://github.com/systemd/systemd.git synced 2025-10-05 07:33:37 +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
7 changed files with 17 additions and 25 deletions

View File

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

View File

@@ -710,8 +710,8 @@ int manager_read_utmp(Manager *m) {
assert(m); assert(m);
if (utmpxname(_PATH_UTMPX) < 0) if (utmpxname(UTMPX_FILE) < 0)
return log_error_errno(errno, "Failed to set utmp path to " _PATH_UTMPX ": %m"); return log_error_errno(errno, "Failed to set utmp path to " UTMPX_FILE ": %m");
utmpx = utxent_start(); utmpx = utxent_start();
@@ -725,9 +725,9 @@ int manager_read_utmp(Manager *m) {
u = getutxent(); u = getutxent();
if (!u) { if (!u) {
if (errno == ENOENT) 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) 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; 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 * 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) */ * 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) 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 { else {
r = sd_event_source_set_priority(s, SD_EVENT_PRIORITY_IDLE); r = sd_event_source_set_priority(s, SD_EVENT_PRIORITY_IDLE);
if (r < 0) if (r < 0)

View File

@@ -42,7 +42,7 @@ int utmp_get_runlevel(int *runlevel, int *previous) {
return 0; return 0;
} }
if (utmpxname(_PATH_UTMPX) < 0) if (utmpxname(UTMPX_FILE) < 0)
return -errno; return -errno;
utmpx = utxent_start(); 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 * each entry type resp. user; i.e. basically a key/value
* table. */ * table. */
if (utmpxname(_PATH_UTMPX) < 0) if (utmpxname(UTMPX_FILE) < 0)
return -errno; return -errno;
utmpx = utxent_start(); 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 /* libc's setutxent() unfortunately doesn't inform us about success, i.e. whether /var/run/utmp
* exists. Hence we have to check manually first. */ * 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) if (errno == ENOENT)
return -ENOPROTOOPT; return -ENOPROTOOPT;

View File

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

View File

@@ -7,15 +7,9 @@
#include "utmp-wtmp.h" #include "utmp-wtmp.h"
#include "tests.h" #include "tests.h"
#ifndef UT_LINESIZE #define UTX_LINESIZE sizeof_field(struct utmpx, ut_line)
# define UT_LINESIZE 32 #define UTX_NAMESIZE sizeof_field(struct utmpx, ut_user)
#endif #define UTX_HOSTSIZE sizeof_field(struct utmpx, ut_host)
#ifndef UT_NAMESIZE
# define UT_NAMESIZE 32
#endif
#ifndef UT_HOSTSIZE
# define UT_HOSTSIZE 256
#endif
TEST(dump_run_utmp) { TEST(dump_run_utmp) {
_unused_ _cleanup_(utxent_cleanup) bool utmpx = false; _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", log_info("%14s %10"PID_PRI" line=%-7.*s id=%-4.4s name=%-8.*s session=%lu host=%.*s addr=%s",
type, type,
u->ut_pid, u->ut_pid,
UT_LINESIZE, u->ut_line, (int) UTX_LINESIZE, u->ut_line,
u->ut_id, u->ut_id,
UT_NAMESIZE, u->ut_user, (int) UTX_NAMESIZE, u->ut_user,
(long unsigned) u->ut_session, (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)); 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 */ /* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <getopt.h> #include <getopt.h>
#include <utmp.h>
#include "build.h" #include "build.h"
#include "dirent-util.h" #include "dirent-util.h"