#include <SystemConfiguration/SCP.h>
#include "SCPPrivate.h"
#include <SystemConfiguration/SCD.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/errno.h>
SCPStatus
SCPClose(SCPSessionRef *session)
{
SCPSessionPrivateRef sessionPrivate;
if ((session == NULL) || (*session == NULL)) {
return SCP_FAILED;
}
sessionPrivate = (SCPSessionPrivateRef)*session;
if (sessionPrivate->name) CFRelease(sessionPrivate->name);
if (sessionPrivate->prefsID) CFRelease(sessionPrivate->prefsID);
if (sessionPrivate->user) CFRelease(sessionPrivate->user);
if (sessionPrivate->path) CFAllocatorDeallocate(NULL, sessionPrivate->path);
if (sessionPrivate->signature) CFRelease(sessionPrivate->signature);
if (sessionPrivate->session) {
SCDStatus scd_status;
scd_status = SCDClose(&sessionPrivate->session);
if (scd_status != SCD_OK) {
SCDLog(LOG_INFO, CFSTR("SCDClose() failed: %s"), SCDError(scd_status));
}
}
if (sessionPrivate->sessionKeyLock) CFRelease(sessionPrivate->sessionKeyLock);
if (sessionPrivate->sessionKeyCommit) CFRelease(sessionPrivate->sessionKeyCommit);
if (sessionPrivate->sessionKeyApply) CFRelease(sessionPrivate->sessionKeyApply);
if (sessionPrivate->prefs) CFRelease(sessionPrivate->prefs);
CFAllocatorDeallocate(NULL, sessionPrivate);
*session = NULL;
return SCP_OK;
}