diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-22 18:02:40 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-22 18:02:40 +0200 |
| commit | 10099e99847307fae60aebdf2292002d359d45b4 (patch) | |
| tree | 718ab13485520d1e69b908b48baf48e988c64985 /dev | |
| parent | b843322161bec86e707c45962ce9b7b76b0d1826 (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')
| -rw-r--r-- | dev/ZBA/BootKit/BootKit.hxx | 3 | ||||
| -rw-r--r-- | dev/ZBA/Sources/HEL/AMD64/BootMain.cxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/FSKit/NewFS.hxx | 25 | ||||
| -rw-r--r-- | dev/ZKA/FirmwareKit/Handover.hxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalKernelMain.cxx | 27 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalPageAlloc.cxx | 8 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/Processor.hxx | 6 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/User.hxx | 13 | ||||
| -rw-r--r-- | dev/ZKA/NewKit/KernelCheck.hxx | 1 | ||||
| -rw-r--r-- | dev/ZKA/Sources/FS/NewFS.cxx | 82 | ||||
| -rw-r--r-- | dev/ZKA/Sources/FileManager.cxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/Sources/KernelCheck.cxx | 4 | ||||
| -rw-r--r-- | dev/ZKA/Sources/User.cxx | 65 |
13 files changed, 108 insertions, 132 deletions
diff --git a/dev/ZBA/BootKit/BootKit.hxx b/dev/ZBA/BootKit/BootKit.hxx index b81f2846..71d94c14 100644 --- a/dev/ZBA/BootKit/BootKit.hxx +++ b/dev/ZBA/BootKit/BootKit.hxx @@ -241,7 +241,8 @@ public: if (blockPart->DiskSize != this->fDiskDev.GetDiskSize() || blockPart->DiskSize < 1 || blockPart->SectorSize != BootDev::kSectorSize || - blockPart->Version != kNewFSVersionInteger) + blockPart->Version != kNewFSVersionInteger || + blockPart->StartCatalog == 0) { return false; } diff --git a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx index 7c1fd412..f6438be8 100644 --- a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx +++ b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx @@ -185,7 +185,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, handoverHdrPtr->f_HeapStart = nullptr; - BS->AllocatePool(EfiLoaderCode, kHandoverHeapSz, &handoverHdrPtr->f_HeapStart); + while (BS->AllocatePool(EfiLoaderCode, kHandoverHeapSz, &handoverHdrPtr->f_HeapStart) != kEfiOk); handoverHdrPtr->f_VirtualSize = Descriptor[cDefaultMemoryMap].NumberOfPages; /* # of pages */ 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 |
