Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- xpc_object_t getProcessExtensions(xpc_connection_t sourceConnection, const char* profileName)
- {
- audit_token_t auditToken;
- xpc_connection_get_audit_token(sourceConnection, &auditToken);
- struct __SecTask* secTask = SecTaskCreateWithAuditToken(NULL, auditToken);
- NSString* sourceIdentifier = (__bridge_transfer NSString*)SecTaskCopySigningIdentifier(secTask, NULL);
- NSString* nsProfileName = [NSString stringWithUTF8String:profileName];
- __block xpc_object_t extensionArray = xpc_array_create_empty();
- NSString* profileRootPath = rootifyPath(@"/Library/libSandy/");
- NSString* profilePath = [profileRootPath stringByAppendingPathComponent:[nsProfileName stringByAppendingPathExtension:@"plist"]];
- if(![[NSFileManager defaultManager] fileExistsAtPath:profilePath]) return extensionArray;
- NSURL* profileURL = [NSURL fileURLWithPath:profilePath isDirectory:NO];
- NSDictionary* profileDict;
- if(@available(iOS 11, *))
- {
- profileDict = [NSDictionary dictionaryWithContentsOfURL:profileURL error:nil];
- }
- else
- {
- profileDict = [NSDictionary dictionaryWithContentsOfURL:profileURL];
- }
- if(!profileDict) return extensionArray;
- // Verify if allowed
- NSArray* allowedProcesses = profileDict[@"allowedProcesses"];
- if(![allowedProcesses isKindOfClass:NSArray.class]) return extensionArray;
- BOOL allowed = [allowedProcesses containsObject:sourceIdentifier] || [allowedProcesses containsObject:@"*"];
- if(!allowed) return extensionArray;
- // Load extensions
- NSArray* containedExtensions = profileDict[@"extensions"];
- if(![containedExtensions isKindOfClass:NSArray.class]) return extensionArray;
- if(!containedExtensions || containedExtensions.count == 0) return extensionArray;
- __block int extensionArrayI = 0;
- [containedExtensions enumerateObjectsUsingBlock:^(NSDictionary* extensionDict, NSUInteger idx, BOOL *stop)
- {
- if(![extensionDict isKindOfClass:NSDictionary.class]) return;
- NSString* extensionToken = issueExtension(extensionDict, auditToken);
- if(!extensionToken) return;
- xpc_array_set_string(extensionArray, extensionArrayI++, extensionToken.UTF8String);
- }];
- return extensionArray;
- }
Advertisement
Add Comment
Please, Sign In to add comment