#include <lber.h>
#include <ldap.h>
#include <ldap_private.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <syslog.h>
#include <Security/Authorization.h>
#include "PrivateTypes.h"
#include "DSLDAPUtils.h"
#include "GetMACAddress.h"
extern uint32_t gSystemGoingToSleep;
CFMutableDictionaryRef GetXMLFromBuffer( tDataBufferPtr inBuffer )
{
SInt32 iBufLen = inBuffer->fBufferLength;
CFMutableDictionaryRef cfXMLDict = NULL;
SInt32 iXMLDataLength = 0;
CFDataRef cfXMLData = NULL;
iXMLDataLength = iBufLen - sizeof( AuthorizationExternalForm );
if ( iXMLDataLength > 0 )
{
cfXMLData = CFDataCreate( kCFAllocatorDefault, (UInt8 *)(inBuffer->fBufferData + sizeof(AuthorizationExternalForm)), iXMLDataLength );
if ( cfXMLData != NULL )
{
cfXMLDict = (CFMutableDictionaryRef) CFPropertyListCreateFromXMLData( kCFAllocatorDefault, cfXMLData, kCFPropertyListMutableContainersAndLeaves, NULL );
CFRelease( cfXMLData ); cfXMLData = NULL;
}
}
return cfXMLDict;
}
SInt32 PutXMLInBuffer( CFDictionaryRef inXMLDict, tDataBufferPtr outBuffer )
{
CFDataRef cfReturnData = (CFDataRef) CFPropertyListCreateXMLData( kCFAllocatorDefault, inXMLDict );
SInt32 siResult = eDSNoErr;
if ( cfReturnData != NULL )
{
CFRange stRange = CFRangeMake( 0, CFDataGetLength(cfReturnData) );
if ( outBuffer->fBufferSize < (unsigned int) stRange.length )
{
siResult = eDSBufferTooSmall;
}
else
{
CFDataGetBytes( cfReturnData, stRange, (UInt8*)(outBuffer->fBufferData) );
outBuffer->fBufferLength = stRange.length;
}
CFRelease( cfReturnData );
cfReturnData = 0;
}
return siResult;
}
char *
BuildEscapedRDN( const char *inLDAPRDN )
{
char *outLDAPRDN = nil;
UInt32 recNameLen = 0;
UInt32 originalIndex = 0;
UInt32 escapedIndex = 0;
if (inLDAPRDN != nil)
{
recNameLen = strlen(inLDAPRDN);
outLDAPRDN = (char *)calloc(1, 2 * recNameLen + 1);
while (originalIndex < recNameLen)
{
switch (inLDAPRDN[originalIndex])
{
case '#':
case ' ':
case ',':
case '+':
case '"':
case '\\':
case '<':
case '>':
case ';':
outLDAPRDN[escapedIndex] = '\\';
++escapedIndex;
default:
outLDAPRDN[escapedIndex] = inLDAPRDN[originalIndex];
++escapedIndex;
break;
}
++originalIndex;
}
}
return(outLDAPRDN);
}