1/*
2 * Copyright (c) 2009 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#ifndef _OD_BRIDGE_H_
25#define _OD_BRIDGE_H_  1
26
27#include <CoreFoundation/CoreFoundation.h>
28#include <Security/Security.h>
29#include <OpenDirectory/OpenDirectory.h>
30#include <dispatch/dispatch.h>
31#include <Security/cssmapi.h>
32#include <Security/cssmapple.h>
33#include <Security/cssmerr.h>
34
35// Query results are stored in this.
36typedef struct ODdl_results {
37	CSSM_DB_RECORDTYPE	recordid;
38	ODQueryRef			query;
39	CFStringRef			searchString;
40	CFIndex				currentRecord;
41	CFMutableArrayRef	certificates;
42	dispatch_semaphore_t results_done;
43	dispatch_queue_t	result_modifier_queue;
44} *ODdl_results_handle;
45
46
47// Oh how the mighty have fallen - had to get out of Dodge with one of these ...  once.
48class DirectoryServiceException
49{
50protected:
51	long mResult;
52
53public:
54	DirectoryServiceException (CFErrorRef result) : mResult (CFErrorGetCode(result)) {}
55
56	long GetResult () {return mResult;}
57};
58
59
60class DirectoryService
61{
62protected:
63	char						*db_name;
64	ODNodeRef					node;
65	dispatch_queue_t			query_dispatch_queue;	// Queue to use for queries
66	CFMutableArrayRef			all_open_queries;
67
68public:
69	DirectoryService ();
70	~DirectoryService ();
71	long long int getNextRecordID();
72	ODdl_results_handle makeNewDSQuery();
73	ODdl_results_handle translate_cssm_query_to_OD_query(const CSSM_QUERY *Query, CSSM_RETURN *error);
74	CFDataRef getNextCertFromResults(ODdl_results_handle results);
75};
76
77
78#endif /* !_OD_BRIDGE_H_ */
79