#include <Security/SecKeychain.h> #include <Security/SecKeychainPriv.h> #include <fcntl.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include "testmore.h" #include "testenv.h" #include "testleaks.h" static void tests(void) { char *home = getenv("HOME"); char kcname1[256], kcname2[256]; if (!home || strlen(home) > 200) plan_skip_all("home too big"); sprintf(kcname1, "%s/kc1", home); SecKeychainRef kc1 = NULL, kc2 = NULL; Boolean kc1valid, kc2valid; ok_status(SecKeychainCreate(kcname1, 4, "test", FALSE, NULL, &kc1), "SecKeychainCreate kc1"); ok_status(SecKeychainIsValid(kc1, &kc1valid), "SecKeychainIsValid kc1"); is(kc1valid, TRUE, "is kc1 valid"); CFRelease(kc1); int fd; sprintf(kcname2, "%s/kc2", home); ok_unix(fd = open(kcname2, O_CREAT|O_WRONLY|O_TRUNC, 0600), "create invalid kc2 file"); ok_unix(close(fd), "close the kc2 file"); ok_status(SecKeychainOpen(kcname2, &kc2), "SecKeychainOpen kc2"); ok_status(SecKeychainIsValid(kc2, &kc2valid), "SecKeychainIsValid kc2"); TODO: { todo("<rdar://problem/3795566> SecKeychainIsValid always returns " "TRUE"); is(kc2valid, FALSE, "is kc2 not valid"); } CFRelease(kc2); tests_end(1); } int main(int argc, char *const *argv) { plan_tests(9); if (!tests_begin(argc, argv)) BAIL_OUT("tests_begin failed"); tests(); ok_leaks("leaks"); return 0; }