mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-07-09 06:19:16 +00:00
Updated kernel (tl;dr: improved filesystem, tasking, loading files, etc..)
This commit is contained in:
@ -6,64 +6,131 @@
|
||||
|
||||
namespace Tasking
|
||||
{
|
||||
struct TokenData
|
||||
{
|
||||
Token token;
|
||||
enum TokenTrustLevel TrustLevel;
|
||||
uint64_t OwnerID;
|
||||
bool Process;
|
||||
};
|
||||
|
||||
Vector<TokenData> Tokens;
|
||||
|
||||
Token Security::CreateToken()
|
||||
{
|
||||
uint64_t ret = Random::rand64();
|
||||
uint64_t ret = 0;
|
||||
Retry:
|
||||
ret = Random::rand64();
|
||||
foreach (auto t in Tokens)
|
||||
if (t.token == ret)
|
||||
goto Retry;
|
||||
|
||||
Tokens.push_back({ret, UnknownTrustLevel, 0, false});
|
||||
debug("Created token %#lx", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool Security::TrustToken(Token token,
|
||||
TokenTrustLevel TrustLevel)
|
||||
bool Security::TrustToken(Token token, TTL TrustLevel)
|
||||
{
|
||||
enum TokenTrustLevel Level = static_cast<enum TokenTrustLevel>(TrustLevel);
|
||||
|
||||
foreach (auto var in Tokens)
|
||||
foreach (auto &t in Tokens)
|
||||
{
|
||||
if (var.token == token)
|
||||
if (t.token == token)
|
||||
{
|
||||
var.TrustLevel = Level;
|
||||
debug("Trusted token %#lx", token);
|
||||
t.TrustLevel = TrustLevel;
|
||||
debug("Trusted token %#lx to level %d", token, t.TrustLevel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
debug("Failed to trust token %#lx", token);
|
||||
warn("Failed to trust token %#lx", token);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Security::UntrustToken(Token token)
|
||||
{
|
||||
fixme("UntrustToken->false");
|
||||
UNUSED(token);
|
||||
foreach (auto &t in Tokens)
|
||||
{
|
||||
if (t.token == token)
|
||||
{
|
||||
t.TrustLevel = Untrusted;
|
||||
debug("Untrusted token %#lx", token);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
warn("Failed to untrust token %#lx", token);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Security::AddTrustLevel(Token token, TTL TrustLevel)
|
||||
{
|
||||
foreach (auto &t in Tokens)
|
||||
{
|
||||
if (t.token == token)
|
||||
{
|
||||
t.TrustLevel |= TrustLevel;
|
||||
debug("Added trust level %d to token %#lx", t.TrustLevel, token);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
warn("Failed to add trust level %d to token %#lx", TrustLevel, token);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Security::RemoveTrustLevel(Token token, TTL TrustLevel)
|
||||
{
|
||||
foreach (auto &t in Tokens)
|
||||
{
|
||||
if (t.token == token)
|
||||
{
|
||||
t.TrustLevel &= ~TrustLevel;
|
||||
debug("Removed trust level %d from token %#lx", t.TrustLevel, token);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
warn("Failed to remove trust level %d from token %#lx", TrustLevel, token);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Security::DestroyToken(Token token)
|
||||
{
|
||||
fixme("DestroyToken->false");
|
||||
fixme("DestroyToken->true");
|
||||
UNUSED(token);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Security::IsTokenTrusted(Token token, TTL TrustLevel)
|
||||
{
|
||||
foreach (auto t in Tokens)
|
||||
if (t.token == token)
|
||||
{
|
||||
if (t.TrustLevel == TrustLevel)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
warn("Failed to check trust level of token %#lx", token);
|
||||
return false;
|
||||
}
|
||||
|
||||
Security::Security()
|
||||
bool Security::IsTokenTrusted(Token token, int TrustLevel)
|
||||
{
|
||||
trace("Initializing Tasking Security");
|
||||
foreach (auto t in Tokens)
|
||||
if (t.token == token)
|
||||
{
|
||||
if (t.TrustLevel & TrustLevel)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
warn("Failed to check trust level of token %#lx", token);
|
||||
return false;
|
||||
}
|
||||
|
||||
int Security::GetTokenTrustLevel(Token token)
|
||||
{
|
||||
foreach (auto t in Tokens)
|
||||
if (t.token == token)
|
||||
return t.TrustLevel;
|
||||
|
||||
warn("Failed to get trust level of token %#lx", token);
|
||||
return UnknownTrustLevel;
|
||||
}
|
||||
|
||||
Security::Security() {}
|
||||
|
||||
Security::~Security()
|
||||
{
|
||||
trace("Destroying Tasking Security");
|
||||
for (size_t i = 0; i < Tokens.size(); i++)
|
||||
Tokens.remove(i);
|
||||
}
|
||||
|
Reference in New Issue
Block a user