From d0e5869911c00d8748fde2e219a26494338dedc5 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Thu, 7 Jul 2022 01:33:08 -0400 Subject: Fix -s by making it a semi-alias for -M -S --- docs/ldid.1 | 4 ++-- docs/ldid.zh_CN.1 | 6 +++--- docs/ldid.zh_TW.1 | 6 +++--- ldid.cpp | 51 +++++++++++++-------------------------------------- 4 files changed, 21 insertions(+), 46 deletions(-) diff --git a/docs/ldid.1 b/docs/ldid.1 index 2839e1c..34e8446 100644 --- a/docs/ldid.1 +++ b/docs/ldid.1 @@ -23,7 +23,7 @@ .Op Fl K Ns Ar key.p12 Op Fl U Ns Ar password .Op Fl M .Op Fl P -.Op Fl Q Ns Ar requirements.xml +.Op Fl Q Ns Ar requirements .Op Fl q .Op Fl r | Fl S Ns Ar file.xml | Fl s .Op Fl u @@ -113,7 +113,7 @@ handful of binaries. Mark the Mach-O as a platform binary. .It Fl Q Ns Ar requirements.xml Embed the requirements found in -.Ar requirements.xml . +.Ar requirements . .It Fl q Print embedded requirements of the binaries. .It Fl r diff --git a/docs/ldid.zh_CN.1 b/docs/ldid.zh_CN.1 index 713ae27..7997a3c 100644 --- a/docs/ldid.zh_CN.1 +++ b/docs/ldid.zh_CN.1 @@ -23,7 +23,7 @@ .Op Fl K Ns Ar 密錀.p12 Op Fl U Ns Ar 密码 .Op Fl M .Op Fl P -.Op Fl Q Ns Ar 需求.xml +.Op Fl Q Ns Ar 需求 .Op Fl q .Op Fl r | Fl S Ns Ar 档案.xml | Fl s .Op Fl u @@ -111,9 +111,9 @@ 一起使用时,和现有的权限合并而不是取代它。 在加入权限时有用。 .It Fl P 将这个Mach-O二进位档案标示为系统二进位档案。 -.It Fl Q Ns Ar 需求.xml +.It Fl Q Ns Ar 需求 把需求嵌入到 -.Ar 需求.xml +.Ar 需求 中。 .It Fl q 印出被嵌入在二进位档案中的需求。 diff --git a/docs/ldid.zh_TW.1 b/docs/ldid.zh_TW.1 index 492f38c..001f91f 100644 --- a/docs/ldid.zh_TW.1 +++ b/docs/ldid.zh_TW.1 @@ -23,7 +23,7 @@ .Op Fl K Ns Ar 密錀.p12 Op Fl U Ns Ar 密碼 .Op Fl M .Op Fl P -.Op Fl Q Ns Ar 需求.xml +.Op Fl Q Ns Ar 需求 .Op Fl q .Op Fl r | Fl S Ns Ar 檔案.xml | Fl s .Op Fl u @@ -111,9 +111,9 @@ 一起使用時,和現有的權限合併而不是取代它。在加入權限時有用。 .It Fl P 將這個Mach-O二進位檔案標示為系統二進位檔案。 -.It Fl Q Ns Ar 需求.xml +.It Fl Q Ns Ar 需求 把需求嵌入到 -.Ar 需求.xml +.Ar 需求 中。 .It Fl q 印出被嵌入在二進位檔案中的需求。 diff --git a/ldid.cpp b/ldid.cpp index 7b4c9db..35841c2 100644 --- a/ldid.cpp +++ b/ldid.cpp @@ -1317,14 +1317,6 @@ class Map { void *data_; size_t size_; - void clear() { - if (data_ == NULL) - return; - _syscall(munmap(data_, size_)); - data_ = NULL; - size_ = 0; - } - public: Map() : data_(NULL), @@ -1372,6 +1364,14 @@ class Map { open(path, O_RDONLY, PROT_READ, MAP_PRIVATE); } + void clear() { + if (data_ == NULL) + return; + _syscall(munmap(data_, size_)); + data_ = NULL; + size_ = 0; + } + void *data() const { return data_; } @@ -3329,6 +3329,8 @@ int main(int argc, char *argv[]) { exit(1); } flag_s = true; + entitlements.clear(); + flag_M = true; break; case 'S': @@ -3419,11 +3421,7 @@ int main(int argc, char *argv[]) { Commit(path, temp); } - bool modify(false); - if (flag_s) - modify = true; - - Map mapping(path, modify); + Map mapping(path, false); FatHeader fat_header(mapping.data(), mapping.size()); _foreach (mach_header, fat_header.GetMachHeaders()) { @@ -3471,8 +3469,8 @@ int main(int argc, char *argv[]) { encryption->cryptid = mach_header.Swap(0); } - if ((flag_e || flag_q || flag_s || flag_h) && signature == NULL) { - fprintf(stderr, "ldid: -e, -q, -s, and -h requre a signed binary\n"); + if ((flag_e || flag_q || flag_h) && signature == NULL) { + fprintf(stderr, "ldid: -e, -q, and -h requre a signed binary\n"); exit(1); } @@ -3506,29 +3504,6 @@ int main(int argc, char *argv[]) { } } - if (flag_s) { - uint32_t data = mach_header.Swap(signature->dataoff); - - uint8_t *top = reinterpret_cast(mach_header.GetBase()); - uint8_t *blob = top + data; - struct SuperBlob *super = reinterpret_cast(blob); - - for (size_t index(0); index != Swap(super->count); ++index) - if (Swap(super->index[index].type) == CSSLOT_CODEDIRECTORY) { - uint32_t begin = Swap(super->index[index].offset); - struct CodeDirectory *directory = reinterpret_cast(blob + begin + sizeof(Blob)); - - uint8_t (*hashes)[LDID_SHA1_DIGEST_LENGTH] = reinterpret_cast(blob + begin + Swap(directory->hashOffset)); - uint32_t pages = Swap(directory->nCodeSlots); - - if (pages != 1) - for (size_t i = 0; i != pages - 1; ++i) - LDID_SHA1(top + PageSize_ * i, PageSize_, hashes[i]); - if (pages != 0) - LDID_SHA1(top + PageSize_ * (pages - 1), ((data - 1) % PageSize_) + 1, hashes[pages - 1]); - } - } - if (flag_h) { auto algorithms(GetAlgorithms()); -- cgit v1.2.3-56-ge451