]> git.saurik.com Git - cydia.git/commitdiff
Move /var/stash under /var/db/stash for setnsfpn.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 5 Nov 2014 05:44:31 +0000 (21:44 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 5 Nov 2014 05:44:31 +0000 (21:44 -0800)
Library/move.sh
MobileCydia.mm
postinst.mm

index 7e737e3c4ffb41906d1253367fbacdf367e0bd30..54750cd43634b84c674811768745ad32c6fb350e 100755 (executable)
@@ -20,8 +20,13 @@ function df_() {
 function mv_() {
     src=$1
 
-    mkdir -p /var/stash
-    /usr/libexec/cydia/setnsfpn /var/stash
+    if [[ ! -e /var/stash ]]; then
+        mkdir -p /var/db/stash
+        /usr/libexec/cydia/setnsfpn /var/db/stash
+        ln -s -t /var /var/db/stash
+    elif [[ -d /var/stash ]]; then
+        /usr/libexec/cydia/setnsfpn /var/stash
+    fi
 
     tmp=$(mktemp -d /var/stash/_.XXXXXX)
     dst=${tmp}/${src##*/}
index 49b74f6f1d5fb66f3e9aa3c12f1661c9e4da2e30..e491c7345a2cea0ea521a3b384485ba8988330f5 100644 (file)
@@ -3157,6 +3157,7 @@ struct PackageNameOrdering :
         bool user = false;
         bool _private = false;
         bool stash = false;
+        bool dbstash = false;
         bool dsstore = false;
 
         bool repository = [[self section] isEqualToString:@"Repositories"];
@@ -3171,6 +3172,8 @@ struct PackageNameOrdering :
                     _private = true;
                 else if (!stash && [file isEqualToString:@"/var/stash"])
                     stash = true;
+                else if (!dbstash && [file isEqualToString:@"/var/db/stash"])
+                    dbstash = true;
                 else if (!dsstore && [file hasSuffix:@"/.DS_Store"])
                     dsstore = true;
 
@@ -3183,6 +3186,8 @@ struct PackageNameOrdering :
             [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"/private"]];
         if (stash)
             [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"/var/stash"]];
+        if (dbstash)
+            [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @"/var/db/stash"]];
         if (dsstore)
             [warnings addObject:[NSString stringWithFormat:UCLocalize("FILES_INSTALLED_TO"), @".DS_Store"]];
     }
index c67cce5c8200b25b5ee699da674adb715189d8b4..e5658d2a8ae4ed403a205c02beab263f0b2a8b4d 100644 (file)
@@ -28,14 +28,62 @@ static bool setnsfpn(const char *path) {
     return system([[NSString stringWithFormat:@"/usr/libexec/cydia/setnsfpn %s", path] UTF8String]) == 0;
 }
 
+static bool MoveStash() {
+    struct stat stat;
+
+    if (lstat("/var/stash", &stat) == -1)
+        return errno == ENOENT;
+    else if (S_ISLNK(stat.st_mode))
+        return true;
+    else if (!S_ISDIR(stat.st_mode))
+        return false;
+
+    if (lstat("/var/db/stash", &stat) == -1) {
+        if (errno == ENOENT)
+            goto move;
+        else return false;
+    } else if (S_ISLNK(stat.st_mode))
+        // XXX: this is fixable
+        return false;
+    else if (!S_ISDIR(stat.st_mode))
+        return false;
+    else {
+        if (!setnsfpn("/var/db/stash"))
+            return false;
+        if (system("mv -t /var/stash /var/db/stash/*") != 0)
+            return false;
+        if (rmdir("/var/db/stash") == -1)
+            return false;
+    } move:
+
+    if (!setnsfpn("/var/stash"))
+        return false;
+
+    if (rename("/var/stash", "/var/db/stash") == -1)
+        return false;
+    if (symlink("/var/db/stash", "/var/stash") != -1)
+        return true;
+    if (rename("/var/db/stash", "/var/stash") != -1)
+        return false;
+
+    fprintf(stderr, "/var/stash misplaced -- DO NOT REBOOT\n");
+    return false;
+}
+
 static bool FixProtections() {
-    for (const char *path : (const char *[]) {"/var/lib", "/var/cache", "/var/stash"}) {
+    for (const char *path : (const char *[]) {"/var/lib", "/var/cache"}) {
         mkdir(path, 0755);
         if (!setnsfpn(path)) {
             fprintf(stderr, "failed to setnsfpn %s\n", path);
             return false;
         }
     }
+
+    if (!MoveStash()) {
+        fprintf(stderr, "failed to move stash\n");
+        return false;
+    }
+
     return true;
 }