#include <libc.h>
#include <stdlib.h>
#include <unistd.h>
#include <CoreFoundation/CoreFoundation.h>
#define USE_SYSTEMCONFIGURATION_PUBLIC_APIS
#include <SystemConfiguration/SystemConfiguration.h>
#include "Configuration.h"
#ifdef _SCDYNAMICSTORE_H // use the new APIS
static int
getBoolSettingForKey(CFStringRef key)
{
SCPreferencesRef session;
CFTypeRef value;
int retVal = -1;
session = SCPreferencesCreate(NULL,
CFSTR("autodiskmount"),
CFSTR("autodiskmount.xml"));
if (!session) {
retVal = -1;
} else {
value = SCPreferencesGetValue(session, key);
if (!value) {
retVal = -1;
} else {
if (CFEqual(value, kCFBooleanTrue)) {
retVal = 1;
} else {
retVal = 0;
}
}
CFRelease(session);
}
return retVal;
}
#else
static int
getBoolSettingForKey(CFStringRef key)
{
SCPSessionRef session;
SCPStatus status;
CFTypeRef value;
int retVal = -1;
status = SCPOpen(&session,
CFSTR("autodiskmount"),
CFSTR("autodiskmount.xml"),
0);
if (status != SCP_OK) {
retVal = -1;
} else {
status = SCPGet(session, key, &value);
if (status == SCP_NOKEY) {
retVal = -1;
} else {
if (CFEqual(value, kCFBooleanTrue)) {
retVal = 1;
} else {
retVal = 0;
}
}
status = SCPClose(&session);
}
return retVal;
}
#endif
int
mountWithoutConsoleUser(void)
{
int setting = getBoolSettingForKey(CFSTR("AutomountDisksWithoutUserLogin"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
canMountRemovableDisks(void)
{
int setting = getBoolSettingForKey(CFSTR("AutomountDisks"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
consoleDevicesAreOwnedByMountingUser(void)
{
int setting = getBoolSettingForKey(CFSTR("ModifyDevEntriesForRemovable"));
if (setting == 1 || setting == 0) {
return setting;
}
return TRUE;
}
int
shouldFsckReadOnlyMedia(void)
{
int setting = getBoolSettingForKey(CFSTR("ShouldFsckReadOnlyMedia"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
strictRemovableMediaSettings(void)
{
int setting = getBoolSettingForKey(CFSTR("StrictRemovableMediaPermissions"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
attemptMountRemovableMediaSuid(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountRemovableMediaSuid"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
attemptMountFixedMediaSuid(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountFixedMediaSuid"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
attemptMountRemovableMediaDev(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountRemovableMediaDev"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
attemptMountFixedMediaDev(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountFixedMediaDev"));
if (setting == 1 || setting == 0) {
return setting;
}
return FALSE;
}
int
attemptMountRemovableMediaExe(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountRemovableMediaExe"));
if (setting == 1 || setting == 0) {
return setting;
}
return TRUE;
}
int
attemptMountFixedMediaExe(void)
{
int setting = getBoolSettingForKey(CFSTR("AttemptToMountFixedMediaExe"));
if (setting == 1 || setting == 0) {
return setting;
}
return TRUE;
}