summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-22 18:02:40 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-22 18:02:40 +0200
commit10099e99847307fae60aebdf2292002d359d45b4 (patch)
tree718ab13485520d1e69b908b48baf48e988c64985 /dev/ZKA
parentb843322161bec86e707c45962ce9b7b76b0d1826 (diff)
[FIX] Work In Progress patches regarding user login and filesystem
driver. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA')
-rw-r--r--dev/ZKA/FSKit/NewFS.hxx25
-rw-r--r--dev/ZKA/FirmwareKit/Handover.hxx2
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMain.cxx27
-rw-r--r--dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx8
-rw-r--r--dev/ZKA/HALKit/AMD64/Processor.hxx6
-rw-r--r--dev/ZKA/KernelKit/User.hxx13
-rw-r--r--dev/ZKA/NewKit/KernelCheck.hxx1
-rw-r--r--dev/ZKA/Sources/FS/NewFS.cxx82
-rw-r--r--dev/ZKA/Sources/FileManager.cxx2
-rw-r--r--dev/ZKA/Sources/KernelCheck.cxx4
-rw-r--r--dev/ZKA/Sources/User.cxx65
11 files changed, 105 insertions, 130 deletions
diff --git a/dev/ZKA/FSKit/NewFS.hxx b/dev/ZKA/FSKit/NewFS.hxx
index 830d8b0e..e0629ab4 100644
--- a/dev/ZKA/FSKit/NewFS.hxx
+++ b/dev/ZKA/FSKit/NewFS.hxx
@@ -86,7 +86,7 @@ default.
/// Start After the PM headers, pad 1024 bytes.
#define kNewFSStartLba (1024)
-#define kNewFSCatalogStartAddress ((2048) + sizeof(NFS_ROOT_PARTITION_BLOCK) + sizeof(NFS_CATALOG_STRUCT))
+#define kNewFSCatalogStartAddress ((1024) + sizeof(NFS_ROOT_PARTITION_BLOCK) + sizeof(NFS_CATALOG_STRUCT))
#define kResourceTypeDialog (10)
#define kResourceTypeString (11)
@@ -192,7 +192,7 @@ struct PACKED NFS_ROOT_PARTITION_BLOCK final
Kernel::Lba EpmBlock;
- Kernel::Char Pad[kNewFSPadLen-sizeof(Kernel::Lba)];
+ Kernel::Char Pad[kNewFSPadLen - sizeof(Kernel::Lba)];
};
namespace Kernel
@@ -234,15 +234,15 @@ namespace Kernel
/// @param theFork the fork itself.
/// @return the fork
_Output NFS_FORK_STRUCT* CreateFork(_Input NFS_CATALOG_STRUCT* catalog,
- _Input NFS_FORK_STRUCT& theFork);
+ _Input NFS_FORK_STRUCT& theFork);
/// @brief Find fork inside New filesystem.
/// @param catalog the catalog.
/// @param name the fork name.
/// @return the fork.
_Output NFS_FORK_STRUCT* FindFork(_Input NFS_CATALOG_STRUCT* catalog,
- _Input const Char* name,
- Boolean dataOrRsrc);
+ _Input const Char* name,
+ Boolean dataOrRsrc);
_Output Void RemoveFork(_Input NFS_FORK_STRUCT* fork);
@@ -252,21 +252,22 @@ namespace Kernel
_Output NFS_CATALOG_STRUCT* GetCatalog(_Input const Char* name);
- _Output NFS_CATALOG_STRUCT* CreateCatalog(_Input const Char* name,
+ _Output NFS_CATALOG_STRUCT* CreateCatalog(_Input const Char* name,
_Input const Int32& flags,
_Input const Int32& kind);
_Output NFS_CATALOG_STRUCT* CreateCatalog(_Input const Char* name);
Bool WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
- _Input Bool isRsrcFork,
- _Input VoidPtr data,
- _Input SizeT sizeOfData,
- _Input const Char* forkName);
+ _Input Bool isRsrcFork,
+ _Input VoidPtr data,
+ _Input SizeT sizeOfData,
+ _Input const Char* forkName);
VoidPtr ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
- SizeT dataSz,
- _Input const Char* forkName);
+ _Input Bool isRsrcFork,
+ _Input SizeT dataSz,
+ _Input const Char* forkName);
bool Seek(_Input _Output NFS_CATALOG_STRUCT* catalog, SizeT off);
diff --git a/dev/ZKA/FirmwareKit/Handover.hxx b/dev/ZKA/FirmwareKit/Handover.hxx
index fba6017d..1967d6de 100644
--- a/dev/ZKA/FirmwareKit/Handover.hxx
+++ b/dev/ZKA/FirmwareKit/Handover.hxx
@@ -31,7 +31,7 @@
#define kHandoverHeapSz gib_cast(2)
-#define kHandoverStructSz sizeof(HEL::HandoverHeader)
+#define kHandoverStructSz sizeof(HEL::HandoverInformationHeader)
namespace Kernel::HEL
{
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
index 17502b7c..de5ea494 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
@@ -67,8 +67,6 @@ STATIC Kernel::HAL::Detail::NewOSGDT cGdt = {
Kernel::Void hal_real_init(Kernel::Void) noexcept;
-static Kernel::User* cRoot;
-
EXTERN_C void hal_init_platform(
Kernel::HEL::HandoverInformationHeader* HandoverHeader)
{
@@ -90,7 +88,7 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
// reset kAllocationInProgress field to zero.
kAllocationInProgress = false;
- kKernelVMTStart = kHandoverHeader->f_HeapStart;
+ kKernelVMHStart = kHandoverHeader->f_HeapStart;
// get page size.
kKernelVirtualSize = kHandoverHeader->f_VirtualSize;
@@ -233,24 +231,21 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept
!node)
{
delete fs->GetParser()->CreateCatalog("\\Users\\", 0, kNewFSCatalogKindDir);
+ delete fs->GetParser()->CreateCatalog(kUsersFile, 0, kNewFSCatalogKindFile);
}
- cRoot = new Kernel::User(Kernel::RingKind::kRingSuperUser, kSuperUser);
-
#ifdef __DEBUG__
- const auto cPassword = "infdev";
-#else
- const auto cPassword = "password";
-#endif
-
- Kernel::UserManager::The()->fRootUser = cRoot;
+ const auto cPassword = "debug_usr";
+ const auto cPasswordIncorrect = "debug_usr_invalid";
+ Kernel::User user{Kernel::RingKind::kRingSuperUser, kSuperUser};
- Kernel::kcout << "newoskrnl: Root is " << kSuperUser << "." << Kernel::endl;
-
- cRoot->TrySave(cPassword);
+ if (!user.TrySave(cPassword))
+ {
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
+ }
- /// TODO: Fix this now!
- Kernel::UserManager::The()->TryLogIn(cRoot, cPassword);
+ Kernel::UserManager::The()->TryLogIn(user, cPassword);
+#endif
Kernel::ke_stop(RUNTIME_CHECK_FAILED);
}
diff --git a/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx b/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
index 0e39a0f1..3677a1f2 100644
--- a/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx
@@ -7,6 +7,7 @@
#include <ArchKit/ArchKit.hxx>
#define cVMHMagic (0xDEEFD00D)
+#define cPaddingVMH (512)
#ifdef __NEWOS_AMD64__
#include <HALKit/AMD64/HalPageAlloc.hxx>
@@ -21,7 +22,6 @@ Kernel::Boolean kAllocationInProgress = false;
namespace Kernel
{
-
namespace HAL
{
namespace Detail
@@ -43,7 +43,7 @@ namespace Kernel
VIRTUAL_MEMORY_HEADER* Next(VIRTUAL_MEMORY_HEADER* current)
{
if (current->Magic != cVMHMagic)
- current->Size = 8196;
+ current->Size = cPaddingVMH;
return current + sizeof(VIRTUAL_MEMORY_HEADER) + current->Size;
}
@@ -54,7 +54,7 @@ namespace Kernel
VIRTUAL_MEMORY_HEADER* Prev(VIRTUAL_MEMORY_HEADER* current)
{
if (current->Magic != cVMHMagic)
- current->Size = 8196;
+ current->Size = cPaddingVMH;
return current - sizeof(VIRTUAL_MEMORY_HEADER) - current->Size;
}
@@ -74,7 +74,7 @@ namespace Kernel
kAllocationInProgress = true;
//! fetch from the start.
- Detail::VIRTUAL_MEMORY_HEADER* vmh_header = reinterpret_cast<Detail::VIRTUAL_MEMORY_HEADER*>(kKernelVMTStart);
+ Detail::VIRTUAL_MEMORY_HEADER* vmh_header = reinterpret_cast<Detail::VIRTUAL_MEMORY_HEADER*>(kKernelVMHStart);
Detail::VirtualMemoryHeaderTraits traits;
while (vmh_header->Present &&
diff --git a/dev/ZKA/HALKit/AMD64/Processor.hxx b/dev/ZKA/HALKit/AMD64/Processor.hxx
index 8d9fc1b8..b6ae0ab3 100644
--- a/dev/ZKA/HALKit/AMD64/Processor.hxx
+++ b/dev/ZKA/HALKit/AMD64/Processor.hxx
@@ -87,13 +87,13 @@ namespace Kernel::HAL
pde->Pte[pml4_index].User = flags & eFlagsUser;
pde->Pte[pml4_index].ExecDisable = flags & eFlagsExecDisable;
- kcout << "PTE is present now.\r";
+ kcout << "newoskrnl: PTE is present now.\r";
return 0;
}
else
{
- kcout << "PM is already present.\r";
+ kcout << "newoskrnl: PM is already present.\r";
kcout << "PhysicalAddress: " << hex_number(pde->Pte[pml4_index].PhysicalAddress);
kcout << "\r";
@@ -340,7 +340,7 @@ EXTERN_C Kernel::Void hal_load_gdt(Kernel::HAL::RegisterGDT ptr);
#define kKernelIdtSize 0x100
#define kKernelInterruptId 0x32
-inline Kernel::VoidPtr kKernelVMTStart = nullptr;
+inline Kernel::VoidPtr kKernelVMHStart = nullptr;
inline Kernel::VoidPtr kKernelVirtualStart = nullptr;
inline Kernel::UIntPtr kKernelVirtualSize = 0UL;
diff --git a/dev/ZKA/KernelKit/User.hxx b/dev/ZKA/KernelKit/User.hxx
index ed1f6047..c1d2dd58 100644
--- a/dev/ZKA/KernelKit/User.hxx
+++ b/dev/ZKA/KernelKit/User.hxx
@@ -19,7 +19,7 @@
#define kUsersFile "\\Users\\$MANIFEST"
#define kMaxUserNameLen (255)
-#define kMaxUserTokenLen (4096)
+#define kMaxUserTokenLen (255)
// hash 'password' -> base64+md5 encoded data
// use this data to then fetch specific data of the user..
@@ -71,8 +71,8 @@ namespace Kernel
private:
RingKind fRing{RingKind::kRingStdUser};
- Char fUserName[kMaxUserNameLen];
- VoidPtr fUserToken{nullptr};
+ Char fUserName[kMaxUserNameLen] = { 0 };
+ Char fUserToken[kMaxUserTokenLen] = { 0 };
friend UserManager;
};
@@ -82,17 +82,16 @@ namespace Kernel
UserManager() = default;
~UserManager() = default;
- User* fCurrentUser = nullptr;
- User* fLastLoggedOffUser = nullptr;
+ User* fCurrentUser{nullptr};
public:
- User* fRootUser = nullptr;
+ User* fRootUser{nullptr};
public:
NEWOS_COPY_DELETE(UserManager);
STATIC UserManager* The() noexcept;
- Bool TryLogIn(User* user, const Char* password) noexcept;
+ Bool TryLogIn(User& user, const Char* password) noexcept;
User* GetCurrent() noexcept;
Void TryLogOff() noexcept;
};
diff --git a/dev/ZKA/NewKit/KernelCheck.hxx b/dev/ZKA/NewKit/KernelCheck.hxx
index d1946e9a..30f66ee5 100644
--- a/dev/ZKA/NewKit/KernelCheck.hxx
+++ b/dev/ZKA/NewKit/KernelCheck.hxx
@@ -35,6 +35,7 @@ enum RUNTIME_CHECK
RUNTIME_CHECK_BAD_BEHAVIOR,
RUNTIME_CHECK_BOOTSTRAP,
RUNTIME_CHECK_UNEXCPECTED,
+ RUNTIME_CHECK_FILESYSTEM,
RUNTIME_CHECK_COUNT,
};
diff --git a/dev/ZKA/Sources/FS/NewFS.cxx b/dev/ZKA/Sources/FS/NewFS.cxx
index bea3e9ec..503c184b 100644
--- a/dev/ZKA/Sources/FS/NewFS.cxx
+++ b/dev/ZKA/Sources/FS/NewFS.cxx
@@ -94,7 +94,7 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
kcout << "newoskrnl: next fork: " << hex_number(curFork.NextSibling) << endl;
- if (curFork.Flags == kNewFSFlagCreated)
+ if (curFork.Flags & kNewFSFlagCreated)
{
kcout << "newoskrnl: fork already exists.\r";
@@ -133,7 +133,7 @@ _Output NFS_FORK_STRUCT* NewFSParser::CreateFork(_Input NFS_CATALOG_STRUCT* cata
constexpr auto cForkPadding =
4; /// this value gives us space for the data offset.
- theFork.Flags = kNewFSFlagCreated;
+ theFork.Flags |= kNewFSFlagCreated;
theFork.DataOffset = lba - sizeof(NFS_FORK_STRUCT) * cForkPadding;
theFork.PreviousSibling = lbaOfPreviousFork;
theFork.NextSibling = theFork.DataOffset - theFork.DataSize;
@@ -307,23 +307,13 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
Int32 flagsList = flags;
- if (flagsList & kNewFSCatalogKindMetaFile)
- {
- if (UserManager::The()->GetCurrent() != UserManager::The()->fRootUser &&
- UserManager::The()->fRootUser)
- {
- delete catalogChild;
- return nullptr;
- }
- }
-
catalogChild->ResourceForkSize = cDefaultForkSize;
catalogChild->DataForkSize = cDefaultForkSize;
catalogChild->NextSibling = outLba;
catalogChild->PrevSibling = outLba;
catalogChild->Kind = kind;
- catalogChild->Flags = kNewFSFlagCreated | flagsList;
+ catalogChild->Flags |= kNewFSFlagCreated | flagsList;
rt_copy_memory((VoidPtr)name, (VoidPtr)catalogChild->Name,
rt_string_len(name));
@@ -367,7 +357,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const Char* name,
// ========================== //
// allocate catalog now...
// ========================== //
- if (nextSibling->Flags != kNewFSFlagCreated)
+ if (!(nextSibling->Flags & kNewFSFlagCreated))
{
Char sectorBufPartBlock[kNewFSSectorSz] = {0};
@@ -680,7 +670,7 @@ bool NewFSParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog, Bool
continue;
}
- forkDataIn.Flags = kNewFSFlagCreated;
+ forkDataIn.Flags |= kNewFSFlagCreated;
drive.fPacket.fPacketContent = data;
drive.fPacket.fPacketSize = sizeOfData;
@@ -732,10 +722,13 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogN
NFS_ROOT_PARTITION_BLOCK* part = (NFS_ROOT_PARTITION_BLOCK*)sectorBuf;
auto startCatalogList = part->StartCatalog;
- const auto cCtartCatalogList = part->StartCatalog;
+ const auto cStartCatalogList = part->StartCatalog;
auto localSearchFirst = false;
+ delete sectorBuf;
+ sectorBuf = new Char[sizeof(NFS_CATALOG_STRUCT)];
+
drive.fPacket.fLba = startCatalogList;
drive.fPacket.fPacketContent = sectorBuf;
drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
@@ -781,52 +774,52 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::FindCatalog(_Input const Char* catalogN
}
}
- kcout << "newoskrnl: fetching catalog...\r";
+ kcout << "newoskrnl: Fetching catalog: " << catalogName << "\r";
+
+ startCatalogList = cStartCatalogList;
_NewFSSearchThroughCatalogList:
while (drive.fPacket.fPacketGood)
{
- NFS_CATALOG_STRUCT* catalog = (NFS_CATALOG_STRUCT*)sectorBuf;
+ drive.fPacket.fLba = startCatalogList;
+ drive.fPacket.fPacketContent = sectorBuf;
+ drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
- if (StringBuilder::Equals(catalogName, catalog->Name))
- {
- /// ignore unallocated catalog, break
- if (catalog->Flags != kNewFSFlagCreated)
- {
- goto NewFSContinueSearch;
- }
+ drive.fInput(&drive.fPacket);
+
+ NFS_CATALOG_STRUCT* catalog = (NFS_CATALOG_STRUCT*)sectorBuf;
- NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT();
- rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT));
+ kcout << "newoskrnl: Fetching catalog: " << catalog->Name << "\r";
+ kcout << "newoskrnl: Fetching catalog: " << catalogName << "\r";
- kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl;
+ if (StringBuilder::Equals(catalogName, catalog->Name) &&
+ (catalog->Flags & kNewFSFlagCreated))
+ {
+ kcout << "newoskrnl: Found catalog at: " << hex_number(startCatalogList) << endl;
outLba = startCatalogList;
- delete[] sectorBuf;
- return catalogPtr;
+ return catalog;
}
NewFSContinueSearch:
startCatalogList = catalog->NextSibling;
if (startCatalogList <= kNewFSStartLba)
+ {
break;
-
- drive.fPacket.fLba = startCatalogList;
- drive.fPacket.fPacketContent = sectorBuf;
- drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT);
-
- drive.fInput(&drive.fPacket);
+ }
}
if (localSearchFirst)
{
localSearchFirst = false;
- startCatalogList = cCtartCatalogList;
+ startCatalogList = cStartCatalogList;
goto _NewFSSearchThroughCatalogList;
}
+ kcout << "Didnt find it.\r";
+
outLba = 0UL;
delete[] sectorBuf;
@@ -838,8 +831,10 @@ _NewFSSearchThroughCatalogList:
/// @return
_Output NFS_CATALOG_STRUCT* NewFSParser::GetCatalog(_Input const Char* name)
{
- Lba unused = 0;
- return this->FindCatalog(name, unused);
+ Lba unused = 0;
+ NFS_CATALOG_STRUCT* catalog = this->FindCatalog(name, unused);
+
+ return catalog;
}
/// @brief Closes a catalog, (frees it).
@@ -872,9 +867,9 @@ Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName)
auto catalog = this->FindCatalog(catalogName, outLba);
if (outLba >= kNewFSCatalogStartAddress ||
- catalog->Flags == kNewFSFlagCreated)
+ (catalog->Flags & kNewFSFlagCreated))
{
- catalog->Flags = kNewFSFlagDeleted;
+ catalog->Flags |= kNewFSFlagDeleted;
auto drive = sMountpointInterface.A();
@@ -923,6 +918,7 @@ Boolean NewFSParser::RemoveCatalog(_Input const Char* catalogName)
/***********************************************************************************/
VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
+ _Input Bool isRsrcFork,
_Input SizeT dataSz,
_Input const Char* forkName)
{
@@ -932,10 +928,12 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog,
return nullptr;
}
+ kcout << "newoskrnl: Reading catalog..\r";
+
Lba dataForkLba = catalog->DataFork;
Size dataForkSize = catalog->DataForkSize;
- kcout << "newoskrnl: catalog " << catalog->Name
+ kcout << "newoskrnl: Catalog " << catalog->Name
<< ", fork: " << hex_number(dataForkLba) << endl;
Char* sectorBuf = new Char[sizeof(NFS_FORK_STRUCT)];
diff --git a/dev/ZKA/Sources/FileManager.cxx b/dev/ZKA/Sources/FileManager.cxx
index b590ef69..92245f4f 100644
--- a/dev/ZKA/Sources/FileManager.cxx
+++ b/dev/ZKA/Sources/FileManager.cxx
@@ -140,7 +140,7 @@ namespace Kernel
NEWOS_UNUSED(flags);
if ((reinterpret_cast<NFS_CATALOG_STRUCT*>(node))->Kind == kNewFSCatalogKindFile)
- return fImpl->ReadCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), sz,
+ return fImpl->ReadCatalog(reinterpret_cast<NFS_CATALOG_STRUCT*>(node), (flags & cFileFlagRsrc ? true : false), sz,
name);
return nullptr;
diff --git a/dev/ZKA/Sources/KernelCheck.cxx b/dev/ZKA/Sources/KernelCheck.cxx
index 6a900039..7b919613 100644
--- a/dev/ZKA/Sources/KernelCheck.cxx
+++ b/dev/ZKA/Sources/KernelCheck.cxx
@@ -77,6 +77,10 @@ namespace Kernel
cg_write_text("0x00000006 ACPI error.", start_y, x, panicTxt);
break;
}
+ case RUNTIME_CHECK_FILESYSTEM: {
+ cg_write_text("0x0000000A Filesystem corruption error.", start_y, x, panicTxt);
+ break;
+ }
case RUNTIME_CHECK_POINTER: {
cg_write_text("0x00000000 Kernel heap error.", start_y, x, panicTxt);
break;
diff --git a/dev/ZKA/Sources/User.cxx b/dev/ZKA/Sources/User.cxx
index 3aad5ad4..df6a4b9b 100644
--- a/dev/ZKA/Sources/User.cxx
+++ b/dev/ZKA/Sources/User.cxx
@@ -58,7 +58,7 @@ namespace Kernel
User::User(const RingKind& ringKind, const Char* userName)
: fRing(ringKind)
{
- rt_copy_memory((VoidPtr)userName, this->fUserName, rt_string_len(userName));
+ rt_copy_memory((VoidPtr)userName, this->fUserName, rt_string_len(userName));
}
User::~User() = default;
@@ -86,14 +86,16 @@ namespace Kernel
if (!node)
{
- node = new_fs->GetParser()->CreateCatalog(kUsersFile);
+ ErrLocal() = kErrorInternal;
+
+ return false;
}
kcout << "newoskrnl: Writing token...\r";
NFS_FORK_STRUCT fork{0};
- fork.Kind = kNewFSRsrcForkKind;
+ fork.Kind = kNewFSDataForkKind;
fork.DataSize = rt_string_len(password);
rt_copy_memory((VoidPtr)this->fUserName, fork.ForkName, rt_string_len(this->fUserName));
@@ -103,7 +105,8 @@ namespace Kernel
new_fs->GetParser()->CreateFork(node, fork);
- new_fs->GetParser()->WriteCatalog(node, (fork.Kind == kNewFSRsrcForkKind), reinterpret_cast<VoidPtr>(token), len, this->fUserName);
+ // writing the data fork now. False means a data fork.
+ bool wrote = new_fs->GetParser()->WriteCatalog(node, false, reinterpret_cast<VoidPtr>(token), len, this->fUserName);
delete node;
node = nullptr;
@@ -111,8 +114,8 @@ namespace Kernel
delete[] token;
token = nullptr;
- kcout << "newoskrnl: Wrote token...\r";
- return true;
+ kcout << "newoskrnl: Wrote token?\r";
+ return wrote;
}
kcout << "No filesystem mounted...\r";
@@ -163,10 +166,9 @@ namespace Kernel
return view;
}
- Bool UserManager::TryLogIn(User* user, const Char* password) noexcept
+ Bool UserManager::TryLogIn(User& user, const Char* password) noexcept
{
- if (!password ||
- !user)
+ if (!password)
{
kcout << "newoskrnl: Incorrect data given.\r";
@@ -192,9 +194,15 @@ namespace Kernel
// ------------------------------------------ //
if (!node)
+ {
+ ErrLocal() = kErrorInvalidData;
+ kcout << "newoskrnl: No such path.\r";
return false;
+ }
- auto token = new_fs->GetParser()->ReadCatalog(node, rt_string_len(password), user->fUserName);
+ kcout << "newoskrnl: reading: " << node->Name << endl;
+
+ auto token = new_fs->GetParser()->ReadCatalog(node, false, rt_string_len(password), user.fUserName);
if (!token)
{
@@ -217,7 +225,7 @@ namespace Kernel
// Construct token.
// ================================================== //
- Detail::cred_construct_token(generated_token, password, user, rt_string_len(password));
+ Detail::cred_construct_token(generated_token, password, &user, rt_string_len(password));
// ================================================== //
// Checks if it matches the current token we have.
@@ -234,25 +242,7 @@ namespace Kernel
kcout << "newoskrnl: Credentials are correct, moving on.\r";
}
- // ------------------------------------------ //
- // This was successful, continue.
- // ------------------------------------------ //
-
- user->fUserToken = token;
-
- if (fCurrentUser)
- {
- if (!fLastLoggedOffUser)
- {
- fLastLoggedOffUser = fCurrentUser;
- }
- else
- {
- this->TryLogOff();
- }
- }
-
- fCurrentUser = user;
+ fCurrentUser = &user;
Kernel::kcout << "newoskrnl: Logged in as: " << fCurrentUser->Name() << Kernel::endl;
return true;
@@ -265,19 +255,6 @@ namespace Kernel
Void UserManager::TryLogOff() 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;
+ fCurrentUser = nullptr;
}
} // namespace Kernel