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 ) ); }
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); }