@ -1641,6 +1641,9 @@ struct CdrpreskiN {
/** Wether to support media types which are implemented but yet untested */
int allow_untested_media ;
/** Wether to allow libburn pseudo-drives "stdio:<path>" */
int allow_emulated_drives ;
/** Wether an option is given which needs a full bus scan */
int no_whitelist ;
@ -1721,6 +1724,7 @@ int Cdrpreskin_new(struct CdrpreskiN **preskin, int flag)
o - > allow_setuid = 0 ;
o - > allow_fd_source = 0 ;
o - > allow_untested_media = 0 ;
o - > allow_emulated_drives = 0 ;
o - > no_whitelist = 0 ;
o - > no_convert_fs_adr = 0 ;
# ifdef Cdrskin_libburn_has_convert_scsi_adR
@ -2055,6 +2059,9 @@ return:
if ( strcmp ( argv [ i ] , " --abort_handler " ) = = 0 ) {
o - > abort_handler = 3 ;
} else if ( strcmp ( argv [ i ] , " --allow_emulated_drives " ) = = 0 ) {
o - > allow_emulated_drives = 1 ;
} else if ( strcmp ( argv [ i ] , " --allow_setuid " ) = = 0 ) {
o - > allow_setuid = 1 ;
@ -2157,7 +2164,7 @@ set_dev:;
# ifndef Cdrskin_extra_leaN
printf ( " Supported SCSI transports for this platform: \n " ) ;
printf ( " \n Supported SCSI transports for this platform: \n " ) ;
fflush ( stdout ) ;
if ( o - > old_pseudo_scsi_adr ) {
fprintf ( stderr , " \n Transport name: \t \t libburn OLD_PSEUDO \n " ) ;
@ -2183,6 +2190,18 @@ set_dev:;
fprintf ( stderr , " SCSI Bus scanning: \t supported \n " ) ;
fprintf ( stderr , " Open via UNIX device: \t supported \n " ) ;
}
if ( o - > allow_emulated_drives ) {
fprintf ( stderr , " \n Transport name: \t \t libburn on standard i/o \n " ) ;
fprintf ( stderr ,
" Transport descr.: \t write into data files and block devices \n " ) ;
fprintf ( stderr , " Transp. layer ind.: \t stdio: \n " ) ;
fprintf ( stderr , " Target specifier: \t path \n " ) ;
fprintf ( stderr , " Target example: \t \t stdio:/tmp/pseudo_drive \n " ) ;
fprintf ( stderr , " SCSI Bus scanning: \t not supported \n " ) ;
fprintf ( stderr , " Open via UNIX device: \t supported \n " ) ;
} else {
printf ( " \n cdrskin: NOTE : Option --allow_emulated_drives would allow dev=stdio:<path> \n " ) ;
}
# else /* ! Cdrskin_extra_leaN */
@ -2262,6 +2281,8 @@ set_dev:;
printf (
" --adjust_speed_to_drive set only speeds offered by drive and media \n " ) ;
# endif
printf (
" --allow_emulated_drives dev=stdio:<path> on files and block devices \n " ) ;
printf (
" --allow_setuid disable setuid warning (setuid is insecure !) \n " ) ;
printf (
@ -3620,7 +3641,7 @@ wrong_devno:;
@ return < 0 error ,
pseudo transport groups :
0 volatile drive number ,
1 / dev / sgN , 2 / dev / hdX ,
1 / dev / sgN , 2 / dev / hdX , 3 stdio ,
1000000 + busno = non - pseudo SCSI bus
2000000 + busno = pseudo - ATA | ATAPI SCSI bus ( currently busno = = 2 )
*/
@ -3645,6 +3666,14 @@ int Cdrskin_driveno_to_btldev(struct CdrskiN *skin, int driveno,
goto fallback ;
# endif
# ifdef Cdrskin_libburn_has_get_drive_rolE
ret = burn_drive_get_drive_role ( skin - > drives [ driveno ] . drive ) ;
if ( ret ! = 1 ) {
sprintf ( btldev , " stdio:%s " , adr ) ;
{ ret = 2 ; goto adr_translation ; }
}
# endif
# ifdef Cdrskin_libburn_has_convert_scsi_adR
if ( ! skin - > preskin - > old_pseudo_scsi_adr ) {
int host_no = - 1 , channel_no = - 1 , target_no = - 1 , lun_no = - 1 , bus_no = - 1 ;
@ -3840,7 +3869,7 @@ int Cdrskin_report_disc_status(struct CdrskiN *skin, enum burn_disc_status s,
} else
printf ( " -unknown status code- \n " ) ;
if ( flag & 1 )
if ( flag & 2 )
return ( 1 ) ;
# ifdef Cdrskin_libburn_has_get_profilE
@ -4682,7 +4711,8 @@ blanking_done:;
ret = ! ! ( wrote_well ) ;
ex : ;
skin - > drive_is_busy = 0 ;
Cdrskin_release_drive ( skin , 0 ) ;
if ( skin - > drive_is_grabbed )
Cdrskin_release_drive ( skin , 0 ) ;
return ( ret ) ;
}
@ -6408,6 +6438,9 @@ set_abort_max_wait:;
skin - > adjust_speed_to_drive = 1 ;
# endif
} else if ( strcmp ( argv [ i ] , " --allow_emulated_drives " ) = = 0 ) {
/* is handled in Cdrpreskin_setup() */ ;
} else if ( strcmp ( argv [ i ] , " --allow_setuid " ) = = 0 ) {
/* is handled in Cdrpreskin_setup() */ ;
@ -7174,8 +7207,14 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin,
" cdrskin: NOTE : greying out all drives besides given dev='%s' \n " ,
( * preskin ) - > device_adr ) ) ;
burn_drive_add_whitelist ( ( * preskin ) - > device_adr ) ;
if ( strncmp ( ( * preskin ) - > device_adr , " stdio: " , 6 ) = = 0 )
stdio_drive = 1 ;
if ( strncmp ( ( * preskin ) - > device_adr , " stdio: " , 6 ) = = 0 ) {
if ( ( * preskin ) - > allow_emulated_drives )
stdio_drive = 1 ;
else {
fprintf ( stderr , " cdrskin: SORRY : dev=stdio:... works only with option --allow_emulated_drives \n " ) ;
{ * exit_value = 2 ; goto ex ; }
}
}
}
ret = Cdrskin_new ( & skin , * preskin , 1 ) ;