]> git.saurik.com Git - cydia.git/blobdiff - postinst.mm
Do not pass our disk cache path up to NSURLCache.
[cydia.git] / postinst.mm
index a29694394eb9164ca7484ca6c8b4fee0da8bef1f..bbef4c8aeeeb52bb90af221441431a0148970c83 100644 (file)
@@ -24,6 +24,44 @@ void Finish(const char *finish) {
     fclose(fout);
 }
 
+static bool FixProtections() {
+    for (const char *path : (const char *[]) {"/var/lib", "/var/cache", "/var/stash"}) {
+        mkdir(path, 0755);
+        if (system([[NSString stringWithFormat:@"/usr/libexec/cydia/setnsfpn %s", path] UTF8String]) != 0) {
+            fprintf(stderr, "failed to setnsfpn %s\n", path);
+            return false;
+        }
+    }
+    return true;
+}
+
+static void FixPermissions() {
+    DIR *stash(opendir("/var/stash"));
+    if (stash == NULL)
+        return;
+
+    while (dirent *entry = readdir(stash)) {
+        const char *folder(entry->d_name);
+        if (strlen(folder) != 8)
+            continue;
+        if (strncmp(folder, "_.", 2) != 0)
+            continue;
+
+        char path[1024];
+        sprintf(path, "/var/stash/%s", folder);
+
+        struct stat stat;
+        if (lstat(path, &stat) == -1)
+            continue;
+        if (!S_ISDIR(stat.st_mode))
+            continue;
+
+        chmod(path, 0755);
+    }
+
+    closedir(stash);
+}
+
 #define APPLICATIONS "/Applications"
 static bool FixApplications() {
     char target[1024];
@@ -71,14 +109,19 @@ static bool FixApplications() {
             fprintf(stderr, "/Applications damaged -- DO NOT REBOOT\n");
         goto undo;
     } else {
-        if (symlink(destiny, APPLICATIONS) == -1)
+        bool success;
+        if (symlink(destiny, APPLICATIONS) != -1)
+            success = true;
+        else {
             fprintf(stderr, "/var/stash/Applications damaged -- DO NOT REBOOT\n");
+            success = false;
+        }
 
         // unneccessary, but feels better (I'm nervous)
         symlink(destiny, target);
 
         [@APPLICATIONS writeToFile:[NSString stringWithFormat:@"%s.lnk", temp] atomically:YES encoding:NSNonLossyASCIIStringEncoding error:NULL];
-        return true;
+        return success;
     }
 }
 
@@ -93,6 +136,10 @@ int main(int argc, const char *argv[]) {
 
     NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
 
+    if (kCFCoreFoundationVersionNumber >= 1000)
+        if (!FixProtections())
+            return 1;
+
     size_t size;
     sysctlbyname("kern.osversion", NULL, &size, NULL, 0);
     char *osversion = new char[size];
@@ -121,6 +168,8 @@ int main(int argc, const char *argv[]) {
 
     CydiaWriteSources();
 
+    FixPermissions();
+
     if (FixApplications())
         Finish("restart");