diff options
author | Lucas CHOLLET <lucas.chollet@free.fr> | 2022-12-07 00:42:49 +0100 |
---|---|---|
committer | Andrew Kaster <andrewdkaster@gmail.com> | 2022-12-31 04:24:05 -0700 |
commit | 945d2079b435abe1a5dc8af3e4c4015003ff90df (patch) | |
tree | d7da474fc5606cabd063bcfe80059a89940b0b33 | |
parent | f000193ee5ff65a064634d011f29694bb833d2fb (diff) | |
download | serenity-945d2079b435abe1a5dc8af3e4c4015003ff90df.zip |
LibCore: Add a deleted state for `Account`
As other setters, this only affect the in-memory copy, you need to call
`sync()` to apply changes.
-rw-r--r-- | Userland/Libraries/LibCore/Account.cpp | 8 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/Account.h | 2 |
2 files changed, 8 insertions, 2 deletions
diff --git a/Userland/Libraries/LibCore/Account.cpp b/Userland/Libraries/LibCore/Account.cpp index 647688d72a..68de38c562 100644 --- a/Userland/Libraries/LibCore/Account.cpp +++ b/Userland/Libraries/LibCore/Account.cpp @@ -231,6 +231,8 @@ ErrorOr<DeprecatedString> Account::generate_passwd_file() const break; if (pwd->pw_name == m_username) { + if (m_deleted) + continue; builder.appendff("{}:!:{}:{}:{}:{}:{}\n", m_username, m_uid, m_gid, @@ -259,9 +261,11 @@ ErrorOr<DeprecatedString> Account::generate_shadow_file() const struct spwd* p; errno = 0; while ((p = getspent())) { - if (p->sp_namp == m_username) + if (p->sp_namp == m_username) { + if (m_deleted) + continue; builder.appendff("{}:{}", m_username, m_password_hash); - else + } else builder.appendff("{}:{}", p->sp_namp, p->sp_pwdp); builder.appendff(":{}:{}:{}:{}:{}:{}:{}\n", diff --git a/Userland/Libraries/LibCore/Account.h b/Userland/Libraries/LibCore/Account.h index c57a11ded7..3792239980 100644 --- a/Userland/Libraries/LibCore/Account.h +++ b/Userland/Libraries/LibCore/Account.h @@ -52,6 +52,7 @@ public: void set_gid(gid_t gid) { m_gid = gid; } void set_shell(StringView shell) { m_shell = shell; } void set_gecos(StringView gecos) { m_gecos = gecos; } + void set_deleted() { m_deleted = true; }; void delete_password(); // A null password means that this account was missing from /etc/shadow. @@ -86,6 +87,7 @@ private: DeprecatedString m_home_directory; DeprecatedString m_shell; Vector<gid_t> m_extra_gids; + bool m_deleted { false }; }; } |