};
// }}}
-static void setreugid(uid_t uid, gid_t gid) {
- _assert(setreuid(uid, uid) != -1);
- _assert(setregid(gid, gid) != -1);
-}
+#define seteugid(uid, gid) do { \
+ _assert(setreuid(0, uid) != -1); \
+ _assert(setregid(0, gid) != -1); \
+} while (false)
-static void setreguid(gid_t gid, uid_t uid) {
- _assert(setregid(gid, gid) != -1);
- _assert(setreuid(uid, uid) != -1);
-}
+#define seteguid(uid, gid) do { \
+ _assert(setregid(0, gid) != -1); \
+ _assert(setreuid(0, uid) != -1); \
+} while (false)
struct Root {
Root() {
_trace();
- setreugid(0, 0);
+ seteugid(0, 0);
_assert(pthread_setugid_np(0, 0) != -1);
- setreguid(501, 501);
+ seteguid(501, 501);
}
~Root() {
_trace();
- setreugid(0, 0);
+ seteugid(0, 0);
_assert(pthread_setugid_np(KAUTH_UID_NONE, KAUTH_GID_NONE) != -1);
- setreguid(501, 501);
+ seteguid(501, 501);
}
};
return [CydiaWebViewController requestWithHeaders:[super webView:view resource:resource willSendRequest:request redirectResponse:response fromDataSource:source]];
}
+- (NSURLRequest *) webThreadWebView:(WebView *)view resource:(id)resource willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)source {
+ return [CydiaWebViewController requestWithHeaders:[super webThreadWebView:view resource:resource willSendRequest:request redirectResponse:response fromDataSource:source]];
+}
+
+ (NSURLRequest *) requestWithHeaders:(NSURLRequest *)request {
NSMutableURLRequest *copy([[request mutableCopy] autorelease]);
case 1: {
NSString *href = [[alert textField] text];
- static Pcre href_r("^http(s?)://[^# ]*$");
+ static Pcre href_r("^(http(s?)://|file:///)[^# ]*$");
if (!href_r(href)) {
UIAlertView *alert = [[[UIAlertView alloc]
initWithTitle:[NSString stringWithFormat:Colon_, Error_, UCLocalize("INVALID_URL")]
_trace();
if (UpgradeCydia_ && Finish_ > 0) {
- setreugid(0, 0);
+ seteugid(0, 0);
system("su -c /usr/bin/uicache mobile");
} else {
system("/usr/bin/uicache");
}
int main(int argc, char *argv[]) {
- setreugid(501, 501);
+ seteugid(0, 0);
+ seteguid(501, 501);
NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY | RTLD_GLOBAL);*/
if (kCFCoreFoundationVersionNumber > 1000)
- for (const char *path : (const char *[]) {"/var/lib", "/var/cache"})
- _root(system([[NSString stringWithFormat:@"/usr/libexec/cydia/setnsfpn %s", path] UTF8String]));
+ _root(system([[NSString stringWithFormat:@"/usr/libexec/cydia/setnsfpn /var/lib"] UTF8String]));
int version([[NSString stringWithContentsOfFile:@"/var/lib/cydia/firmware.ver"] intValue]);