Цель C - получить права root в приложении какао для изменения системного файла - PullRequest
0 голосов
/ 17 мая 2018

Я собираюсь создать / обновить файл в системном каталоге в High Sierra версии 10.13.4.

Для этого необходимо получить разрешение root для Mac OS.Я попытался запустить привилегированный процесс с этим кодом.

OSStatus LaunchPrivilegedProcess(NSString *path) {

    OSStatus status;
    AuthorizationRef authorizationRef;

    status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
                                 kAuthorizationFlagDefaults, &authorizationRef);

    if (status != errAuthorizationSuccess)
    {
        NSLog(@"Error Creating Initial Authorization: %d", status);
        return status;
    }


    AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
    AuthorizationRights rights = {1, &right};
    AuthorizationFlags flags = kAuthorizationFlagDefaults |
    kAuthorizationFlagInteractionAllowed |
    kAuthorizationFlagPreAuthorize |
    kAuthorizationFlagExtendRights;

    status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
    if (status != errAuthorizationSuccess)
    {
        NSLog(@"Copy Rights Unsuccessful: %d", status);
        return status;
    }


    char *tool = path.UTF8String;
    char *args[] = {NULL};
    FILE *pipe = NULL;

    status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
                                                kAuthorizationFlagDefaults, args, &pipe);
    if (status != errAuthorizationSuccess)
    {
        NSLog(@"Error: %d", status);
        return status;
    }

    status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);

    return status;
}

Но он не работает в AuthorizationExecuteWithPrivileges с кодом ошибки: -60031 (errAuthorizationToolExecuteFailure).

Как я могу решить эту проблему?

Есть ли другой способ получить разрешение root для обновления системных файлов?

...