]> git.cameronkatri.com Git - ldid.git/commitdiff
Fix -s by making it a semi-alias for -M -S
authorCameron Katri <me@cameronkatri.com>
Thu, 7 Jul 2022 05:33:08 +0000 (01:33 -0400)
committerCameron Katri <me@cameronkatri.com>
Thu, 7 Jul 2022 05:33:08 +0000 (01:33 -0400)
docs/ldid.1
docs/ldid.zh_CN.1
docs/ldid.zh_TW.1
ldid.cpp

index 2839e1caeceb8071a1630ff93cab7d3fe7348fd9..34e84466f6180f3e2c8ae25d4d31da25f562b80d 100644 (file)
@@ -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
index 713ae27a20047f6201dcd3ebb473acd32487a55a..7997a3c05697608ce6efb85f029f722a324c7b95 100644 (file)
@@ -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
 一起使用时,和现有的权限合并而不是取代它。 在加入权限时有用。
 .It Fl P
 将这个Mach-O二进位档案标示为系统二进位档案。
-.It Fl Q Ns Ar 需求.xml
+.It Fl Q Ns Ar 需求
 把需求嵌入到
-.Ar 需求.xml
+.Ar 需求
 中。
 .It Fl q
 印出被嵌入在二进位档案中的需求。
index 492f38cc26db59470663da77cd140b38f62794f0..001f91fa14cbd5dcc2cf6ea15babc0aeeff75667 100644 (file)
@@ -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
 一起使用時,和現有的權限合併而不是取代它。在加入權限時有用。
 .It Fl P
 將這個Mach-O二進位檔案標示為系統二進位檔案。
-.It Fl Q Ns Ar 需求.xml
+.It Fl Q Ns Ar 需求
 把需求嵌入到
-.Ar 需求.xml
+.Ar 需求
 中。
 .It Fl q
 印出被嵌入在二進位檔案中的需求。
index 7b4c9db8c41f8ef960653cf76451a9f29cb1221d..35841c2a9ed8fa58e20d9cf98e1c77097084dfe5 100644 (file)
--- 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());