From 702cc0442c1e1df7831d4292c4e42282875322e6 Mon Sep 17 00:00:00 2001 From: apio Date: Fri, 28 Oct 2022 21:02:55 +0200 Subject: [PATCH] endpwent: Close all opened instances of /etc/passwd, including those used by getpwuid() and getpwnam() --- libs/libc/src/pwd.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libs/libc/src/pwd.cpp b/libs/libc/src/pwd.cpp index b7c7c16a..e33493fb 100644 --- a/libs/libc/src/pwd.cpp +++ b/libs/libc/src/pwd.cpp @@ -7,6 +7,8 @@ #include static FILE* pwd_file = nullptr; +static FILE* pwnam_file = nullptr; +static FILE* pwuid_file = nullptr; static int initialize_pwd(FILE** stream) { @@ -126,7 +128,6 @@ extern "C" struct passwd* getpwnam(const char* name) { - static FILE* pwnam_file = nullptr; if (!pwnam_file) { if (!initialize_pwd(&pwnam_file)) return NULL; @@ -149,7 +150,6 @@ extern "C" struct passwd* getpwuid(uid_t uid) { - static FILE* pwuid_file = nullptr; if (!pwuid_file) { if (!initialize_pwd(&pwuid_file)) return NULL; @@ -182,5 +182,15 @@ extern "C" fclose(pwd_file); pwd_file = nullptr; } + if (pwuid_file) + { + fclose(pwuid_file); + pwuid_file = nullptr; + } + if (pwnam_file) + { + fclose(pwnam_file); + pwnam_file = nullptr; + } } } \ No newline at end of file