keychain_show_info.c [plain text]
#include "keychain_show_info.h"
#include "keychain_utilities.h"
#include "readline.h"
#include "security_tool.h"
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <Security/SecKeychain.h>
static int
do_keychain_show_info(const char *keychainName)
{
SecKeychainRef keychain = NULL;
SecKeychainSettings keychainSettings = { SEC_KEYCHAIN_SETTINGS_VERS1 };
OSStatus result;
if (keychainName)
{
keychain = keychain_open(keychainName);
if (!keychain)
{
result = 1;
goto loser;
}
}
result = SecKeychainCopySettings(keychain, &keychainSettings);
if (result)
{
sec_error("SecKeychainCopySettings %s: %s", keychainName ? keychainName : "<NULL>", sec_errstr(result));
goto loser;
}
fprintf(stderr,"Keychain \"%s\"%s%s",
keychainName ? keychainName : "<NULL>",
keychainSettings.lockOnSleep ? " lock-on-sleep" : "",
keychainSettings.useLockInterval ? " use-lock-interval" : "");
if (keychainSettings.lockInterval == INT_MAX)
fprintf(stderr," no-timeout\n");
else
fprintf(stderr," timeout=%ds\n", (int)keychainSettings.lockInterval);
loser:
if (keychain)
CFRelease(keychain);
return result;
}
int
keychain_show_info(int argc, char * const *argv)
{
char *keychainName = NULL;
int result = 0;
if (argc == 2)
{
keychainName = argv[1];
if (*keychainName == '\0')
{
result = 2;
goto loser;
}
}
else if (argc != 1)
return 2;
result = do_keychain_show_info(keychainName);
loser:
return result;
}