New option --allow_emulated_drives

This commit is contained in:
Thomas Schmitt 2007-09-08 16:49:19 +00:00
parent 2d3d255231
commit bdff3ac16c
4 changed files with 74 additions and 13 deletions

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "August 27, 2007"
.TH CDRSKIN 1 "September 8, 2007"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -48,7 +48,9 @@ or on DVD-R[W] (in Incremental mode) or on DVD+R.
.br
Single session on DVD-RW or DVD-R (Disk-at-once)
.br
or on overwriteable DVD+RW, DVD-RW, DVD-RAM.
or on overwriteable DVD+RW, DVD-RW, DVD-RAM,
.br
or on data file or block device.
.br
Bus scan, burnfree, speed options, retrieving media info, padding, fifo.
.br
@ -257,6 +259,21 @@ Further are accepted on Linux: links to libburn-suitable device files,
device files which have the same major and minor device number,
and device files which have the same SCSI address parameters (e.g. /dev/sg0).
.br
.PP
Option --allow_emulated_drives enables addressing of pseudo-drives
which get emulated on top of a regular data file or a block device.
The target file address is given after prefix "stdio:".
.br
E.g.: dev=stdio:/tmp/my_pseudo_drive
.br
Warning: Superusers must take care not to spoil their hard disk via its raw
block device (like /dev/hda or /dev/sd0).
.br
Pseudo-drives behave much like DVD-RAM. They allow -dummy, nevertheless, and
their reply with --tell_media_space is utopic. If the given address does
not exist yet, then it gets created as regular file.
Note: -dummy runs touch the file.
.br
.SH OPTIONS
.TP
.BI \-\-help
@ -624,6 +641,10 @@ drive for the loaded media. By default, such an adjustment is only made with
pseudo-speeds 0 and -1 whereas speed settings > 0 are sent unchanged to the
drive which will then choose an appropriate speed on its own.
.TP
.BI \--allow_emulated_drives
Enable drive addresses of the form dev=stdio:<path>. See above, paragraph
"Drive preparation and addressing".
.TP
.BI \--allow_setuid
Disable the loud warning about insecure discrepance between login user and
effective user which indicates application of chmod u+s to the program binary.

View File

@ -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("\nSupported SCSI transports for this platform:\n");
fflush(stdout);
if(o->old_pseudo_scsi_adr) {
fprintf(stderr,"\nTransport name:\t\tlibburn OLD_PSEUDO\n");
@ -2183,6 +2190,18 @@ set_dev:;
fprintf(stderr,"SCSI Bus scanning:\tsupported\n");
fprintf(stderr,"Open via UNIX device:\tsupported\n");
}
if(o->allow_emulated_drives) {
fprintf(stderr,"\nTransport name:\t\tlibburn on standard i/o\n");
fprintf(stderr,
"Transport descr.:\twrite into data files and block devices\n");
fprintf(stderr,"Transp. layer ind.:\tstdio:\n");
fprintf(stderr,"Target specifier:\tpath\n");
fprintf(stderr,"Target example:\t\tstdio:/tmp/pseudo_drive\n");
fprintf(stderr,"SCSI Bus scanning:\tnot supported\n");
fprintf(stderr,"Open via UNIX device:\tsupported\n");
} else {
printf("\ncdrskin: 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);

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2007.09.08.132206"
#define Cdrskin_timestamP "2007.09.08.164924"

View File

@ -45,15 +45,16 @@ then
-e 's/<b>Overview of features:<\/b>/\&nbsp;<BR><b>Overview of features:<\/b>/' \
-e 's/<b>General information paragraphs:<\/b>/\&nbsp;<BR><b>General information paragraphs:<\/b>/' \
-e 's/<b>Track recording model:<\/b>/\&nbsp;<BR><b>Track recording model:<\/b>/' \
-e 's/In general there are two types of tracks: data and audio./\&nbsp;<BR>In general there are two types of tracks: data and audio./' \
-e 's/While audio tracks just contain a given/\&nbsp;<BR>While audio tracks just contain a given/' \
-e 's/^In general there are two types of tracks: data and audio./\&nbsp;<BR>In general there are two types of tracks: data and audio./' \
-e 's/^While audio tracks just contain a given/\&nbsp;<BR>While audio tracks just contain a given/' \
-e 's/<b>Write mode selection:<\/b>/\&nbsp;<BR><b>Write mode selection:<\/b>/' \
-e 's/<b>Recordable CD Media:<\/b>/\&nbsp;<BR><b>Recordable CD Media:<\/b>/' \
-e 's/<b>Overwriteable DVD Media:<\/b>/\&nbsp;<BR><b>Overwriteable DVD Media:<\/b>/' \
-e 's/<b>Sequentially Recordable DVD Media:<\/b>/\&nbsp;<BR><b>Sequentially Recordable DVD Media:<\/b>/' \
-e 's/The write modes for DVD+R/\&nbsp;<BR>The write modes for DVD+R/' \
-e 's/^The write modes for DVD+R/\&nbsp;<BR>The write modes for DVD+R/' \
-e 's/<b>Drive preparation and addressing:<\/b>/\&nbsp;<BR><b>Drive preparation and addressing:<\/b>/' \
-e 's/If you only got one CD capable drive/\&nbsp;<BR>If you only got one CD capable drive/' \
-e 's/^If you only got one CD capable drive/\&nbsp;<BR>If you only got one CD capable drive/' \
-e 's/^Option --allow_emulated_drives enables/\&nbsp;<BR>Option --allow_emulated_drives enables/' \
-e 's/^Alphabetical list of options/\&nbsp;<BR>Alphabetical list of options/' \
-e 's/and for all others\.<\/td><\/table>/and for all others.<\/td><\/table> <BR><HR><FONT SIZE=-1><CENTER>(HTML generated from '"$manpage"'.1 on '"$(date)"' by '$(basename "$0")' )<\/CENTER><\/FONT>/' \
-e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \