summaryrefslogtreecommitdiffhomepage
path: root/Kernel
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
parentc4023005e029ae092dad2689564c490580dd5c28 (diff)
parent83a3ac27ddd9a02ad698407515b0e708197b2aac (diff)
Merged in MHR-36 (pull request #18)
[MHR-36] Last commit on ticket.
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/KernelKit/DriveManager.hxx2
-rw-r--r--Kernel/KernelKit/FileManager.hpp2
-rw-r--r--Kernel/KernelKit/LPC.hxx (renamed from Kernel/KernelKit/HError.hpp)3
-rw-r--r--Kernel/KernelKit/Timer.hpp2
-rw-r--r--Kernel/KernelKit/User.hxx69
-rw-r--r--Kernel/KernelRsrc.rsrc2
-rw-r--r--Kernel/Modules/CoreCG/Accessibility.hxx2
-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
16 files changed, 104 insertions, 63 deletions
diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx
index 5dec36f7..3614f475 100644
--- a/Kernel/KernelKit/DriveManager.hxx
+++ b/Kernel/KernelKit/DriveManager.hxx
@@ -11,7 +11,7 @@
#include <CompilerKit/CompilerKit.hxx>
#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/DeviceManager.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
diff --git a/Kernel/KernelKit/FileManager.hpp b/Kernel/KernelKit/FileManager.hpp
index 0d721ec0..a37360c7 100644
--- a/Kernel/KernelKit/FileManager.hpp
+++ b/Kernel/KernelKit/FileManager.hpp
@@ -22,7 +22,7 @@
#include <CompilerKit/CompilerKit.hxx>
#include <HintKit/CompilerHint.hxx>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <KernelKit/DebugOutput.hpp>
#include <NewKit/Stream.hpp>
#include <NewKit/ErrorOr.hpp>
diff --git a/Kernel/KernelKit/HError.hpp b/Kernel/KernelKit/LPC.hxx
index df12641e..fc322475 100644
--- a/Kernel/KernelKit/HError.hpp
+++ b/Kernel/KernelKit/LPC.hxx
@@ -8,7 +8,7 @@
#include <NewKit/Defines.hpp>
-/// @file HError.hpp
+/// @file LPC.hxx
/// @brief Local Process Codes.
#define ErrLocalIsOk() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() == Kernel::kErrorSuccess)
@@ -48,6 +48,7 @@ namespace Kernel
inline constexpr HError kErrorNonBlocking = 58;
inline constexpr HError kErrorIPC = 59;
inline constexpr HError kErrorSign = 60;
+ inline constexpr HError kErrorInvalidCreds = 61;
inline constexpr HError kErrorUnimplemented = 0;
Void err_bug_check_raise(void) noexcept;
diff --git a/Kernel/KernelKit/Timer.hpp b/Kernel/KernelKit/Timer.hpp
index 11ed0c81..eff075cc 100644
--- a/Kernel/KernelKit/Timer.hpp
+++ b/Kernel/KernelKit/Timer.hpp
@@ -8,7 +8,7 @@
#include <ArchKit/ArchKit.hpp>
#include <CompilerKit/CompilerKit.hxx>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
namespace Kernel
{
diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx
index 02ba475d..d9d9bb1e 100644
--- a/Kernel/KernelKit/User.hxx
+++ b/Kernel/KernelKit/User.hxx
@@ -8,22 +8,27 @@
#define _INC_PERMISSION_SEL_HXX_
#include <CompilerKit/CompilerKit.hxx>
+#include <KernelKit/LPC.hxx>
#include <NewKit/String.hpp>
#include <NewKit/Defines.hpp>
// user mode users.
-#define kSuperUser "Admin"
+#define kSuperUser "Super"
#define kGuestUser "Guest"
-#define kUsersDir "\\Users\\Store\\"
+#define kUsersFile "\\Users\\$Stores$"
-#define kMaxUserNameLen (255)
+#define kMaxUserNameLen (255)
+#define kMaxUserTokenLen (4096)
// hash 'password' -> base64+md5 encoded data
// use this data to then fetch specific data of the user..
namespace Kernel
{
+ class User;
+ class UserView;
+
enum class RingKind
{
kRingStdUser = 1,
@@ -50,16 +55,23 @@ namespace Kernel
bool operator!=(const User& lhs);
public:
- /// @brief Getters.
- const RingKind& Ring() noexcept;
+ /// @brief Get software ring
+ const RingKind& Ring() noexcept;
+ /// @brief Get user name
const StringView Name() noexcept;
+ /// @brief Is he a standard user?
Bool IsStdUser() noexcept;
+
+ /// @brief Is she a super user?
Bool IsSuperUser() noexcept;
private:
RingKind fRing{RingKind::kRingStdUser};
StringView fUserName{kMaxUserNameLen};
+ VoidPtr fUserToken{nullptr};
+
+ friend UserView;
};
class UserView final
@@ -76,50 +88,9 @@ namespace Kernel
public:
NEWOS_COPY_DELETE(UserView);
- STATIC UserView* The() noexcept
- {
- UserView* view = nullptr;
-
- if (!view)
- view = new UserView();
-
- return view;
- }
-
- Void LogIn(User* user) noexcept
- {
- if (fCurrentUser)
- {
- if (!fLastLoggedOffUser)
- {
- fLastLoggedOffUser = fCurrentUser;
- }
- else
- {
- this->LogOff();
- }
- }
-
- fCurrentUser = user;
- }
-
- Void 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;
- }
+ STATIC UserView* The() noexcept;
+ Void LogIn(User* user, const Char* password) noexcept;
+ Void LogOff() noexcept;
};
} // namespace Kernel
diff --git a/Kernel/KernelRsrc.rsrc b/Kernel/KernelRsrc.rsrc
index 97432f54..5a6f41ee 100644
--- a/Kernel/KernelRsrc.rsrc
+++ b/Kernel/KernelRsrc.rsrc
@@ -1,4 +1,4 @@
-1 ICON "../Icons/main.ico"
+1 ICON "../Icons/default.ico"
#include "CompilerKit/Version.hxx"
diff --git a/Kernel/Modules/CoreCG/Accessibility.hxx b/Kernel/Modules/CoreCG/Accessibility.hxx
index 849adece..baf9bc6f 100644
--- a/Kernel/Modules/CoreCG/Accessibility.hxx
+++ b/Kernel/Modules/CoreCG/Accessibility.hxx
@@ -8,7 +8,7 @@
#define __CORECG_ACCESS_HXX__
#include <NewKit/NewKit.hpp>
-#include <KernelKit/HError.hpp>
+#include <KernelKit/LPC.hxx>
#include <Modules/CoreCG/CoreCG.hxx>
#include <Modules/CoreCG/Lerp.hxx>
#include <ArchKit/ArchKit.hpp>
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