Stub CFOpenDirectory

The public headers are imported from the macOS SDK and from the last released OpenDirectory (version 146); it's ok to import them from the SDK because they're still APSL licensed
This commit is contained in:
Ariel Abreu 2020-08-20 16:30:13 -04:00
parent 00fc01add3
commit 7819ca3ece
No known key found for this signature in database
GPG Key ID: ECF8C2B9E8AD3E6B
20 changed files with 7333 additions and 0 deletions

View File

@ -0,0 +1 @@
../../../../../../../../../../../../../../../../src/frameworks/CFOpenDirectory/include/CFOpenDirectory

View File

@ -0,0 +1 @@
../Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenDirectory.framework/Frameworks/CFOpenDirectory.framework/Headers

View File

@ -0,0 +1,18 @@
project(CFOpenDirectory)
set(DYLIB_COMPAT_VERSION "1.0.0")
set(DYLIB_CURRENT_VERSION "1.0.0")
add_framework(CFOpenDirectory
FAT
CURRENT_VERSION
VERSION "A"
SOURCES
src/CFOpenDirectory.c
src/constants.c
DEPENDENCIES
system
CoreFoundation
)

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODCONTEXT__)
#define __OPENDIRECTORY_CFODCONTEXT__ 1
#include <CFOpenDirectory/CFOpenDirectory.h>
__BEGIN_DECLS
/*!
@function ODContextGetTypeID
@abstract Standard GetTypeID function support for CF-based objects
@discussion Returns the typeID for the ODContext object
@result a valid CFTypeID for the ODContext object
*/
CF_EXPORT
CFTypeID ODContextGetTypeID(void);
__END_DECLS
#endif /* ! __OPENDIRECTORY_CFODCONTEXT__ */

View File

@ -0,0 +1,442 @@
/*
* Copyright (c) 2009-2012 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODNODE__)
#define __OPENDIRECTORY_CFODNODE__ 1
#include <CFOpenDirectory/CFOpenDirectory.h>
__BEGIN_DECLS
/*!
@function ODNodeGetTypeID
@abstract Standard GetTypeID function support for CF-based objects
@discussion Returns the typeID for the ODNode objects
@result a valid CFTypeID for the ODNode object
*/
CF_EXPORT
CFTypeID ODNodeGetTypeID(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCreateWithNodeType
@abstract Creates an ODNodeRef based on a specific node type
@discussion Creates an ODNodeRef based on a specific node type
@param allocator a memory allocator to use for this object
@param session an ODSessionRef, either kODSessionDefault or a valid ODSessionRef can be passed
@param nodeType an ODNodeType of the node to open
@param error an optional CFErrorRef reference for error details
@result a valid ODNodeRef if successful, otherwise returns NULL. outError can be checked for details upon
failure.
*/
CF_EXPORT
ODNodeRef ODNodeCreateWithNodeType(CFAllocatorRef allocator, ODSessionRef session, ODNodeType nodeType, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCreateWithName
@abstract Creates an ODNodeRef based on a partciular node name
@discussion Creates an ODNodeRef based on a particular node name
@param allocator a memory allocator to use for this object
@param session an ODSessionRef, either kODSessionDefault or a valid ODSessionRef can be passed
@param nodeName a CFStringRef of the name of the node to open
@param error an optional CFErrorRef reference for error details
@result a valid ODNodeRef if successful, otherwise returns NULL. outError can be checked for specific
error
*/
CF_EXPORT
ODNodeRef ODNodeCreateWithName(CFAllocatorRef allocator, ODSessionRef session, CFStringRef nodeName, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCreateCopy
@abstract Creates a copy, including any remote credentials used for Proxy and/or Node authentication
@discussion Creates a copy of the object including all credentials used for the original. Can be used for future
references to the same node setup.
@param allocator a memory allocator to use for this object
@param node an ODNodeRef to make a copy of
@param error an optional CFErrorRef reference for error details
@result a valid ODNodeRef if successful, otherwise returns NULL, with outError set to a CFErrorRef
*/
CF_EXPORT
ODNodeRef ODNodeCreateCopy(CFAllocatorRef allocator, ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopySubnodeNames
@abstract Returns a CFArray of subnode names for this node, which may contain sub-nodes or search policy nodes
@discussion Returns a CFArray of subnode names for this node, which may contain sub-nodes or search policy nodes.
Commonly used with Search policy nodes.
@param node an ODNodeRef to use
@param error an optional CFErrorRef reference for error details
@result a CFArrayRef with the list of nodes, otherwise NULL, with outError set to a CFErrorRef
*/
CF_EXPORT
CFArrayRef ODNodeCopySubnodeNames(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopyUnreachableSubnodeNames
@abstract Will return names of subnodes that are not currently reachable.
@discussion Will return names of subnodes that are not currently reachable. Commonly used with Search policy nodes
to determine if any nodes are currently unreachable, but may also return other subnodes if the
Open Directory plugin supports.
@param node an ODNodeRef to use
@param error an optional CFErrorRef reference for error details
@result a CFArrayRef with the list of unreachable nodes or NULL if no bad nodes
*/
CF_EXPORT
CFArrayRef ODNodeCopyUnreachableSubnodeNames(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeGetName
@abstract Returns the node name of the node that was opened
@discussion Returns the node name of the node that was opened
@param node an ODNodeRef to use
@result a CFStringRef of the node name that is current or NULL if no open node
*/
CF_EXPORT
CFStringRef ODNodeGetName(ODNodeRef node) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopyDetails
@abstract Returns a dictionary with details about the node in dictionary form
@discussion Returns a dictionary with details about the node in dictionary form.
@param node an ODNodeRef to use
@param keys a CFArrayRef listing the keys the user wants returned, such as
kODAttributeTypeStreet
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing the requested key and values in form of a CFArray
*/
CF_EXPORT
CFDictionaryRef ODNodeCopyDetails(ODNodeRef node, CFArrayRef keys, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopySupportedRecordTypes
@abstract Returns a CFArrayRef of the record types supported by this node.
@discussion Returns a CFArrayRef of the record types supported by this node. If node does not support the check
then all possible types will be returned.
@param node an ODNodeRef to use
@param error an optional CFErrorRef reference for error details
@result a valid CFArrayRef of CFStrings listing the supported Record types on this node.
*/
CF_EXPORT
CFArrayRef ODNodeCopySupportedRecordTypes(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopySupportedAttributes
@abstract Will return a list of attribute types supported for that attribute if possible
@discussion Will return a list of attribute types supported for that attribute if possible. If no specific
types are available, then all possible values will be returned instead.
@param node an ODNodeRef to use
@param recordType a ODRecordTypeRef with the type of record to check attribute types. If NULL is passed it will
return all possible attributes that are available.
@param error an optional CFErrorRef reference for error details
@result a valid CFArrayRef of CFStrings listing the attributes supported for the requested record type
*/
CF_EXPORT
CFArrayRef ODNodeCopySupportedAttributes(ODNodeRef node, ODRecordType recordType, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeSetCredentials
@abstract Sets the credentials for interaction with the ODNode
@discussion Sets the credentials for interaction with the ODNode. Record references, etc. will use these credentials
to query or change data. Setting the credentials on a node referenced by other OD object types will
change the credentials for all for all references.
@param node an ODNodeRef to use
@param recordType a ODRecordTypeRef of the Record Type to use, if NULL is passed, defaults to a
kODRecordTypeUsers
@param recordName a CFString of the username to be used for this node authentication
@param password a CFString of the password to be used for this node authentication
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details. If the authentication failed,
the previous credentials are used.
*/
CF_EXPORT
bool ODNodeSetCredentials(ODNodeRef node, ODRecordType recordType, CFStringRef recordName, CFStringRef password, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeSetCredentialsExtended
@abstract Allows use of other Open Directory types of authentications to set the credentials for an ODNode
@discussion Allows the caller to use other types of authentications that are available in Open Directory, that may
require response-request loops, etc. Not all OD plugins will support this call, look for
kODErrorCredentialsMethodNotSupported in outError.
@param node an ODNodeRef to use
@param recordType a ODRecordType of the type of record to do the authentication with
@param authType a ODAuthenticationType of the type of authentication to be used (e.g., kDSStdAuthNTLMv2)
@param authItems a CFArray of CFData or CFString items that will be sent in order to the auth process
@param outAuthItems will be assigned to a pointer of a CFArray of CFData items if there are returned values
@param outContext will return a pointer to a context if caller supplies a container, and the call requires a
context. If a non-NULL value is returned, then more calls must be made with the Context to continue
the authorization.
@param error an optional CFErrorRef reference for error details
@result a bool will be returned with the result of the operation and outAuthItems set with response items
and outContext set for any needed continuation.
*/
CF_EXPORT
bool ODNodeSetCredentialsExtended(ODNodeRef node, ODRecordType recordType, ODAuthenticationType authType, CFArrayRef authItems, CFArrayRef *outAuthItems, ODContextRef *outContext, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeSetCredentialsUsingKerberosCache
@abstract Unsupported function.
@discussion Unsupported function.
*/
CF_EXPORT
bool ODNodeSetCredentialsUsingKerberosCache(ODNodeRef node, CFStringRef cacheName, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_6, __MAC_10_7, __IPHONE_NA, __IPHONE_NA);
/*!
@function ODNodeCreateRecord
@abstract Takes a record and all of the provided attributes and creates the record in the node
@discussion Takes all the provided attributes and type to create an entire record. The function will assign a
UUID to the record automatically. This UUID can be overwritten by the client by passing with the
other attributes.
@param node an ODNodeRef to use
@param recordType a ODRecordTypeRef of the type of record (e.g., kODRecordTypeUsers, etc.)
@param recordName a CFStringRef of the name of record
@param attributeDict a CFDictionaryRef of key-value pairs for attribute values. The key is a CFStringRef of the
attribute name or ODRecordType constant such as kODAttributeTypeRecordName. The value must be a CFArrayRef of
CFDataRef or CFStringRef. If additional kODAttributeTypeRecordName are to be set, they can be passed in the
inAttributes list. This parameter is optional and can be NULL. If any of the attributes passed
fail to be set, the record will be deleted and outError will be set with the appropriate error.
If a password is not supplied with a user account, then a random password will be set automatically. If
an empty password is expected, then the kODAttributeTypePassword should be set to an empty CFArray.
@param error an optional CFErrorRef reference for error details
@result returns a valid ODRecordRef. If the add fails, outError can be checked for details.
*/
CF_EXPORT
ODRecordRef ODNodeCreateRecord(ODNodeRef node, ODRecordType recordType, CFStringRef recordName, CFDictionaryRef attributeDict, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCopyRecord
@abstract Simple API to open / create a references to a particular record on a Node
@discussion Simple API to open / create a references to a particular record on a Node
@param node an ODNodeRef to use
@param recordType a ODRecordTypeRef of the record type to copy
@param recordName a CFStringRef of the record name to copy
@param attributes (optional) a CFArrayRef (or single ODAttributeType) of the attributes to copy from the directory. Can be NULL when no
attributes are needed. Any standard types can be passed, for example
kODAttributeTypeAllAttributes will fetch all attributes up front. If just standard attributes are needed, then
kODAttributeTypeStandardOnly can be passed.
@param error an optional CFErrorRef reference for error details
@result returns a valid ODRecordRef. If the record copy fails, the error can be checked for details.
If the record is not found, will return NULL with a NULL error.
*/
CF_EXPORT
ODRecordRef ODNodeCopyRecord(ODNodeRef node, ODRecordType recordType, CFStringRef recordName, CFTypeRef attributes, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeCustomCall
@abstract Sends a custom call to a node.
@discussion This will send a custom call to a node along with the specified data, returning the result.
@param node an ODNodeRef to use
@param customCode the custom code to be sent to the node
@param data a data blob expected by the custom code, can be NULL of no send data
@param error an optional CFErrorRef reference for error details
@result a CFDataRef with the result of the operation, otherwise outError can be checked for specific details
*/
CF_EXPORT CF_RETURNS_RETAINED
CFDataRef ODNodeCustomCall(ODNodeRef node, CFIndex customCode, CFDataRef data, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
* @function ODNodeCustomCall
*
* @abstract
* Sends a named custom function call to a node.
*
* @discussion
* Sends a named custom function call to a node. Custom functions are defined by the modules that implement them
* and the parameter is defined by the module.
*
* @param node
* An ODNodeRef to use
*
* @param function
* A CFStringRef that specifies the name of the function
*
* @param payload
* A CFType appropriate for the custom function. The type is dictated by the module implementing the function.
*
* @param error
* An optional CFErrorRef reference to receive any errors from the custom function call.
*
* @result
* Returns a CFType appropriate for the function.
*/
CF_EXPORT CF_RETURNS_RETAINED
CFTypeRef
ODNodeCustomFunction(ODNodeRef node, CFStringRef function, CFTypeRef payload, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_NA);
/*!
@function ODNodeCopyPolicies
@abstract This will copy any policies configured for the node.
@discussion This will copy any policies configured for the node.
@param node an ODNodeRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing all currently set policies
*/
CF_EXPORT
CFDictionaryRef ODNodeCopyPolicies(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODNodeCopyAccountPolicies");
/*!
@function ODNodeCopySupportedPolicies
@abstract This will return a dictionary of supported policies.
@discussion This will return a dictionary of supported policies, if appropriate, the value will be the maximum value allowed
for the policy in question. For example, if password history is available, it will state how much history is
supported.
@param node an ODNodeRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing all currently supported policies. The values will be the maximum value allowed.
*/
CF_EXPORT
CFDictionaryRef ODNodeCopySupportedPolicies(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA);
/*!
@function ODNodeSetPolicies
@abstract This will set the policy for the node.
@discussion This will set the policy for the node. Policies are evaluated in combination with record-level policies.
@param node an ODNodeRef to use
@param policies a CFDictionary of policies to be set
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeSetPolicies(ODNodeRef node, CFDictionaryRef policies, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODNodeSetAccountPolicies");
/*!
@function ODNodeSetPolicy
@abstract This will set a specific policy setting for the node.
@discussion This will set a specific policy setting for the node.
@param node an ODNodeRef to use
@param policy a valid ODPolicyType
@param value a CFTypeRef to be set (should be of appropriate type for the policy)
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeSetPolicy(ODNodeRef node, ODPolicyType policyType, CFTypeRef value, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODNodeAddAccountPolicy");
/*!
@function ODNodeRemovePolicy
@abstract This will remove a specific policy setting from the node.
@discussion This will remove a specific policy setting from the node.
@param node an ODNodeRef to use
@param policy a valid ODPolicyType
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy removal succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeRemovePolicy(ODNodeRef node, ODPolicyType policyType, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODNodeRemoveAccountPolicy");
/*!
@function ODNodeAddAccountPolicy
@abstract This will add an account policy to the node for the specified category.
@discussion This will add an account policy to the node for the specified category.
The specified policy will be applied to all users in the
specified node when policies are evaluated.
@param node an ODNodeRef to use.
@param policy a dictionary containing the specific policy to be added.
The dictionary may contain the following keys:
kODPolicyKeyIdentifier a required key identifying the policy.
kODPolicyKeyParameters an optional key containing a dictionary of
parameters that can be used for informational purposes or in
the policy format string.
kODPolicyKeyContent a required key specifying the policy,
from which a predicate will be created for evaluating
the policy.
@param category a valid ODPolicyCategoryType to which the specified policy will be added.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy addition succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeAddAccountPolicy(ODNodeRef node, CFDictionaryRef policy, ODPolicyCategoryType category, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODNodeRemoveAccountPolicy
@abstract This will remove an account policy from the node for the specified category.
@discussion This will remove an account policy from the node for the specified category.
@param node an ODNodeRef to use.
@param policy a dictionary containing the specific policy to be
removed, with the same format as described in ODNodeAddAccountPolicy.
@param category a valid ODPolicyCategoryType from which the specified policy will be removed.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy removal succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeRemoveAccountPolicy(ODNodeRef node, CFDictionaryRef policy, ODPolicyCategoryType category, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODNodeSetAccountPolicies
@abstract This will set the policies for the node.
@discussion This will set the policies for the node, replacing any existing
policies.
@param node an ODNodeRef to use.
@param policies a dictionary containing all of the policies to be set
for the node. The dictionary may contain the following keys:
kODPolicyCategoryAuthentication an optional key with a value
of an array of policy dictionaries that specify when
authentications should be allowed.
kODPolicyCategoryPasswordContent an optional key with a
value of an array of policy dictionaries the specify the
required content of passwords.
kODPolicyCategoryPasswordChange an optional key with a value
of an array of policy dictionaries that specify when
passwords are required to be changed.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODNodeSetAccountPolicies(ODNodeRef node, CFDictionaryRef policies, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODNodeCopyAccountPolicies
@abstract This will copy any policies configured for the node.
@discussion This will copy any policies configured for the node.
@param node an ODNodeRef to use.
@param error an optional CFErrorRef reference for error details.
@result a CFDictionaryRef containing all currently set policies. The
format of the dictionary is the same as described in
ODNodeSetAccountPolicies().
*/
CF_EXPORT CF_RETURNS_RETAINED
CFDictionaryRef ODNodeCopyAccountPolicies(ODNodeRef node, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODNodePasswordContentCheck
@abstract Validates a password against the node's password content policies.
@discussion Validates a password against the node's password content policies.
The node's password content policies will be evaluated to
determine if the password is acceptable. May be used prior to
creating the record.
This check is only definitive at the time it was requested. The
policy or the environment could change before the password change
is actually requested. Errors from the password change request
should be consulted.
@param node an ODNodeRef to use.
@param password the password to be evaluated against the content policies.
@param recordName the name of the record.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the password passes all content policies, otherwise error is set.
*/
CF_EXPORT
bool ODNodePasswordContentCheck(ODNodeRef node, CFStringRef password, CFStringRef recordName, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
__END_DECLS
#endif /* ! __OPENDIRECTORY_CFODNODE__ */

View File

@ -0,0 +1,180 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODQUERY__)
#define __OPENDIRECTORY_CFODQUERY__ 1
#include <CFOpenDirectory/CFOpenDirectory.h>
/*!
@header CFODQuery
@abstract ODQuery functions
@discussion This header describes functions for working with ODQueryRefs.
*/
/*!
@typedef ODQueryCallback
@abstract Is called as results are returned from a query. The incoming result must be retained or copied.
@discussion Is called as results are returned from an CFRunLoop-based query. These results are only partial
and the callback is called repeatedly as results are available. The incoming result must be retained or copied. The
array will be released by the CFRunLoop upon return. Incoming results do not include previous results,
only the most recent results are returned. inResults can be NULL if an error occurs or the query is complete. If
inError and inResults are NULL then the query has completed.
*/
typedef void (*ODQueryCallback)(ODQueryRef query, CFArrayRef results, CFErrorRef error, void *context);
__BEGIN_DECLS
/*!
@function ODQueryGetTypeID
@abstract Standard GetTypeID function support for CF-based objects
@discussion Returns the typeID for the ODQuery object
@result a valid CFTypeID for the ODQuery object
*/
CF_EXPORT
CFTypeID ODQueryGetTypeID(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQueryCreateWithNode
@abstract Creates a query with the node using the parameters provided
@discussion Creates a query with the node using the supplied query parameters. Some parameters can either be CFString or
CFData or a CFArray of either CFString or CFData.
@param allocator a memory allocator to use for this object
@param node an ODNodeRef to use
@param recordTypeOrList a CFString of a type or CFArray with a list of record types
@param attribute a CFStringRef of the attribute name to query
@param matchType an ODMatchType value that signifies the type of query
@param queryValueOrList a CFStringRef, CFDataRef or CFArrayRef of either type for values to query in attribute
@param returnAttributeOrList a CFStringRef or CFArrayRef of CFStrings with the list of attributes to be returned
from the query. Passing NULL is equivalent to passing kODAttributeTypeStandardOnly.
@param maxResults a CFIndex of the total number of values the caller wants to be returned
@param error an optional CFErrorRef reference for error details
@result an ODQueryRef which should be passed into ODQueryCopyResults for immediate results or
ODQueryScheduleWithRunLoop for background behavior
*/
CF_EXPORT
ODQueryRef ODQueryCreateWithNode(CFAllocatorRef allocator, ODNodeRef node, CFTypeRef recordTypeOrList, ODAttributeType attribute, ODMatchType matchType, CFTypeRef queryValueOrList, CFTypeRef returnAttributeOrList, CFIndex maxResults, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQueryCreateWithNodeType
@abstract Creates a query object that is initialized to a particular node type.
@discussion Creates a query object that is initialized to a particular node type using the supplied
query options.
@param allocator a memory allocator to use for this object
@param nodeType an ODNodeType to use when doing a query
@param recordTypeOrList a ODRecordType of a type or CFArray with a list of record types
@param attribute a ODAttributeType or CFStringRef of the attribute name to query
@param matchType an ODMatchType value that signifies the type of query
@param queryValueOrList a CFStringRef, CFDataRef or CFArrayRef of either type for values to query in attribute
@param returnAttributeOrList a CFStringRef or CFArrayRef of CFStrings with the list of attributes to be returned
from the query. Passing NULL is equivalent to passing kODAttributeTypeStandardOnly.
@param maxResults a CFIndex of the total number of values the caller wants to be returned
@param error an optional CFErrorRef reference for error details
@result an ODQueryRef which should be passed into ODQueryCopyResults for immediate results or
ODQueryScheduleWithRunLoop for background behavior, see ODQueryCallback for details on RunLoop
behavior.
*/
CF_EXPORT
ODQueryRef ODQueryCreateWithNodeType(CFAllocatorRef allocator, ODNodeType nodeType, CFTypeRef recordTypeOrList, ODAttributeType attribute, ODMatchType matchType, CFTypeRef queryValueOrList, CFTypeRef returnAttributeOrList, CFIndex maxResults, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQueryCopyResults
@abstract Returns results from a provided ODQueryRef synchronously
@discussion Returns results from a provided ODQueryRef synchronously. Passing false to inAllowPartialResults
will block the call until all results are returned or an error occurs. true can be passed at any time
even if previous calls were made with false.
@param query an ODQueryRef to use
@param allowPartialResults a bool, passing true to retrieve any currently available results, or false to
wait for all results
@param error an optional CFErrorRef reference for error details
@result a CFArrayRef comprised of ODRecord objects. If partial results were requested but are complete, then
NULL will be returned with outError set to NULL. If an error occurs, NULL will be returned and
outError should be checked accordingly.
*/
CF_EXPORT
CFArrayRef ODQueryCopyResults(ODQueryRef query, bool allowPartialResults, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQuerySynchronize
@abstract Will dispose of any results and restart the query.
@discussion Will dispose of any results and restart the query for subsequent ODQueryCopyResults. If the query
is currently scheduled on a RunLoop, then the callback function will be called with inResults == NULL and
inError.error == kODErrorQuerySynchronize and inError.domain == kODErrorDomainFramework, signifying that
all existing results should be thrown away in preparation for new results.
@param query an ODQueryRef to use
*/
CF_EXPORT
void ODQuerySynchronize(ODQueryRef query) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQuerySetCallback
@abstract This call is used to set the callback function for an asynchronous query
@discussion This call is used to set the callback function for an asynchronous query, using a
CFRunLoop or a dispatch queue.
@param query an ODQueryRef to use
@param callback a function to call when a query has results to return
@param userInfo a user-defined pointer to be passed back to the Query callback function
*/
CF_EXPORT
void ODQuerySetCallback(ODQueryRef query, ODQueryCallback callback, void *userInfo) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQueryScheduleWithRunLoop
@abstract Allows a query to run off of a runloop, though it will spawn a thread to handle the work
@discussion Allows a query to run off of a runloop, though it will spawn a thread to handle the work.
When query is complete or stopped the callback function will be called with NULL results
and inError set to NULL. ODQueryUnscheduleFromRunLoop() must be called to remove this query
from Runloops if necessary.
@param query an ODQueryRef to put on the runloop
@param runLoop a CFRunLoopRef to put the ODQueryRef source onto
@param runLoopMode a CFStringRef with the runloop mode to add the ODQueryRef to
*/
CF_EXPORT
void ODQueryScheduleWithRunLoop(ODQueryRef query, CFRunLoopRef runLoop, CFStringRef runLoopMode) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQueryUnscheduleFromRunLoop
@abstract Removes the ODQueryRef from the provided runloop
@discussion Removes the ODQueryRef from the provided runloop
@param query an ODQueryRef to remove from the runloop
@param runLoop a CFRunLoopRef to remove the ODQuery source from
@param runLoopMode a CFStringRef of the mode to remove the ODQuery from
*/
CF_EXPORT
void ODQueryUnscheduleFromRunLoop(ODQueryRef query, CFRunLoopRef runLoop, CFStringRef runLoopMode) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODQuerySetDispatchQueue
@abstract Performs the query and sends the results using the specified dispatch queue
@discussion Schedule the query to run and deliver its results using the specified dispatch queue.
The previously set callback will be called using the same semantics as
ODQueryScheduleWithRunLoop
@param query an ODQueryRef to perform
@param queue a dispatch queue to receive the query results
*/
CF_EXPORT
void ODQuerySetDispatchQueue(ODQueryRef query, dispatch_queue_t queue) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
__END_DECLS
#endif /* ! __OPENDIRECTORY_CFODQUERY__ */

View File

@ -0,0 +1,578 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODRECORD__)
#define __OPENDIRECTORY_CFODRECORD__
#include <CFOpenDirectory/CFOpenDirectory.h>
__BEGIN_DECLS
/*!
@function ODRecordGetTypeID
@abstract Standard GetTypeID function support for CF-based objects
@discussion Returns the typeID for the ODRecord object
@result a valid CFTypeID for the ODRecord object
*/
CF_EXPORT
CFTypeID ODRecordGetTypeID(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordSetNodeCredentials
@abstract Similar to calling ODNodeSetCredentials except credentials are only set for this particular record's node
@discussion Sets the credentials if necessary on the ODNodeRef referenced by this ODRecordRef. Very similar to
calling ODNodeSetCredentials except other records referencing the underlying ODNodeRef will not get
authenticated, therefore inadvertant changes cannot occur. If all records referencing a particular
ODNodeRef need to be updated, then use ODNodeSetCredentials on the original ODNodeRef instead. If the
ODNodeRef is already authenticated with the same name and password, this will be a NOOP call. The original
ODNodeRef held by an ODRecordRef will be released and a new ODNodeRef will be created when the credentials
are set for this ODRecordRef. Calling this on multiple records could result in multiple References into the
OpenDirectory daemon, which could cause errors logged into /var/log/system.log if a threshold is reached.
@param record an ODRecordRef to use
@param username a CFStringRef of the username used to authenticate
@param password a CFStringRef of the password used to authenticate
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details. Upon failure the original node
will still be intact.
*/
CF_EXPORT
bool ODRecordSetNodeCredentials(ODRecordRef record, CFStringRef username, CFStringRef password, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordSetNodeCredentialsExtended
@abstract Similar to calling ODNodeSetCredentialsExtended except credentials are only set for this particular record's
node
@discussion Allows the caller to use other types of authentications that are available in Open Directory, that may
require response-request loops, etc. Not all OD plugins will support this call, look for
kODErrorCredentialsMethodNotSupported in outError. Same behavior as ODRecordSetNodeCredentials.
@param record an ODRecordRef to use
@param recordType a ODRecordTypeRef of the type of record to do the authentication with
@param authType a ODAuthenticationTypeRef of the type of authentication to be used (e.g., kDSStdAuthNTLMv2)
@param authItems a CFArrayRef of CFData or CFString items that will be sent in order to the auth process
@param outAuthItems a pointer to CFArrayRef that will be assigned to a CFArrayRef of CFData items if the
call returned any values followup values
@param outContext a pointer to ODContextRef if the call requires further calls for response-request auths.
@param error an optional CFErrorRef reference for error details
@result a bool will be returned with the result of the operation and outAuthItems set with response items
and outContext set for any needed continuation. Upon failure the original node will still be intact.
*/
CF_EXPORT
bool ODRecordSetNodeCredentialsExtended(ODRecordRef record, ODRecordType recordType, ODAuthenticationType authType, CFArrayRef authItems, CFArrayRef *outAuthItems, ODContextRef *outContext, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordSetNodeCredentialsUsingKerberosCache
@abstract Unsupported function.
@discussion Unsupported function.
*/
CF_EXPORT
bool ODRecordSetNodeCredentialsUsingKerberosCache(ODRecordRef record, CFStringRef cacheName, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_6, __MAC_10_7, __IPHONE_NA, __IPHONE_NA);
/*!
@function ODRecordCopyPasswordPolicy
@abstract Returns a CFDictionaryRef of the effective policy for the user if available
@discussion Returns a CFDictionaryRef of the effective policy for the user if available
@param allocator a CFAllocatorRef to use
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef of the password policies for the supplied record, or NULL if no policy set
*/
CF_EXPORT
CFDictionaryRef ODRecordCopyPasswordPolicy(CFAllocatorRef allocator, ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_6, __MAC_10_9, __IPHONE_NA, __IPHONE_NA, "use ODRecordCopyEffectivePolicies");
/*!
@function ODRecordVerifyPassword
@abstract Verifies the password provided is valid for the record
@discussion Verifies the password provided is valid for the record.
@param record an ODRecordRef to use
@param password a CFStringRef of the password that is being verified
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordVerifyPassword(ODRecordRef record, CFStringRef password, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordVerifyPasswordExtended
@abstract Allows use of other Open Directory types of authentications to verify a record password
@discussion Allows the caller to use other types of authentications that are available in Open Directory, that may
require response-request loops, etc.
@param record an ODRecordRef to use
@param authType a ODAuthenticationTypeRef of the type of authentication to be used (e.g., kODAuthenticationTypeCRAM_MD5)
@param authItems a CFArrayRef of CFData or CFString items that will be sent in order to the auth process
@param outAuthItems a pointer to CFArrayRef that will be assigned to a CFArrayRef of CFData items if the
call returned any values followup values
@param outContext a pointer to ODContextRef if the call requires further calls for response-request auths.
@param error an optional CFErrorRef reference for error details
@result a bool will be returned with the result of the operation and outAuthItems set with response items
and outContext set for any needed continuation. Some ODNodes may not support the call so an error of
eNotHandledByThisNode or eNotYetImplemented may be returned.
*/
CF_EXPORT
bool ODRecordVerifyPasswordExtended(ODRecordRef record, ODAuthenticationType authType, CFArrayRef authItems, CFArrayRef *outAuthItems, ODContextRef *outContext, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordChangePassword
@abstract Changes the password of an ODRecord
@discussion Changes the password of an ODRecord. If NULL is passed into inOldPassword, then an attempt to set
the password will be tried. If changing a password, then both old and new passwords should be supplied.
@param record an ODRecordRef to use
@param oldPassword a CFString of the record's old password (NULL is optional).
@param newPassword a CFString of the record's new password
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordChangePassword(ODRecordRef record, CFStringRef oldPassword, CFStringRef newPassword, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordGetRecordType
@abstract Returns the record type of an ODRecordRef
@discussion Returns the record type of an ODRecordRef
@param record an ODRecordRef to use
@result a CFStringRef of the record type for this ODRecordRef
*/
CF_EXPORT
CFStringRef ODRecordGetRecordType(ODRecordRef record) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordGetRecordName
@abstract Returns the official record name of an ODRecordRef
@discussion Returns the official record name of an ODRecordRef which typically corresponds to the first value
of the kODAttributeTypeRecordName attribute, but not always. This name should be a valid name in either case.
@param record an ODRecordRef to use
@result a CFStringRef of the record name for this ODRecordRef
*/
CF_EXPORT
CFStringRef ODRecordGetRecordName(ODRecordRef record) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordCopyValues
@abstract Returns the value of an attribute as an array of CFStringRef or CFDataRef types
@discussion Returns the value of an attribute as an array of CFStringRef or CFDataRef, depending on
whether the data is Binary or not. If the value has been fetched from the directory previously
a copy of the internal storage will be returned without going to the directory. If it has not been fetched
previously, then it will be fetched at that time.
@param record an ODRecordRef to use
@param attribute a CFStringRef or ODAttributeType of the attribute (e.g., kODAttributeTypeRecordName, etc.)
@param error an optional CFErrorRef reference for error details
@result a CFArrayRef of the attribute requested if possible, or NULL if the attribute doesn't exist
*/
CF_EXPORT
CFArrayRef ODRecordCopyValues(ODRecordRef record, ODAttributeType attribute, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordSetValue
@abstract Will take a CFDataRef or CFStringRef or a CFArrayRef of either type and set it for the attribute
@discussion Will take a CFDataRef or CFStringRef or a CFArrayRef of either type and set it for the attribute.
Any mixture of the types CFData and CFString are accepted.
@param record an ODRecordRef to use
@param attribute a CFStringRef of the attribute for values to be added too
@param valueOrValues a CFArrayRef of CFStringRef or CFDataRef types or either of the individual types, passing
an empty CFArray deletes the attribute. The underlying implementation will do this in the most efficient manner,
either by adding only new values or completely replacing the values depending on the capabilities of the
particular plugin.
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordSetValue(ODRecordRef record, ODAttributeType attribute, CFTypeRef valueOrValues, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordAddValue
@abstract Adds a value to an attribute
@discussion Adds a value to an attribute.
@param record an ODRecordRef to use
@param attribute a CFStringRef of the attribute for values to be added too
@param value a CFTypeRef of the value to be added to the attribute, either CFStringRef or CFDataRef
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordAddValue(ODRecordRef record, ODAttributeType attribute, CFTypeRef value, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordRemoveValue
@abstract Removes a particular value from an attribute.
@discussion Removes a particular value from an attribute.
@param record an ODRecordRef to use
@param attribute a CFStringRef of the attribute to remove the value from
@param value a CFTypeRef of the value to be removed from the attribute. Either CFStringRef or CFDataRef.
If the value does not exist, true will be returned and no error will be set.
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordRemoveValue(ODRecordRef record, ODAttributeType attribute, CFTypeRef value, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordCopyDetails
@abstract Returns the attributes and values in the form of a key-value pair set for this record.
@discussion Returns the attributes and values in the form of a key-value pair set for this record. The key is a
CFStringRef or ODAttributeType of the attribute name (e.g., kODAttributeTypeRecordName, etc.) and the
value is an CFArrayRef of either CFDataRef or CFStringRef depending on the type of data. Binary data will
be returned as CFDataRef.
@param record an ODRecordRef to use
@param attributes a CFArrayRef of attributes. If an attribute has not been fetched previously, it will be
fetched in order to return the value. If this parameter is NULL then all currently fetched attributes
will be returned.
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef of the attributes for the record
*/
CF_EXPORT
CFDictionaryRef ODRecordCopyDetails(ODRecordRef record, CFArrayRef attributes, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordSynchronize
@abstract Synchronizes the record from the Directory in order to get current data and commit pending changes
@discussion Synchronizes the record from the Directory in order to get current data. Any previously fetched attributes
will be refetched from the Directory. This will not refetch the entire record, unless the entire record
has been accessed. Additionally, any changes made to the record will be committed to the directory
if the node does not do immediate commits.
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
*/
CF_EXPORT
bool ODRecordSynchronize(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordDelete
@abstract Deletes the record from the node and invalidates the record.
@discussion Deletes the record from the node and invalidates the record. The ODRecordRef should be
released after deletion.
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordDelete(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordAddMember
@abstract Will add the record as a member of the group record that is provided
@discussion Will add the record as a member of the group record that is provided in an appopriate manner
based on what the directory will store. An error will be returned if the record is not a group record.
Additionally, if the member record is not an appropriate type allowed as part of a group an
error will be returned.
@param group an ODRecordRef of the group record to modify
@param member an ODRecordRef of the record to add to the group record
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordAddMember(ODRecordRef group, ODRecordRef member, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordRemoveMember
@abstract Will remove the record as a member from the group record that is provided
@discussion Will remove the record as a member from the group record that is provided. If the record type
of group is not a Group, false will be returned with an appropriate error.
@param group an ODRecordRef of the group record to modify
@param member an ODRecordRef of the record to remove from the group record
@param error an optional CFErrorRef reference for error details
@result returns true on success, otherwise outError can be checked for details
*/
CF_EXPORT
bool ODRecordRemoveMember(ODRecordRef group, ODRecordRef member, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordContainsMember
@abstract Will use membership APIs to resolve group membership based on Group and Member record combination
@discussion Will use membership APIs to resolve group membership based on Group and Member record combination.
This API does not check attributes values directly, instead uses system APIs to deal with nested
memberships.
@param group an ODRecordRef of the group to be checked for membership
@param member an ODRecordRef of the member to be checked against the group
@param error an optional CFErrorRef reference for error details
@result returns true or false depending on result
*/
CF_EXPORT
bool ODRecordContainsMember(ODRecordRef group, ODRecordRef member, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordCopyPolicies
@abstract This will copy any policies configured for the record.
@discussion This will copy any policies configured for the record.
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing all currently configured policies
*/
CF_EXPORT
CFDictionaryRef ODRecordCopyPolicies(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODRecordCopyAccountPolicies");
/*!
@function ODRecordCopyEffectivePolicies
@abstract This will copy the effective policies for the record (merging any node-level policies).
@discussion This will copy the effective policies for the record (merging any node-level policies).
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing all currently configured policies (merging any node-level policies)
*/
CF_EXPORT
CFDictionaryRef ODRecordCopyEffectivePolicies(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODRecordAuthenticationAllowed and similar functions");
/*!
@function ODRecordCopySupportedPolicies
@abstract This will return a dictionary of supported policies.
@discussion This will return a dictionary of supported policies, if appropriate, the value will be the maximum value allowed
for the policy in question. For example, if password history is available, it will state how much history is
supported.
@param record an ODRecordRef to use
@param error an optional CFErrorRef reference for error details
@result a CFDictionaryRef containing all currently supported policies
*/
CF_EXPORT
CFDictionaryRef ODRecordCopySupportedPolicies(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA);
/*!
@function ODRecordSetPolicies
@abstract This will set the policy for the record.
@discussion This will set the policy for the record. Policies are evaluated in combination with node-level policies.
@param record an ODRecordRef to use
@param policies a CFDictionary of policies to be set
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordSetPolicies(ODRecordRef record, CFDictionaryRef policies, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODRecordSetAccountPolicies");
/*!
@function ODRecordSetPolicy
@abstract This will set a specific policy setting for the record.
@discussion This will set a specific policy setting for the record.
@param record an ODRecordRef to use
@param policy a valid ODPolicyType
@param value a CFTypeRef to be set (should be of appropriate type for the policy)
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordSetPolicy(ODRecordRef record, ODPolicyType policy, CFTypeRef value, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODRecordAddAccountPolicy");
/*!
@function ODRecordRemovePolicy
@abstract This will remove a specific policy setting from the record.
@discussion This will remove a specific policy setting from the record.
@param record an ODRecordRef to use
@param policy a valid ODPolicyType
@param error an optional CFErrorRef reference for error details
@result a bool which signifies if the policy removal succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordRemovePolicy(ODRecordRef record, ODPolicyType policy, CFErrorRef *error) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_9, __MAC_10_10, __IPHONE_NA, __IPHONE_NA, "use ODRecordRemoveAccountPolicy");
/*!
@function ODRecordAddAccountPolicy
@abstract This will add an account policy to the record for the specified category.
@discussion This will add an account policy to the record for the specified category.
The node-level and record-level policies will be combined and
evaluated as appropriate, ensuring the strongest policy is enforced.
@param record an ODRecordRef to use.
@param policy a dictionary containing the specific policy to be added.
The dictionary may contain the following keys:
kODPolicyKeyIdentifier a required key identifying the policy.
kODPolicyKeyParameters an optional key containing a dictionary of
parameters that can be used for informational purposes or in
the policy format string.
kODPolicyKeyContent a required key specifying the policy,
from which a predicate will be created for evaluating
the policy.
@param category a valid ODPolicyCategoryType to which the policy will be added.
@param error is an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy addition succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordAddAccountPolicy(ODRecordRef record, CFDictionaryRef policy, ODPolicyCategoryType category, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordRemoveAccountPolicy
@abstract This will remove an account policy from the record for the specified category.
@discussion This will remove an account policy from the record for the specified category.
@param record an ODRecordRef to use.
@param policy a dictionary containing the specific policy to be
removed, with the same format as described in ODRecordAddAccountPolicy.
@param category a valid ODPolicyCategoryType from which the policy will be removed.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy removal succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordRemoveAccountPolicy(ODRecordRef record, CFDictionaryRef policy, ODPolicyCategoryType category, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordSetAccountPolicies
@abstract This will set the policies for the record.
@discussion This will set the policies for the record, replacing any
existing policies. All of the policies in the set will be
applied to the record when policies are evaluated.
@param record an ODRecordRef to use.
@param policies a dictionary containing all of the policies to be set
for the node. The dictionary may contain the following keys:
kODPolicyCategoryAuthentication an optional key with a value
of an array of policy dictionaries that specify when
authentications should be allowed.
kODPolicyCategoryPasswordContent an optional key with a
value of an array of policy dictionaries the specify the
required content of passwords.
kODPolicyCategoryPasswordChange an optional key with a value
of an array of policy dictionaries that specify when
passwords are required to be changed.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the policy set succeeded, otherwise error is set.
*/
CF_EXPORT
bool ODRecordSetAccountPolicies(ODRecordRef record, CFDictionaryRef policies, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordCopyAccountPolicies
@abstract This will copy any policies configured for the record.
@discussion This will copy any policies configured for the record. Does not
copy any policies set for the node.
@param record an ODRecordRef to use.
@param error an optional CFErrorRef reference for error details.
@result a CFDictionaryRef containing all currently set policies. The
format of the dictionary is the same as described in
ODRecordSetAccountPolicies().
*/
CF_EXPORT CF_RETURNS_RETAINED
CFDictionaryRef ODRecordCopyAccountPolicies(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordAuthenticationAllowed
@abstract Determines if policies allow the account to authenticate.
@discussion Determines if policies allow the account to authenticate.
Authentication and password change policies are evaluated.
Record-level and node-level policies are evaluated in
combination, with record-level taking precedence over node-level
policies. The failure of any single policy will deny the
authentication.
This check is only definitive at the time it was requested. The
policy or the environment could change before the authentication
is actually requested. Errors from the authentication request
should be consulted.
It is not necessary to call this function when callingg
ODRecordVerifyPassword or ODRecordVerifyPasswordExtended
since those functions perform same policy evaluation.
@param record an ODRecordRef to use.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the authentication is allowed, otherwise error is set.
*/
CF_EXPORT
bool ODRecordAuthenticationAllowed(ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordPasswordChangeAllowed
@abstract Determines if policies allow the password change.
@discussion Determines if policies allow the password change. Password
content policies are evaluated. Record-level and node-level
policies are evaluated in combination, with record-level taking
precedence over node-level policies. The failure of any single
policy will deny the password change.
This check is only definitive at the time it was requested. The
policy or the environment could change before the password change
is actually requested. Errors from the password change request
should be consulted.
@param record an ODRecordRef to use.
@param newPassword contains the password to be evaluated.
@param error an optional CFErrorRef reference for error details.
@result a bool which signifies if the password change is allowed, otherwise error is set.
*/
CF_EXPORT
bool ODRecordPasswordChangeAllowed(ODRecordRef record, CFStringRef newPassword, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordWillPasswordExpire
@abstract Determines if the password will expire within the specified time.
@discussion Determines if the password will expire (i.e. need to be changed)
between now and the specified number of seconds in the future.
Record-level and node-level policies are evaluated
together, with record-level taking precedence over node-level
policies.
@param record an ODRecordRef to use.
@param willExpireIn the number of seconds from the current time to be
used as the upper-bound for the password expiration period.
@result a bool which signifies if the password will expire within the
specified time.
*/
CF_EXPORT
bool ODRecordWillPasswordExpire(ODRecordRef record, uint64_t willExpireIn) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordWillAuthenticationsExpire
@abstract Determines if authentications will expire within the specified time.
@discussion Determines if authentications will expire (i.e. session and/or
account expires) between now and the specified number of seconds
in the future. Record-level and node-level policies are evaluated
together, with record-level taking precedence over node-level
policies.
@param record an ODRecordRef to use.
@param willExpireIn the number of seconds from the current time to be
used as the upper-bound for the authentication expiration period.
@result a bool which signifies if authentications will expire within the
specified time.
*/
CF_EXPORT
bool ODRecordWillAuthenticationsExpire(ODRecordRef record, uint64_t willExpireIn) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordSecondsUntilPasswordExpires
@abstract Determines how many seconds until the password expires.
@discussion Determines how many seconds until the password expires (i.e.
needs changing). Password change policies are evaluated.
Record-level and node-level policies are evaluated in
combination, with record-level taking precedence over node-level
policies.
@param record an ODRecordRef to use.
@result the number of seconds until the password expires. If multiple
policies will cause the password to expire, the soonest
expiration time is returned. If already expired,
kODExpirationTimeExpired is returned. If there are no password
change policies, kODExpirationTimeNeverExpires is returned.
*/
CF_EXPORT
int64_t ODRecordSecondsUntilPasswordExpires(ODRecordRef record) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
/*!
@function ODRecordSecondsUntilAuthenticationsExpire
@abstract Determines how many seconds until authentications expire.
@discussion Determines how many seconds until authentications expire (i.e.
session and/or account expires). Record-level and node-level
policies are evaluated together, with record-level taking
precedence over node-level policies
@param record an ODRecordRef to use.
@result the number of seconds until authentications expire. If multiple
policies will cause authentications to expire, the soonest
expiration time is returned. If already expired,
kODExpirationTimeExpired is returned. If there are no
authentication policies controlling expiration,
kODExpirationTimeNeverExpires is returned.
*/
CF_EXPORT
int64_t ODRecordSecondsUntilAuthenticationsExpire(ODRecordRef record) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_NA);
__END_DECLS
#endif /* ! __OPENDIRECTORY_CFODRECORD__ */

View File

@ -0,0 +1,83 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODSESSION__)
#define __OPENDIRECTORY_CFODSESSION__
#include <CFOpenDirectory/CFOpenDirectory.h>
/*!
@const kODSessionDefault
@abstract is the default type of ODSessionRef used if there is no need to create a specific reference
@discussion is the default type of ODSessionRef used if there is no need to create a specific reference
*/
CF_EXPORT
ODSessionRef kODSessionDefault __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
__BEGIN_DECLS
/*!
@function ODSessionGetTypeID
@abstract Standard GetTypeID function support for CF-based objects
@discussion Returns the typeID for ODSession objects
@result a valid CFTypeID for the ODSession object
*/
CF_EXPORT
CFTypeID ODSessionGetTypeID(void) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODSessionCreate
@abstract Creates an ODSession object to be passed to ODNode functions
@discussion Creates an ODSession object to be passed to ODNode functions.
@param allocator a memory allocator to use for this object
@param options a CFDictionary of options associated with this ODSession. This is typically NULL
unless caller needs to proxy to another host.
If proxy is required then a dictionary with keys should be:
Key Value
kODSessionProxyAddress CFString(hostname or IP)
kODSessionProxyPort CFNumber(IP port, should not be set as it will default)
kODSessionProxyUsername CFString(username)
kODSessionProxyPassword CFString(password)
@param error an optional CFErrorRef reference for error details
@result a valid ODSessionRef object or NULL if it cannot be created. Pass reference to CFErrorRef to
get error details
*/
CF_EXPORT
ODSessionRef ODSessionCreate(CFAllocatorRef allocator, CFDictionaryRef options, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODSessionCopyNodeNames
@abstract Returns the node names that are registered on this ODSession
@discussion Returns the node names that are registered on this ODSession
@param allocator a memory allocator to use for this object
@param session an ODSessionRef, either kODSessionDefault or a valid ODSessionRef can be passed
@param error an optional CFErrorRef reference for error details
@result a valid CFArrayRef of node names that can be opened on the session reference
*/
CF_EXPORT
CFArrayRef ODSessionCopyNodeNames(CFAllocatorRef allocator, ODSessionRef session, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
__END_DECLS
#endif /* !__OPENDIRECTORY_CFODSESSION__ */

View File

@ -0,0 +1,138 @@
/*
* Copyright (c) 2010 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFODTRIGGER__)
#define __OPENDIRECTORY_CFODTRIGGER__
typedef struct __ODTrigger *ODTriggerRef;
/* ODTriggerCreateForRecords */
enum {
kODTriggerRecordEventAdd = 1,
kODTriggerRecordEventDelete = 2,
kODTriggerRecordEventModify = 4,
};
/* ODTriggerCreateForNodes */
enum {
kODTriggerNodeRegister = 1,
kODTriggerNodeUnregister = 2,
kODTriggerNodeOnline = 4,
kODTriggerNodeOffline = 8,
};
/* ODTriggerCreateForSearch */
enum {
kODTriggerSearchAdd = 1,
kODTriggerSearchDelete = 2,
kODTriggerSearchOnline = 4,
kODTriggerSearchOffline = 8,
};
typedef CFOptionFlags ODTriggerEventFlags;
__BEGIN_DECLS
/*!
@function ODTriggerGetTypeID
@abstract returns the type identifier for the ODTrigger type
@result The type identifer for the ODTrigger type.
*/
CF_EXPORT CFTypeID
ODTriggerGetTypeID(void) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODTriggerCreateForRecords
@abstract creates a trigger for a particular record event
@discussion Creates a trigger for a particular record event. nodenames, recordnames and attributes is optional. Pass a CFArrayRef or CFStringRef for each list.
@param events mask of events to monitor: kODTriggerRecordEventAdd, kODTriggerRecordEventDelete, kODTriggerRecordEventModify
@param nodenames (optional) node names to monitor. Pass NULL to monitor all nodes.
@param recordtypes record types of interest.
@param recordnames (optional) record names to watch. Pass NULL to receive an event for any record.
@param queue a queue to deliver this event on
@param block a block to execute when event is triggered
@result returns an ODTriggerRef that may be cleaned up with ODTriggerCancel and CFRelease
*/
CF_EXPORT ODTriggerRef
ODTriggerCreateForRecords(CFAllocatorRef allocator, ODTriggerEventFlags events, CFTypeRef nodenames, CFTypeRef recordtypes, CFTypeRef recordnames,
dispatch_queue_t queue, void (^block)(ODTriggerRef trigger, CFStringRef node, CFStringRef type, CFStringRef name))
__OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODTriggerCreateForRecordAttributes
@abstract creates a trigger for record attribute modifications
@discussion Creates a trigger for modification of record attributes. Pass a CFArrayRef or CFStringRef for each list.
@param nodenames (optional) node names to watch. Pass NULL to watch all nodes.
@param recordtypes record types to monitor (required)
@param recordnames (optional) record names to monitor. Pass NULL to monitor all records.
@param attributes (optional) attributes of interest. Pass NULL to see all attribute changes.
@param queue a queue to deliver this event on
@param block a block to execute when event is triggered
@result returns an ODTriggerRef that may be cleaned up with ODTriggerCancel and CFRelease
*/
CF_EXPORT ODTriggerRef
ODTriggerCreateForRecordAttributes(CFAllocatorRef allocator, CFTypeRef nodenames, CFTypeRef recordtypes, CFTypeRef recordnames, CFTypeRef attributes,
dispatch_queue_t queue, void (^block)(ODTriggerRef trigger, CFStringRef node, CFStringRef type, CFStringRef rec, CFStringRef attr))
__OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function nodes_create
@abstract creates a trigger for a particular node event
@discussion Creates a trigger for a particular node event. Pass a CFArrayRef or CFStringRef for each list.
@param events mask of events to monitor: kODTriggerNodeOffline, kODTriggerNodeOnline, kODTriggerNodeRegister, kODTriggerNodeUnregister
@param nodenames (optional) node names to watch. Pass NULL to watch all nodes.
@param queue a queue to deliver this event on
@param block a block to execute when event is triggered
@result returns an ODTriggerRef that may be cleaned up with ODTriggerCancel and CFRelease
*/
CF_EXPORT ODTriggerRef
ODTriggerCreateForNodes(CFAllocatorRef allocator, ODTriggerEventFlags events, CFTypeRef nodenames,
dispatch_queue_t queue, void (^block)(ODTriggerRef trigger, CFStringRef node))
__OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODTriggerCreateForSearch
@abstract creates a trigger for a search node event
@discussion Creates a trigger for a search node event. Pass a CFArrayRef or CFStringRef for each list.
@param events mask of events to monitor: kODTriggerSearchAdd, kODTriggerSearchDelete, kODTriggerSearchOffline, kODTriggerSearchOnline
@param nodenames (optional) interesting node names on the search policy. Pass NULL to monitor all search policy nodes.
@param queue a queue to deliver this event on
@param block a block to execute when event is triggered
@result returns an ODTriggerRef that may be cleaned up with ODTriggerCancel and CFRelease
*/
CF_EXPORT ODTriggerRef
ODTriggerCreateForSearch(CFAllocatorRef allocator, ODTriggerEventFlags events, CFTypeRef nodenames,
dispatch_queue_t queue, void (^block)(ODTriggerRef trigger, CFStringRef node))
__OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODTriggerCancel
@abstract cancel the trigger
@discussion Permanently stops all this trigger from firing. Must call CFRelease as well.
*/
CF_EXPORT void
ODTriggerCancel(ODTriggerRef trigger) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
__END_DECLS
#endif /* !__OPENDIRECTORY_CFODTRIGGER__ */

View File

@ -0,0 +1,75 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#if !defined(__OPENDIRECTORY_CFOPENDIRECTORY__)
#define __OPENDIRECTORY_CFOPENDIRECTORY__ 1
#include <CoreFoundation/CoreFoundation.h>
/*!
@typedef ODContextRef
@abstract Opaque reference for the ODContext object
*/
typedef const struct __ODContext *ODContextRef;
/*!
@typedef ODNodeRef
@abstract Opaque reference for the ODNode object
*/
typedef struct __ODNode *ODNodeRef;
/*!
@typedef ODQueryRef
@abstract Opaque reference for the ODQuery object
*/
typedef struct __ODQuery *ODQueryRef;
/*!
@typedef ODRecordRef
@abstract Opaque reference for the ODRecord object
*/
typedef struct __ODRecord *ODRecordRef;
/*!
@typedef ODSessionRef
@abstract Opaque reference for ODSession object
*/
typedef struct __ODSession *ODSessionRef;
/*!
@const kODErrorDomainFramework
@abstract the error domain for OpenDirectory.framework details
@discussion the error domain for OpenDirectory.framework details
*/
CF_EXPORT
const CFStringRef kODErrorDomainFramework __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
#include <CFOpenDirectory/CFOpenDirectoryConstants.h>
#include <CFOpenDirectory/CFODContext.h>
#include <CFOpenDirectory/CFODNode.h>
#include <CFOpenDirectory/CFODQuery.h>
#include <CFOpenDirectory/CFODRecord.h>
#include <CFOpenDirectory/CFODSession.h>
#endif /* ! __OPENDIRECTORY_CFOPENDIRECTORY__ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
/*
This file is part of Darling.
Copyright (C) 2020 Lubos Dolezel
Darling is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Darling is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Darling. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CFOPENDIRECTORYCONSTANTSPRIV_H_
#define _CFOPENDIRECTORYCONSTANTSPRIV_H_
// not sure what to put here yet
#endif // _CFOPENDIRECTORYCONSTANTSPRIV_H_

View File

@ -0,0 +1,189 @@
/*
* Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*!
@header CFOpenDirectoryPriv
@abstract Private functions and constants
@discussion Contains private functions and constants. These functions can
change or go away at any time as they are not public API.
*/
#ifndef __CFOPENDIRECTORYPRIV_H
#define __CFOPENDIRECTORYPRIV_H
#include <CFOpenDirectory/CFOpenDirectory.h>
#include <CFOpenDirectory/CFOpenDirectoryConstantsPriv.h>
#include <DirectoryService/DirServicesTypes.h>
#include <CFOpenDirectory/CFODTrigger.h>
/* 8239461 */
CF_EXPORT const ODRecordType kODRecordTypeUserAuthenticationData __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/* 8394219 */
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosACL __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosKeySet __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosPrincipalACL __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosPrincipalAliases __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosPrincipalName __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT const ODAttributeType kODAttributeTypeKerberosTicketPolicy __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@const kODAuthenticationTypeNodeNativeRetainCredential
@abstract The plug-in should determine which specific authentication method to use.
@discussion Identical to kODAuthenticationTypeNodeNativeClearTextOK, except that it
retains the authentication for future calls.
Authentication array has following items in order:
user name in UTF8 encoding,
password in UTF8 encoding
*/
CF_EXPORT
const ODAuthenticationType kODAuthenticationTypeNodeNativeRetainCredential __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@const kODAuthenticationTypeNodePPS
@abstract PPS authentication.
@discussion PPS authentication.
*/
CF_EXPORT
const ODAuthenticationType kODAuthenticationTypeNodePPS __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
__BEGIN_DECLS
CF_EXPORT bool
ODNodeVerifyCredentialsExtended(ODNodeRef node, ODRecordType recordType, ODAuthenticationType authType, CFArrayRef authItems,
CFArrayRef *authItemsOut, ODContextRef *context, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
CF_EXPORT bool
ODNodeCopyCredentials(ODNodeRef node, ODRecordType *recordType, CFStringRef *username, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODNodeCopyRecordAuthenticationData
@abstract Private call to copy the UserAuthenticationData record corresponding to a given user record
@discussion
@param node ldapi:// node containing the needed UserAuthenticationData record
@param record the user record
@param error error details
@result a valid ODSessionRef or NULL if failure occurs and ODGetError() can be called for detailed error
*/
CF_EXPORT
ODRecordRef ODNodeCopyRecordAuthenticationData(ODNodeRef node, ODRecordRef record, CFErrorRef *error) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODSessionNodeNameIsLocal
@abstract Private call to determine if a given nodename refers to a "local" node.
@discussion Currently returns true only for /BSD/local and nodes beginning with "/Local/"
@param session Session from which the node was opened. May be NULL.
@param nodename Name of node, e.g. "/Local/Default".
@result true if the node name refers to a "local" node, otherwise false.
*/
CF_EXPORT
bool ODSessionNodeNameIsLocal(ODSessionRef session, CFStringRef nodename) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_NA);
/*!
@function ODNodeCreateWithDSRef
@abstract Private call to create an object from existing DS references
@discussion Recovery if DS invalidates the references, or something fails outside of the plugins ability cannot
be recovered for DSProxy tDirReference types. Other types will re-open a DS Reference and re-open the
node if the references become invalid. That does mean the ODNode will "own" the reference at that point.
If the flag inCloseOnRelease is set to true, then the last release on ODNodeRef will cause the
tDirNodeReference and tDirReference to be closed, otherwise, it's up to the caller to close the references
accordingly (except after the failure/reopen).
@param inAllocator the CFAllocatorRef to use
@param inDirRef the tDirReference to use. An ODSessionRef will be created internally for this reference.
@param inNodeRef the existing tDirNodeReference to use.
@param inCloseOnRelease a bool true or false signifying whether the ODNodeRef and underlying ODSessionRef should
close the references after the last release.
@result a valid ODNodeRef or NULL if failure occurs and ODGetError() can be called for detailed error
*/
CF_EXPORT
ODNodeRef ODNodeCreateWithDSRef(CFAllocatorRef inAllocator, tDirReference inDirRef, tDirNodeReference inNodeRef,
bool inCloseOnRelease) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODSessionCreateWithDSRef
@abstract Private call to create an object from existing DS references
@discussion Recovery if DS invalidates the references, or something fails outside of the plugins ability cannot
be recovered for DSProxy tDirReference types. If the flag inCloseOnRelease is set to true, then the last release
on ODSessionRef will cause the tDirReference to be closed, otherwise, it's up to the caller to close the references
accordingly (except after the failure/reopen).
@param inAllocator the CFAllocatorRef to use
@param inDirRef the tDirReference to use. An ODSessionRef will be created internally for this reference.
@param inCloseOnRelease a bool true or false signifying whether the ODNodeRef and underlying ODSessionRef should
close the references after the last release.
@result a valid ODSessionRef or NULL if failure occurs and ODGetError() can be called for detailed error
*/
CF_EXPORT
ODSessionRef ODSessionCreateWithDSRef(CFAllocatorRef inAllocator, tDirReference inDirRef, bool inCloseOnRelease) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODSessionGetDSRef
@abstract Returns the internal tDirReference used by the APIs
@discussion This ref is only guaranteed as long as the ref is usable. It should not be saved and only used with caution.
This ref can be closed by the higher-level APIs if ODSessionRefs are deleted, become invalid, etc.
@param inSessionRef the ODSessionRef to extract the tDirReference from
@result the current tDirReference of the session
*/
CF_EXPORT
tDirReference ODSessionGetDSRef(ODSessionRef inSessionRef) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODNodeGetDSRef
@abstract Returns the internal tDirNodeReference used by the APIs
@discussion This ref is only guaranteed as long as the ref is usable. It should not be saved and only used with caution.
This ref can be closed by the higher-level APIs if ODNodeRefs are deleted, become invalid, etc.
@param inNodeRef the ODNodeRef to extract the tDirNodeReference from
@result the current tDirNodeReference of the node connection
*/
CF_EXPORT
tDirNodeReference ODNodeGetDSRef(ODNodeRef inNodeRef) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODConvertToLegacyErrorCode
@abstract Converts error code to legacy error
@discussion Converts the error code to legacy error code.
@param inCode is the error code returned by retrieving error code CFErrorGetCode() or [Error code]
@result the legacy style error code
*/
CF_EXPORT
tDirStatus ODConvertToLegacyErrorCode(CFIndex code) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
/*!
@function ODRecordContainsMemberRefresh
@abstract Will use membership APIs to resolve group membership based on Group and Member record combination ignoring the cache
@discussion Will use membership APIs to resolve group membership based on Group and Member record combination ignoring the cache.
This API does not check attributes values directly, instead uses system APIs to deal with nested
memberships.
@param inGroupRef an ODRecordRef of the group to be checked for membership
@param inMemberRef an ODRecordRef of the member to be checked against the group
@param outError an optional CFErrorRef reference for error details
@result returns true or false depending on result
*/
CF_EXPORT
bool ODRecordContainsMemberRefresh(ODRecordRef inGroupRef, ODRecordRef inMemberRef, CFErrorRef *outError) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_NA);
__END_DECLS
#endif

View File

@ -0,0 +1,147 @@
/*
This file is part of Darling.
Copyright (C) 2020 Lubos Dolezel
Darling is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Darling is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Darling. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CFOpenDirectory_H_
#define _CFOpenDirectory_H_
void* ODContextGetTypeID(void);
void* ODConvertToLegacyErrorCode(void);
void* ODNodeAddAccountPolicy(void);
void* ODNodeCopyAccountPolicies(void);
void* ODNodeCopyCredentials(void);
void* ODNodeCopyDetails(void);
void* ODNodeCopyPolicies(void);
void* ODNodeCopyRecord(void);
void* ODNodeCopyRecordAuthenticationData(void);
void* ODNodeCopySession(void);
void* ODNodeCopySubnodeNames(void);
void* ODNodeCopySupportedAttributes(void);
void* ODNodeCopySupportedPolicies(void);
void* ODNodeCopySupportedRecordTypes(void);
void* ODNodeCopyUnreachableSubnodeNames(void);
void* ODNodeCreateCopy(void);
void* ODNodeCreateRecord(void);
void* ODNodeCreateWithDSRef(void);
void* ODNodeCreateWithName(void);
void* ODNodeCreateWithNameAndOptions(void);
void* ODNodeCreateWithNodeType(void);
void* ODNodeCustomCall(void);
void* ODNodeCustomFunction(void);
void* ODNodeGetDSRef(void);
void* ODNodeGetName(void);
void* ODNodeGetSecureTokenRecoveryType(void);
void* ODNodeGetTypeID(void);
void* ODNodePasswordContentCheck(void);
void* ODNodeRemoveAccountPolicy(void);
void* ODNodeRemovePolicy(void);
void* ODNodeReplaceUserRecord(void);
void* ODNodeSetAccountPolicies(void);
void* ODNodeSetCredentials(void);
void* ODNodeSetCredentialsExtended(void);
void* ODNodeSetCredentialsUsingKerberosCache(void);
void* ODNodeSetCredentialsWithBootstrapToken(void);
void* ODNodeSetPolicies(void);
void* ODNodeSetPolicy(void);
void* ODNodeSetSecureTokenRecoveryCloud(void);
void* ODNodeSetSecureTokenRecoveryCloudUsingIdentity(void);
void* ODNodeSetSecureTokenRecoveryMasterPassword(void);
void* ODNodeSetSecureTokenRecoveryPersonal(void);
void* ODNodeSetSecureTokenRecoveryPersonalUsingKey(void);
void* ODNodeVerifyCredentialsExtended(void);
void* ODQueryCopyResults(void);
void* ODQueryCreateWithNode(void);
void* ODQueryCreateWithNodeType(void);
void* ODQueryGetTypeID(void);
void* ODQueryScheduleWithRunLoop(void);
void* ODQuerySetCallback(void);
void* ODQuerySetDispatchQueue(void);
void* ODQuerySynchronize(void);
void* ODQueryUnscheduleFromRunLoop(void);
void* ODRecordAddAccountPolicy(void);
void* ODRecordAddMember(void);
void* ODRecordAddValue(void);
void* ODRecordAuthenticationAllowed(void);
void* ODRecordChangePassword(void);
void* ODRecordContainsMember(void);
void* ODRecordContainsMemberRefresh(void);
void* ODRecordCopyAccountPolicies(void);
void* ODRecordCopyDetails(void);
void* ODRecordCopyEffectivePolicies(void);
void* ODRecordCopyPasswordContentSummary(void);
void* ODRecordCopyPasswordPolicy(void);
void* ODRecordCopyPolicies(void);
void* ODRecordCopySupportedPolicies(void);
void* ODRecordCopyValues(void);
void* ODRecordDelete(void);
void* ODRecordEnumerateMembers(void);
void* ODRecordEnumerateMembership(void);
void* ODRecordGetRecordName(void);
void* ODRecordGetRecordType(void);
void* ODRecordGetTypeID(void);
void* ODRecordPasswordChangeAllowed(void);
void* ODRecordRemoveAccountPolicy(void);
void* ODRecordRemoveMember(void);
void* ODRecordRemovePolicy(void);
void* ODRecordRemoveValue(void);
void* ODRecordSecondsUntilAuthenticationsExpire(void);
void* ODRecordSecondsUntilPasswordExpires(void);
void* ODRecordSetAccountPolicies(void);
void* ODRecordSetNodeCredentials(void);
void* ODRecordSetNodeCredentialsExtended(void);
void* ODRecordSetNodeCredentialsUsingKerberosCache(void);
void* ODRecordSetNodeCredentialsWithBootstrapToken(void);
void* ODRecordSetPolicies(void);
void* ODRecordSetPolicy(void);
void* ODRecordSetValue(void);
void* ODRecordSynchronize(void);
void* ODRecordVerifyPassword(void);
void* ODRecordVerifyPasswordExtended(void);
void* ODRecordWillAuthenticationsExpire(void);
void* ODRecordWillPasswordExpire(void);
void* ODSessionCopyNodeNames(void);
void* ODSessionCopySessionKeySupport(void);
void* ODSessionCreate(void);
void* ODSessionCreateWithDSRef(void);
void* ODSessionGetDSRef(void);
void* ODSessionGetTypeID(void);
void* ODSessionIsProxy(void);
void* ODSessionNodeNameIsLocal(void);
void* ODSessionProxyAuthorizationForm(void);
void* ODTriggerCancel(void);
void* ODTriggerCreateForNodes(void);
void* ODTriggerCreateForRecordAttributes(void);
void* ODTriggerCreateForRecords(void);
void* ODTriggerCreateForSearch(void);
void* ODTriggerGetTypeID(void);
void* _NodeGetNodeTypeName(void);
void* _ODInitialize(void);
void* _ODNodeCreate(void);
void* _ODNodeInit(void);
void* _ODQueryCreate(void);
void* _ODQueryGetDelegate(void);
void* _ODQueryGetOperationQueue(void);
void* _ODQueryInit(void);
void* _ODQuerySetDelegate(void);
void* _ODQuerySetOperationQueue(void);
void* _ODSessionCreate(void);
void* _ODSessionGetShared(void);
void* _ODSessionInit(void);
#endif

View File

@ -0,0 +1,764 @@
/*
This file is part of Darling.
Copyright (C) 2020 Lubos Dolezel
Darling is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Darling is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Darling. If not, see <http://www.gnu.org/licenses/>.
*/
#include "../include/generated-stubs.h"
#include <stdlib.h>
#include <stdio.h>
static int verbose = 0;
__attribute__((constructor))
static void initme(void) {
verbose = getenv("STUB_VERBOSE") != NULL;
}
void* ODContextGetTypeID(void)
{
if (verbose) puts("STUB: ODContextGetTypeID called");
return NULL;
}
void* ODConvertToLegacyErrorCode(void)
{
if (verbose) puts("STUB: ODConvertToLegacyErrorCode called");
return NULL;
}
void* ODNodeAddAccountPolicy(void)
{
if (verbose) puts("STUB: ODNodeAddAccountPolicy called");
return NULL;
}
void* ODNodeCopyAccountPolicies(void)
{
if (verbose) puts("STUB: ODNodeCopyAccountPolicies called");
return NULL;
}
void* ODNodeCopyCredentials(void)
{
if (verbose) puts("STUB: ODNodeCopyCredentials called");
return NULL;
}
void* ODNodeCopyDetails(void)
{
if (verbose) puts("STUB: ODNodeCopyDetails called");
return NULL;
}
void* ODNodeCopyPolicies(void)
{
if (verbose) puts("STUB: ODNodeCopyPolicies called");
return NULL;
}
void* ODNodeCopyRecord(void)
{
if (verbose) puts("STUB: ODNodeCopyRecord called");
return NULL;
}
void* ODNodeCopyRecordAuthenticationData(void)
{
if (verbose) puts("STUB: ODNodeCopyRecordAuthenticationData called");
return NULL;
}
void* ODNodeCopySession(void)
{
if (verbose) puts("STUB: ODNodeCopySession called");
return NULL;
}
void* ODNodeCopySubnodeNames(void)
{
if (verbose) puts("STUB: ODNodeCopySubnodeNames called");
return NULL;
}
void* ODNodeCopySupportedAttributes(void)
{
if (verbose) puts("STUB: ODNodeCopySupportedAttributes called");
return NULL;
}
void* ODNodeCopySupportedPolicies(void)
{
if (verbose) puts("STUB: ODNodeCopySupportedPolicies called");
return NULL;
}
void* ODNodeCopySupportedRecordTypes(void)
{
if (verbose) puts("STUB: ODNodeCopySupportedRecordTypes called");
return NULL;
}
void* ODNodeCopyUnreachableSubnodeNames(void)
{
if (verbose) puts("STUB: ODNodeCopyUnreachableSubnodeNames called");
return NULL;
}
void* ODNodeCreateCopy(void)
{
if (verbose) puts("STUB: ODNodeCreateCopy called");
return NULL;
}
void* ODNodeCreateRecord(void)
{
if (verbose) puts("STUB: ODNodeCreateRecord called");
return NULL;
}
void* ODNodeCreateWithDSRef(void)
{
if (verbose) puts("STUB: ODNodeCreateWithDSRef called");
return NULL;
}
void* ODNodeCreateWithName(void)
{
if (verbose) puts("STUB: ODNodeCreateWithName called");
return NULL;
}
void* ODNodeCreateWithNameAndOptions(void)
{
if (verbose) puts("STUB: ODNodeCreateWithNameAndOptions called");
return NULL;
}
void* ODNodeCreateWithNodeType(void)
{
if (verbose) puts("STUB: ODNodeCreateWithNodeType called");
return NULL;
}
void* ODNodeCustomCall(void)
{
if (verbose) puts("STUB: ODNodeCustomCall called");
return NULL;
}
void* ODNodeCustomFunction(void)
{
if (verbose) puts("STUB: ODNodeCustomFunction called");
return NULL;
}
void* ODNodeGetDSRef(void)
{
if (verbose) puts("STUB: ODNodeGetDSRef called");
return NULL;
}
void* ODNodeGetName(void)
{
if (verbose) puts("STUB: ODNodeGetName called");
return NULL;
}
void* ODNodeGetSecureTokenRecoveryType(void)
{
if (verbose) puts("STUB: ODNodeGetSecureTokenRecoveryType called");
return NULL;
}
void* ODNodeGetTypeID(void)
{
if (verbose) puts("STUB: ODNodeGetTypeID called");
return NULL;
}
void* ODNodePasswordContentCheck(void)
{
if (verbose) puts("STUB: ODNodePasswordContentCheck called");
return NULL;
}
void* ODNodeRemoveAccountPolicy(void)
{
if (verbose) puts("STUB: ODNodeRemoveAccountPolicy called");
return NULL;
}
void* ODNodeRemovePolicy(void)
{
if (verbose) puts("STUB: ODNodeRemovePolicy called");
return NULL;
}
void* ODNodeReplaceUserRecord(void)
{
if (verbose) puts("STUB: ODNodeReplaceUserRecord called");
return NULL;
}
void* ODNodeSetAccountPolicies(void)
{
if (verbose) puts("STUB: ODNodeSetAccountPolicies called");
return NULL;
}
void* ODNodeSetCredentials(void)
{
if (verbose) puts("STUB: ODNodeSetCredentials called");
return NULL;
}
void* ODNodeSetCredentialsExtended(void)
{
if (verbose) puts("STUB: ODNodeSetCredentialsExtended called");
return NULL;
}
void* ODNodeSetCredentialsUsingKerberosCache(void)
{
if (verbose) puts("STUB: ODNodeSetCredentialsUsingKerberosCache called");
return NULL;
}
void* ODNodeSetCredentialsWithBootstrapToken(void)
{
if (verbose) puts("STUB: ODNodeSetCredentialsWithBootstrapToken called");
return NULL;
}
void* ODNodeSetPolicies(void)
{
if (verbose) puts("STUB: ODNodeSetPolicies called");
return NULL;
}
void* ODNodeSetPolicy(void)
{
if (verbose) puts("STUB: ODNodeSetPolicy called");
return NULL;
}
void* ODNodeSetSecureTokenRecoveryCloud(void)
{
if (verbose) puts("STUB: ODNodeSetSecureTokenRecoveryCloud called");
return NULL;
}
void* ODNodeSetSecureTokenRecoveryCloudUsingIdentity(void)
{
if (verbose) puts("STUB: ODNodeSetSecureTokenRecoveryCloudUsingIdentity called");
return NULL;
}
void* ODNodeSetSecureTokenRecoveryMasterPassword(void)
{
if (verbose) puts("STUB: ODNodeSetSecureTokenRecoveryMasterPassword called");
return NULL;
}
void* ODNodeSetSecureTokenRecoveryPersonal(void)
{
if (verbose) puts("STUB: ODNodeSetSecureTokenRecoveryPersonal called");
return NULL;
}
void* ODNodeSetSecureTokenRecoveryPersonalUsingKey(void)
{
if (verbose) puts("STUB: ODNodeSetSecureTokenRecoveryPersonalUsingKey called");
return NULL;
}
void* ODNodeVerifyCredentialsExtended(void)
{
if (verbose) puts("STUB: ODNodeVerifyCredentialsExtended called");
return NULL;
}
void* ODQueryCopyResults(void)
{
if (verbose) puts("STUB: ODQueryCopyResults called");
return NULL;
}
void* ODQueryCreateWithNode(void)
{
if (verbose) puts("STUB: ODQueryCreateWithNode called");
return NULL;
}
void* ODQueryCreateWithNodeType(void)
{
if (verbose) puts("STUB: ODQueryCreateWithNodeType called");
return NULL;
}
void* ODQueryGetTypeID(void)
{
if (verbose) puts("STUB: ODQueryGetTypeID called");
return NULL;
}
void* ODQueryScheduleWithRunLoop(void)
{
if (verbose) puts("STUB: ODQueryScheduleWithRunLoop called");
return NULL;
}
void* ODQuerySetCallback(void)
{
if (verbose) puts("STUB: ODQuerySetCallback called");
return NULL;
}
void* ODQuerySetDispatchQueue(void)
{
if (verbose) puts("STUB: ODQuerySetDispatchQueue called");
return NULL;
}
void* ODQuerySynchronize(void)
{
if (verbose) puts("STUB: ODQuerySynchronize called");
return NULL;
}
void* ODQueryUnscheduleFromRunLoop(void)
{
if (verbose) puts("STUB: ODQueryUnscheduleFromRunLoop called");
return NULL;
}
void* ODRecordAddAccountPolicy(void)
{
if (verbose) puts("STUB: ODRecordAddAccountPolicy called");
return NULL;
}
void* ODRecordAddMember(void)
{
if (verbose) puts("STUB: ODRecordAddMember called");
return NULL;
}
void* ODRecordAddValue(void)
{
if (verbose) puts("STUB: ODRecordAddValue called");
return NULL;
}
void* ODRecordAuthenticationAllowed(void)
{
if (verbose) puts("STUB: ODRecordAuthenticationAllowed called");
return NULL;
}
void* ODRecordChangePassword(void)
{
if (verbose) puts("STUB: ODRecordChangePassword called");
return NULL;
}
void* ODRecordContainsMember(void)
{
if (verbose) puts("STUB: ODRecordContainsMember called");
return NULL;
}
void* ODRecordContainsMemberRefresh(void)
{
if (verbose) puts("STUB: ODRecordContainsMemberRefresh called");
return NULL;
}
void* ODRecordCopyAccountPolicies(void)
{
if (verbose) puts("STUB: ODRecordCopyAccountPolicies called");
return NULL;
}
void* ODRecordCopyDetails(void)
{
if (verbose) puts("STUB: ODRecordCopyDetails called");
return NULL;
}
void* ODRecordCopyEffectivePolicies(void)
{
if (verbose) puts("STUB: ODRecordCopyEffectivePolicies called");
return NULL;
}
void* ODRecordCopyPasswordContentSummary(void)
{
if (verbose) puts("STUB: ODRecordCopyPasswordContentSummary called");
return NULL;
}
void* ODRecordCopyPasswordPolicy(void)
{
if (verbose) puts("STUB: ODRecordCopyPasswordPolicy called");
return NULL;
}
void* ODRecordCopyPolicies(void)
{
if (verbose) puts("STUB: ODRecordCopyPolicies called");
return NULL;
}
void* ODRecordCopySupportedPolicies(void)
{
if (verbose) puts("STUB: ODRecordCopySupportedPolicies called");
return NULL;
}
void* ODRecordCopyValues(void)
{
if (verbose) puts("STUB: ODRecordCopyValues called");
return NULL;
}
void* ODRecordDelete(void)
{
if (verbose) puts("STUB: ODRecordDelete called");
return NULL;
}
void* ODRecordEnumerateMembers(void)
{
if (verbose) puts("STUB: ODRecordEnumerateMembers called");
return NULL;
}
void* ODRecordEnumerateMembership(void)
{
if (verbose) puts("STUB: ODRecordEnumerateMembership called");
return NULL;
}
void* ODRecordGetRecordName(void)
{
if (verbose) puts("STUB: ODRecordGetRecordName called");
return NULL;
}
void* ODRecordGetRecordType(void)
{
if (verbose) puts("STUB: ODRecordGetRecordType called");
return NULL;
}
void* ODRecordGetTypeID(void)
{
if (verbose) puts("STUB: ODRecordGetTypeID called");
return NULL;
}
void* ODRecordPasswordChangeAllowed(void)
{
if (verbose) puts("STUB: ODRecordPasswordChangeAllowed called");
return NULL;
}
void* ODRecordRemoveAccountPolicy(void)
{
if (verbose) puts("STUB: ODRecordRemoveAccountPolicy called");
return NULL;
}
void* ODRecordRemoveMember(void)
{
if (verbose) puts("STUB: ODRecordRemoveMember called");
return NULL;
}
void* ODRecordRemovePolicy(void)
{
if (verbose) puts("STUB: ODRecordRemovePolicy called");
return NULL;
}
void* ODRecordRemoveValue(void)
{
if (verbose) puts("STUB: ODRecordRemoveValue called");
return NULL;
}
void* ODRecordSecondsUntilAuthenticationsExpire(void)
{
if (verbose) puts("STUB: ODRecordSecondsUntilAuthenticationsExpire called");
return NULL;
}
void* ODRecordSecondsUntilPasswordExpires(void)
{
if (verbose) puts("STUB: ODRecordSecondsUntilPasswordExpires called");
return NULL;
}
void* ODRecordSetAccountPolicies(void)
{
if (verbose) puts("STUB: ODRecordSetAccountPolicies called");
return NULL;
}
void* ODRecordSetNodeCredentials(void)
{
if (verbose) puts("STUB: ODRecordSetNodeCredentials called");
return NULL;
}
void* ODRecordSetNodeCredentialsExtended(void)
{
if (verbose) puts("STUB: ODRecordSetNodeCredentialsExtended called");
return NULL;
}
void* ODRecordSetNodeCredentialsUsingKerberosCache(void)
{
if (verbose) puts("STUB: ODRecordSetNodeCredentialsUsingKerberosCache called");
return NULL;
}
void* ODRecordSetNodeCredentialsWithBootstrapToken(void)
{
if (verbose) puts("STUB: ODRecordSetNodeCredentialsWithBootstrapToken called");
return NULL;
}
void* ODRecordSetPolicies(void)
{
if (verbose) puts("STUB: ODRecordSetPolicies called");
return NULL;
}
void* ODRecordSetPolicy(void)
{
if (verbose) puts("STUB: ODRecordSetPolicy called");
return NULL;
}
void* ODRecordSetValue(void)
{
if (verbose) puts("STUB: ODRecordSetValue called");
return NULL;
}
void* ODRecordSynchronize(void)
{
if (verbose) puts("STUB: ODRecordSynchronize called");
return NULL;
}
void* ODRecordVerifyPassword(void)
{
if (verbose) puts("STUB: ODRecordVerifyPassword called");
return NULL;
}
void* ODRecordVerifyPasswordExtended(void)
{
if (verbose) puts("STUB: ODRecordVerifyPasswordExtended called");
return NULL;
}
void* ODRecordWillAuthenticationsExpire(void)
{
if (verbose) puts("STUB: ODRecordWillAuthenticationsExpire called");
return NULL;
}
void* ODRecordWillPasswordExpire(void)
{
if (verbose) puts("STUB: ODRecordWillPasswordExpire called");
return NULL;
}
void* ODSessionCopyNodeNames(void)
{
if (verbose) puts("STUB: ODSessionCopyNodeNames called");
return NULL;
}
void* ODSessionCopySessionKeySupport(void)
{
if (verbose) puts("STUB: ODSessionCopySessionKeySupport called");
return NULL;
}
void* ODSessionCreate(void)
{
if (verbose) puts("STUB: ODSessionCreate called");
return NULL;
}
void* ODSessionCreateWithDSRef(void)
{
if (verbose) puts("STUB: ODSessionCreateWithDSRef called");
return NULL;
}
void* ODSessionGetDSRef(void)
{
if (verbose) puts("STUB: ODSessionGetDSRef called");
return NULL;
}
void* ODSessionGetTypeID(void)
{
if (verbose) puts("STUB: ODSessionGetTypeID called");
return NULL;
}
void* ODSessionIsProxy(void)
{
if (verbose) puts("STUB: ODSessionIsProxy called");
return NULL;
}
void* ODSessionNodeNameIsLocal(void)
{
if (verbose) puts("STUB: ODSessionNodeNameIsLocal called");
return NULL;
}
void* ODSessionProxyAuthorizationForm(void)
{
if (verbose) puts("STUB: ODSessionProxyAuthorizationForm called");
return NULL;
}
void* ODTriggerCancel(void)
{
if (verbose) puts("STUB: ODTriggerCancel called");
return NULL;
}
void* ODTriggerCreateForNodes(void)
{
if (verbose) puts("STUB: ODTriggerCreateForNodes called");
return NULL;
}
void* ODTriggerCreateForRecordAttributes(void)
{
if (verbose) puts("STUB: ODTriggerCreateForRecordAttributes called");
return NULL;
}
void* ODTriggerCreateForRecords(void)
{
if (verbose) puts("STUB: ODTriggerCreateForRecords called");
return NULL;
}
void* ODTriggerCreateForSearch(void)
{
if (verbose) puts("STUB: ODTriggerCreateForSearch called");
return NULL;
}
void* ODTriggerGetTypeID(void)
{
if (verbose) puts("STUB: ODTriggerGetTypeID called");
return NULL;
}
void* _NodeGetNodeTypeName(void)
{
if (verbose) puts("STUB: _NodeGetNodeTypeName called");
return NULL;
}
void* _ODInitialize(void)
{
if (verbose) puts("STUB: _ODInitialize called");
return NULL;
}
void* _ODNodeCreate(void)
{
if (verbose) puts("STUB: _ODNodeCreate called");
return NULL;
}
void* _ODNodeInit(void)
{
if (verbose) puts("STUB: _ODNodeInit called");
return NULL;
}
void* _ODQueryCreate(void)
{
if (verbose) puts("STUB: _ODQueryCreate called");
return NULL;
}
void* _ODQueryGetDelegate(void)
{
if (verbose) puts("STUB: _ODQueryGetDelegate called");
return NULL;
}
void* _ODQueryGetOperationQueue(void)
{
if (verbose) puts("STUB: _ODQueryGetOperationQueue called");
return NULL;
}
void* _ODQueryInit(void)
{
if (verbose) puts("STUB: _ODQueryInit called");
return NULL;
}
void* _ODQuerySetDelegate(void)
{
if (verbose) puts("STUB: _ODQuerySetDelegate called");
return NULL;
}
void* _ODQuerySetOperationQueue(void)
{
if (verbose) puts("STUB: _ODQuerySetOperationQueue called");
return NULL;
}
void* _ODSessionCreate(void)
{
if (verbose) puts("STUB: _ODSessionCreate called");
return NULL;
}
void* _ODSessionGetShared(void)
{
if (verbose) puts("STUB: _ODSessionGetShared called");
return NULL;
}
void* _ODSessionInit(void)
{
if (verbose) puts("STUB: _ODSessionInit called");
return NULL;
}
void* kODSessionDefault = NULL;

View File

@ -0,0 +1,375 @@
/*
* Copyright (c) 2005-2009 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
#include <CoreFoundation/CFString.h>
#define OD_ATTR_ASSIGN(x) CFStringRef kODAttributeType ## x = CFSTR("dsAttrTypeStandard:" # x)
#pragma mark Record Types
CFStringRef kODRecordTypeAttributeTypes = CFSTR("dsRecTypeStandard:AttributeTypes");
CFStringRef kODRecordTypeAFPServer = CFSTR("dsRecTypeStandard:AFPServer");
CFStringRef kODRecordTypeAliases = CFSTR("dsRecTypeStandard:Aliases");
CFStringRef kODRecordTypeAugments = CFSTR("dsRecTypeStandard:Augments");
CFStringRef kODRecordTypeAutomount = CFSTR("dsRecTypeStandard:Automount");
CFStringRef kODRecordTypeAutomountMap = CFSTR("dsRecTypeStandard:AutomountMap");
CFStringRef kODRecordTypeAutoServerSetup = CFSTR("dsRecTypeStandard:AutoServerSetup");
CFStringRef kODRecordTypeBootp = CFSTR("dsRecTypeStandard:Bootp");
CFStringRef kODRecordTypeCertificateAuthorities = CFSTR("dsRecTypeStandard:CertificateAuthorities");
CFStringRef kODRecordTypeComputerLists = CFSTR("dsRecTypeStandard:ComputerLists");
CFStringRef kODRecordTypeComputerGroups = CFSTR("dsRecTypeStandard:ComputerGroups");
CFStringRef kODRecordTypeComputers = CFSTR("dsRecTypeStandard:Computers");
CFStringRef kODRecordTypeConfiguration = CFSTR("dsRecTypeStandard:Config");
CFStringRef kODRecordTypeEthernets = CFSTR("dsRecTypeStandard:Ethernets");
CFStringRef kODRecordTypeFileMakerServers = CFSTR("dsRecTypeStandard:FileMakerServers");
CFStringRef kODRecordTypeFTPServer = CFSTR("dsRecTypeStandard:FTPServer");
CFStringRef kODRecordTypeGroups = CFSTR("dsRecTypeStandard:Groups");
CFStringRef kODRecordTypeHostServices = CFSTR("dsRecTypeStandard:HostServices");
CFStringRef kODRecordTypeHosts = CFSTR("dsRecTypeStandard:Hosts");
CFStringRef kODRecordTypeLDAPServer = CFSTR("dsRecTypeStandard:LDAPServer");
CFStringRef kODRecordTypeLocations = CFSTR("dsRecTypeStandard:Locations");
CFStringRef kODRecordTypeMounts = CFSTR("dsRecTypeStandard:Mounts");
CFStringRef kODRecordTypeNFS = CFSTR("dsRecTypeStandard:NFS");
CFStringRef kODRecordTypeNetDomains = CFSTR("dsRecTypeStandard:NetDomains");
CFStringRef kODRecordTypeNetGroups = CFSTR("dsRecTypeStandard:NetGroups");
CFStringRef kODRecordTypeNetworks = CFSTR("dsRecTypeStandard:Networks");
CFStringRef kODRecordTypePasswordServer = CFSTR("dsRecTypeStandard:PasswordServer");
CFStringRef kODRecordTypePeople = CFSTR("dsRecTypeStandard:People");
CFStringRef kODRecordTypePlugins = CFSTR("dsRecTypeStandard:Plugins");
CFStringRef kODRecordTypePresetComputers = CFSTR("dsRecTypeStandard:PresetComputers");
CFStringRef kODRecordTypePresetComputerGroups = CFSTR("dsRecTypeStandard:PresetComputerGroups");
CFStringRef kODRecordTypePresetComputerLists = CFSTR("dsRecTypeStandard:PresetComputerLists");
CFStringRef kODRecordTypePresetGroups = CFSTR("dsRecTypeStandard:PresetGroups");
CFStringRef kODRecordTypePresetUsers = CFSTR("dsRecTypeStandard:PresetUsers");
CFStringRef kODRecordTypePrintService = CFSTR("dsRecTypeStandard:PrintService");
CFStringRef kODRecordTypePrintServiceUser = CFSTR("dsRecTypeStandard:PrintServiceUser");
CFStringRef kODRecordTypePrinters = CFSTR("dsRecTypeStandard:Printers");
CFStringRef kODRecordTypeProtocols = CFSTR("dsRecTypeStandard:Protocols");
CFStringRef kODRecordTypeQTSServer = CFSTR("dsRecTypeStandard:QTSServer");
CFStringRef kODRecordTypeRecordTypes = CFSTR("dsRecTypeStandard:RecordTypes");
CFStringRef kODRecordTypeResources = CFSTR("dsRecTypeStandard:Resources");
CFStringRef kODRecordTypeRPC = CFSTR("dsRecTypeStandard:RPC");
CFStringRef kODRecordTypeSMBServer = CFSTR("dsRecTypeStandard:SMBServer");
CFStringRef kODRecordTypeServer = CFSTR("dsRecTypeStandard:Server");
CFStringRef kODRecordTypeServices = CFSTR("dsRecTypeStandard:Services");
CFStringRef kODRecordTypeSharePoints = CFSTR("dsRecTypeStandard:SharePoints");
CFStringRef kODRecordTypeUserAuthenticationData = CFSTR("dsRecTypeStandard:UserAuthenticationData");
CFStringRef kODRecordTypeUsers = CFSTR("dsRecTypeStandard:Users");
CFStringRef kODRecordTypeWebServer = CFSTR("dsRecTypeStandard:WebServer");
#pragma mark Attribute Types
CFStringRef kODAttributeTypeAllAttributes = CFSTR("dsAttributesAll");
CFStringRef kODAttributeTypeStandardOnly = CFSTR("dsAttributesStandardAll");
CFStringRef kODAttributeTypeNativeOnly = CFSTR("dsAttributesNativeAll");
CFStringRef kODAttributeTypeMetaAmbiguousName = CFSTR("dsAttrTypeStandard:AppleMetaAmbiguousName");
CFStringRef kODAttributeTypeMetaAugmentedAttributes = CFSTR("dsAttrTypeStandard:AppleMetaAugmentedAttributes");
CFStringRef kODAttributeTypeMetaRecordName = CFSTR("dsAttrTypeStandard:AppleMetaRecordName");
CFStringRef kODAttributeTypeAdminLimits = CFSTR("dsAttrTypeStandard:AdminLimits");
CFStringRef kODAttributeTypeAuthenticationHint = CFSTR("dsAttrTypeStandard:AuthenticationHint");
CFStringRef kODAttributeTypeAllTypes = CFSTR("dsAttrTypeStandard:AttributeTypes");
CFStringRef kODAttributeTypeAuthorityRevocationList = CFSTR("dsAttrTypeStandard:AuthorityRevocationList");
CFStringRef kODAttributeTypeBirthday = CFSTR("dsAttrTypeStandard:Birthday");
CFStringRef kODAttributeTypeCACertificate = CFSTR("dsAttrTypeStandard:CACertificate");
CFStringRef kODAttributeTypeCapacity = CFSTR("dsAttrTypeStandard:Capacity");
CFStringRef kODAttributeTypeCategory = CFSTR("dsAttrTypeStandard:Category");
CFStringRef kODAttributeTypeCertificateRevocationList = CFSTR("dsAttrTypeStandard:CertificateRevocationList");
CFStringRef kODAttributeTypeComment = CFSTR("dsAttrTypeStandard:Comment");
CFStringRef kODAttributeTypeContactGUID = CFSTR("dsAttrTypeStandard:ContactGUID");
CFStringRef kODAttributeTypeContactPerson = CFSTR("dsAttrTypeStandard:ContactPerson");
CFStringRef kODAttributeTypeCreationTimestamp = CFSTR("dsAttrTypeStandard:CreationTimestamp");
CFStringRef kODAttributeTypeCrossCertificatePair = CFSTR("dsAttrTypeStandard:CrossCertificatePair");
CFStringRef kODAttributeTypeDataStamp = CFSTR("dsAttrTypeStandard:DataStamp");
CFStringRef kODAttributeTypeFullName = CFSTR("dsAttrTypeStandard:RealName");
CFStringRef kODAttributeTypeDNSDomain = CFSTR("dsAttrTypeStandard:DNSDomain");
CFStringRef kODAttributeTypeDNSNameServer = CFSTR("dsAttrTypeStandard:DNSNameServer");
CFStringRef kODAttributeTypeENetAddress = CFSTR("dsAttrTypeStandard:ENetAddress");
CFStringRef kODAttributeTypeExpire = CFSTR("dsAttrTypeStandard:Expire");
CFStringRef kODAttributeTypeFirstName = CFSTR("dsAttrTypeStandard:FirstName");
CFStringRef kODAttributeTypeGUID = CFSTR("dsAttrTypeStandard:GeneratedUID");
CFStringRef kODAttributeTypeHomeDirectoryQuota = CFSTR("dsAttrTypeStandard:HomeDirectoryQuota");
CFStringRef kODAttributeTypeHomeDirectorySoftQuota = CFSTR("dsAttrTypeStandard:HomeDirectorySoftQuota");
CFStringRef kODAttributeTypeHomeLocOwner = CFSTR("dsAttrTypeStandard:HomeLocOwner");
CFStringRef kODAttributeTypeInternetAlias = CFSTR("dsAttrTypeStandard:InetAlias");
CFStringRef kODAttributeTypeKDCConfigData = CFSTR("dsAttrTypeStandard:KDCConfigData");
CFStringRef kODAttributeTypeLastName = CFSTR("dsAttrTypeStandard:LastName");
CFStringRef kODAttributeTypeLDAPSearchBaseSuffix = CFSTR("dsAttrTypeStandard:LDAPSearchBaseSuffix");
CFStringRef kODAttributeTypeLocation = CFSTR("dsAttrTypeStandard:Location");
CFStringRef kODAttributeTypeMapGUID = CFSTR("dsAttrTypeStandard:MapGUID");
CFStringRef kODAttributeTypeMCXFlags = CFSTR("dsAttrTypeStandard:MCXFlags");
CFStringRef kODAttributeTypeMCXSettings = CFSTR("dsAttrTypeStandard:MCXSettings");
CFStringRef kODAttributeTypeMailAttribute = CFSTR("dsAttrTypeStandard:MailAttribute");
CFStringRef kODAttributeTypeMetaAutomountMap = CFSTR("dsAttrTypeStandard:MetaAutomountMap");
CFStringRef kODAttributeTypeMiddleName = CFSTR("dsAttrTypeStandard:MiddleName");
CFStringRef kODAttributeTypeModificationTimestamp = CFSTR("dsAttrTypeStandard:ModificationTimestamp");
CFStringRef kODAttributeTypeNFSHomeDirectory = CFSTR("dsAttrTypeStandard:NFSHomeDirectory");
CFStringRef kODAttributeTypeNote = CFSTR("dsAttrTypeStandard:Note");
CFStringRef kODAttributeTypeOwner = CFSTR("dsAttrTypeStandard:Owner");
CFStringRef kODAttributeTypeOwnerGUID = CFSTR("dsAttrTypeStandard:OwnerGUID");
CFStringRef kODAttributeTypePassword = CFSTR("dsAttrTypeStandard:Password");
CFStringRef kODAttributeTypePasswordPlus = CFSTR("dsAttrTypeStandard:PasswordPlus");
CFStringRef kODAttributeTypePasswordPolicyOptions = CFSTR("dsAttrTypeStandard:PasswordPolicyOptions");
CFStringRef kODAttributeTypePasswordServerList = CFSTR("dsAttrTypeStandard:PasswordServerList");
CFStringRef kODAttributeTypePasswordServerLocation = CFSTR("dsAttrTypeStandard:PasswordServerLocation");
CFStringRef kODAttributeTypePicture = CFSTR("dsAttrTypeStandard:Picture");
CFStringRef kODAttributeTypePort = CFSTR("dsAttrTypeStandard:Port");
CFStringRef kODAttributeTypePresetUserIsAdmin = CFSTR("dsAttrTypeStandard:PresetUserIsAdmin");
CFStringRef kODAttributeTypePrimaryComputerGUID = CFSTR("dsAttrTypeStandard:PrimaryComputerGUID");
CFStringRef kODAttributeTypePrimaryComputerList = CFSTR("dsAttrTypeStandard:PrimaryComputerList");
CFStringRef kODAttributeTypePrimaryGroupID = CFSTR("dsAttrTypeStandard:PrimaryGroupID");
CFStringRef kODAttributeTypePrinter1284DeviceID = CFSTR("dsAttrTypeStandard:Printer1284DeviceID");
CFStringRef kODAttributeTypePrinterLPRHost = CFSTR("dsAttrTypeStandard:PrinterLPRHost");
CFStringRef kODAttributeTypePrinterLPRQueue = CFSTR("dsAttrTypeStandard:PrinterLPRQueue");
CFStringRef kODAttributeTypePrinterMakeAndModel = CFSTR("dsAttrTypeStandard:PrinterMakeAndModel");
CFStringRef kODAttributeTypePrinterType = CFSTR("dsAttrTypeStandard:PrinterType");
CFStringRef kODAttributeTypePrinterURI = CFSTR("dsAttrTypeStandard:PrinterURI");
CFStringRef kODAttributeTypePrinterXRISupported = CFSTR("dsAttrTypeStandard:PrinterXRISupported");
CFStringRef kODAttributeTypePrintServiceInfoText = CFSTR("dsAttrTypeStandard:PrintServiceInfoText");
CFStringRef kODAttributeTypePrintServiceInfoXML = CFSTR("dsAttrTypeStandard:PrintServiceInfoXML");
CFStringRef kODAttributeTypePrintServiceUserData = CFSTR("dsAttrTypeStandard:PrintServiceUserData");
CFStringRef kODAttributeTypeRealUserID = CFSTR("dsAttrTypeStandard:RealUserID");
CFStringRef kODAttributeTypeRelativeDNPrefix = CFSTR("dsAttrTypeStandard:RelativeDNPrefix");
CFStringRef kODAttributeTypeSMBAcctFlags = CFSTR("dsAttrTypeStandard:SMBAccountFlags");
CFStringRef kODAttributeTypeSMBGroupRID = CFSTR("dsAttrTypeStandard:SMBGroupRID");
CFStringRef kODAttributeTypeSMBHome = CFSTR("dsAttrTypeStandard:SMBHome");
CFStringRef kODAttributeTypeSMBHomeDrive = CFSTR("dsAttrTypeStandard:SMBHomeDrive");
CFStringRef kODAttributeTypeSMBKickoffTime = CFSTR("dsAttrTypeStandard:SMBKickoffTime");
CFStringRef kODAttributeTypeSMBLogoffTime = CFSTR("dsAttrTypeStandard:SMBLogoffTime");
CFStringRef kODAttributeTypeSMBLogonTime = CFSTR("dsAttrTypeStandard:SMBLogonTime");
CFStringRef kODAttributeTypeSMBPrimaryGroupSID = CFSTR("dsAttrTypeStandard:SMBPrimaryGroupSID");
CFStringRef kODAttributeTypeSMBPWDLastSet = CFSTR("dsAttrTypeStandard:SMBPasswordLastSet");
CFStringRef kODAttributeTypeSMBProfilePath = CFSTR("dsAttrTypeStandard:SMBProfilePath");
CFStringRef kODAttributeTypeSMBRID = CFSTR("dsAttrTypeStandard:SMBRID");
CFStringRef kODAttributeTypeSMBScriptPath = CFSTR("dsAttrTypeStandard:SMBScriptPath");
CFStringRef kODAttributeTypeSMBSID = CFSTR("dsAttrTypeStandard:SMBSID");
CFStringRef kODAttributeTypeSMBUserWorkstations = CFSTR("dsAttrTypeStandard:SMBUserWorkstations");
CFStringRef kODAttributeTypeServiceType = CFSTR("dsAttrTypeStandard:ServiceType");
CFStringRef kODAttributeTypeSetupAdvertising = CFSTR("dsAttrTypeStandard:SetupAssistantAdvertising");
CFStringRef kODAttributeTypeSetupAutoRegister = CFSTR("dsAttrTypeStandard:SetupAssistantAutoRegister");
CFStringRef kODAttributeTypeSetupLocation = CFSTR("dsAttrTypeStandard:SetupAssistantLocation");
CFStringRef kODAttributeTypeSetupOccupation = CFSTR("dsAttrTypeStandard:Occupation");
CFStringRef kODAttributeTypeTimeToLive = CFSTR("dsAttrTypeStandard:TimeToLive");
CFStringRef kODAttributeTypeTrustInformation = CFSTR("dsAttrTypeStandard:TrustInformation");
CFStringRef kODAttributeTypeUniqueID = CFSTR("dsAttrTypeStandard:UniqueID");
CFStringRef kODAttributeTypeUserCertificate = CFSTR("dsAttrTypeStandard:UserCertificate");
CFStringRef kODAttributeTypeUserPKCS12Data = CFSTR("dsAttrTypeStandard:UserPKCS12Data");
CFStringRef kODAttributeTypeUserShell = CFSTR("dsAttrTypeStandard:UserShell");
CFStringRef kODAttributeTypeUserSMIMECertificate = CFSTR("dsAttrTypeStandard:UserSMIMECertificate");
CFStringRef kODAttributeTypeVFSDumpFreq = CFSTR("dsAttrTypeStandard:VFSDumpFreq");
CFStringRef kODAttributeTypeVFSLinkDir = CFSTR("dsAttrTypeStandard:VFSLinkDir");
CFStringRef kODAttributeTypeVFSPassNo = CFSTR("dsAttrTypeStandard:VFSPassNo");
CFStringRef kODAttributeTypeVFSType = CFSTR("dsAttrTypeStandard:VFSType");
CFStringRef kODAttributeTypeWeblogURI = CFSTR("dsAttrTypeStandard:WeblogURI");
CFStringRef kODAttributeTypeXMLPlist = CFSTR("dsAttrTypeStandard:XMLPlist");
CFStringRef kODAttributeTypeProtocolNumber = CFSTR("dsAttrTypeStandard:ProtocolNumber");
CFStringRef kODAttributeTypeRPCNumber = CFSTR("dsAttrTypeStandard:RPCNumber");
CFStringRef kODAttributeTypeNetworkNumber = CFSTR("dsAttrTypeStandard:NetworkNumber");
CFStringRef kODAttributeTypeAccessControlEntry = CFSTR("dsAttrTypeStandard:AccessControlEntry");
CFStringRef kODAttributeTypeAddressLine1 = CFSTR("dsAttrTypeStandard:AddressLine1");
CFStringRef kODAttributeTypeAddressLine2 = CFSTR("dsAttrTypeStandard:AddressLine2");
CFStringRef kODAttributeTypeAddressLine3 = CFSTR("dsAttrTypeStandard:AddressLine3");
CFStringRef kODAttributeTypeAreaCode = CFSTR("dsAttrTypeStandard:AreaCode");
CFStringRef kODAttributeTypeAuthenticationAuthority = CFSTR("dsAttrTypeStandard:AuthenticationAuthority");
CFStringRef kODAttributeTypeAutomountInformation = CFSTR("dsAttrTypeStandard:AutomountInformation");
CFStringRef kODAttributeTypeBootParams = CFSTR("dsAttrTypeStandard:BootParams");
CFStringRef kODAttributeTypeBuilding = CFSTR("dsAttrTypeStandard:Building");
CFStringRef kODAttributeTypeServicesLocator = CFSTR("dsAttrTypeStandard:ServicesLocator");
CFStringRef kODAttributeTypeCity = CFSTR("dsAttrTypeStandard:City");
CFStringRef kODAttributeTypeCompany = CFSTR("dsAttrTypeStandard:Company");
CFStringRef kODAttributeTypeComputers = CFSTR("dsAttrTypeStandard:Computers");
CFStringRef kODAttributeTypeCountry = CFSTR("dsAttrTypeStandard:Country");
CFStringRef kODAttributeTypeDepartment = CFSTR("dsAttrTypeStandard:Department");
CFStringRef kODAttributeTypeDNSName = CFSTR("dsAttrTypeStandard:DNSName");
CFStringRef kODAttributeTypeEMailAddress = CFSTR("dsAttrTypeStandard:EMailAddress");
CFStringRef kODAttributeTypeEMailContacts = CFSTR("dsAttrTypeStandard:EMailContacts");
CFStringRef kODAttributeTypeFaxNumber = CFSTR("dsAttrTypeStandard:FAXNumber");
CFStringRef kODAttributeTypeGroup = CFSTR("dsAttrTypeStandard:Group");
CFStringRef kODAttributeTypeGroupMembers = CFSTR("dsAttrTypeStandard:GroupMembers");
CFStringRef kODAttributeTypeGroupMembership = CFSTR("dsAttrTypeStandard:GroupMembership");
CFStringRef kODAttributeTypeGroupServices = CFSTR("dsAttrTypeStandard:GroupServices");
CFStringRef kODAttributeTypeHomePhoneNumber = CFSTR("dsAttrTypeStandard:HomePhoneNumber");
CFStringRef kODAttributeTypeHTML = CFSTR("dsAttrTypeStandard:HTML");
CFStringRef kODAttributeTypeHomeDirectory = CFSTR("dsAttrTypeStandard:HomeDirectory");
CFStringRef kODAttributeTypeIMHandle = CFSTR("dsAttrTypeStandard:IMHandle");
CFStringRef kODAttributeTypeIPAddress = CFSTR("dsAttrTypeStandard:IPAddress");
CFStringRef kODAttributeTypeIPAddressAndENetAddress = CFSTR("dsAttrTypeStandard:IPAddressAndENetAddress");
CFStringRef kODAttributeTypeIPv6Address = CFSTR("dsAttrTypeStandard:IPv6Address");
CFStringRef kODAttributeTypeJPEGPhoto = CFSTR("dsAttrTypeStandard:JPEGPhoto");
CFStringRef kODAttributeTypeJobTitle = CFSTR("dsAttrTypeStandard:JobTitle");
CFStringRef kODAttributeTypeKDCAuthKey = CFSTR("dsAttrTypeStandard:KDCAuthKey");
CFStringRef kODAttributeTypeKeywords = CFSTR("dsAttrTypeStandard:Keywords");
CFStringRef kODAttributeTypeLDAPReadReplicas = CFSTR("dsAttrTypeStandard:LDAPReadReplicas");
CFStringRef kODAttributeTypeLDAPWriteReplicas = CFSTR("dsAttrTypeStandard:LDAPWriteReplicas");
CFStringRef kODAttributeTypeMapCoordinates = CFSTR("dsAttrTypeStandard:MapCoordinates");
CFStringRef kODAttributeTypeMapURI = CFSTR("dsAttrTypeStandard:MapURI");
CFStringRef kODAttributeTypeMIME = CFSTR("dsAttrTypeStandard:MIME");
CFStringRef kODAttributeTypeMobileNumber = CFSTR("dsAttrTypeStandard:MobileNumber");
CFStringRef kODAttributeTypeNestedGroups = CFSTR("dsAttrTypeStandard:NestedGroups");
CFStringRef kODAttributeTypeNetGroups = CFSTR("dsAttrTypeStandard:NetGroups");
CFStringRef kODAttributeTypeNickName = CFSTR("dsAttrTypeStandard:NickName");
CFStringRef kODAttributeTypeOrganizationInfo = CFSTR("dsAttrTypeStandard:OrganizationInfo");
CFStringRef kODAttributeTypeOrganizationName = CFSTR("dsAttrTypeStandard:OrganizationName");
CFStringRef kODAttributeTypePagerNumber = CFSTR("dsAttrTypeStandard:PagerNumber");
CFStringRef kODAttributeTypePhoneContacts = CFSTR("dsAttrTypeStandard:PhoneContacts");
CFStringRef kODAttributeTypePhoneNumber = CFSTR("dsAttrTypeStandard:PhoneNumber");
CFStringRef kODAttributeTypePGPPublicKey = CFSTR("dsAttrTypeStandard:PGPPublicKey");
CFStringRef kODAttributeTypePostalAddress = CFSTR("dsAttrTypeStandard:PostalAddress");
CFStringRef kODAttributeTypePostalAddressContacts = CFSTR("dsAttrTypeStandard:PostalAddressContacts");
CFStringRef kODAttributeTypePostalCode = CFSTR("dsAttrTypeStandard:PostalCode");
CFStringRef kODAttributeTypeNamePrefix = CFSTR("dsAttrTypeStandard:NamePrefix");
CFStringRef kODAttributeTypeProtocols = CFSTR("dsAttrTypeStandard:Protocols");
CFStringRef kODAttributeTypeRecordName = CFSTR("dsAttrTypeStandard:RecordName");
CFStringRef kODAttributeTypeRelationships = CFSTR("dsAttrTypeStandard:Relationships");
CFStringRef kODAttributeTypeResourceInfo = CFSTR("dsAttrTypeStandard:ResourceInfo");
CFStringRef kODAttributeTypeResourceType = CFSTR("dsAttrTypeStandard:ResourceType");
CFStringRef kODAttributeTypeState = CFSTR("dsAttrTypeStandard:State");
CFStringRef kODAttributeTypeStreet = CFSTR("dsAttrTypeStandard:Street");
CFStringRef kODAttributeTypeNameSuffix = CFSTR("dsAttrTypeStandard:NameSuffix");
CFStringRef kODAttributeTypeURL = CFSTR("dsAttrTypeStandard:URL");
CFStringRef kODAttributeTypeVFSOpts = CFSTR("dsAttrTypeStandard:VFSOpts");
CFStringRef kODAttributeTypeAlias = CFSTR("dsAttrTypeStandard:Alias");
CFStringRef kODAttributeTypeAuthCredential = CFSTR("dsAttrTypeStandard:AuthCredential");
CFStringRef kODAttributeTypeCopyTimestamp = CFSTR("dsAttrTypeStandard:CopyTimestamp");
CFStringRef kODAttributeTypeDateRecordCreated = CFSTR("dsAttrTypeStandard:DateRecordCreated");
CFStringRef kODAttributeTypeKerberosRealm = CFSTR("dsAttrTypeStandard:KerberosRealm");
CFStringRef kODAttributeTypeKerberosServices = CFSTR("dsAttrTypeStandard:KerberosServices");
CFStringRef kODAttributeTypeNTDomainComputerAccount = CFSTR("dsAttrTypeStandard:NTDomainComputerAccount");
CFStringRef kODAttributeTypeOriginalHomeDirectory = CFSTR("dsAttrTypeStandard:OriginalHomeDirectory");
CFStringRef kODAttributeTypeOriginalNFSHomeDirectory = CFSTR("dsAttrTypeStandard:OriginalNFSHomeDirectory");
CFStringRef kODAttributeTypeOriginalNodeName = CFSTR("dsAttrTypeStandard:OriginalNodeName");
CFStringRef kODAttributeTypePrimaryNTDomain = CFSTR("dsAttrTypeStandard:PrimaryNTDomain");
CFStringRef kODAttributeTypePwdAgingPolicy = CFSTR("dsAttrTypeStandard:PwdAgingPolicy");
CFStringRef kODAttributeTypeReadOnlyNode = CFSTR("dsAttrTypeStandard:ReadOnlyNode");
CFStringRef kODAttributeTypeTimePackage = CFSTR("dsAttrTypeStandard:TimePackage");
CFStringRef kODAttributeTypeTotalSize = CFSTR("dsAttrTypeStandard:TotalSize");
CFStringRef kODAttributeTypeAuthMethod = CFSTR("dsAttrTypeStandard:AuthMethod");
CFStringRef kODAttributeTypeMetaNodeLocation = CFSTR("dsAttrTypeStandard:AppleMetaNodeLocation");
CFStringRef kODAttributeTypeNodePath = CFSTR("dsAttrTypeStandard:NodePath");
CFStringRef kODAttributeTypePlugInInfo = CFSTR("dsAttrTypeStandard:PlugInInfo");
CFStringRef kODAttributeTypeRecordType = CFSTR("dsAttrTypeStandard:RecordType");
CFStringRef kODAttributeTypeSchema = CFSTR("dsAttrTypeStandard:Scheama");
CFStringRef kODAttributeTypeSubNodes = CFSTR("dsAttrTypeStandard:SubNodes");
CFStringRef kODAttributeTypeNetGroupTriplet = CFSTR("dsAttrTypeStandard:NetGroupTriplet");
CFStringRef kODAttributeTypeSearchPath = CFSTR("dsAttrTypeStandard:SearchPath");
CFStringRef kODAttributeTypeSearchPolicy = CFSTR("dsAttrTypeStandard:SearchPolicy");
CFStringRef kODAttributeTypeAutomaticSearchPath = CFSTR("dsAttrTypeStandard:NSPSearchPath");
CFStringRef kODAttributeTypeLocalOnlySearchPath = CFSTR("dsAttrTypeStandard:LSPSearchPath");
CFStringRef kODAttributeTypeCustomSearchPath = CFSTR("dsAttrTypeStandard:CSPSearchPath");
CFStringRef kODAttributeTypeAdvertisedServices = CFSTR("dsAttrTypeStandard:AdvertisedServices");
CFStringRef kODAttributeTypeLocaleRelay = CFSTR("dsAttrTypeStandard:LocaleRelay");
CFStringRef kODAttributeTypeLocaleSubnets = CFSTR("dsAttrTypeStandard:LocaleSubnets");
CFStringRef kODAttributeTypeNetworkInterfaces = CFSTR("dsAttrTypeStandard:NetworkInterfaces");
CFStringRef kODAttributeTypeParentLocales = CFSTR("dsAttrTypeStandard:ParentLocales");
CFStringRef kODAttributeTypePrimaryLocale = CFSTR("dsAttrTypeStandard:PrimaryLocale");
OD_ATTR_ASSIGN(KerberosACL);
OD_ATTR_ASSIGN(KerberosKeySet);
OD_ATTR_ASSIGN(KerberosPrincipalACL);
OD_ATTR_ASSIGN(KerberosPrincipalAliases);
OD_ATTR_ASSIGN(KerberosPrincipalName);
OD_ATTR_ASSIGN(KerberosTicketPolicy);
#pragma mark Attribute Types (Configure Node)
CFStringRef kODAttributeTypeBuildVersion = CFSTR("dsAttrTypeStandard:BuildVersion");
CFStringRef kODAttributeTypeConfigAvailable = CFSTR("dsAttrTypeStandard:ConfigAvail");
CFStringRef kODAttributeTypeConfigFile = CFSTR("dsAttrTypeStandard:ConfigFile");
CFStringRef kODAttributeTypeCoreFWVersion = CFSTR("dsAttrTypeStandard:CoreFWVersion");
CFStringRef kODAttributeTypeFunctionalState = CFSTR("dsAttrTypeStandard:FunctionalState");
CFStringRef kODAttributeTypeFWVersion = CFSTR("dsAttrTypeStandard:FWVersion");
CFStringRef kODAttributeTypePluginIndex = CFSTR("dsAttrTypeStandard:PluginIndex");
CFStringRef kODAttributeTypeNumTableList = CFSTR("dsAttrTypeStandard:RefNumTableList");
CFStringRef kODAttributeTypeVersion = CFSTR("dsAttrTypeStandard:Version");
CFStringRef kODAttributeTypePIDValue = CFSTR("dsAttrTypeStandard:PIDValue");
CFStringRef kODAttributeTypeProcessName = CFSTR("dsAttrTypeStandard:ProcessName");
CFStringRef kODAttributeTypeTotalRefCount = CFSTR("dsAttrTypeStandard:TotalRefCount");
CFStringRef kODAttributeTypeDirRefCount = CFSTR("dsAttrTypeStandard:DirRefCount");
CFStringRef kODAttributeTypeNodeRefCount = CFSTR("dsAttrTypeStandard:NodeRefCount");
CFStringRef kODAttributeTypeRecRefCount = CFSTR("dsAttrTypeStandard:RecRefCount");
CFStringRef kODAttributeTypeAttrListRefCount = CFSTR("dsAttrTypeStandard:AttrListRefCount");
CFStringRef kODAttributeTypeAttrListValueRefCount = CFSTR("dsAttrTypeStandard:AttrListValueRefCount");
CFStringRef kODAttributeTypeDirRefs = CFSTR("dsAttrTypeStandard:DirRefs");
CFStringRef kODAttributeTypeNodeRefs = CFSTR("dsAttrTypeStandard:NodeRefs");
CFStringRef kODAttributeTypeRecRefs = CFSTR("dsAttrTypeStandard:RecRefs");
CFStringRef kODAttributeTypeAttrListRefs = CFSTR("dsAttrTypeStandard:AttrListRefs");
CFStringRef kODAttributeTypeAttrListValueRefs = CFSTR("dsAttrTypeStandard:AttrListValueRefs");
CFStringRef kODAttributeTypeOperatingSystem = CFSTR("dsAttrTypeStandard:OperatingSystem");
CFStringRef kODAttributeTypeOperatingSystemVersion = CFSTR("dsAttrTypeStandard:OperatingSystemVersion");
CFStringRef kODAttributeTypeAltSecurityIdentities = CFSTR("dsAttrTypeStandard:AltSecurityIdentities");
CFStringRef kODAttributeTypeHardwareUUID = CFSTR("dsAttrTypeStandard:HardwareUUID");
#pragma mark Authentication Types
CFStringRef kODAuthenticationType2WayRandom = CFSTR("dsAuthMethodStandard:dsAuth2WayRandom");
CFStringRef kODAuthenticationType2WayRandomChangePasswd = CFSTR("dsAuthMethodStandard:dsAuth2WayRandomChangePasswd");
CFStringRef kODAuthenticationTypeAPOP = CFSTR("dsAuthMethodStandard:dsAuthAPOP");
CFStringRef kODAuthenticationTypeCRAM_MD5 = CFSTR("dsAuthMethodStandard:dsAuthNodeCRAM-MD5");
CFStringRef kODAuthenticationTypeChangePasswd = CFSTR("dsAuthMethodStandard:dsAuthChangePasswd");
CFStringRef kODAuthenticationTypeClearText = CFSTR("dsAuthMethodStandard:dsAuthClearText");
CFStringRef kODAuthenticationTypeCrypt = CFSTR("dsAuthMethodStandard:dsAuthCrypt");
CFStringRef kODAuthenticationTypeDIGEST_MD5 = CFSTR("dsAuthMethodStandard:dsAuthNodeDIGEST-MD5");
CFStringRef kODAuthenticationTypeDeleteUser = CFSTR("dsAuthMethodStandard:dsAuthDeleteUser");
CFStringRef kODAuthenticationTypeGetEffectivePolicy = CFSTR("dsAuthMethodStandard:dsAuthGetEffectivePolicy");
CFStringRef kODAuthenticationTypeGetGlobalPolicy = CFSTR("dsAuthMethodStandard:dsAuthGetGlobalPolicy");
CFStringRef kODAuthenticationTypeGetKerberosPrincipal = CFSTR("dsAuthMethodStandard:dsAuthGetKerberosPrincipal");
CFStringRef kODAuthenticationTypeGetPolicy = CFSTR("dsAuthMethodStandard:dsAuthGetPolicy");
CFStringRef kODAuthenticationTypeGetUserData = CFSTR("dsAuthMethodStandard:dsAuthGetUserData");
CFStringRef kODAuthenticationTypeGetUserName = CFSTR("dsAuthMethodStandard:dsAuthGetUserName");
CFStringRef kODAuthenticationTypeKerberosTickets = CFSTR("dsAuthMethodStandard:dsAuthKerberosTickets");
CFStringRef kODAuthenticationTypeMPPEMasterKeys = CFSTR("dsAuthMethodStandard:dsAuthMPPEMasterKeys");
CFStringRef kODAuthenticationTypeMSCHAP2 = CFSTR("dsAuthMethodStandard:dsAuthMSCHAP2");
CFStringRef kODAuthenticationTypeNTLMv2 = CFSTR("dsAuthMethodStandard:dsAuthNodeNTLMv2");
CFStringRef kODAuthenticationTypeNTLMv2WithSessionKey = CFSTR("dsAuthMethodStandard:dsAuthNodeNTLMv2WithSessionKey");
CFStringRef kODAuthenticationTypeNewUser = CFSTR("dsAuthMethodStandard:dsAuthNewUser");
CFStringRef kODAuthenticationTypeNewUserWithPolicy = CFSTR("dsAuthMethodStandard:dsAuthNewUserWithPolicy");
CFStringRef kODAuthenticationTypeNodeNativeClearTextOK = CFSTR("dsAuthMethodStandard:dsAuthNodeNativeCanUseClearText");
CFStringRef kODAuthenticationTypeNodeNativeNoClearText = CFSTR("dsAuthMethodStandard:dsAuthNodeNativeCannotUseClearText");
CFStringRef kODAuthenticationTypeNodeNativeRetainCredential = CFSTR("dsAuthMethodStandard:dsAuthNodeNativeRetainCredential");
CFStringRef kODAuthenticationTypeNodePPS = CFSTR("dsAuthMethodStandard:dsAuthNodePPS");
CFStringRef kODAuthenticationTypeReadSecureHash = CFSTR("dsAuthMethodStandard:dsAuthReadSecureHash");
CFStringRef kODAuthenticationTypeSMBNTv2UserSessionKey = CFSTR("dsAuthMethodStandard:dsSMBNTv2UserSessionKey");
CFStringRef kODAuthenticationTypeSMBWorkstationCredentialSessionKey = CFSTR("dsAuthMethodStandard:dsAuthSMBWorkstationCredentialSessionKey");
CFStringRef kODAuthenticationTypeSMB_LM_Key = CFSTR("dsAuthMethodStandard:dsAuthSMBLMKey");
CFStringRef kODAuthenticationTypeSMB_NT_Key = CFSTR("dsAuthMethodStandard:dsAuthSMBNTKey");
CFStringRef kODAuthenticationTypeSMB_NT_UserSessionKey = CFSTR("dsAuthMethodStandard:dsAuthSMBNTUserSessionKey");
CFStringRef kODAuthenticationTypeSMB_NT_WithUserSessionKey = CFSTR("dsAuthMethodStandard:dsAuthNTWithSessionKey");
CFStringRef kODAuthenticationTypeSecureHash = CFSTR("dsAuthMethodStandard:dsAuthSecureHash");
CFStringRef kODAuthenticationTypeSetCertificateHashAsCurrent = CFSTR("dsAuthMethodStandard:dsAuthSetCertificateHashAsRoot");
CFStringRef kODAuthenticationTypeSetGlobalPolicy = CFSTR("dsAuthMethodStandard:dsAuthSetGlobalPolicy");
CFStringRef kODAuthenticationTypeSetLMHash = CFSTR("dsAuthMethodStandard:dsAuthSetLMHash");
CFStringRef kODAuthenticationTypeSetNTHash = CFSTR("dsAuthMethodStandard:dsAuthSetNTHash");
CFStringRef kODAuthenticationTypeSetPassword = CFSTR("dsAuthMethodStandard:dsAuthSetPasswd");
CFStringRef kODAuthenticationTypeSetPasswordAsCurrent = CFSTR("dsAuthMethodStandard:dsAuthSetPasswdAsRoot");
CFStringRef kODAuthenticationTypeSetPolicy = CFSTR("dsAuthMethodStandard:dsAuthSetPolicy");
CFStringRef kODAuthenticationTypeSetPolicyAsCurrent = CFSTR("dsAuthMethodStandard:dsAuthSetPolicyAsRoot");
CFStringRef kODAuthenticationTypeSetUserData = CFSTR("dsAuthMethodStandard:dsAuthSetUserData");
CFStringRef kODAuthenticationTypeSetUserName = CFSTR("dsAuthMethodStandard:dsAuthSetUserName");
CFStringRef kODAuthenticationTypeSetWorkstationPassword = CFSTR("dsAuthMethodStandard:dsAuthSetWorkstationPasswd");
CFStringRef kODAuthenticationTypeWithAuthorizationRef = CFSTR("dsAuthMethodStandard:dsAuthWithAuthorizationRef");
CFStringRef kODAuthenticationTypeWriteSecureHash = CFSTR("dsAuthMethodStandard:dsAuthWriteSecureHash");

View File

@ -51,3 +51,4 @@ add_subdirectory(StoreKit)
add_subdirectory(SystemConfiguration)
add_subdirectory(VideoToolbox)
add_subdirectory(WebKit)
add_subdirectory(CFOpenDirectory)