summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Sources
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-07-29 08:30:04 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-07-29 08:30:04 +0000
commit0d661d2587046d3fc078bc15a089b94489c08a8d (patch)
tree5937d6b70ba935b419eed3b309abd2ced464ffe6 /Kernel/Sources
parentc4023005e029ae092dad2689564c490580dd5c28 (diff)
parent83a3ac27ddd9a02ad698407515b0e708197b2aac (diff)
Merged in MHR-36 (pull request #18)
[MHR-36] Last commit on ticket.
Diffstat (limited to 'Kernel/Sources')
-rw-r--r--Kernel/Sources/CxxAbi-AMD64.cxx2
-rw-r--r--Kernel/Sources/CxxAbi-ARM64.cxx2
-rw-r--r--Kernel/Sources/FS/NewFS.cxx2
-rw-r--r--Kernel/Sources/HError.cxx2
-rw-r--r--Kernel/Sources/Heap.cxx2
-rw-r--r--Kernel/Sources/Main.cxx2
-rw-r--r--Kernel/Sources/Network/IPCEP.cxx2
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx2
-rw-r--r--Kernel/Sources/User.cxx69
9 files changed, 77 insertions, 8 deletions
diff --git a/Kernel/Sources/CxxAbi-AMD64.cxx b/Kernel/Sources/CxxAbi-AMD64.cxx
index e1f61aaf..43b8c725 100644
--- a/Kernel/Sources/CxxAbi-AMD64.cxx
+++ b/Kernel/Sources/CxxAbi-AMD64.cxx
@@ -8,7 +8,7 @@
#include <KernelKit/DebugOutput.hpp>
#include <NewKit/CxxAbi.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
atexit_func_entry_t __atexit_funcs[kDSOMaxObjects];
diff --git a/Kernel/Sources/CxxAbi-ARM64.cxx b/Kernel/Sources/CxxAbi-ARM64.cxx
index 46524374..d5be9e5e 100644
--- a/Kernel/Sources/CxxAbi-ARM64.cxx
+++ b/Kernel/Sources/CxxAbi-ARM64.cxx
@@ -8,7 +8,7 @@
#include <KernelKit/DebugOutput.hpp>
#include <NewKit/CxxAbi.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
EXTERN_C
{
diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx
index 38a417cb..a8790109 100644
--- a/Kernel/Sources/FS/NewFS.cxx
+++ b/Kernel/Sources/FS/NewFS.cxx
@@ -10,7 +10,7 @@
#include <Modules/ATA/ATA.hxx>
#include <Modules/Flash/Flash.hxx>
#include <FSKit/NewFS.hxx>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <NewKit/Crc32.hpp>
#include <NewKit/KernelCheck.hpp>
#include <NewKit/String.hpp>
diff --git a/Kernel/Sources/HError.cxx b/Kernel/Sources/HError.cxx
index f10c3a15..7c093865 100644
--- a/Kernel/Sources/HError.cxx
+++ b/Kernel/Sources/HError.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <NewKit/KernelCheck.hpp>
namespace Kernel
diff --git a/Kernel/Sources/Heap.cxx b/Kernel/Sources/Heap.cxx
index 6ac91448..b2acaffe 100644
--- a/Kernel/Sources/Heap.cxx
+++ b/Kernel/Sources/Heap.cxx
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <KernelKit/DebugOutput.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <KernelKit/Heap.hxx>
#include <NewKit/Crc32.hpp>
#include <NewKit/PageManager.hpp>
diff --git a/Kernel/Sources/Main.cxx b/Kernel/Sources/Main.cxx
index 0f835adc..fb9b522b 100644
--- a/Kernel/Sources/Main.cxx
+++ b/Kernel/Sources/Main.cxx
@@ -192,7 +192,7 @@ namespace Kernel::Detail
Kernel::UserView::The()->fRootUser = new User(RingKind::kRingSuperUser, kSuperUser);
Kernel::kcout << "newoskrnl: logged in as: " << Kernel::UserView::The()->fRootUser->Name().CData() << Kernel::endl;
- Kernel::UserView::The()->LogIn(Kernel::UserView::The()->fRootUser);
+ Kernel::UserView::The()->LogIn(Kernel::UserView::The()->fRootUser, "");
Kernel::kcout << "newoskrnl: " << cKernelVersion.GetKey().CData() << ": " << Kernel::number(cKernelVersion.GetValue()) << Kernel::endl;
}
diff --git a/Kernel/Sources/Network/IPCEP.cxx b/Kernel/Sources/Network/IPCEP.cxx
index 54d94b18..5271be05 100644
--- a/Kernel/Sources/Network/IPCEP.cxx
+++ b/Kernel/Sources/Network/IPCEP.cxx
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <NetworkKit/IPCEP.hxx>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <KernelKit/ProcessScheduler.hxx>
using namespace Kernel;
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index bfa6fddf..b5be1dd2 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -13,7 +13,7 @@
#include <KernelKit/SMPManager.hpp>
#include <KernelKit/Heap.hxx>
#include <NewKit/String.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
///! BUGS: 0
diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx
index 68d0d5be..a86f9ac3 100644
--- a/Kernel/Sources/User.cxx
+++ b/Kernel/Sources/User.cxx
@@ -12,6 +12,8 @@
#include <KernelKit/User.hxx>
#include <NewKit/KernelCheck.hpp>
+#include <KernelKit/FileManager.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
/// bugs 0
@@ -61,4 +63,71 @@ namespace Kernel
{
return this->Ring() == RingKind::kRingSuperUser;
}
+
+ UserView* UserView::The() noexcept
+ {
+ UserView* view = nullptr;
+
+ if (!view)
+ view = new UserView();
+
+ return view;
+ }
+
+ Void UserView::LogIn(User* user, const Char* password) noexcept
+ {
+ if (!password ||
+ !user)
+ {
+ ErrLocal() = kErrorInvalidData;
+
+ return;
+ }
+
+ FileStreamUTF8 file(kUsersFile, "rb");
+
+ auto token = file.Read(password);
+
+ if (!token)
+ {
+ ErrLocal() = kErrorInvalidCreds;
+
+ kcout << "newoskrnl: Incorrect credentials.\r";
+ return;
+ }
+
+ user->fUserToken = token;
+
+ if (fCurrentUser)
+ {
+ if (!fLastLoggedOffUser)
+ {
+ fLastLoggedOffUser = fCurrentUser;
+ }
+ else
+ {
+ this->LogOff();
+ }
+ }
+
+ fCurrentUser = user;
+ }
+
+ Void UserView::LogOff() noexcept
+ {
+ if (!fCurrentUser)
+ return;
+
+ // an illegal operation just occured, we can't risk more.
+ if (fCurrentUser == fRootUser)
+ {
+ ke_stop(RUNTIME_CHECK_BOOTSTRAP);
+ }
+
+ if (fLastLoggedOffUser)
+ delete fLastLoggedOffUser;
+
+ fLastLoggedOffUser = nullptr;
+ fLastLoggedOffUser = fCurrentUser;
+ }
} // namespace Kernel