Как вы пишете в брелок системы 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 заключается в том, чтобы избежать такого рода хакерских атак.
Кто-нибудь может указать мне правильное направление для хранения нового пароля в системной цепочке для ключей? Благодарю.