aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2022-07-07 01:33:08 -0400
committerCameron Katri <me@cameronkatri.com>2022-07-07 01:33:08 -0400
commitd0e5869911c00d8748fde2e219a26494338dedc5 (patch)
treebeb1dd2cf644001d30e51c109fa08b55e9c9ba2b
parente956c1d890c664ccd80293d07a6e8f52a5949c2f (diff)
downloadldid-d0e5869911c00d8748fde2e219a26494338dedc5.tar.gz
ldid-d0e5869911c00d8748fde2e219a26494338dedc5.tar.zst
ldid-d0e5869911c00d8748fde2e219a26494338dedc5.zip
Fix -s by making it a semi-alias for -M -S
-rw-r--r--docs/ldid.14
-rw-r--r--docs/ldid.zh_CN.16
-rw-r--r--docs/ldid.zh_TW.16
-rw-r--r--ldid.cpp51
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<uint8_t *>(mach_header.GetBase());
- uint8_t *blob = top + data;
- struct SuperBlob *super = reinterpret_cast<struct SuperBlob *>(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<struct CodeDirectory *>(blob + begin + sizeof(Blob));
-
- uint8_t (*hashes)[LDID_SHA1_DIGEST_LENGTH] = reinterpret_cast<uint8_t (*)[LDID_SHA1_DIGEST_LENGTH]>(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());