]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_mds/lib/MDSDictionary.h
Security-57740.1.18.tar.gz
[apple/security.git] / OSX / libsecurity_mds / lib / MDSDictionary.h
1 /*
2 * Copyright (c) 2000-2001,2011,2014 Apple Inc. All Rights Reserved.
3 *
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
8 * using this file.
9 *
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
16 */
17
18
19 /*
20 File: MDSDictionary.h
21
22 Contains: Internal representation of one MDS info file.
23
24 Copyright (c) 2001,2011,2014 Apple Inc. All Rights Reserved.
25 */
26
27 #ifndef _MDS_DICTIONARY_H_
28 #define _MDS_DICTIONARY_H_ 1
29
30 #include <Security/cssmtype.h>
31 #include "MDSSession.h"
32 #include "MDSAttrStrings.h"
33 #include <CoreFoundation/CoreFoundation.h>
34
35 namespace Security
36 {
37
38 class MDSDictionary
39 {
40 public:
41 /* heavyweight constructor from file */
42 MDSDictionary(
43 CFURLRef fileUrl,
44 CFStringRef subdir,
45 const char *fullPath);
46
47 /* lightweight constructor from existing CFDictionary */
48 MDSDictionary(
49 CFDictionaryRef theDict);
50
51 ~MDSDictionary();
52
53 /*
54 * Lookup by either C string or CFStringRef. Optionally checks for
55 * CFTypeID of resulting value. Both return NULL on error (either key not
56 * found or wrong CFTypeID).
57 */
58 const void *lookup(
59 const char *key,
60 bool checkType = false, // since we really don't know if 0 is a valid type
61 CFTypeID type = 0);
62 const void *lookup(
63 CFStringRef key,
64 bool checkType = false,
65 CFTypeID type = 0);
66
67 /*
68 * Common means to perform a lookup in a dictionary given a C-string key and
69 * placing the value - if present - in a CSSM_DB_ATTRIBUTE_DATA. Any errors
70 * are only logged via MPDebug. Returns true if the value was found and
71 * successfully placed in supplied CSSM_DB_ATTRIBUTE_DATA.
72 *
73 * For now we assume that the key in the dictionary is the same as the key
74 * in the DB to which we're writing.
75 *
76 * A MDSNameValuePair array may be specified to facilitate conversion of
77 * values which appears in the dictionary as strings but which are stored
78 * in the DB as integers.
79 *
80 * We're also assuming that all DB keys are of format
81 * CSSM_DB_ATTRIBUTE_NAME_AS_STRING.
82 */
83 bool lookupToDbAttr(
84 const char *key,
85 CSSM_DB_ATTRIBUTE_DATA &attr,
86 CSSM_DB_ATTRIBUTE_FORMAT attrFormat,
87 const MDSNameValuePair *nameValues = NULL);
88
89 /*
90 * Given a RelationInfo and an array of CSSM_DB_ATTRIBUTE_DATAs, fill in
91 * the CSSM_DB_ATTRIBUTE_DATA array with as many fields as we can find in
92 * the dictionary. All fields are treated as optional.
93 */
94 void lookupAttributes(
95 const RelationInfo *relInfo,
96 CSSM_DB_ATTRIBUTE_DATA_PTR outAttrs, // filled in on return
97 uint32 &numAttrs); // RETURNED
98
99 CFDictionaryRef dict() { return mDict; }
100 const char *urlPath() { return mUrlPath; }
101 const char *fileDesc() { return mFileDesc; }
102
103 /*
104 * Lookup with file-based indirection. Allows multiple mdsinfo file to share
105 * commmon info from a separate plist file.
106 */
107 const CFPropertyListRef lookupWithIndirect(
108 const char *key,
109 CFBundleRef bundle,
110 CFTypeID desiredType);
111 void setDefaults(const MDS_InstallDefaults *defaults);
112
113 private:
114 CFDictionaryRef mDict;
115 bool mWeOwnDict;
116 char *mUrlPath;
117 char *mFileDesc;
118 CFStringRef mSubdir;
119
120 // default GUID/SSID to apply to all records as needed
121 const MDS_InstallDefaults *mDefaults;
122 };
123
124 } // end namespace Security
125
126 #endif /* _MDS_DICTIONARY_H_ */