Как вы пишете в брелок системы OSX?

Как часть процесса создания VPN-соединения программно в OSX с использованием Cocoa, мне нужно сохранить пароль PPP в системной цепочке для ключей. Когда я пытаюсь сделать это с помощью API цепочки для ключей, я получаю следующую ошибку в результате вызова SecKeychainAddGenericPassword:

«Не удалось записать в файл. Возможно, он был открыт с недостаточными правами доступа».

Вот код, который я использую:

- (void)storePasswordInKeychain
{
    SecKeychainRef keychain = nil;
    err = SecKeychainCopyDomainDefault(kSecPreferencesDomainSystem, &keychain);
    if (err != errSecSuccess) {
        NSLog(@"Error getting system keychain: %@", SecCopyErrorMessageString(err, NULL));
    } else {
        NSLog(@"Succeeded opening keychain: %@", SecCopyErrorMessageString(err, NULL));
        SecKeychainItemRef item = nil;        
        err = SecKeychainUnlock(keychain, 0, NULL, FALSE);
        NSLog(@"Keychain unlocked: %@", SecCopyErrorMessageString(err, NULL));

        err = SecKeychainAddGenericPassword (keychain, 
                                         3, "VPN", 
                                         8, "username",
                                         8, "password",
                                         &item);
        NSLog(@"Result of storing password: %@", SecCopyErrorMessageString(err, NULL));
    }
}

ОбсуждениеКак написать в System.keychain? создается впечатление, что мне нужно сделать вызов командной строки для / usr / bin / security изнутри моей программы, но смысл Keychain API заключается в том, чтобы избежать такого рода хакерских атак.

Кто-нибудь может указать мне правильное направление для хранения нового пароля в системной цепочке для ключей? Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос