From 901939986a2cbb33c0674302d662e342cd30fd15 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 8 Sep 2019 12:30:52 +0200 Subject: [PATCH] New command -drive_access, new -as cdrecord option --drive_not_exclusive --- xorriso/base_obj.c | 4 + xorriso/drive_mgt.c | 68 ++++++--- xorriso/emulators.c | 3 + xorriso/opts_d_h.c | 44 +++++- xorriso/parse_exec.c | 13 +- xorriso/text_io.c | 61 +++++--- xorriso/xorrecord.1 | 14 +- xorriso/xorrecord.info | 83 ++++++----- xorriso/xorrecord.texi | 18 ++- xorriso/xorriso.1 | 100 +++++++++----- xorriso/xorriso.h | 7 + xorriso/xorriso.info | 269 ++++++++++++++++++++---------------- xorriso/xorriso.texi | 108 +++++++++------ xorriso/xorriso_private.h | 3 + xorriso/xorriso_timestamp.h | 2 +- 15 files changed, 509 insertions(+), 288 deletions(-) diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 0a768f08..230796ba 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -207,6 +207,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->displacement_sign= 0; m->read_fs= 0; m->drives_exclusive= 1; + m->drives_access= 1; m->linux_scsi_dev_family= 0; m->early_stdio_test= 0; m->cache_num_tiles= 0; @@ -219,6 +220,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->in_charset= NULL; m->isofs_st_out= time(0) - 1; m->indev_is_exclusive= 1; + m->indev_access= 1; m->indev_off_adr[0]= 0; m->isofs_st_in= 0; m->volset_change_pending= 0; @@ -231,6 +233,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->out_charset= NULL; m->dev_fd_1= -1; m->outdev_is_exclusive= 1; + m->outdev_access= 1; m->outdev_off_adr[0]= 0; m->grow_blindly_msc2= -1; m->ban_stdio_write= 0; @@ -475,6 +478,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) if(strcmp(leafname, "osirrox")==0) { m->allow_restore= 1; m->drives_exclusive= 0; + m->drives_access= 0; } else if(strcmp(leafname, "xorrisofs")==0 || strcmp(leafname, "genisofs")==0 || strcmp(leafname, "mkisofs")==0 || strcmp(leafname, "genisoimage")==0) { m->argument_emulation= 1; diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index 49b43b20..dc4ca477 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2017 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -279,12 +279,16 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, Xorriso_get_drive_handles(xorriso, &out_dinfo, &out_drive, "", 2 | 16); if(in_dinfo != NULL && (out_dinfo == NULL || out_dinfo == in_dinfo)) { dinfo= in_dinfo; - if(flag & 2) + if(flag & 2) { xorriso->outdev_is_exclusive= xorriso->indev_is_exclusive; + xorriso->outdev_access= xorriso->indev_access; + } } else if(out_dinfo != NULL && in_dinfo == NULL) { dinfo= out_dinfo; - if(flag & 1) + if(flag & 1) { xorriso->indev_is_exclusive= xorriso->outdev_is_exclusive; + xorriso->indev_access= xorriso->outdev_access; + } } else if(out_dinfo != NULL || in_dinfo != NULL) { sprintf(xorriso->info_text, "Two different drives shall be re-assed in one call"); @@ -304,6 +308,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, if(ret==1) { dinfo= out_dinfo; xorriso->indev_is_exclusive= xorriso->outdev_is_exclusive; + xorriso->indev_access= xorriso->outdev_access; } } else if((flag&3)==2 && xorriso->in_drive_handle!=NULL) { ret= Xorriso_get_drive_handles(xorriso, &in_dinfo, &in_drive, @@ -314,6 +319,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, if(ret==1) { dinfo= in_dinfo; xorriso->outdev_is_exclusive= xorriso->indev_is_exclusive; + xorriso->outdev_access= xorriso->indev_access; } } @@ -362,10 +368,14 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, char *show_adr, if(flag&1) if(xorriso->image_start_mode&(1u<<31)) /* used up setting */ xorriso->image_start_mode= 0; /* no need to perform auto setting */ - if(flag & 1) + if(flag & 1) { xorriso->indev_is_exclusive= xorriso->drives_exclusive; - if(flag & 2) + xorriso->indev_access= xorriso->drives_access; + } + if(flag & 2) { xorriso->outdev_is_exclusive= xorriso->drives_exclusive; + xorriso->outdev_access= xorriso->drives_access; + } } drive= dinfo[0].drive; volset= isoburn_get_attached_image(drive); @@ -727,9 +737,9 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag) if(!in_is_out_too) { do_eject= !!(flag&4); - if((flag & 4) && !xorriso->indev_is_exclusive) { + if((flag & 4) && xorriso->indev_access == 0) { sprintf(xorriso->info_text, - "Will not eject medium in non-exclusively acquired input drive."); + "Will not eject medium in readonly acquired input drive."); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); do_eject= 0; } @@ -759,9 +769,9 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag) } if((flag&2) && xorriso->out_drive_handle!=NULL) { do_eject= !!(flag&4); - if((flag & 4) && !xorriso->outdev_is_exclusive) { + if((flag & 4) && xorriso->outdev_access == 0) { sprintf(xorriso->info_text, - "Will not eject medium in non-exclusively acquired drive."); + "Will not eject medium in readonly acquired drive."); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); do_eject= 0; } @@ -795,16 +805,17 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag) int Xorriso_may_burn(struct XorrisO *xorriso, int flag) { - if(xorriso->outdev_is_exclusive) + if(xorriso->outdev_access == 1) return(1); - sprintf(xorriso->info_text, "The output drive was not acquired exclusively."); + sprintf(xorriso->info_text, "The output drive was acquired readonly."); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); - sprintf(xorriso->info_text, "A possible remedy is: -osirrox 'o_excl_on'"); - if(xorriso->outdev[0]) { - strcat(xorriso->info_text," -outdev "); - Text_shellsafe(xorriso->outdev, xorriso->info_text, 1); - } + sprintf(xorriso->info_text, "Possible remedy: -drive_access \"exclusive:unrestricted\"."); + strcat(xorriso->info_text," Then give up and re-acquire the drive."); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0); + if(!xorriso->outdev_is_exclusive) { + sprintf(xorriso->info_text, "If you insist in -drive_access \"shared:unrestricted\", first read man xorriso about the risks."); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0); + } return(0); } @@ -1026,6 +1037,25 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_toc_line(xorriso, flag & 8); if(flag & 128) {ret= 1; goto ex;} + /* Report -drive_access if non-default or if long form */ + respt[0]= 0; + if(flag & 2) { + if(xorriso->outdev_is_exclusive == 0 || xorriso->outdev_access == 0 || + !(flag & 33)) { + sprintf(respt, "Drive access : %s:%s\n", + xorriso->outdev_is_exclusive ? "exclusive" : "shared", + xorriso->outdev_access == 0 ? "readonly" : "unrestricted"); + } + } else { + if(xorriso->indev_is_exclusive == 0 || xorriso->indev_access == 0 || + !(flag & 33)) { + sprintf(respt, "Drive access : %s:%s\n", + xorriso->indev_is_exclusive ? "exclusive" : "shared", + xorriso->indev_access == 0 ? "readonly" : "unrestricted"); + } + } + if(respt[0]) + Xorriso_toc_line(xorriso, flag & 8); sprintf(respt, "Drive type : vendor '%s' product '%s' revision '%s'\n", dinfo[0].vendor, dinfo[0].product, dinfo[0].revision); if((flag & 32) || !(flag & 1)) @@ -1417,11 +1447,11 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); } - if (disc!=NULL) - isoburn_toc_disc_free(disc); - Xorriso_process_msg_queues(xorriso,0); ret= 1; ex:; + Xorriso_process_msg_queues(xorriso,0); + if (disc!=NULL) + isoburn_toc_disc_free(disc); return(ret); } diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 8824f9b0..cb4ebb1d 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -55,6 +55,7 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag) "\t--devices\tprint list of available MMC drives and exit emulation", "\tdev=target\tpseudo-SCSI target to use as CD-Recorder", "\tdrive_scsi_dev_family=sr|scd|sg\t\tselect Linux device type", +"\t--drive_not_exclusive\tdo not try to prevent use of busy drive", "\t-v\t\tincrement verbose level by one", "\t-V\t\tincrement SCSI command transport verbose level by one", "\t-checkdrive\tcheck if a driver for the drive is present", @@ -266,6 +267,8 @@ no_volunteer:; strcpy(dev_adr, cpt); } else if(strcmp(argv[i], "--devices")==0) { /* intentional: argv[i] */ do_scanbus= 2; + } else if(strcmp(argv[i], "--drive_not_exclusive") == 0) { /* intentional */ + Xorriso_option_drive_access(xorriso, "shared:unrestricted", 0); } else if(strncmp(argpt,"driveropts=", 11)==0 || strncmp(argpt,"-driveropts=", 12)==0) { if(strcmp(argpt+11, "help")==0) { diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 4348c68a..01e482b1 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -257,6 +257,43 @@ int Xorriso_option_displacement(struct XorrisO *xorriso, char *value, int flag) } +/* Command -drive_access "exclusive"|"shared":"readonly"|"unrestricted" */ +int Xorriso_option_drive_access(struct XorrisO *xorriso, char *mode, int flag) +{ + int l; + char *npt, *cpt; + + npt= cpt= mode; + for(cpt= mode; npt != NULL; cpt= npt+1) { + npt= strchr(cpt, ':'); + if(npt==NULL) + l= strlen(cpt); + else + l= npt - cpt; + if(l == 0 && mode[0] != 0) + goto unknown_mode; + if(strncmp(cpt, "shared", l) == 0 && l == 6) { + xorriso->drives_exclusive= 0; + } else if(strncmp(cpt, "exclusive", l) == 0 && l == 9) { + xorriso->drives_exclusive= 1; + } else if(strncmp(cpt, "readonly", l) == 0 && l == 8) { + xorriso->drives_access= 0; + } else if(strncmp(cpt, "unrestricted", l) == 0 && l == 12) { + xorriso->drives_access= 1; + } else { +unknown_mode:; + sprintf(xorriso->info_text, "-drive_access: unknown mode '"); + if(l > 0 && l < SfileadrL) + strncat(xorriso->info_text, cpt, l); + strcat(xorriso->info_text, "'"); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + } + return(1); +} + + /* Option -drive_class */ int Xorriso_option_drive_class(struct XorrisO *xorriso, char *d_class, char *pattern, int flag) @@ -1737,13 +1774,16 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " -drive_class \"harmless\"|\"banned\"|\"risky\"|\"clear_list\" disk_pattern", " Add a drive path pattern to one of the safety lists or make", " those lists empty. Defaulty entry in \"risky\" is \"/dev\".", -" -grow_blindly \"off\"|predicted_nwa", -" Switch between modifying and blind growing.", +" -drive_access \"exclusive\"|\"shared\":\"unrestricted\"|\"readonly\"", +" Enable or disable device file locking mechanisms.", +" Enable or disable status and content changes of drive.", " -scsi_dev_family \"default\"|\"sr\"|\"scd\"|\"sg\"", " Linux specific: Choose device file type.", " -read_speed number[\"k/s\"|\"m/s\"|\"[x]CD\"|\"[x]DVD\"|\"[x]BD\"]", " Set the read speed. Default is \"none\" = do not set speed", " before reading.", +" -grow_blindly \"off\"|predicted_nwa", +" Switch between modifying and blind growing.", " -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id", " Load a particular (outdated) ISO session from a -dev or", " -indev which hosts more than one session.", diff --git a/xorriso/parse_exec.c b/xorriso/parse_exec.c index 26d9bd9a..ae93efd0 100644 --- a/xorriso/parse_exec.c +++ b/xorriso/parse_exec.c @@ -541,7 +541,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "close","close_damaged", "commit_eject","compliance","copyright_file", "dev","dialog","disk_dev_ino","disk_pattern","displacement", - "dummy","dvd_obs","early_stdio_test","ecma119_map","eject", + "drive_access","dummy","dvd_obs","early_stdio_test","ecma119_map","eject", "iso_nowtime","iso_rr_pattern","file_name_limit","follow","format","fs", "gid","grow_blindly","hardlinks", "hfsplus","history","indev","in_charset","joliet", @@ -684,17 +684,20 @@ int Xorriso_cmd_sorting_rank(struct XorrisO *xorriso, "print", "print_info", "print_mark", "prompt", "sleep", "sh_style_result", + "* Influencing opening of drives:", + "drive_access","drive_class","early_stdio_test", + "* Drive and media related inquiry actions (1):", "devices", "device_links", "mount_opts", "mount_cmd", "session_string", "* Influencing the behavior of image loading:", "read_speed", "load", "displacement", "read_fs", - "drive_class", "assert_volid", "in_charset", + "assert_volid", "in_charset", "auto_charset", "hardlinks", "acl", "xattr", "md5", "for_backup", "ecma119_map", "disk_dev_ino", "rom_toc_scan", "calm_drive", "ban_stdio_write", - "early_stdio_test", "data_cache_size", + "data_cache_size", "scsi_dev_family", "iso_nowtime", "* Character sets:", @@ -1255,6 +1258,10 @@ next_command:; (*idx)++; ret= Xorriso_option_disk_pattern(xorriso, arg1, 0); + } else if(strcmp(cmd,"drive_access")==0) { + (*idx)++; + ret= Xorriso_option_drive_access(xorriso, arg1, 0); + } else if(strcmp(cmd,"drive_class")==0) { (*idx)+= 2; ret= Xorriso_option_drive_class(xorriso, arg1, arg2, 0); diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 0d9306ba..983aa880 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -2058,6 +2058,8 @@ int Xorriso_sieve_big(struct XorrisO *xorriso, int flag) 1, 1}, {"DVD obs 64 kB:", 3, "DVD obs 64 kB:", "", 1, { 0, -1, -1, -1, -1, -1}, 1, 0}, + {"Drive access :", 3, "Drive access : ", ": ", 2, { 0, 1, -1, -1, -1, -1}, + 2, 0}, {"Drive current:", 3, "Drive current:", "", 2, { 0, 1, -1, -1, -1, -1}, 2, 0}, {"Drive id :", 3, "Drive id :", "", 1, { 0, -1, -1, -1, -1, -1}, @@ -2771,6 +2773,7 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) { int is_default, no_defaults, i, ret, adr_mode, do_single, behavior; int show_indev= 1, show_outdev= 1, show_dev= 0; + int do_drive_access, did_drive_access; int part_table_implicit= 0; char *line, *sfe= NULL, mode[80], *form, *treatment; char *in_pt, *out_pt, *nl_charset, *local_charset, *mode_pt; @@ -3814,13 +3817,20 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) } } + is_default= (xorriso->drives_exclusive == 1 && xorriso->drives_access == 1); + sprintf(line, "-drive_access %s:%s\n", + xorriso->drives_exclusive ? "exclusive" : "shared", + xorriso->drives_access == 0 ? "readonly" : "unrestricted"); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso, filter, fp, flag & 2); + is_default= (xorriso->linux_scsi_dev_family == 0); sprintf(line, "-scsi_dev_family %s\n", scsi_family[xorriso->linux_scsi_dev_family & 7]); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); - do_single= 0; + do_single= do_drive_access= 0; dev_filter= filter; if(dev_filter != NULL) { show_dev= Xorriso_status_filter(xorriso, filter, "-dev", 0); @@ -3833,43 +3843,52 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(show_outdev > 0 || show_indev > 0) do_single= 1; } - if(xorriso->drives_exclusive != xorriso->indev_is_exclusive && - xorriso->indev[0]) + if((xorriso->drives_exclusive != xorriso->indev_is_exclusive || + xorriso->drives_access != xorriso->indev_access) && xorriso->indev[0]) { do_single= 1; - else if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive && - xorriso->outdev[0]) + do_drive_access|= 1; + } + if((xorriso->drives_exclusive != xorriso->outdev_is_exclusive || + xorriso->drives_access != xorriso->outdev_access) && + xorriso->outdev[0]) { do_single= 1; + do_drive_access|= 2; + } if(strcmp(xorriso->indev, xorriso->outdev) == 0 && !do_single) { sprintf(line,"-dev %s\n", Text_shellsafe(xorriso->indev,sfe,0)); Xorriso_status_result(xorriso, dev_filter, fp, flag & 2); } else { - if(xorriso->drives_exclusive != xorriso->indev_is_exclusive && - xorriso->indev[0] && show_indev) { - sprintf(line,"-osirrox o_excl_%s\n", - xorriso->indev_is_exclusive ? "on" : "off"); + did_drive_access= 0; + if((do_drive_access & 1) && xorriso->indev[0] && show_indev) { + sprintf(line,"-drive_access %s:%s\n", + xorriso->indev_is_exclusive ? "exclusive" : "shared", + xorriso->indev_access == 0 ? "readonly" : "unrestricted"); Xorriso_status_result(xorriso, NULL, fp, flag & 2); + did_drive_access= 1; } sprintf(line,"-indev %s\n", Text_shellsafe(xorriso->indev,sfe,0)); Xorriso_status_result(xorriso, dev_filter, fp, flag & 2); - if(xorriso->drives_exclusive != xorriso->indev_is_exclusive && - xorriso->indev[0] && show_indev) { - sprintf(line,"-osirrox o_excl_%s\n", - xorriso->drives_exclusive ? "on" : "off"); + if(did_drive_access) { + sprintf(line,"-drive_access %s:%s\n", + xorriso->drives_exclusive ? "exclusive" : "shared", + xorriso->drives_access == 0 ? "readonly" : "unrestricted"); Xorriso_status_result(xorriso, NULL, fp, flag & 2); } - if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive && - xorriso->outdev[0] && show_outdev) { - sprintf(line,"-osirrox o_excl_%s\n", - xorriso->outdev_is_exclusive ? "on" : "off"); + did_drive_access= 0; + if((do_drive_access & 2) && xorriso->outdev[0] && show_outdev) { + sprintf(line,"-drive_access %s:%s\n", + xorriso->outdev_is_exclusive ? "exclusive" : "shared", + xorriso->outdev_access == 0 ? "readonly" : "unrestricted"); Xorriso_status_result(xorriso, NULL, fp, flag & 2); + did_drive_access= 1; } sprintf(line,"-outdev %s\n", Text_shellsafe(xorriso->outdev,sfe,0)); Xorriso_status_result(xorriso, dev_filter, fp, flag & 2); - if(xorriso->drives_exclusive != xorriso->outdev_is_exclusive && - xorriso->outdev[0] && show_outdev) { - sprintf(line,"-osirrox o_excl_%s\n", - xorriso->drives_exclusive ? "on" : "off"); + if(did_drive_access) { + sprintf(line,"-drive_access %s:%s\n", + xorriso->drives_exclusive ? "exclusive" : "shared", + xorriso->drives_access == 0 ? "readonly" : "unrestricted"); Xorriso_status_result(xorriso, NULL, fp, flag & 2); } } diff --git a/xorriso/xorrecord.1 b/xorriso/xorrecord.1 index 4bf005c1..13c1f0ec 100644 --- a/xorriso/xorrecord.1 +++ b/xorriso/xorrecord.1 @@ -9,7 +9,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 XORRECORD 1 "Version 1.5.1, Nov 11, 2018" +.TH XORRECORD 1 "Version 1.5.1, Sep 04, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -531,6 +531,16 @@ Afterwards end emulation without performing any drive operation. Only if used as first command line argument this option prevents reading and interpretation of startup files. See section FILES below. .TP +\fB--drive_not_exclusive\fR +This option disables the use of device file locking mechanisms when acquiring +the drive. On GNU/Linux the locking is done by open(O_EXCL), on FreeBSD by +flock(LOCK_EX). +.br +Be aware that it can cause problems if you use a drive which is mounted, +or opened by some other process, or guarded by /dev/pktcdvd*. +Make sure that other users of the drive do not cause drive activities +while a xorrecord burn run is going on. +.TP \fBdrive_scsi_dev_family=sr|scd|sg|default\fR GNU/Linux specific: .br @@ -870,7 +880,7 @@ Thomas Schmitt .br for libburnia\-project.org .SH COPYRIGHT -Copyright (c) 2011 \- 2018 Thomas Schmitt +Copyright (c) 2011 \- 2019 Thomas Schmitt .br Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of xorriso. If you make use diff --git a/xorriso/xorrecord.info b/xorriso/xorrecord.info index f9fc9ef2..ae600473 100644 --- a/xorriso/xorrecord.info +++ b/xorriso/xorrecord.info @@ -3,7 +3,7 @@ xorrecord.texi. xorrecord - Emulation of CD/DVD/BD program cdrecord by program xorriso - Copyright (C) 2011 - 2018 Thomas Schmitt + Copyright (C) 2011 - 2019 Thomas Schmitt Permission is granted to distrubute this text freely. INFO-DIR-SECTION Archiving @@ -501,6 +501,14 @@ File: xorrecord.info, Node: NonCdrecord, Next: ExDevices, Prev: Verbous, Up: Only if used as first command line argument this option prevents reading and interpretation of startup files. See section FILES below. +--drive_not_exclusive + This option disables the use of device file locking mechanisms when + acquiring the drive. On GNU/Linux the locking is done by + open(O_EXCL), on FreeBSD by flock(LOCK_EX). + Be aware that it can cause problems if you use a drive which is + mounted, or opened by some other process, or guarded by + /dev/pktcdvd*. Make sure that other users of the drive do not + cause drive activities while a xorrecord burn run is going on. drive_scsi_dev_family=sr|scd|sg|default GNU/Linux specific: By default, cdrskin tries to map Linux drive addresses to /dev/sr* @@ -868,7 +876,7 @@ for libburnia-project.org 10.2 Copyright ============== -Copyright (c) 2011 - 2018 Thomas Schmitt +Copyright (c) 2011 - 2019 Thomas Schmitt Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of xorriso. If you make use of the license to derive modified versions of xorriso then you are @@ -894,10 +902,11 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * Menu: * --devices get list of drives: DriveAddr. (line 8) +* --drive_not_exclusive use drive even if busy: NonCdrecord. (line 12) * --grow_overwriteable_iso emulate ISO 9660 multi-session: NonCdrecord. - (line 29) + (line 37) * --multi_if_possible apply -multi if medium is suitable: NonCdrecord. - (line 49) + (line 57) * --no_rc do not execute xorriso startup files: NonCdrecord. (line 8) * -atip inquire medium state: Inquire. (line 14) * -checkdrive inquire drive CD capabilities: Inquire. (line 11) @@ -910,7 +919,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -inq inquire drive identifiers: Inquire. (line 8) * -isosize obtain track size from ISO 9660 superblock: SetBurn. (line 137) -* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 73) +* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 81) * -msinfo retrieve multi-session info: Inquire. (line 43) * -multi keep media appendable after burn run: SetBurn. (line 89) * -nopad disable adding of bytes to end of track: SetBurn. (line 151) @@ -926,19 +935,19 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * blank= make media re-usabable or format media: SetBurn. (line 28) * dev= address the drive to be used: DriveAddr. (line 21) * drive_scsi_dev_family= Linux device type to be used: NonCdrecord. - (line 12) -* dvd_obs= set write transaction payload size: NonCdrecord. (line 66) + (line 20) +* dvd_obs= set write transaction payload size: NonCdrecord. (line 74) * fs= set program fifo size: SetBurn. (line 174) * minbuf= keep drive buffer hungry: SetBurn. (line 205) * padsize= add bytes to end of track: SetBurn. (line 144) * speed= set write speed: SetBurn. (line 189) -* stdio_sync= control stdio buffer: NonCdrecord. (line 125) +* stdio_sync= control stdio buffer: NonCdrecord. (line 133) * stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord. - (line 56) + (line 64) * tsize= set a fixed track size: SetBurn. (line 126) -* use_immed_bit= control use of Immed bit: NonCdrecord. (line 110) +* use_immed_bit= control use of Immed bit: NonCdrecord. (line 118) * write_start_address= set block address for write start: NonCdrecord. - (line 119) + (line 127)  File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top @@ -950,25 +959,27 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Menu: * Accessing drive, wait for stdin, -waiti: SetBurn. (line 113) -* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 110) +* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 118) * Bugs, reporting: Bugreport. (line 6) * Data track, announce, -data: SetBurn. (line 157) -* Defect management, control, stream_recording=: NonCdrecord. (line 56) +* Defect management, control, stream_recording=: NonCdrecord. (line 64) * Drive, address, dev=: DriveAddr. (line 21) * Drive, get list of, --devices: DriveAddr. (line 8) * Drive, inquire CD capabilities, -checkdrive: Inquire. (line 11) * Drive, inquire identifiers, -inq: Inquire. (line 8) * Drive, Linux device type, drive_scsi_dev_family: NonCdrecord. + (line 20) +* Drive, use even if busy, --drive_not_exclusive: NonCdrecord. (line 12) * Eject, the tray, -eject: SetBurn. (line 214) * Examples: Examples. (line 6) * Fifo, set size, fs=: SetBurn. (line 174) * Full speed, on DVD-RAM and BD, stream_recording=: NonCdrecord. - (line 56) + (line 64) * Media types, _definiton: Standards. (line 23) * Media, blank, blank=: SetBurn. (line 28) * Media, format, blank=: SetBurn. (line 28) -* Media, keep appendable, --multi_if_possible: NonCdrecord. (line 49) +* Media, keep appendable, --multi_if_possible: NonCdrecord. (line 57) * Media, keep appendable, -multi: SetBurn. (line 89) * Media, make re-usable, blank=: SetBurn. (line 28) * medium content, inquire, -toc: Inquire. (line 22) @@ -976,7 +987,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * MMC, _definiton: Standards. (line 6) * multi-session info, retrieve, -msinfo: Inquire. (line 43) * Multi-session, emulate ISO 9660, --grow_overwriteable_iso: NonCdrecord. - (line 29) + (line 37) * Options, overview, -help: Verbous. (line 30) * Overwritable media, _definiton: Standards. (line 30) * Padding, at end of track, padsize=: SetBurn. (line 144) @@ -991,21 +1002,21 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Track size, obtain from ISO 9660, -isosize: SetBurn. (line 137) * Track size, set fixed, tsize=: SetBurn. (line 126) * Track, _definiton: Standards. (line 13) -* Transaction size, set, dvd_obs=: NonCdrecord. (line 66) +* Transaction size, set, dvd_obs=: NonCdrecord. (line 74) * Tray, eject, -eject: SetBurn. (line 214) * Verbosity, increase, -v: Verbous. (line 16) * Verbosity, SCSI commands, -V: Verbous. (line 20) * Version, report, -version: Verbous. (line 8) * Write simulation , control, -dummy: SetBurn. (line 106) * Write start address, set, write_start_address=: NonCdrecord. - (line 119) + (line 127) * Write type, SAO/DAO, -dao: SetBurn. (line 172) * Write type, SAO/DAO, -sao: SetBurn. (line 168) * Write type, TAO, -tao: SetBurn. (line 162) -* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 125) +* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 133) * Write, drive buffer, -immed: SetBurn. (line 208) * Write, drive buffer, minbuf=: SetBurn. (line 205) -* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 73) +* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 81) * xorriso, mkisofs emulation: Xorriso. (line 6) * xorriso, options: Options. (line 6) @@ -1023,21 +1034,21 @@ Node: Inquire7618 Node: SetBurn10487 Node: Verbous21115 Node: NonCdrecord22665 -Node: Examples30005 -Node: ExDevices30666 -Node: ExMedium30884 -Node: ExBlank31147 -Node: ExFormat31368 -Node: ExDeformat31886 -Node: ExIsoSingle32153 -Node: ExIsoMulti32437 -Node: ExIsoFly34181 -Node: ExAfio35373 -Node: Files36371 -Node: Seealso36927 -Node: Bugreport37290 -Node: Legal37881 -Node: CommandIdx38810 -Node: ConceptIdx42300 +Node: Examples30478 +Node: ExDevices31139 +Node: ExMedium31357 +Node: ExBlank31620 +Node: ExFormat31841 +Node: ExDeformat32359 +Node: ExIsoSingle32626 +Node: ExIsoMulti32910 +Node: ExIsoFly34654 +Node: ExAfio35846 +Node: Files36844 +Node: Seealso37400 +Node: Bugreport37763 +Node: Legal38354 +Node: CommandIdx39283 +Node: ConceptIdx42846  End Tag Table diff --git a/xorriso/xorrecord.texi b/xorriso/xorrecord.texi index aa71f2de..12c1229a 100644 --- a/xorriso/xorrecord.texi +++ b/xorriso/xorrecord.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRECORD 1 "Version 1.5.1, Nov 11, 2018" +@c man .TH XORRECORD 1 "Version 1.5.1, Sep 04, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -68,7 +68,7 @@ @copying xorrecord - Emulation of CD/DVD/BD program cdrecord by program xorriso -Copyright @copyright{} 2011 - 2018 Thomas Schmitt +Copyright @copyright{} 2011 - 2019 Thomas Schmitt @quotation Permission is granted to distrubute this text freely. @@ -736,6 +736,18 @@ Afterwards end emulation without performing any drive operation. Only if used as first command line argument this option prevents reading and interpretation of startup files. See section FILES below. @c man .TP +@item @minus{}@minus{}drive_not_exclusive +@kindex @minus{}@minus{}drive_not_exclusive use drive even if busy +@cindex Drive, use even if busy, @minus{}@minus{}drive_not_exclusive +This option disables the use of device file locking mechanisms when acquiring +the drive. On GNU/Linux the locking is done by open(O_EXCL), on FreeBSD by +flock(LOCK_EX). +@* +Be aware that it can cause problems if you use a drive which is mounted, +or opened by some other process, or guarded by /dev/pktcdvd*. +Make sure that other users of the drive do not cause drive activities +while a xorrecord burn run is going on. +@c man .TP @item drive_scsi_dev_family=sr|scd|sg|default @kindex drive_scsi_dev_family= Linux device type to be used @cindex Drive, Linux device type, drive_scsi_dev_family @@ -1185,7 +1197,7 @@ Thomas Schmitt for libburnia-project.org @c man .SH COPYRIGHT @section Copyright -Copyright (c) 2011 - 2018 Thomas Schmitt +Copyright (c) 2011 - 2019 Thomas Schmitt @* Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of xorriso. If you make use diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 83af6624..6527f9ec 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,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 XORRISO 1 "Version 1.5.1, Apr 15, 2019" +.TH XORRISO 1 "Version 1.5.1, Sep 04, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -690,6 +690,64 @@ apply. See above paragraph "Libburn drives". An empty address string "" gives up the current output drive without acquiring a new one. No writing is possible without an output drive. .TP +\fB\-drive_class\fR "harmless"|"banned"|"caution"|"clear_list" disk_pattern +Add a drive path pattern to one of the safety lists or make those lists empty. +There are three lists defined which get tested in the following sequence: +.br +If a drive address path matches the "harmless" list then the drive will be +accepted. If it is not a MMC device then the prefix "stdio:" will be prepended +automatically. This list is empty by default. +.br +Else if the path matches the "banned" list then the drive will not be +accepted by \fBxorriso\fR but rather lead to a FAILURE event. +This list is empty by default. +.br +Else if the path matches the "caution" list and if it is not a MMC device, +then its address must have the prefix "stdio:" or it will be rejected. +This list has by default one entry: "/dev". +.br +If a drive path matches no list then it is considered "harmless". By default +these are all paths which do not begin with directory "/dev". +.br +A path matches a list if one of its parent paths or itself matches a list +entry. Address prefix "stdio:" or "mmc:" will be ignored when +testing for matches. +.br +By pseudo\-class "clear_list" and pseudo\-patterns "banned", "caution", +"harmless", or "all", the lists may be made empty. +.br +E.g.: \-drive_class clear_list banned +.br +One will normally define the \-drive_class lists in one of the \fBxorriso\fR +Startup Files. +.br +Note: This is not a security feature but rather a bumper for the superuser to +prevent inadverted mishaps. For reliably blocking access to a device file you +have to deny its rw\-permissions in the filesystem. +.TP +\fB\-drive_access\fR "exclusive"|"shared":"unrestricted"|"readonly" +Control whether device file locking mechanisms shall be used when acquiring a +drive, and whether status or content of the medium in the drive may be +altered. Useful and most harmless are the setting "shared:readonly" +and the default setting "exclusive:unrestricted". +.br +"exclusive" enables tests and locks when acquiring the drive. It depends on the +operating system which locking mechanisms get applied, if any. On GNU/Linux +it is open(O_EXCL). On FreeBSD it is flock(LOCK_EX). +.br +"shared" disables the use of these mechanisms to become able to acquire drives +which are mounted, or opened by some process, or guarded by /dev/pktcdvd*. +.br +"unrestricted" enables all technically appropriate operations on an acquired +drive. "shared:unrestricted" risks to get own burn runs spoiled by other +processes or to vice versa spoil activities of such processes. So use +"exclusive:unrestricted" unless you know for sure that "shared" is safe. +.br +"readonly" disables operations which might surprise a co\-user of the drive. +For \-outdev these are formatting, blanking, writing, ejecting. For \-indev +this is ejecting. Be aware that even reading and drive status inquiries can +disturb an ongoing burn run on CD\-R[W] and DVD\-R[W]. +.TP \fB\-scsi_dev_family\fR "default"|"sr"|"scd"|"sg" GNU/Linux specific: .br @@ -816,41 +874,6 @@ to employ a loop device instead.) In both cases, the ISO sessions should be self contained, i.e. not add\-on sessions to an ISO image outside their track or partition. .TP -\fB\-drive_class\fR "harmless"|"banned"|"caution"|"clear_list" disk_pattern -Add a drive path pattern to one of the safety lists or make those lists empty. -There are three lists defined which get tested in the following sequence: -.br -If a drive address path matches the "harmless" list then the drive will be -accepted. If it is not a MMC device then the prefix "stdio:" will be prepended -automatically. This list is empty by default. -.br -Else if the path matches the "banned" list then the drive will not be -accepted by \fBxorriso\fR but rather lead to a FAILURE event. -This list is empty by default. -.br -Else if the path matches the "caution" list and if it is not a MMC device, -then its address must have the prefix "stdio:" or it will be rejected. -This list has by default one entry: "/dev". -.br -If a drive path matches no list then it is considered "harmless". By default -these are all paths which do not begin with directory "/dev". -.br -A path matches a list if one of its parent paths or itself matches a list -entry. Address prefix "stdio:" or "mmc:" will be ignored when -testing for matches. -.br -By pseudo\-class "clear_list" and pseudo\-patterns "banned", "caution", -"harmless", or "all", the lists may be made empty. -.br -E.g.: \-drive_class clear_list banned -.br -One will normally define the \-drive_class lists in one of the \fBxorriso\fR -Startup Files. -.br -Note: This is not a security feature but rather a bumper for the superuser to -prevent inadverted mishaps. For reliably blocking access to a device file you -have to deny its rw\-permissions in the filesystem. -.TP \fB\-read_fs\fR "any"|"norock"|"nojoliet"|"ecma119" Specify which kind of filesystem tree to load if present. If the wish cannot be fulfilled, then ECMA\-119 names are loaded and converted according @@ -1025,7 +1048,7 @@ for timestamps of ISO 9660 nodes without a disk source file and as default for superblock timestamps. .br If a timestring is given, then it is used for such timestamps. For the formats -of time strings see command \fB\-alter_date\fR. +of timestrings see command \fB\-alter_date\fR. .TP \fB\-disk_dev_ino\fR "on"|"ino_only"|"off" Enable or disable processing of recorded file identification numbers @@ -4773,7 +4796,8 @@ write permission. Default is "sort_lba_off". Option "o_excl_on" is the default unless the program was started with leafname "osirrox". On GNU/Linux it tries to avoid using drives which are mounted or in use by other libburn programs. -Option "o_excl_off" on GNU/Linux enables access to such drives. Drives which +Option "o_excl_off" on GNU/Linux enables access to such drives by the +equivalent of \-drive_access "shared:readonly". I.e. drives which get acquired while "o_excl_off" will refuse to get blanked, formatted, written, or ejected. But be aware that even harmless inquiries can spoil ongoing burns of CD\-R[W] and DVD\-R[W]. diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index 9ba22627..c4cb376f 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -820,6 +820,9 @@ int Xorriso_sieve_dispose(struct XorrisO *xorriso, int flag); (Note: prefix is "Creation Time: ") "DVD obs 64 kB:" up to 1 result from -list_extras argv[0]= "yes" or "no" + "Drive access: " up to 2 result from -dev, -indev, -toc + argv[0]= "exclusive", "shared" + argv[1]= "readonly","restricted" "Drive current:" up to 2 results from -dev, -indev, -toc, others argv[0]= command ("-dev", "-outdev", "-indev") argv[1]= drive address @@ -1502,6 +1505,10 @@ int Xorriso_option_disk_pattern(struct XorrisO *xorriso, char *mode, int flag); int Xorriso_option_displacement(struct XorrisO *xorriso, char *value, int flag); +/* Command -drive_access "exclusive"|"shared":"readonly"|"unrestricted" */ +/* @since 1.5.2 */ +int Xorriso_option_drive_access(struct XorrisO *xorriso, char *mode, int flag); + /* Command -drive_class */ /* @since 0.3.2 */ int Xorriso_option_drive_class(struct XorrisO *xorriso, diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 623eaadc..ce73cafb 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -4,7 +4,7 @@ xorriso.texi. xorriso - creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions. - Copyright (C) 2007 - 2017 Thomas Schmitt + Copyright (C) 2007 - 2019 Thomas Schmitt Permission is granted to distrubute this text freely. INFO-DIR-SECTION Archiving @@ -638,6 +638,58 @@ acquire the drive. An empty address string "" gives up the current output drive without acquiring a new one. No writing is possible without an output drive. +-drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern + Add a drive path pattern to one of the safety lists or make those + lists empty. There are three lists defined which get tested in the + following sequence: + If a drive address path matches the "harmless" list then the drive + will be accepted. If it is not a MMC device then the prefix + "stdio:" will be prepended automatically. This list is empty by + default. + Else if the path matches the "banned" list then the drive will not + be accepted by 'xorriso' but rather lead to a FAILURE event. This + list is empty by default. + Else if the path matches the "caution" list and if it is not a MMC + device, then its address must have the prefix "stdio:" or it will + be rejected. This list has by default one entry: "/dev". + If a drive path matches no list then it is considered "harmless". + By default these are all paths which do not begin with directory + "/dev". + A path matches a list if one of its parent paths or itself matches + a list entry. Address prefix "stdio:" or "mmc:" will be ignored + when testing for matches. + By pseudo-class "clear_list" and pseudo-patterns "banned", + "caution", "harmless", or "all", the lists may be made empty. + E.g.: -drive_class clear_list banned + One will normally define the -drive_class lists in one of the + 'xorriso' Startup Files. + Note: This is not a security feature but rather a bumper for the + superuser to prevent inadverted mishaps. For reliably blocking + access to a device file you have to deny its rw-permissions in the + filesystem. +-drive_access "exclusive"|"shared":"unrestricted"|"readonly" + Control whether device file locking mechanisms shall be used when + acquiring a drive, and whether status or content of the medium in + the drive may be altered. Useful and most harmless are the setting + "shared:readonly" and the default setting "exclusive:unrestricted". + + "exclusive" enables tests and locks when acquiring the drive. It + depends on the operating system which locking mechanisms get + applied, if any. On GNU/Linux it is open(O_EXCL). On FreeBSD it is + flock(LOCK_EX). + "shared" disables the use of these mechanisms to become able to + acquire drives which are mounted, or opened by some process, or + guarded by /dev/pktcdvd*. + "unrestricted" enables all technically appropriate operations on an + acquired drive. "shared:unrestricted" risks to get own burn runs + spoiled by other processes or to vice versa spoil activities of + such processes. So use "exclusive:unrestricted" unless you know + for sure that "shared" is safe. + "readonly" disables operations which might surprise a co-user of + the drive. For -outdev these are formatting, blanking, writing, + ejecting. For -indev this is ejecting. Be aware that even reading + and drive status inquiries can disturb an ongoing burn run on + CD-R[W] and DVD-R[W]. -scsi_dev_family "default"|"sr"|"scd"|"sg" GNU/Linux specific: By default, xorriso tries to map Linux drive addresses to /dev/sr* @@ -744,35 +796,6 @@ activate them only after image loading. will have to employ a loop device instead.) In both cases, the ISO sessions should be self contained, i.e. not add-on sessions to an ISO image outside their track or partition. --drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern - Add a drive path pattern to one of the safety lists or make those - lists empty. There are three lists defined which get tested in the - following sequence: - If a drive address path matches the "harmless" list then the drive - will be accepted. If it is not a MMC device then the prefix - "stdio:" will be prepended automatically. This list is empty by - default. - Else if the path matches the "banned" list then the drive will not - be accepted by 'xorriso' but rather lead to a FAILURE event. This - list is empty by default. - Else if the path matches the "caution" list and if it is not a MMC - device, then its address must have the prefix "stdio:" or it will - be rejected. This list has by default one entry: "/dev". - If a drive path matches no list then it is considered "harmless". - By default these are all paths which do not begin with directory - "/dev". - A path matches a list if one of its parent paths or itself matches - a list entry. Address prefix "stdio:" or "mmc:" will be ignored - when testing for matches. - By pseudo-class "clear_list" and pseudo-patterns "banned", - "caution", "harmless", or "all", the lists may be made empty. - E.g.: -drive_class clear_list banned - One will normally define the -drive_class lists in one of the - 'xorriso' Startup Files. - Note: This is not a security feature but rather a bumper for the - superuser to prevent inadverted mishaps. For reliably blocking - access to a device file you have to deny its rw-permissions in the - filesystem. -read_fs "any"|"norock"|"nojoliet"|"ecma119" Specify which kind of filesystem tree to load if present. If the wish cannot be fulfilled, then ECMA-119 names are loaded and @@ -920,7 +943,7 @@ activate them only after image loading. point for timestamps of ISO 9660 nodes without a disk source file and as default for superblock timestamps. If a timestring is given, then it is used for such timestamps. For - the formats of time strings see command *-alter_date*. + the formats of timestrings see command *-alter_date*. -disk_dev_ino "on"|"ino_only"|"off" Enable or disable processing of recorded file identification numbers (dev_t and ino_t). If enabled they are stored as xattr and @@ -4017,11 +4040,11 @@ The directory permissions on disk have to allow rwx. Option "o_excl_on" is the default unless the program was started with leafname "osirrox". On GNU/Linux it tries to avoid using drives which are mounted or in use by other libburn programs. - Option "o_excl_off" on GNU/Linux enables access to such drives. - Drives which get acquired while "o_excl_off" will refuse to get - blanked, formatted, written, or ejected. But be aware that even - harmless inquiries can spoil ongoing burns of CD-R[W] and DVD-R[W]. - + Option "o_excl_off" on GNU/Linux enables access to such drives by + the equivalent of -drive_access "shared:readonly". I.e. drives + which get acquired while "o_excl_off" will refuse to get blanked, + formatted, written, or ejected. But be aware that even harmless + inquiries can spoil ongoing burns of CD-R[W] and DVD-R[W]. Option "strict_acl_off" is default. It tolerates on FreeBSD the presence of directory "default" ACLs in the ISO image. With "strict_acl_on" these GNU/Linux ACLs cause on FreeBSD a FAILURE @@ -5282,7 +5305,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * # starts a comment line: Scripting. (line 156) * -abort_on controls abort on error: Exception. (line 27) * -abstract_file sets abstract file name: SetWrite. (line 244) -* -acl controls handling of ACLs: Loading. (line 173) +* -acl controls handling of ACLs: Loading. (line 144) * -add inserts one or more paths: Insert. (line 44) * -add_plainly inserts one or more paths: Insert. (line 68) * -alter_date sets timestamps in ISO image: Manip. (line 139) @@ -5292,14 +5315,14 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -application_id sets application id: SetWrite. (line 191) * -application_use sets application use field: SetWrite. (line 266) * -as emulates mkisofs or cdrecord: Emulation. (line 13) -* -assert_volid rejects undesired images: Loading. (line 113) -* -auto_charset learns character set from image: Loading. (line 125) +* -assert_volid rejects undesired images: Loading. (line 84) +* -auto_charset learns character set from image: Loading. (line 96) * -backslash_codes enables backslash conversion: Scripting. (line 71) -* -ban_stdio_write demands real drive: Loading. (line 342) +* -ban_stdio_write demands real drive: Loading. (line 313) * -biblio_file sets biblio file name: SetWrite. (line 250) * -blank erases media: Writing. (line 57) * -boot_image controls bootability: Bootable. (line 75) -* -calm_drive reduces drive activity: Loading. (line 332) +* -calm_drive reduces drive activity: Loading. (line 303) * -cd sets working directory in ISO: Navigate. (line 7) * -cdx sets working directory on disk: Navigate. (line 15) * -changes_pending overrides change status: Writing. (line 12) @@ -5333,24 +5356,25 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -cp_rx copies file trees to disk: Restore. (line 103) * -cp_rx copies file trees to disk <1>: Restore. (line 111) * -cut_out inserts piece of data file: Insert. (line 139) -* -data_cache_size adjusts read cache size: Loading. (line 358) +* -data_cache_size adjusts read cache size: Loading. (line 329) * -dev acquires one drive for input and output: AqDrive. (line 12) * -devices gets list of drives: Inquiry. (line 7) * -device_links gets list of drives: Inquiry. (line 17) * -dialog enables dialog mode: DialogCtl. (line 7) -* -disk_dev_ino fast incremental backup: Loading. (line 252) +* -disk_dev_ino fast incremental backup: Loading. (line 223) * -disk_pattern controls pattern expansion: Insert. (line 34) * -displacement compensate altered image start address: Loading. (line 57) -* -drive_class controls drive accessability: Loading. (line 75) +* -drive_access control device file locking: AqDrive. (line 72) +* -drive_class controls drive accessability: AqDrive. (line 43) * -du show directory size in ISO image: Navigate. (line 78) * -dummy controls write simulation: SetWrite. (line 393) * -dus show directory size in ISO image: Navigate. (line 81) * -dusx show directory size on disk: Navigate. (line 88) * -dux show directory size on disk: Navigate. (line 84) * -dvd_obs set write block size: SetWrite. (line 330) -* -early_stdio_test classifies stdio drives: Loading. (line 346) -* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 234) +* -early_stdio_test classifies stdio drives: Loading. (line 317) +* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 205) * -eject ejects drive tray: Writing. (line 50) * -end writes pending session and ends program: Scripting. (line 151) * -errfile_log logs problematic disk files: Scripting. (line 116) @@ -5361,29 +5385,29 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -extract_cut copies file piece to disk: Restore. (line 80) * -extract_l copies files to disk: Restore. (line 76) * -extract_single copies file to disk: Restore. (line 73) -* -file_name_limit curbs length of file names: Loading. (line 272) +* -file_name_limit curbs length of file names: Loading. (line 243) * -file_size_limit limits data file size: SetInsert. (line 7) * -find traverses and alters ISO tree: CmdFind. (line 7) * -findx traverses disk tree: Navigate. (line 91) * -follow softlinks and mount points: SetInsert. (line 69) * -format formats media: Writing. (line 87) -* -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 220) +* -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 191) * -fs sets size of fifo: SetWrite. (line 396) * -getfacl shows ACL in ISO image: Navigate. (line 60) * -getfacl_r shows ACL in ISO image: Navigate. (line 66) * -getfattr shows xattr in ISO image: Navigate. (line 69) * -getfattr_r shows xattr in ISO image: Navigate. (line 75) * -gid sets global ownership: SetWrite. (line 287) -* -grow_blindly overides next writeable address: AqDrive. (line 60) -* -hardlinks controls handling of hard links: Loading. (line 136) +* -grow_blindly overides next writeable address: AqDrive. (line 112) +* -hardlinks controls handling of hard links: Loading. (line 107) * -help prints help text: Scripting. (line 19) * -hfsplus enables production of HFS+ partition: SetWrite. (line 14) * -hide excludes file names from directory trees: Manip. (line 177) * -history brings text into readline history: Scripting. (line 42) * -indev acquires a drive for input: AqDrive. (line 23) -* -in_charset sets input character set: Loading. (line 120) +* -in_charset sets input character set: Loading. (line 91) * -iso_nowtime fixed "now" time for ISO 9660 objects: Loading. - (line 246) + (line 217) * -iso_rr_pattern controls pattern expansion: Manip. (line 10) * -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 33) * -joliet enables production of Joliet tree: SetWrite. (line 10) @@ -5411,7 +5435,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -map_l inserts paths from disk file: Insert. (line 96) * -map_single inserts path: Insert. (line 93) * -mark sets synchronizing message: Frontend. (line 23) -* -md5 controls handling of MD5 sums: Loading. (line 192) +* -md5 controls handling of MD5 sums: Loading. (line 163) * -mkdir creates ISO directory: Insert. (line 177) * -modesty_on_drive keep drive buffer hungry: SetWrite. (line 336) * -mount issues mount command for ISO session: Restore. (line 146) @@ -5452,7 +5476,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -pwdx tells working directory on disk: Navigate. (line 21) * -quoted_not_list sets exclusions: SetInsert. (line 66) * -quoted_path_list inserts paths from disk file: Insert. (line 85) -* -read_fs filesystem type for image loading: Loading. (line 104) +* -read_fs filesystem type for image loading: Loading. (line 75) * -read_mkisofsrc searches and reads .mkisofsrc file: Emulation. (line 155) * -read_speed set read speed: Loading. (line 11) @@ -5468,10 +5492,10 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 51) * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 154) -* -rom_toc_scan searches for sessions: Loading. (line 304) +* -rom_toc_scan searches for sessions: Loading. (line 275) * -rr_reloc_dir sets name of relocation directory: SetWrite. (line 144) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179) -* -scsi_dev_family choose Linux device file type: AqDrive. (line 43) +* -scsi_dev_family choose Linux device file type: AqDrive. (line 95) * -scsi_log reports SCSI commands: Scripting. (line 143) * -session_log logs written sessions: Scripting. (line 134) * -session_string composes session info line: Inquiry. (line 74) @@ -5515,7 +5539,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -volume_date sets volume timestamp: SetWrite. (line 205) * -write_type chooses TAO or SAO/DAO: SetWrite. (line 417) * -x enables automatic execution order of arguments: ArgSort. (line 16) -* -xattr controls handling of xattr (EA): Loading. (line 180) +* -xattr controls handling of xattr (EA): Loading. (line 151) * -zisofs controls zisofs production: SetWrite. (line 290)  @@ -5527,7 +5551,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top [index] * Menu: -* ACL, control handling, -acl: Loading. (line 173) +* ACL, control handling, -acl: Loading. (line 144) * ACL, set in ISO image, -setfacl: Manip. (line 68) * ACL, set in ISO image, -setfacl_list: Manip. (line 94) * ACL, set in ISO image, -setfacl_r: Manip. (line 92) @@ -5542,8 +5566,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Appended partition, in MBR or GPT: Bootable. (line 282) * Automatic execution order, of arguments, -x: ArgSort. (line 16) * Backslash Interpretation, _definition: Processing. (line 53) -* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 252) -* Backup, enable features, -for_backup: Loading. (line 220) +* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 223) +* Backup, enable features, -for_backup: Loading. (line 191) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Blank media, _definition: Media. (line 29) * Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 374) @@ -5551,10 +5575,10 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Bootability, control, -boot_image: Bootable. (line 75) * Bugs, reporting: Bugreport. (line 6) * cdrecord, Emulation: Emulation. (line 120) -* Character Set, for input, -in_charset: Loading. (line 120) +* Character Set, for input, -in_charset: Loading. (line 91) * Character Set, for input/output, -charset: Charset. (line 54) * Character Set, for output, -out_charset: SetWrite. (line 279) -* Character set, learn from image, -auto_charset: Loading. (line 125) +* Character set, learn from image, -auto_charset: Loading. (line 96) * Character Set, of terminal, -local_charset: Charset. (line 57) * Character Set, _definition: Charset. (line 6) * CHRP partition, _definition: Bootable. (line 294) @@ -5569,6 +5593,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Delete, from ISO image, -rm: Manip. (line 20) * Delete, from ISO image, -rm_r: Manip. (line 26) * Delete, ISO directory, -rmdir: Manip. (line 29) +* Device file locking, -drive_access: AqDrive. (line 72) * Dialog, bring text into history, -history: Scripting. (line 42) * Dialog, confirmation question, -reassure: DialogCtl. (line 29) * Dialog, enable dialog mode, -dialog: DialogCtl. (line 7) @@ -5580,9 +5605,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Directory, create, -mkdir: Insert. (line 177) * Directory, delete, -rmdir: Manip. (line 29) * disk_path, _definition: Insert. (line 6) -* Drive, accessability, -drive_class: Loading. (line 75) -* Drive, classify stdio, -early_stdio_test: Loading. (line 346) -* Drive, demand real MMC, -ban_stdio_write: Loading. (line 342) +* Drive, accessability, -drive_class: AqDrive. (line 43) +* Drive, classify stdio, -early_stdio_test: Loading. (line 317) +* Drive, demand real MMC, -ban_stdio_write: Loading. (line 313) * Drive, eject tray, -eject: Writing. (line 50) * Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input, -indev: AqDrive. (line 23) @@ -5590,7 +5615,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, get drive list, -devices: Inquiry. (line 7) * Drive, get drive list, -device_links: Inquiry. (line 17) * Drive, list supported media, -list_profiles: Writing. (line 177) -* Drive, reduce activity, -calm_drive: Loading. (line 332) +* Drive, reduce activity, -calm_drive: Loading. (line 303) * Drive, report SCSI commands, -scsi_log: Scripting. (line 143) * Drive, write and eject, -commit_eject: Writing. (line 53) * Drive, _definition: Drives. (line 6) @@ -5606,8 +5631,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Examples: Examples. (line 6) * extattr, _definition: Extras. (line 66) * File content, copy, -concat: Restore. (line 118) -* File names, curb length, -file_name_limit: Loading. (line 272) -* File names, if neither Rock Ridge nor Joliet: Loading. (line 234) +* File names, curb length, -file_name_limit: Loading. (line 243) +* File names, if neither Rock Ridge nor Joliet: Loading. (line 205) * Filter, apply to file tree, -set_filter_r: Filter. (line 84) * Filter, apply to file, -set_filter: Filter. (line 58) * Filter, ban registration, -close_filter_list: Filter. (line 50) @@ -5625,15 +5650,15 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Group, in ISO image, -chgrp: Manip. (line 49) * Group, in ISO image, -chgrp_r: Manip. (line 53) * Growing, _definition: Methods. (line 20) -* Hard links, control handling, -hardlinks: Loading. (line 136) +* Hard links, control handling, -hardlinks: Loading. (line 107) * HFS+ allocation block size: Bootable. (line 409) * HFS+ serial number: Bootable. (line 406) * hidden, set in ISO image, -hide: Manip. (line 177) * HP-PA boot sector, production: Bootable. (line 381) -* Image reading, cache size, -data_cache_size: Loading. (line 358) -* Image, demand volume ID, -assert_volid: Loading. (line 113) +* Image reading, cache size, -data_cache_size: Loading. (line 329) +* Image, demand volume ID, -assert_volid: Loading. (line 84) * Image, discard pending changes, -rollback: Writing. (line 9) -* Image, filesystem to load, -read_fs: Loading. (line 104) +* Image, filesystem to load, -read_fs: Loading. (line 75) * Image, override change status, -changes_pending: Writing. (line 12) * Image, set abstract file name, -abstract_file: SetWrite. (line 244) * Image, set application id, -application_id: SetWrite. (line 191) @@ -5682,14 +5707,14 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Jigdo Template Extraction, -jigdo: Jigdo. (line 33) * Jigdo Template Extraction, _definition: Jigdo. (line 6) * LBA, _definition: Drives. (line 17) -* libisofs, fixed "now" time: Loading. (line 246) -* Linux device type, -scsi_dev_family: AqDrive. (line 43) +* libisofs, fixed "now" time: Loading. (line 217) +* Linux device type, -scsi_dev_family: AqDrive. (line 95) * List delimiter, _definition: Processing. (line 9) * Local Character Set, _definition: Charset. (line 11) * MBR bootable/active flag, enforce: Bootable. (line 349) * MBR, set, -boot_image system_area=: Bootable. (line 200) * MBR, _definition: Extras. (line 27) -* MD5, control handling, -md5: Loading. (line 192) +* MD5, control handling, -md5: Loading. (line 163) * Media, erase, -blank: Writing. (line 57) * Media, format, -format: Writing. (line 87) * Media, list formats, -list_formats: Writing. (line 129) @@ -5715,7 +5740,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Navigate, set ISO working directory, -cd: Navigate. (line 7) * Navigate, tell disk working directory, -pwdx: Navigate. (line 21) * Navigate, tell ISO working directory, -pwd: Navigate. (line 19) -* Next writeable address, -grow_blindly: AqDrive. (line 60) +* Next writeable address, -grow_blindly: AqDrive. (line 112) * Output Character Set, _definition: Charset. (line 26) * Overwriteable media, _definition: Media. (line 14) * Ownership, global in ISO image, -uid: SetWrite. (line 284) @@ -5793,7 +5818,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * SUN SPARC boot images, activation: Bootable. (line 450) * Symbolic link, create, -lns: Insert. (line 181) * System area, _definition: Bootable. (line 200) -* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 304) +* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 275) * Table-of-content, show, -toc: Inquiry. (line 27) * Timestamps, set in ISO image, -alter_date: Manip. (line 139) * Timestamps, set in ISO image, -alter_date_r: Manip. (line 174) @@ -5827,7 +5852,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Write, set speed, -speed: SetWrite. (line 301) * Write, simulation, -dummy: SetWrite. (line 393) * Write, TAO or SAO/DAO, -write_type: SetWrite. (line 417) -* xattr, control handling, -xattr: Loading. (line 180) +* xattr, control handling, -xattr: Loading. (line 151) * xattr, set in ISO image, -setfattr: Manip. (line 103) * xattr, set in ISO image, -setfattr_list: Manip. (line 120) * xattr, set in ISO image, -setfattr_r: Manip. (line 118) @@ -5850,49 +5875,49 @@ Node: Dialog23909 Node: Commands25598 Node: ArgSort27275 Node: AqDrive28769 -Node: Loading32883 -Node: Insert54507 -Node: SetInsert66010 -Node: Manip75442 -Node: CmdFind85542 -Node: Filter104471 -Node: Writing109093 -Node: SetWrite119249 -Node: Bootable144008 -Node: Jigdo170965 -Node: Charset175224 -Node: Exception178553 -Node: DialogCtl184682 -Node: Inquiry187284 -Node: Navigate196168 -Node: Verify204625 -Node: Restore215096 -Node: Emulation223709 -Node: Scripting234168 -Node: Frontend241951 -Node: Examples251577 -Node: ExDevices252755 -Node: ExCreate253416 -Node: ExDialog254716 -Node: ExGrowing255987 -Node: ExModifying256796 -Node: ExBootable257306 -Node: ExCharset257861 -Node: ExPseudo258757 -Node: ExCdrecord259684 -Node: ExMkisofs260004 -Node: ExGrowisofs261902 -Node: ExException263056 -Node: ExTime263514 -Node: ExIncBackup263972 -Node: ExRestore267998 -Node: ExRecovery268944 -Node: Files269516 -Node: Environ270850 -Node: Seealso271598 -Node: Bugreport272315 -Node: Legal272906 -Node: CommandIdx273918 -Node: ConceptIdx291388 +Node: Loading35926 +Node: Insert55883 +Node: SetInsert67386 +Node: Manip76818 +Node: CmdFind86918 +Node: Filter105847 +Node: Writing110469 +Node: SetWrite120625 +Node: Bootable145384 +Node: Jigdo172341 +Node: Charset176600 +Node: Exception179929 +Node: DialogCtl186058 +Node: Inquiry188660 +Node: Navigate197544 +Node: Verify206001 +Node: Restore216472 +Node: Emulation225149 +Node: Scripting235608 +Node: Frontend243391 +Node: Examples253017 +Node: ExDevices254195 +Node: ExCreate254856 +Node: ExDialog256156 +Node: ExGrowing257427 +Node: ExModifying258236 +Node: ExBootable258746 +Node: ExCharset259301 +Node: ExPseudo260197 +Node: ExCdrecord261124 +Node: ExMkisofs261444 +Node: ExGrowisofs263342 +Node: ExException264496 +Node: ExTime264954 +Node: ExIncBackup265412 +Node: ExRestore269438 +Node: ExRecovery270384 +Node: Files270956 +Node: Environ272290 +Node: Seealso273038 +Node: Bugreport273755 +Node: Legal274346 +Node: CommandIdx275358 +Node: ConceptIdx292901  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 38ab2f33..015bd443 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.5.1, Apr 15, 2019" +@c man .TH XORRISO 1 "Version 1.5.1, Sep 04, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -69,7 +69,7 @@ xorriso - creates, loads, manipulates and writes ISO 9660 filesystem images with Rock Ridge extensions. -Copyright @copyright{} 2007 - 2017 Thomas Schmitt +Copyright @copyright{} 2007 - 2019 Thomas Schmitt @quotation Permission is granted to distrubute this text freely. @@ -903,6 +903,68 @@ apply. See above paragraph "Libburn drives". An empty address string "" gives up the current output drive without acquiring a new one. No writing is possible without an output drive. @c man .TP +@item -drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern +@kindex -drive_class controls drive accessability +@cindex Drive, accessability, -drive_class +Add a drive path pattern to one of the safety lists or make those lists empty. +There are three lists defined which get tested in the following sequence: +@* +If a drive address path matches the "harmless" list then the drive will be +accepted. If it is not a MMC device then the prefix "stdio:" will be prepended +automatically. This list is empty by default. +@* +Else if the path matches the "banned" list then the drive will not be +accepted by @command{xorriso} but rather lead to a FAILURE event. +This list is empty by default. +@* +Else if the path matches the "caution" list and if it is not a MMC device, +then its address must have the prefix "stdio:" or it will be rejected. +This list has by default one entry: "/dev". +@* +If a drive path matches no list then it is considered "harmless". By default +these are all paths which do not begin with directory "/dev". +@* +A path matches a list if one of its parent paths or itself matches a list +entry. Address prefix "stdio:" or "mmc:" will be ignored when +testing for matches. +@* +By pseudo-class "clear_list" and pseudo-patterns "banned", "caution", +"harmless", or "all", the lists may be made empty. +@* +E.g.: -drive_class clear_list banned +@* +One will normally define the -drive_class lists in one of the @command{xorriso} +Startup Files. +@* +Note: This is not a security feature but rather a bumper for the superuser to +prevent inadverted mishaps. For reliably blocking access to a device file you +have to deny its rw-permissions in the filesystem. +@c man .TP +@item -drive_access "exclusive"|"shared":"unrestricted"|"readonly" +@kindex -drive_access control device file locking +@cindex Device file locking, -drive_access +Control whether device file locking mechanisms shall be used when acquiring a +drive, and whether status or content of the medium in the drive may be +altered. Useful and most harmless are the setting "shared:readonly" +and the default setting "exclusive:unrestricted". +@* +"exclusive" enables tests and locks when acquiring the drive. It depends on the +operating system which locking mechanisms get applied, if any. On GNU/Linux +it is open(O_EXCL). On FreeBSD it is flock(LOCK_EX). +@* +"shared" disables the use of these mechanisms to become able to acquire drives +which are mounted, or opened by some process, or guarded by /dev/pktcdvd*. +@* +"unrestricted" enables all technically appropriate operations on an acquired +drive. "shared:unrestricted" risks to get own burn runs spoiled by other +processes or to vice versa spoil activities of such processes. So use +"exclusive:unrestricted" unless you know for sure that "shared" is safe. +@* +"readonly" disables operations which might surprise a co-user of the drive. +For -outdev these are formatting, blanking, writing, ejecting. For -indev +this is ejecting. Be aware that even reading and drive status inquiries can +disturb an ongoing burn run on CD-R[W] and DVD-R[W]. +@c man .TP @item -scsi_dev_family "default"|"sr"|"scd"|"sg" @kindex -scsi_dev_family choose Linux device file type @cindex Linux device type, -scsi_dev_family @@ -1044,43 +1106,6 @@ to employ a loop device instead.) In both cases, the ISO sessions should be self contained, i.e. not add-on sessions to an ISO image outside their track or partition. @c man .TP -@item -drive_class "harmless"|"banned"|"caution"|"clear_list" disk_pattern -@kindex -drive_class controls drive accessability -@cindex Drive, accessability, -drive_class -Add a drive path pattern to one of the safety lists or make those lists empty. -There are three lists defined which get tested in the following sequence: -@* -If a drive address path matches the "harmless" list then the drive will be -accepted. If it is not a MMC device then the prefix "stdio:" will be prepended -automatically. This list is empty by default. -@* -Else if the path matches the "banned" list then the drive will not be -accepted by @command{xorriso} but rather lead to a FAILURE event. -This list is empty by default. -@* -Else if the path matches the "caution" list and if it is not a MMC device, -then its address must have the prefix "stdio:" or it will be rejected. -This list has by default one entry: "/dev". -@* -If a drive path matches no list then it is considered "harmless". By default -these are all paths which do not begin with directory "/dev". -@* -A path matches a list if one of its parent paths or itself matches a list -entry. Address prefix "stdio:" or "mmc:" will be ignored when -testing for matches. -@* -By pseudo-class "clear_list" and pseudo-patterns "banned", "caution", -"harmless", or "all", the lists may be made empty. -@* -E.g.: -drive_class clear_list banned -@* -One will normally define the -drive_class lists in one of the @command{xorriso} -Startup Files. -@* -Note: This is not a security feature but rather a bumper for the superuser to -prevent inadverted mishaps. For reliably blocking access to a device file you -have to deny its rw-permissions in the filesystem. -@c man .TP @item -read_fs "any"|"norock"|"nojoliet"|"ecma119" @kindex -read_fs filesystem type for image loading @cindex Image, filesystem to load, -read_fs @@ -1277,7 +1302,7 @@ for timestamps of ISO 9660 nodes without a disk source file and as default for superblock timestamps. @* If a timestring is given, then it is used for such timestamps. For the formats -of time strings see command @strong{-alter_date}. +of timestrings see command @strong{-alter_date}. @c man .TP @item -disk_dev_ino "on"|"ino_only"|"off" @kindex -disk_dev_ino fast incremental backup @@ -5504,7 +5529,8 @@ write permission. Default is "sort_lba_off". Option "o_excl_on" is the default unless the program was started with leafname "osirrox". On GNU/Linux it tries to avoid using drives which are mounted or in use by other libburn programs. -Option "o_excl_off" on GNU/Linux enables access to such drives. Drives which +Option "o_excl_off" on GNU/Linux enables access to such drives by the +equivalent of -drive_access "shared:readonly". I.e. drives which get acquired while "o_excl_off" will refuse to get blanked, formatted, written, or ejected. But be aware that even harmless inquiries can spoil ongoing burns of CD-R[W] and DVD-R[W]. diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 9c908103..c65d0fc3 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -288,6 +288,7 @@ struct XorrisO { /* the global context of xorriso */ int read_fs; /* bit0=norock , bit1=nojoliet */ int drives_exclusive; /* burn_preset_device_open() param exclusive */ + int drives_access; /* 0=readonly , 1=unrestricted */ int linux_scsi_dev_family; /* 0= default, 1= sr, 2= scd, (3= st), 4= sg */ @@ -314,6 +315,7 @@ struct XorrisO { /* the global context of xorriso */ void *in_volset_handle; /* interpreted only by libburnia oriented modules */ char *in_charset; /* The charset to interpret the filename bytes */ int indev_is_exclusive; + int indev_access; /* see drives_access */ char indev_off_adr[SfileadrL]; /* Result of burn_drive_convert_fs_adr(indev) when indev gets acquired. */ @@ -345,6 +347,7 @@ struct XorrisO { /* the global context of xorriso */ connected to externaly perveived stdout. */ int outdev_is_exclusive; + int outdev_access; /* see drives_access */ char outdev_off_adr[SfileadrL]; /* Result of burn_drive_convert_fs_adr(outdev) when outdev gets acquired. */ diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 896b69bc..afcae335 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2019.09.01.072438" +#define Xorriso_timestamP "2019.09.08.102946"