]>
Commit | Line | Data |
---|---|---|
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 | ||
23 | const 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. */ | |
47 | static 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 | ||
91 | int secd_31_keychain_bad(int argc, char *const *argv) | |
92 | { | |
93 | plan_tests(7 + kSecdTestSetupTestCount); | |
94 | ||
95 | tests(); | |
96 | ||
97 | return 0; | |
98 | } |