diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2017-06-03 17:43:16 +0200 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2017-06-03 17:43:16 +0200 |
| commit | 9d52ab5144655950a152f09a179da1ae8bb4c4e5 (patch) | |
| tree | 63ab648c866066892eb87f9f20048b3e80607ac3 /Source/Core | |
| parent | 4af514bb3c65789b00e9c144eaf79aea4380b4fd (diff) | |
IOS/ES: Move ImportTicket write function
This commit moves the write function to where it should be (IOS),
especially when ES::ImportTicket() is the only place to use it.
Prevents misusing the ticket import function, and removes one unsafe
direct write to the NAND that does not go through IOS.
This also fixes the destination path: the session root is the one which
should be used for determining the ticket path, not the configured one.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/IOS/ES/TitleManagement.cpp | 20 | ||||
| -rw-r--r-- | Source/Core/DiscIO/NANDContentLoader.cpp | 20 | ||||
| -rw-r--r-- | Source/Core/DiscIO/NANDContentLoader.h | 1 |
3 files changed, 18 insertions, 23 deletions
diff --git a/Source/Core/Core/IOS/ES/TitleManagement.cpp b/Source/Core/Core/IOS/ES/TitleManagement.cpp index 1bfd229a96..505b4b869a 100644 --- a/Source/Core/Core/IOS/ES/TitleManagement.cpp +++ b/Source/Core/Core/IOS/ES/TitleManagement.cpp @@ -30,6 +30,21 @@ namespace HLE { namespace Device { +static ReturnCode WriteTicket(const IOS::ES::TicketReader& ticket) +{ + const u64 title_id = ticket.GetTitleId(); + + const std::string ticket_path = Common::GetTicketFileName(title_id, Common::FROM_SESSION_ROOT); + File::CreateFullPath(ticket_path); + + File::IOFile ticket_file(ticket_path, "wb"); + if (!ticket_file) + return ES_EIO; + + const std::vector<u8>& raw_ticket = ticket.GetRawTicket(); + return ticket_file.WriteBytes(raw_ticket.data(), raw_ticket.size()) ? IPC_SUCCESS : ES_EIO; +} + ReturnCode ES::ImportTicket(const std::vector<u8>& ticket_bytes) { IOS::ES::TicketReader ticket{ticket_bytes}; @@ -54,8 +69,9 @@ ReturnCode ES::ImportTicket(const std::vector<u8>& ticket_bytes) } } - if (!DiscIO::AddTicket(ticket)) - return ES_EIO; + const ReturnCode write_ret = WriteTicket(ticket); + if (write_ret != IPC_SUCCESS) + return write_ret; INFO_LOG(IOS_ES, "ImportTicket: Imported ticket for title %016" PRIx64, ticket.GetTitleId()); return IPC_SUCCESS; diff --git a/Source/Core/DiscIO/NANDContentLoader.cpp b/Source/Core/DiscIO/NANDContentLoader.cpp index e9700ac1e2..c1a806006d 100644 --- a/Source/Core/DiscIO/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/NANDContentLoader.cpp @@ -248,26 +248,6 @@ void CNANDContentManager::ClearCache() m_map.clear(); } -bool AddTicket(const IOS::ES::TicketReader& signed_ticket) -{ - if (!signed_ticket.IsValid()) - { - return false; - } - - u64 title_id = signed_ticket.GetTitleId(); - - std::string ticket_filename = Common::GetTicketFileName(title_id, Common::FROM_CONFIGURED_ROOT); - File::CreateFullPath(ticket_filename); - - File::IOFile ticket_file(ticket_filename, "wb"); - if (!ticket_file) - return false; - - const std::vector<u8>& raw_ticket = signed_ticket.GetRawTicket(); - return ticket_file.WriteBytes(raw_ticket.data(), raw_ticket.size()); -} - IOS::ES::TicketReader FindSignedTicket(u64 title_id) { std::string ticket_filename = Common::GetTicketFileName(title_id, Common::FROM_CONFIGURED_ROOT); diff --git a/Source/Core/DiscIO/NANDContentLoader.h b/Source/Core/DiscIO/NANDContentLoader.h index 7dee6b488c..de4157cd39 100644 --- a/Source/Core/DiscIO/NANDContentLoader.h +++ b/Source/Core/DiscIO/NANDContentLoader.h @@ -24,7 +24,6 @@ namespace DiscIO enum class Region; // TODO: move some of these to Core/IOS/ES. -bool AddTicket(const IOS::ES::TicketReader& signed_ticket); IOS::ES::TicketReader FindSignedTicket(u64 title_id); class CNANDContentData |
