From 254f1216ecfb07ff39d070a444e251f0b883a72d Mon Sep 17 00:00:00 2001 From: Carter Li Date: Fri, 1 Nov 2024 18:44:09 +0800 Subject: [PATCH] Users (OpenBSD): add support --- CMakeLists.txt | 2 +- src/detection/users/users_obsd.c | 36 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/detection/users/users_obsd.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 73e32122c..89ae8800e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -819,7 +819,7 @@ elseif(OpenBSD) src/detection/theme/theme_linux.c src/detection/tpm/tpm_nosupport.c src/detection/uptime/uptime_bsd.c - src/detection/users/users_nosupport.c + src/detection/users/users_obsd.c src/detection/wallpaper/wallpaper_linux.c src/detection/wifi/wifi_nosupport.c src/detection/wm/wm_nosupport.c diff --git a/src/detection/users/users_obsd.c b/src/detection/users/users_obsd.c new file mode 100644 index 000000000..db7a89467 --- /dev/null +++ b/src/detection/users/users_obsd.c @@ -0,0 +1,36 @@ +#include "fastfetch.h" +#include "users.h" +#include "common/io/io.h" + +#include + +const char* ffDetectUsers(FF_MAYBE_UNUSED FFUsersOptions* options, FFlist* users) +{ + FF_AUTO_CLOSE_FILE FILE* fp = fopen(_PATH_UTMP, "r"); + if (!fp) return "fopen(_PATH_UTMP, r) failed"; + + struct utmp n; +next: + while (fread(&n, sizeof(n), 1, fp) == 1) + { + if (!n.ut_name[0]) continue; + + if (options->myselfOnly && !ffStrbufEqualS(&instance.state.platform.userName, n.ut_name)) + continue; + + FF_LIST_FOR_EACH(FFUserResult, user, *users) + { + if (ffStrbufEqualS(&user->name, n.ut_name)) + goto next; + } + + FFUserResult* user = (FFUserResult*) ffListAdd(users); + ffStrbufInitS(&user->name, n.ut_name); + ffStrbufInitS(&user->hostName, n.ut_host); + ffStrbufInitS(&user->sessionName, n.ut_line); + ffStrbufInit(&user->clientIp); + user->loginTime = (uint64_t) n.ut_time * 1000; + } + + return NULL; +}