endpwent: Close all opened instances of /etc/passwd, including those used by getpwuid() and getpwnam()

This commit is contained in:
apio 2022-10-28 21:02:55 +02:00
parent 2ca20c1a1e
commit 702cc0442c

View File

@ -7,6 +7,8 @@
#include <unistd.h>
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;
}
}
}