keychain_set_settings.c [plain text]
#include "keychain_set_settings.h"
#include "keychain_utilities.h"
#include "readline.h"
#include "security.h"
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <Security/SecKeychain.h>
static int
do_keychain_set_settings(const char *keychainName, SecKeychainSettings newKeychainSettings)
{
SecKeychainRef keychain = NULL;
OSStatus result;
if (keychainName)
{
keychain = keychain_open(keychainName);
if (!keychain)
{
result = 1;
goto loser;
}
}
result = SecKeychainSetSettings(keychain, &newKeychainSettings);
if (result)
{
sec_error("SecKeychainSetSettings %s: %s", keychainName ? keychainName : "<NULL>", sec_errstr(result));
}
loser:
if (keychain)
CFRelease(keychain);
return result;
}
int
keychain_set_settings(int argc, char * const *argv)
{
char *keychainName = NULL;
int ch, result = 0;
SecKeychainSettings newKeychainSettings =
{ SEC_KEYCHAIN_SETTINGS_VERS1, FALSE, FALSE, INT_MAX };
while ((ch = getopt(argc, argv, "hlt:u")) != -1)
{
switch (ch)
{
case 'l':
newKeychainSettings.lockOnSleep = TRUE;
break;
case 't':
newKeychainSettings.lockInterval = atoi(optarg);
break;
case 'u':
newKeychainSettings.useLockInterval = TRUE;
break;
case '?':
default:
return 2;
}
}
argc -= optind;
argv += optind;
if (argc == 1)
{
keychainName = argv[0];
if (*keychainName == '\0')
{
result = 2;
goto loser;
}
}
else if (argc != 0)
return 2;
result = do_keychain_set_settings(keychainName, newKeychainSettings);
loser:
return result;
}