Пример #1
0
static const char *
swap_on_off_geli( const char *name, char *mntops, int doingall ) {
	struct stat sb;
	char *dname, *args;
	int error;
	
	error = stat( name, &sb );
	
	if ( which_prog == SWAPON ) do {
		
		if ( error == 0 ) break;
		
		args = swap_on_geli_args( mntops );
		if ( args == NULL ) return ( NULL );
		
		dname = swap_basename( name );
		if ( dname == NULL ) {
			free( args );
			return ( NULL );
		}
		
		error = run_cmd( NULL, "%s onetime%s %s", _PATH_GELI, args, dname );
		
		free( dname );
		free( args );
		
		if ( error ) {
			
			if ( qflag == 0 ) warnx( "%s: Invalid parameters", name );
			return ( NULL );
		}
	} while ( 0 );
	
	return ( swap_on_off_sfile( name, doingall ) );
}
Пример #2
0
static const char *
swap_on_off_gbde(const char *name, int doingall)
{
	const char *ret;
	char pass[64 * 2 + 1];
	unsigned char bpass[64];
	char *dname;
	int i, error;

	dname = swap_basename(name);
	if (dname == NULL)
		return (NULL);

	if (which_prog == SWAPON) {
		arc4random_buf(bpass, sizeof(bpass));
		for (i = 0; i < (int)sizeof(bpass); i++)
			sprintf(&pass[2 * i], "%02x", bpass[i]);
		pass[sizeof(pass) - 1] = '\0';

		error = run_cmd(NULL, "%s init %s -P %s", _PATH_GBDE,
		    dname, pass);
		if (error) {
			/* bde device found.  Ignore it. */
			free(dname);
			if (qflag == 0)
				warnx("%s: Device already in use", name);
			return (NULL);
		}
		error = run_cmd(NULL, "%s attach %s -p %s", _PATH_GBDE,
		    dname, pass);
		free(dname);
		if (error) {
			warnx("gbde (attach) error: %s", name);
			return (NULL);
		}
	}

	ret = swap_on_off_sfile(name, doingall);

	if (which_prog == SWAPOFF) {
		error = run_cmd(NULL, "%s detach %s", _PATH_GBDE, dname);
		free(dname);
		if (error) {
			/* bde device not found.  Ignore it. */
			if (qflag == 0)
				warnx("%s: Device not found", name);
			return (NULL);
		}
	}

	return (ret);
}