Example #1
0
DADissenterRef BlockMount(DADiskRef disk, void *context)
{
	CFDictionaryRef description = DADiskCopyDescription(disk);
	CFStringRef name = description ? CFDictionaryGetValue(description, kDADiskDescriptionVolumeNameKey) : NULL;
	DADissenterRef dissenter = NULL;
	bool block = false;
	char *str = NULL;
	if (name) {
		int i;
		CFIndex length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(name), kCFStringEncodingUTF8);
		str = alloca(length + 1);
		CFStringGetCString(name, str, length, kCFStringEncodingUTF8);
		for (i = 0; i < nameCount; i++) {
			if (CFEqual(name, names[i])) {
				block = true;
				break;
			}
		}
	}
	if (block) {
		dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, NULL);
		if(!quiet) if(!quiet) fprintf(stderr, "BLOCKED volume `%s'\n", str);
	} else {
		if(!quiet) if(!quiet) fprintf(stderr, "allowed volume `%s'\n", str);
	}
	if (description) {
		CFRelease(description);
	}
	return dissenter;
}
Example #2
0
void DADiskUnmount( DADiskRef disk, DADiskUnmountOptions options, DADiskUnmountCallback callback, void * context )
{
    DAReturn status;

    status = kDAReturnBadArgument;

    if ( disk )
    {
        status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightUnmount );

        if ( status == kDAReturnSuccess )
        {
            status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskUnmount, disk, options, NULL, NULL, callback, context );
        }
    }

    if ( status )
    {
        if ( callback )
        {
            DADissenterRef dissenter;

            dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL );

            ( callback )( disk, dissenter, context );

            CFRelease( dissenter );
        }
    }
}
Example #3
0
void DADiskClaim( DADiskRef                  disk,
                  DADiskClaimOptions         options,
                  DADiskClaimReleaseCallback release,
                  void *                     releaseContext,
                  DADiskClaimCallback        callback,
                  void *                     callbackContext )
{
    CFNumberRef _release;
    CFNumberRef _releaseContext;
    DAReturn    status;

    status = kDAReturnBadArgument;

    if ( disk )
    {
        _release        = ___CFNumberCreateWithIntegerValue( kCFAllocatorDefault, ( uintptr_t ) release        );
        _releaseContext = ___CFNumberCreateWithIntegerValue( kCFAllocatorDefault, ( uintptr_t ) releaseContext );

        status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskClaim, disk, options, _release, _releaseContext, callback, callbackContext );

        if ( _release        )  CFRelease( _release        );
        if ( _releaseContext )  CFRelease( _releaseContext );
    }

    if ( status )
    {
        if ( callback )
        {
            DADissenterRef dissenter;

            dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL );

            ( callback )( disk, dissenter, callbackContext );

            CFRelease( dissenter );
        }
    }
}
Example #4
0
void DADiskRename( DADiskRef disk, CFStringRef name, DADiskRenameOptions options, DADiskRenameCallback callback, void * context )
{
    DAReturn status;

    status = kDAReturnBadArgument;

    if ( disk )
    {
        if ( name )
        {
            if ( CFGetTypeID( name ) == CFStringGetTypeID( ) )
            {
                status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightRename );

                if ( status == kDAReturnSuccess )
                {
                    status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskRename, disk, options, name, NULL, callback, context );
                }
            }
        }
    }

    if ( status )
    {
        if ( callback )
        {
            DADissenterRef dissenter;

            dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL );

            ( callback )( disk, dissenter, context );

            CFRelease( dissenter );
        }
    }
}
Example #5
0
void DADiskMountWithArguments( DADiskRef           disk,
                               CFURLRef            path,
                               DADiskMountOptions  options,
                               DADiskMountCallback callback,
                               void *              context,
                               CFStringRef         arguments[] )
{
    CFMutableStringRef argument;
    DAReturn           status;

    argument = NULL;

    if ( arguments )
    {
        if ( arguments[0] )
        {
            if ( arguments[1] )
            {
                argument = CFStringCreateMutableCopy( kCFAllocatorDefault, 0, arguments[0] );

                if ( argument )
                {
                    CFIndex index;

                    for ( index = 1; arguments[index]; index++ )
                    {
                        CFStringAppend( argument, CFSTR( "," ) );
                        CFStringAppend( argument, arguments[index] );
                    }
                }
            }
            else
            {
                argument = ( void * ) CFRetain( arguments[0] );
            }
        }
    }

    if ( path )
    {
        char * _path;

        _path = ___CFURLCopyFileSystemRepresentation( path );

        if ( _path )
        {
            char name[MAXPATHLEN];

            if ( realpath( _path, name ) )
            {
                path = CFURLCreateFromFileSystemRepresentation( kCFAllocatorDefault, ( void * ) name, strlen( name ), TRUE );
            }
            else
            {
                CFRetain( path );
            }

            free( _path );
        }
        else
        {
            CFRetain( path );
        }
    }

    status = kDAReturnBadArgument;

    if ( disk )
    {
        status = _DAAuthorize( _DADiskGetSession( disk ), _kDAAuthorizeOptionIsOwner, disk, _kDAAuthorizeRightMount );

        if ( status == kDAReturnSuccess )
        {
            status = __DAQueueRequest( _DADiskGetSession( disk ), _kDADiskMount, disk, options, path ? CFURLGetString( path ) : NULL, argument, callback, context );
        }
    }

    if ( argument )
    {
        CFRelease( argument );
    }

    if ( path )
    {
        CFRelease( path );
    }

    if ( status )
    {
        if ( callback )
        {
            DADissenterRef dissenter;

            dissenter = DADissenterCreate( kCFAllocatorDefault, status, NULL );

            ( callback )( disk, dissenter, context );

            CFRelease( dissenter );
        }
    }
}