]> git.saurik.com Git - apple/security.git/blame - sec/securityd/Regressions/secd-31-keychain-bad.c
Security-55471.tar.gz
[apple/security.git] / sec / securityd / Regressions / secd-31-keychain-bad.c
CommitLineData
427c49bc
A
1/*
2 * secd-31-keychain-bad.c
3 * Security
4 *
5 * Created by Michael Brouwer on 5/23/08.
6 * Copyright (c) 2008,2010,2013 Apple Inc.. All Rights Reserved.
7 *
8 */
9
10#include <CoreFoundation/CoreFoundation.h>
11#include <Security/SecBase.h>
12#include <Security/SecItem.h>
13#include <utilities/SecFileLocations.h>
14
15#include <stdlib.h>
16#include <fcntl.h>
17#include <unistd.h>
18#include <sys/stat.h>
19#include <sqlite3.h>
20
21#include "secd_regressions.h"
22
23const uint8_t keychain_data[] = {
24 0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30, 0xd2, 0x01, 0x02, 0x03,
25 0x04, 0x5f, 0x10, 0x1b, 0x4e, 0x53, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77,
26 0x20, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65,
27 0x73, 0x73, 0x50, 0x61, 0x6e, 0x65, 0x6c, 0x5f, 0x10, 0x1d, 0x4e, 0x53,
28 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x20, 0x46, 0x72, 0x61, 0x6d, 0x65,
29 0x20, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20,
30 0x4d, 0x61, 0x63, 0x5f, 0x10, 0x1c, 0x32, 0x38, 0x20, 0x33, 0x37, 0x33,
31 0x20, 0x33, 0x34, 0x36, 0x20, 0x32, 0x39, 0x30, 0x20, 0x30, 0x20, 0x30,
32 0x20, 0x31, 0x34, 0x34, 0x30, 0x20, 0x38, 0x37, 0x38, 0x20, 0x5f, 0x10,
33 0x1d, 0x35, 0x36, 0x38, 0x20, 0x33, 0x39, 0x35, 0x20, 0x33, 0x30, 0x37,
34 0x20, 0x33, 0x37, 0x39, 0x20, 0x30, 0x20, 0x30, 0x20, 0x31, 0x34, 0x34,
35 0x30, 0x20, 0x38, 0x37, 0x38, 0x20, 0x08, 0x0d, 0x2b, 0x4b, 0x6a, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
37 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a
39};
40
41#include "SecdTestKeychainUtilities.h"
42
43#include <securityd/SecItemServer.h>
44#include <utilities/SecCFWrappers.h>
45
46/* Test basic add delete update copy matching stuff. */
47static void tests(void)
48{
49 /* custom keychain dir */
50 secd_test_setup_temp_keychain("secd_31_keychain_bad", ^{
51 CFStringRef keychain_path_cf = __SecKeychainCopyPath();
52
53 CFStringPerformWithCString(keychain_path_cf, ^(const char *keychain_path) {
54 int fd;
55 ok_unix(fd = open(keychain_path, O_RDWR | O_CREAT | O_TRUNC, 0644),
56 "create keychain file");
57 is(write(fd, keychain_data, sizeof(keychain_data)),
58 (ssize_t)sizeof(keychain_data), "write garbage to keychain file");
59 ok_unix(close(fd), "close keychain file");
60
61 });
62
63 CFReleaseSafe(keychain_path_cf);
64 });
65
66 int v_eighty = 80;
67 CFNumberRef eighty = CFNumberCreate(NULL, kCFNumberSInt32Type, &v_eighty);
68 const char *v_data = "test";
69 CFDataRef pwdata = CFDataCreate(NULL, (UInt8 *)v_data, strlen(v_data));
70 CFMutableDictionaryRef query = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
71 CFDictionaryAddValue(query, kSecClass, kSecClassInternetPassword);
72 CFDictionaryAddValue(query, kSecAttrServer, CFSTR("members.spamcop.net"));
73 CFDictionaryAddValue(query, kSecAttrAccount, CFSTR("smith"));
74 CFDictionaryAddValue(query, kSecAttrPort, eighty);
75 CFDictionaryAddValue(query, kSecAttrProtocol, kSecAttrProtocolHTTP);
76 CFDictionaryAddValue(query, kSecAttrAuthenticationType, kSecAttrAuthenticationTypeDefault);
77 CFDictionaryAddValue(query, kSecValueData, pwdata);
78 ok_status(SecItemAdd(query, NULL), "add internet password");
79 is_status(SecItemAdd(query, NULL), errSecDuplicateItem,
80 "add internet password again");
81
82 ok_status(SecItemCopyMatching(query, NULL), "Found the item we added");
83
84 ok_status(SecItemDelete(query),"Deleted the item we added");
85
86 CFRelease(query);
87 CFRelease(eighty);
88 CFRelease(pwdata);
89}
90
91int secd_31_keychain_bad(int argc, char *const *argv)
92{
93 plan_tests(7 + kSecdTestSetupTestCount);
94
95 tests();
96
97 return 0;
98}