mirror of
https://github.com/systemd/systemd.git
synced 2026-08-03 14:40:31 +00:00
tests: add a helper that dumps /run/utmp in detail
utmpdump doesn't print all the details. Looking at the list if useful when trying to tweak the wall filtering logic. This doesn't do much, but at least it serves as a smoke test for the cleanup functions.
This commit is contained in:
@@ -614,6 +614,8 @@ tests += [
|
||||
|
||||
[files('test-journal-importer.c')],
|
||||
|
||||
[files('test-utmp.c')],
|
||||
|
||||
[files('test-udev.c'),
|
||||
[libudevd_core,
|
||||
libshared],
|
||||
|
||||
61
src/test/test-utmp.c
Normal file
61
src/test/test-utmp.c
Normal file
@@ -0,0 +1,61 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "format-util.h"
|
||||
#include "socket-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#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
|
||||
|
||||
TEST(dump_run_utmp) {
|
||||
_unused_ _cleanup_(utxent_cleanup) bool utmpx = false;
|
||||
|
||||
utmpx = utxent_start();
|
||||
|
||||
for (struct utmpx *u; (u = getutxent()); ) {
|
||||
char _type_buf[DECIMAL_STR_MAX(short)];
|
||||
const char *type =
|
||||
u->ut_type == EMPTY ? "EMPTY" :
|
||||
u->ut_type == RUN_LVL ? "RUN_LVL" :
|
||||
u->ut_type == BOOT_TIME ? "BOOT_TIME" :
|
||||
u->ut_type == NEW_TIME ? "NEW_TIME" :
|
||||
u->ut_type == OLD_TIME ? "OLD_TIME" :
|
||||
u->ut_type == INIT_PROCESS ? "INIT_PROCESS" :
|
||||
u->ut_type == LOGIN_PROCESS ? "LOGIN_PROCESS" :
|
||||
u->ut_type == USER_PROCESS ? "USER_PROCESS" :
|
||||
u->ut_type == DEAD_PROCESS ? "DEAD_PROCESS" :
|
||||
u->ut_type == ACCOUNTING ? "ACCOUNTING" :
|
||||
_type_buf;
|
||||
if (type == _type_buf)
|
||||
xsprintf(_type_buf, "%hd", u->ut_type);
|
||||
|
||||
union in_addr_union addr = {};
|
||||
memcpy(&addr, u->ut_addr_v6, MIN(sizeof(addr), sizeof(u->ut_addr_v6)));
|
||||
_cleanup_free_ char *pretty = NULL;
|
||||
bool is_ipv4 = memeqzero((const uint8_t*) &addr + 4, sizeof(addr) - 4);
|
||||
(void) in_addr_to_string(is_ipv4 ? AF_INET : AF_INET6,
|
||||
&addr, &pretty);
|
||||
|
||||
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,
|
||||
u->ut_id,
|
||||
UT_NAMESIZE, u->ut_user,
|
||||
(long unsigned) u->ut_session,
|
||||
UT_HOSTSIZE, u->ut_host,
|
||||
strempty(pretty));
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
Reference in New Issue
Block a user