From 3783494dfec9d90ea5cd2685bb252a4b7e63514d Mon Sep 17 00:00:00 2001 From: Justin Spencer Date: Mon, 10 Jan 2022 17:49:02 -0500 Subject: [PATCH] Add helper functions to find + remember EUID / EGID, avoid many syscalls --- src/core/main-utils.c | 36 ++++++++++++++++++++++++++++++++++++ src/core/main-utils.h | 4 ++++ 2 files changed, 40 insertions(+) diff --git a/src/core/main-utils.c b/src/core/main-utils.c index 7fcffcbc08..14685fc3b4 100644 --- a/src/core/main-utils.c +++ b/src/core/main-utils.c @@ -218,6 +218,42 @@ nm_main_utils_ensure_root() } } +uid_t nm_uid; +/** + * nm_main_utils_get_nm_uid: + * + * Checks what EUID NetworkManager is running as. + * Saves the EUID so it can be reused without making many syscalls. + */ +uid_t +nm_main_utils_get_nm_uid(void) +{ + static uint8_t nm_uid_flag = 0; + if (!nm_uid_flag) { + nm_uid = geteuid(); + nm_uid_flag = 1; + } + return nm_uid; +} + +gid_t nm_gid; +/** + * nm_main_utils_get_nm_gid: + * + * Checks what EGID NetworkManager is running as. + * Saves the EGID so it can be reused without making many syscalls. + */ +gid_t +nm_main_utils_get_nm_gid(void) +{ + static uint8_t nm_gid_flag = 0; + if (!nm_gid_flag) { + nm_gid = getegid(); + nm_gid_flag = 1; + } + return nm_gid; +} + gboolean nm_main_utils_early_setup(const char *progname, int *argc, diff --git a/src/core/main-utils.h b/src/core/main-utils.h index e3a3b490a9..d947dcaebd 100644 --- a/src/core/main-utils.h +++ b/src/core/main-utils.h @@ -8,6 +8,10 @@ void nm_main_utils_ensure_root(void); +uid_t nm_main_utils_get_nm_uid(void); + +gid_t nm_main_utils_get_nm_gid(void); + void nm_main_utils_setup_signals(GMainLoop *main_loop); void nm_main_utils_ensure_statedir(void);