diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-21 12:42:45 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-21 12:42:45 +0100 |
| commit | d35df614722024ccdb746332eceda2b7a6cd0b80 (patch) | |
| tree | 57203b27fd9fd76a62b066140a0a7cf307012eb4 /zenserver | |
| parent | Missing return statement in websocket.h (diff) | |
| download | zen-d35df614722024ccdb746332eceda2b7a6cd0b80.tar.xz zen-d35df614722024ccdb746332eceda2b7a6cd0b80.zip | |
clang-format
Diffstat (limited to 'zenserver')
| -rw-r--r-- | zenserver/compute/apply.cpp | 8 | ||||
| -rw-r--r-- | zenserver/frontend/frontend.cpp | 108 | ||||
| -rw-r--r-- | zenserver/frontend/frontend.h | 12 | ||||
| -rw-r--r-- | zenserver/frontend/zipfs.cpp | 151 | ||||
| -rw-r--r-- | zenserver/frontend/zipfs.h | 16 | ||||
| -rw-r--r-- | zenserver/zenserver.cpp | 2 |
6 files changed, 151 insertions, 146 deletions
diff --git a/zenserver/compute/apply.cpp b/zenserver/compute/apply.cpp index 044078aa4..694e9f662 100644 --- a/zenserver/compute/apply.cpp +++ b/zenserver/compute/apply.cpp @@ -174,10 +174,10 @@ SandboxedFunctionJob::GrantNamedObjectAccess(PWSTR ObjectName, SE_OBJECT_TYPE Ob .grfAccessMode = GRANT_ACCESS, .grfInheritance = grfInhericance, .Trustee = {.pMultipleTrustee = nullptr, - .MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE, - .TrusteeForm = TRUSTEE_IS_SID, - .TrusteeType = TRUSTEE_IS_GROUP, - .ptstrName = (PWSTR)m_AppContainerSid}}; + .MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE, + .TrusteeForm = TRUSTEE_IS_SID, + .TrusteeType = TRUSTEE_IS_GROUP, + .ptstrName = (PWSTR)m_AppContainerSid}}; PACL OldAcl = nullptr; diff --git a/zenserver/frontend/frontend.cpp b/zenserver/frontend/frontend.cpp index b87d7e313..6d576876f 100644 --- a/zenserver/frontend/frontend.cpp +++ b/zenserver/frontend/frontend.cpp @@ -15,15 +15,16 @@ ZEN_THIRD_PARTY_INCLUDES_END namespace zen { ////////////////////////////////////////////////////////////////////////// -static IoBuffer FindZipFsInBinary(const IoBuffer& BinBuffer) +static IoBuffer +FindZipFsInBinary(const IoBuffer& BinBuffer) { if (BinBuffer.GetSize() < 4) { return {}; } - uintptr_t Cursor = uintptr_t(BinBuffer.GetData()); - size_t BinSize = 0; + uintptr_t Cursor = uintptr_t(BinBuffer.GetData()); + size_t BinSize = 0; uint32_t Magic = *(uint32_t*)(BinBuffer.GetData()); #if ZEN_PLATFORM_LINUX @@ -31,35 +32,35 @@ static IoBuffer FindZipFsInBinary(const IoBuffer& BinBuffer) { struct Elf64Header { - char Ident[16]; - uint16_t Type; - uint16_t Machine; - uint32_t Version; - uint64_t Entry; - uint64_t ProgHeaderOffset; - uint64_t SectionHeaderOffset; - uint32_t Flags; - uint16_t EhSize; - uint16_t ProgHeaderEntrySize; - uint16_t ProgHeaderCount; - uint16_t SectionHeaderEntrySize; - uint16_t SectionHeaderCount; - uint16_t SectionStringIndex; + char Ident[16]; + uint16_t Type; + uint16_t Machine; + uint32_t Version; + uint64_t Entry; + uint64_t ProgHeaderOffset; + uint64_t SectionHeaderOffset; + uint32_t Flags; + uint16_t EhSize; + uint16_t ProgHeaderEntrySize; + uint16_t ProgHeaderCount; + uint16_t SectionHeaderEntrySize; + uint16_t SectionHeaderCount; + uint16_t SectionStringIndex; }; struct SectionHeader { - uint32_t NameIndex; - uint32_t Type; - uint64_t Flags; - uint64_t Address; - uint64_t Offset; - uint64_t Size; - uint64_t _Other[3]; + uint32_t NameIndex; + uint32_t Type; + uint64_t Flags; + uint64_t Address; + uint64_t Offset; + uint64_t Size; + uint64_t _Other[3]; }; const auto* Elf = (Elf64Header*)Cursor; - if (Elf->Ident[4] != 0x02) // Elf64 + if (Elf->Ident[4] != 0x02) // Elf64 { return {}; } @@ -76,21 +77,21 @@ static IoBuffer FindZipFsInBinary(const IoBuffer& BinBuffer) */ // What if the section headers aren't the last thing in the fiile though? - BinSize = Elf->SectionHeaderEntrySize; + BinSize = Elf->SectionHeaderEntrySize; BinSize *= Elf->SectionHeaderCount; BinSize += Elf->SectionHeaderOffset; } #elif ZEN_PLATFORM_WINDOWS if ((Magic & 0xffff) == 0x5a4d) { - const auto* Dos = (IMAGE_DOS_HEADER*)Cursor; - const auto* Nt = (IMAGE_NT_HEADERS64*)(Cursor + Dos->e_lfanew); + const auto* Dos = (IMAGE_DOS_HEADER*)Cursor; + const auto* Nt = (IMAGE_NT_HEADERS64*)(Cursor + Dos->e_lfanew); const auto* Section = (IMAGE_SECTION_HEADER*)(uintptr_t(&Nt->OptionalHeader) + Nt->FileHeader.SizeOfOptionalHeader); for (int i = 0, n = Nt->FileHeader.NumberOfSections; i < n; ++i, ++Section) { uint32_t SectionEnd = Section->PointerToRawData + Section->SizeOfRawData; - BinSize = (SectionEnd > BinSize) ? SectionEnd : BinSize; + BinSize = (SectionEnd > BinSize) ? SectionEnd : BinSize; } } #elif ZEN_PLATFORM_MAC @@ -98,35 +99,35 @@ static IoBuffer FindZipFsInBinary(const IoBuffer& BinBuffer) { struct MachInt32 { - operator uint32_t () const { return ByteSwap(Value); } - uint32_t Value; + operator uint32_t() const { return ByteSwap(Value); } + uint32_t Value; }; struct MachFatArch { - MachInt32 CpuType; - MachInt32 SubType; - MachInt32 Offset; - MachInt32 Size; - MachInt32 Alignment; + MachInt32 CpuType; + MachInt32 SubType; + MachInt32 Offset; + MachInt32 Size; + MachInt32 Alignment; }; struct MachFatHeader { uint32_t Magic; MachInt32 NumArchs; - MachFatArch Archs[]; + MachFatArch Archs[]; }; const auto* Header = (MachFatHeader*)Cursor; for (int i = 0, n = Header->NumArchs; i < n; ++i) { - const MachFatArch* Arch = Header->Archs + i; - uint32_t ArchEnd = Arch->Offset + Arch->Size; - BinSize = (ArchEnd > BinSize) ? ArchEnd : BinSize; + const MachFatArch* Arch = Header->Archs + i; + uint32_t ArchEnd = Arch->Offset + Arch->Size; + BinSize = (ArchEnd > BinSize) ? ArchEnd : BinSize; } } -#endif // win/linux/mac +#endif // win/linux/mac if (!BinSize || BinSize > BinBuffer.GetSize()) { @@ -137,13 +138,12 @@ static IoBuffer FindZipFsInBinary(const IoBuffer& BinBuffer) } //////////////////////////////////////////////////////////////////////////////// -HttpFrontendService::HttpFrontendService(std::filesystem::path Directory) -: m_Directory(Directory) +HttpFrontendService::HttpFrontendService(std::filesystem::path Directory) : m_Directory(Directory) { std::filesystem::path SelfPath = GetRunningExecutablePath(); // Locate a .zip file appended onto the end of this binary - IoBuffer SelfBuffer = IoBufferBuilder::MakeFromFile(SelfPath); + IoBuffer SelfBuffer = IoBufferBuilder::MakeFromFile(SelfPath); IoBuffer SelfTailBuffer = FindZipFsInBinary(SelfBuffer); if (SelfTailBuffer) { @@ -193,7 +193,8 @@ HttpFrontendService::HandleRequest(zen::HttpServerRequest& Request) using namespace std::literals; std::string_view Uri = Request.RelativeUri(); - for (; Uri[0] == '/'; Uri = Uri.substr(1)); + for (; Uri[0] == '/'; Uri = Uri.substr(1)) + ; if (Uri.empty()) { Uri = "index.html"sv; @@ -209,15 +210,20 @@ HttpFrontendService::HandleRequest(zen::HttpServerRequest& Request) // Map the file extension to a MIME type. To keep things constrained, only a // small subset of file extensions is allowed. HttpContentType ContentType = HttpContentType::kCOUNT; - size_t DotIndex = Uri.rfind("."); + size_t DotIndex = Uri.rfind("."); if (DotIndex != Uri.npos) { const std::string_view DotExt = Uri.substr(DotIndex); - if (DotExt == ".html") ContentType = HttpContentType::kHTML; - else if (DotExt == ".js") ContentType = HttpContentType::kJSON; - else if (DotExt == ".css") ContentType = HttpContentType::kCSS; - else if (DotExt == ".png") ContentType = HttpContentType::kPNG; - else if (DotExt == ".ico") ContentType = HttpContentType::kIcon; + if (DotExt == ".html") + ContentType = HttpContentType::kHTML; + else if (DotExt == ".js") + ContentType = HttpContentType::kJSON; + else if (DotExt == ".css") + ContentType = HttpContentType::kCSS; + else if (DotExt == ".png") + ContentType = HttpContentType::kPNG; + else if (DotExt == ".ico") + ContentType = HttpContentType::kIcon; } if (ContentType == HttpContentType::kCOUNT) diff --git a/zenserver/frontend/frontend.h b/zenserver/frontend/frontend.h index bf5298169..6eac20620 100644 --- a/zenserver/frontend/frontend.h +++ b/zenserver/frontend/frontend.h @@ -12,14 +12,14 @@ namespace zen { class HttpFrontendService final : public zen::HttpService { public: - HttpFrontendService(std::filesystem::path Directory); - virtual ~HttpFrontendService(); - virtual const char* BaseUri() const override; - virtual void HandleRequest(zen::HttpServerRequest& Request) override; + HttpFrontendService(std::filesystem::path Directory); + virtual ~HttpFrontendService(); + virtual const char* BaseUri() const override; + virtual void HandleRequest(zen::HttpServerRequest& Request) override; private: - ZipFs m_ZipFs; - std::filesystem::path m_Directory; + ZipFs m_ZipFs; + std::filesystem::path m_Directory; }; } // namespace zen diff --git a/zenserver/frontend/zipfs.cpp b/zenserver/frontend/zipfs.cpp index 5fb9d0177..91c6629a0 100644 --- a/zenserver/frontend/zipfs.cpp +++ b/zenserver/frontend/zipfs.cpp @@ -12,83 +12,84 @@ namespace { # pragma warning(disable : 4200) #endif -using ZipInt16 = uint16_t; + using ZipInt16 = uint16_t; -struct ZipInt32 -{ - operator uint32_t () const { return *(uint32_t*)Parts; } - uint16_t Parts[2]; -}; - -struct EocdRecord -{ - enum : uint32_t { - Magic = 0x0605'4b50, + struct ZipInt32 + { + operator uint32_t() const { return *(uint32_t*)Parts; } + uint16_t Parts[2]; }; - ZipInt32 Signature; - ZipInt16 ThisDiskIndex; - ZipInt16 CdStartDiskIndex; - ZipInt16 CdRecordThisDiskCount; - ZipInt16 CdRecordCount; - ZipInt32 CdSize; - ZipInt32 CdOffset; - ZipInt16 CommentSize; - char Comment[]; -}; - -struct CentralDirectoryRecord -{ - enum : uint32_t { - Magic = 0x0201'4b50, + + struct EocdRecord + { + enum : uint32_t + { + Magic = 0x0605'4b50, + }; + ZipInt32 Signature; + ZipInt16 ThisDiskIndex; + ZipInt16 CdStartDiskIndex; + ZipInt16 CdRecordThisDiskCount; + ZipInt16 CdRecordCount; + ZipInt32 CdSize; + ZipInt32 CdOffset; + ZipInt16 CommentSize; + char Comment[]; }; - ZipInt32 Signature; - ZipInt16 VersionMadeBy; - ZipInt16 VersionRequired; - ZipInt16 Flags; - ZipInt16 CompressionMethod; - ZipInt16 LastModTime; - ZipInt16 LastModDate; - ZipInt32 Crc32; - ZipInt32 CompressedSize; - ZipInt32 OriginalSize; - ZipInt16 FileNameLength; - ZipInt16 ExtraFieldLength; - ZipInt16 CommentLength; - ZipInt16 DiskIndex; - ZipInt16 InternalFileAttr; - ZipInt32 ExternalFileAttr; - ZipInt32 Offset; - char FileName[]; -}; - -struct LocalFileHeader -{ - enum : uint32_t { - Magic = 0x0304'4b50, + struct CentralDirectoryRecord + { + enum : uint32_t + { + Magic = 0x0201'4b50, + }; + + ZipInt32 Signature; + ZipInt16 VersionMadeBy; + ZipInt16 VersionRequired; + ZipInt16 Flags; + ZipInt16 CompressionMethod; + ZipInt16 LastModTime; + ZipInt16 LastModDate; + ZipInt32 Crc32; + ZipInt32 CompressedSize; + ZipInt32 OriginalSize; + ZipInt16 FileNameLength; + ZipInt16 ExtraFieldLength; + ZipInt16 CommentLength; + ZipInt16 DiskIndex; + ZipInt16 InternalFileAttr; + ZipInt32 ExternalFileAttr; + ZipInt32 Offset; + char FileName[]; }; - ZipInt32 Signature; - ZipInt16 VersionRequired; - ZipInt16 Flags; - ZipInt16 CompressionMethod; - ZipInt16 LastModTime; - ZipInt16 LastModDate; - ZipInt32 Crc32; - ZipInt32 CompressedSize; - ZipInt32 OriginalSize; - ZipInt16 FileNameLength; - ZipInt16 ExtraFieldLength; - char FileName[]; -}; + struct LocalFileHeader + { + enum : uint32_t + { + Magic = 0x0304'4b50, + }; + + ZipInt32 Signature; + ZipInt16 VersionRequired; + ZipInt16 Flags; + ZipInt16 CompressionMethod; + ZipInt16 LastModTime; + ZipInt16 LastModDate; + ZipInt32 Crc32; + ZipInt32 CompressedSize; + ZipInt32 OriginalSize; + ZipInt16 FileNameLength; + ZipInt16 ExtraFieldLength; + char FileName[]; + }; #if ZEN_COMPILER_MSC # pragma warning(pop) #endif -} // namespace - - +} // namespace ////////////////////////////////////////////////////////////////////////// ZipFs::ZipFs(IoBuffer&& Buffer) @@ -102,7 +103,7 @@ ZipFs::ZipFs(IoBuffer&& Buffer) } const auto* EocdCursor = (EocdRecord*)(Cursor - sizeof(EocdRecord)); - + // It is more correct to search backwards for EocdRecord::Magic as the // comment can be of a variable length. But here we're not going to support // zip files with comments. @@ -138,19 +139,20 @@ ZipFs::ZipFs(IoBuffer&& Buffer) } uint32_t ExtraBytes = Cd.FileNameLength + Cd.ExtraFieldLength + Cd.CommentLength; - CdCursor = (CentralDirectoryRecord*)(Cd.FileName + ExtraBytes); + CdCursor = (CentralDirectoryRecord*)(Cd.FileName + ExtraBytes); } - + m_Buffer = std::move(Buffer); } ////////////////////////////////////////////////////////////////////////// -IoBuffer ZipFs::GetFile(const std::string_view& FileName) const +IoBuffer +ZipFs::GetFile(const std::string_view& FileName) const { FileMap::iterator Iter = m_Files.find(FileName); if (Iter == m_Files.end()) { - return{}; + return {}; } FileItem& Item = Iter->second; @@ -160,11 +162,8 @@ IoBuffer ZipFs::GetFile(const std::string_view& FileName) const } const auto* Lfh = (LocalFileHeader*)(Item.GetData()); - Item = MemoryView( - Lfh->FileName + Lfh->FileNameLength + Lfh->ExtraFieldLength, - Lfh->OriginalSize - ); + Item = MemoryView(Lfh->FileName + Lfh->FileNameLength + Lfh->ExtraFieldLength, Lfh->OriginalSize); return IoBuffer(IoBuffer::Wrap, Item.GetData(), Item.GetSize()); } -} // namespace zen +} // namespace zen diff --git a/zenserver/frontend/zipfs.h b/zenserver/frontend/zipfs.h index a304e9ff5..b877e278e 100644 --- a/zenserver/frontend/zipfs.h +++ b/zenserver/frontend/zipfs.h @@ -10,15 +10,15 @@ namespace zen { class ZipFs { public: - ZipFs() = default; - ZipFs(IoBuffer&& Buffer); - IoBuffer GetFile(const std::string_view& FileName) const; + ZipFs() = default; + ZipFs(IoBuffer&& Buffer); + IoBuffer GetFile(const std::string_view& FileName) const; private: - using FileItem = MemoryView; - using FileMap = std::unordered_map<std::string_view, FileItem>; - FileMap mutable m_Files; - IoBuffer m_Buffer; + using FileItem = MemoryView; + using FileMap = std::unordered_map<std::string_view, FileItem>; + FileMap mutable m_Files; + IoBuffer m_Buffer; }; -} // namespace zen +} // namespace zen diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp index bed60a82a..d8e97b117 100644 --- a/zenserver/zenserver.cpp +++ b/zenserver/zenserver.cpp @@ -106,8 +106,8 @@ ZEN_THIRD_PARTY_INCLUDES_END #include "cache/structuredcachestore.h" #include "compute/apply.h" #include "diag/diagsvcs.h" -#include "frontend/frontend.h" #include "experimental/usnjournal.h" +#include "frontend/frontend.h" #include "monitoring/httpstats.h" #include "monitoring/httpstatus.h" #include "projectstore.h" |