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 .\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1) .\" 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. .\" Please adjust this date whenever revising the manpage.
.\" .\"
.\" Some roff macros, for reference: .\" Some roff macros, for reference:
@ -48,7 +48,9 @@ or on DVD-R[W] (in Incremental mode) or on DVD+R.
.br .br
Single session on DVD-RW or DVD-R (Disk-at-once) Single session on DVD-RW or DVD-R (Disk-at-once)
.br .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 .br
Bus scan, burnfree, speed options, retrieving media info, padding, fifo. Bus scan, burnfree, speed options, retrieving media info, padding, fifo.
.br .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, 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). and device files which have the same SCSI address parameters (e.g. /dev/sg0).
.br .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 .SH OPTIONS
.TP .TP
.BI \-\-help .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 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. drive which will then choose an appropriate speed on its own.
.TP .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 .BI \--allow_setuid
Disable the loud warning about insecure discrepance between login user and Disable the loud warning about insecure discrepance between login user and
effective user which indicates application of chmod u+s to the program binary. 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 */ /** Wether to support media types which are implemented but yet untested */
int allow_untested_media; 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 */ /** Wether an option is given which needs a full bus scan */
int no_whitelist; int no_whitelist;
@ -1721,6 +1724,7 @@ int Cdrpreskin_new(struct CdrpreskiN **preskin, int flag)
o->allow_setuid= 0; o->allow_setuid= 0;
o->allow_fd_source= 0; o->allow_fd_source= 0;
o->allow_untested_media= 0; o->allow_untested_media= 0;
o->allow_emulated_drives= 0;
o->no_whitelist= 0; o->no_whitelist= 0;
o->no_convert_fs_adr= 0; o->no_convert_fs_adr= 0;
#ifdef Cdrskin_libburn_has_convert_scsi_adR #ifdef Cdrskin_libburn_has_convert_scsi_adR
@ -2055,6 +2059,9 @@ return:
if(strcmp(argv[i],"--abort_handler")==0) { if(strcmp(argv[i],"--abort_handler")==0) {
o->abort_handler= 3; 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) { } else if(strcmp(argv[i],"--allow_setuid")==0) {
o->allow_setuid= 1; o->allow_setuid= 1;
@ -2157,7 +2164,7 @@ set_dev:;
#ifndef Cdrskin_extra_leaN #ifndef Cdrskin_extra_leaN
printf("Supported SCSI transports for this platform:\n"); printf("\nSupported SCSI transports for this platform:\n");
fflush(stdout); fflush(stdout);
if(o->old_pseudo_scsi_adr) { if(o->old_pseudo_scsi_adr) {
fprintf(stderr,"\nTransport name:\t\tlibburn OLD_PSEUDO\n"); fprintf(stderr,"\nTransport name:\t\tlibburn OLD_PSEUDO\n");
@ -2183,6 +2190,18 @@ set_dev:;
fprintf(stderr,"SCSI Bus scanning:\tsupported\n"); fprintf(stderr,"SCSI Bus scanning:\tsupported\n");
fprintf(stderr,"Open via UNIX device:\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 */ #else /* ! Cdrskin_extra_leaN */
@ -2262,6 +2281,8 @@ set_dev:;
printf( printf(
" --adjust_speed_to_drive set only speeds offered by drive and media\n"); " --adjust_speed_to_drive set only speeds offered by drive and media\n");
#endif #endif
printf(
" --allow_emulated_drives dev=stdio:<path> on files and block devices\n");
printf( printf(
" --allow_setuid disable setuid warning (setuid is insecure !)\n"); " --allow_setuid disable setuid warning (setuid is insecure !)\n");
printf( printf(
@ -3620,7 +3641,7 @@ wrong_devno:;
@return <0 error, @return <0 error,
pseudo transport groups: pseudo transport groups:
0 volatile drive number, 0 volatile drive number,
1 /dev/sgN, 2 /dev/hdX, 1 /dev/sgN, 2 /dev/hdX, 3 stdio,
1000000+busno = non-pseudo SCSI bus 1000000+busno = non-pseudo SCSI bus
2000000+busno = pseudo-ATA|ATAPI SCSI bus (currently busno==2) 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; goto fallback;
#endif #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 #ifdef Cdrskin_libburn_has_convert_scsi_adR
if(!skin->preskin->old_pseudo_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; 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 } else
printf("-unknown status code-\n"); printf("-unknown status code-\n");
if(flag&1) if(flag&2)
return(1); return(1);
#ifdef Cdrskin_libburn_has_get_profilE #ifdef Cdrskin_libburn_has_get_profilE
@ -4682,7 +4711,8 @@ blanking_done:;
ret= !!(wrote_well); ret= !!(wrote_well);
ex:; ex:;
skin->drive_is_busy= 0; skin->drive_is_busy= 0;
Cdrskin_release_drive(skin,0); if(skin->drive_is_grabbed)
Cdrskin_release_drive(skin,0);
return(ret); return(ret);
} }
@ -6408,6 +6438,9 @@ set_abort_max_wait:;
skin->adjust_speed_to_drive= 1; skin->adjust_speed_to_drive= 1;
#endif #endif
} else if(strcmp(argv[i],"--allow_emulated_drives")==0) {
/* is handled in Cdrpreskin_setup() */;
} else if(strcmp(argv[i],"--allow_setuid")==0) { } else if(strcmp(argv[i],"--allow_setuid")==0) {
/* is handled in Cdrpreskin_setup() */; /* 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", "cdrskin: NOTE : greying out all drives besides given dev='%s'\n",
(*preskin)->device_adr)); (*preskin)->device_adr));
burn_drive_add_whitelist((*preskin)->device_adr); burn_drive_add_whitelist((*preskin)->device_adr);
if(strncmp((*preskin)->device_adr, "stdio:", 6)==0) if(strncmp((*preskin)->device_adr, "stdio:", 6)==0) {
stdio_drive= 1; 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); 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>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>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/<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/^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/^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>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>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>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/<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/<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/^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/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>/' \ -e 's/See section EXAMPLES/See section <A HREF="#EXAMPLES">EXAMPLES<\/A>/' \