Serenity Operating System
1/*
2 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/AtomicRefCounted.h>
10#include <AK/FixedArray.h>
11#include <Kernel/Forward.h>
12
13namespace Kernel {
14
15class Credentials final : public AtomicRefCounted<Credentials> {
16public:
17 static ErrorOr<NonnullRefPtr<Credentials>> create(UserID uid, GroupID gid, UserID euid, GroupID egid, UserID suid, GroupID sgid, ReadonlySpan<GroupID> extra_gids, SessionID sid, ProcessGroupID pgid);
18 ~Credentials();
19
20 bool is_superuser() const { return euid() == 0; }
21
22 UserID euid() const { return m_euid; }
23 GroupID egid() const { return m_egid; }
24 UserID uid() const { return m_uid; }
25 GroupID gid() const { return m_gid; }
26 UserID suid() const { return m_suid; }
27 GroupID sgid() const { return m_sgid; }
28 ReadonlySpan<GroupID> extra_gids() const { return m_extra_gids.span(); }
29 SessionID sid() const { return m_sid; };
30 ProcessGroupID pgid() const { return m_pgid; }
31
32 bool in_group(GroupID) const;
33
34private:
35 Credentials(UserID uid, GroupID gid, UserID euid, GroupID egid, UserID suid, GroupID sgid, FixedArray<GroupID> extra_gids, SessionID sid, ProcessGroupID pgid);
36
37 UserID m_uid;
38 GroupID m_gid;
39 UserID m_euid;
40 GroupID m_egid;
41 UserID m_suid;
42 GroupID m_sgid;
43 FixedArray<GroupID> m_extra_gids;
44 SessionID m_sid;
45 ProcessGroupID m_pgid;
46};
47
48}