2#ifndef POSIX_USER_NAMESPACE_H
3#define POSIX_USER_NAMESPACE_H
5#include "pedigree/kernel/compiler.h"
6#include "pedigree/kernel/process/Mutex.h"
7#include "pedigree/kernel/processor/types.h"
8#include "pedigree/kernel/utilities/SharedPointer.h"
14namespace PosixCapabilities {
39constexpr uint64_t All = (uint64_t(1) << (Last + 1)) - 1;
46 uint64_t permitted = 0, effective = 0, inheritable = 0;
47 uint64_t bounding = PosixCapabilities::All, ambient = 0;
48 uint32_t secureBits = 0;
54 static constexpr size_t MaximumRanges = 340;
56 uint32_t inside, outside, count, global;
64 uint32_t owner()
const {
67 unsigned depth()
const {
73 bool toGlobal(
bool group, uint32_t
id, uint32_t& global, uint32_t count = 1)
const;
74 bool fromGlobal(
bool group, uint32_t global, uint32_t&
id)
const;
75 bool groupsAllowed()
const;
76 int writeMap(
bool group,
const char* bytes,
size_t length);
77 size_t readMap(
bool group,
const UserNamespaceRef& viewer,
char* bytes,
size_t capacity)
const;
78 int writeSetgroups(
const char* bytes,
size_t length);
82 Range ranges[MaximumRanges] = {};
86 const uint32_t m_Owner, m_Group;
87 const unsigned m_Depth;
88 const uint64_t m_Identity;
89 const bool m_CreatorSetfcap;
98EXPORTED_PUBLIC
bool posix_capable(
unsigned capability);
99EXPORTED_PUBLIC
bool posix_global_capable(
unsigned capability);
100EXPORTED_PUBLIC
bool posix_namespace_capable(
const UserNamespaceRef& space,
unsigned capability);
102 unsigned capability);
103EXPORTED_PUBLIC uint32_t posix_visible_id(
bool group, uint32_t global);
104EXPORTED_PUBLIC
bool posix_global_id(
bool group, uint32_t visible, uint32_t& global);
105EXPORTED_PUBLIC
int posix_capability_prctl(
int option,
unsigned long arg2,
unsigned long arg3,
106 unsigned long arg4,
unsigned long arg5);
107EXPORTED_PUBLIC
bool posix_capabilities_exec(
Thread& task, uint32_t globalUid);
108EXPORTED_PUBLIC
bool posix_capabilities_uid_change(
Thread& task, uint32_t oldReal,
109 uint32_t oldEffective, uint32_t oldSaved,
110 uint32_t newReal, uint32_t newEffective,
111 uint32_t newSaved, uint32_t namespaceRoot);
112EXPORTED_PUBLIC
bool posix_capabilities_fsuid_change(
Thread& task, uint32_t oldUid, uint32_t newUid,
113 uint32_t namespaceRoot);