]>
Commit | Line | Data |
---|---|---|
d8f41ccd A |
1 | /* |
2 | * Copyright (c) 2013-2014 Apple Inc. All Rights Reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * This file contains Original Code and/or Modifications of Original Code | |
7 | * as defined in and that are subject to the Apple Public Source License | |
8 | * Version 2.0 (the 'License'). You may not use this file except in | |
9 | * compliance with the License. Please obtain a copy of the License at | |
10 | * http://www.opensource.apple.com/apsl/ and read it before using this | |
11 | * file. | |
12 | * | |
13 | * The Original Code and all software distributed under the License are | |
14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
18 | * Please see the License for the specific language governing rights and | |
19 | * limitations under the License. | |
20 | * | |
21 | * @APPLE_LICENSE_HEADER_END@ | |
22 | */ | |
23 | ||
24 | /*! | |
25 | @header SecDbQuery.h - The thing that does the stuff with the gibli. | |
26 | */ | |
27 | ||
28 | #ifndef _SECURITYD_SECDBQUERY_H_ | |
29 | #define _SECURITYD_SECDBQUERY_H_ | |
30 | ||
31 | #include <securityd/SecKeybagSupport.h> | |
32 | #include <securityd/SecDbItem.h> | |
33 | ||
34 | __BEGIN_DECLS | |
35 | ||
36 | typedef struct Pair *SecDbPairRef; | |
37 | typedef struct Query *SecDbQueryRef; | |
38 | ||
39 | /* Return types. */ | |
40 | typedef uint32_t ReturnTypeMask; | |
41 | enum | |
42 | { | |
43 | kSecReturnDataMask = 1 << 0, | |
44 | kSecReturnAttributesMask = 1 << 1, | |
45 | kSecReturnRefMask = 1 << 2, | |
46 | kSecReturnPersistentRefMask = 1 << 3, | |
47 | }; | |
48 | ||
49 | /* Constant indicating there is no limit to the number of results to return. */ | |
50 | enum | |
51 | { | |
52 | kSecMatchUnlimited = kCFNotFound | |
53 | }; | |
54 | ||
55 | typedef struct Pair | |
56 | { | |
57 | const void *key; | |
58 | const void *value; | |
59 | } Pair; | |
60 | ||
61 | /* Nothing in this struct is retained since all the | |
62 | values below are extracted from the dictionary passed in by the | |
63 | caller. */ | |
64 | typedef struct Query | |
65 | { | |
66 | /* Class of this query. */ | |
67 | const SecDbClass *q_class; | |
68 | ||
69 | /* Dictionary with all attributes and values in clear (to be encrypted). */ | |
70 | CFMutableDictionaryRef q_item; | |
71 | ||
72 | /* q_pairs is an array of Pair structs. Elements with indices | |
73 | [0, q_attr_end) contain attribute key value pairs. Elements with | |
74 | indices [q_match_begin, q_match_end) contain match key value pairs. | |
75 | Thus q_attr_end is the number of attrs in q_pairs and | |
76 | q_match_begin - q_match_end is the number of matches in q_pairs. */ | |
77 | CFIndex q_match_begin; | |
78 | CFIndex q_match_end; | |
79 | CFIndex q_attr_end; | |
80 | ||
81 | CFErrorRef q_error; | |
82 | ReturnTypeMask q_return_type; | |
83 | ||
84 | CFDataRef q_data; | |
85 | CFTypeRef q_ref; | |
86 | sqlite_int64 q_row_id; | |
87 | ||
88 | CFArrayRef q_use_item_list; | |
89 | CFBooleanRef q_use_tomb; | |
d8f41ccd A |
90 | |
91 | /* Value of kSecMatchLimit key if present. */ | |
92 | CFIndex q_limit; | |
93 | ||
94 | /* True if query contained a kSecAttrSynchronizable attribute, | |
95 | * regardless of its actual value. If this is false, then we | |
96 | * will add an explicit sync=0 to the query. */ | |
97 | bool q_sync; | |
98 | ||
99 | // Set to true if we modified any item as part of executing this query | |
100 | bool q_changed; | |
101 | ||
102 | // Set to true if we modified any synchronizable item as part of executing this query | |
103 | bool q_sync_changed; | |
104 | ||
d8f41ccd A |
105 | /* Keybag handle to use for this item. */ |
106 | keybag_handle_t q_keybag; | |
e3d460c9 A |
107 | |
108 | /* musr view to use when modifying the database */ | |
109 | CFDataRef q_musrView; | |
110 | ||
5c19dc3a | 111 | /* ACL and credHandle passed to the query. q_cred_handle contain LA context object. */ |
d8f41ccd | 112 | SecAccessControlRef q_access_control; |
b04fe171 | 113 | CFDataRef q_use_cred_handle; |
d8f41ccd | 114 | |
5c19dc3a A |
115 | // Flag indicating that ui-protected items should be simply skipped |
116 | // instead of reporting them to the client as an error. | |
117 | bool q_skip_acl_items; | |
d8f41ccd | 118 | |
d8f41ccd A |
119 | // SHA1 digest of DER encoded primary key |
120 | CFDataRef q_primary_key_digest; | |
121 | ||
122 | CFArrayRef q_match_issuer; | |
123 | ||
124 | /* Caller acces groups for AKS */ | |
125 | CFArrayRef q_caller_access_groups; | |
e3d460c9 A |
126 | bool q_system_keychain; |
127 | int32_t q_sync_bubble; | |
fa7225c8 | 128 | bool q_spindump_on_failure; |
e3d460c9 | 129 | |
fa7225c8 A |
130 | //policy for filtering certs and identities |
131 | SecPolicyRef q_match_policy; | |
132 | //date for filtering certs and identities | |
133 | CFDateRef q_match_valid_on_date; | |
134 | //trusted only certs and identities | |
135 | CFBooleanRef q_match_trusted_only; | |
d8f41ccd A |
136 | |
137 | Pair q_pairs[]; | |
138 | } Query; | |
139 | ||
e3d460c9 | 140 | Query *query_create(const SecDbClass *qclass, CFDataRef musr, CFDictionaryRef query, CFErrorRef *error); |
d8f41ccd A |
141 | bool query_destroy(Query *q, CFErrorRef *error); |
142 | bool query_error(Query *q, CFErrorRef *error); | |
e3d460c9 | 143 | Query *query_create_with_limit(CFDictionaryRef query, CFDataRef musr, CFIndex limit, CFErrorRef *error); |
d8f41ccd | 144 | void query_add_attribute(const void *key, const void *value, Query *q); |
5c19dc3a A |
145 | void query_add_or_attribute(const void *key, const void *value, Query *q); |
146 | void query_add_not_attribute(const void *key, const void *value, Query *q); | |
147 | void query_add_attribute_with_desc(const SecDbAttr *desc, const void *value, Query *q); | |
d8f41ccd A |
148 | void query_ensure_access_control(Query *q, CFStringRef agrp); |
149 | void query_pre_add(Query *q, bool force_date); | |
150 | bool query_notify_and_destroy(Query *q, bool ok, CFErrorRef *error); | |
151 | CFIndex query_match_count(const Query *q); | |
152 | CFIndex query_attr_count(const Query *q); | |
153 | Pair query_attr_at(const Query *q, CFIndex ix); | |
154 | bool query_update_parse(Query *q, CFDictionaryRef update, CFErrorRef *error); | |
d8f41ccd A |
155 | const SecDbClass *kc_class_with_name(CFStringRef name); |
156 | void query_set_caller_access_groups(Query *q, CFArrayRef caller_access_groups); | |
fa7225c8 A |
157 | void query_set_policy(Query *q, SecPolicyRef policy); |
158 | void query_set_valid_on_date(Query *q, CFDateRef policy); | |
159 | void query_set_trusted_only(Query *q, CFBooleanRef trusted_only); | |
d8f41ccd | 160 | |
e3d460c9 A |
161 | CFDataRef |
162 | SecMUSRCopySystemKeychainUUID(void); | |
163 | ||
164 | CFDataRef | |
165 | SecMUSRGetSystemKeychainUUID(void); | |
166 | ||
167 | CFDataRef | |
168 | SecMUSRGetSingleUserKeychainUUID(void); | |
169 | ||
170 | bool | |
171 | SecMUSRIsSingleUserView(CFDataRef uuid); | |
172 | ||
173 | CFDataRef | |
174 | SecMUSRGetAllViews(void); | |
175 | ||
176 | bool | |
177 | SecMUSRIsViewAllViews(CFDataRef musr); | |
178 | ||
179 | #if TARGET_OS_IPHONE | |
180 | CFDataRef | |
181 | SecMUSRCreateActiveUserUUID(uid_t uid); | |
182 | ||
183 | CFDataRef | |
184 | SecMUSRCreateSyncBubbleUserUUID(uid_t uid); | |
185 | ||
186 | CFDataRef | |
187 | SecMUSRCreateBothUserAndSystemUUID(uid_t uid); | |
188 | ||
189 | bool | |
190 | SecMUSRGetBothUserAndSystemUUID(CFDataRef musr, uid_t *uid); | |
191 | ||
192 | #endif | |
193 | ||
d8f41ccd A |
194 | |
195 | __END_DECLS | |
196 | ||
197 | #endif /* _SECURITYD_SECDBQUERY_H_ */ |