diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 230796ba..e09b9326 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -3,7 +3,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2019 Thomas Schmitt, + Copyright 2007-2020 Thomas Schmitt, Provided under GPL version 2 or later. @@ -145,7 +145,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->do_iso1999= 0; m->ecma119_map= 1; m->do_aaip= 0; - m->do_md5= 0; + m->do_md5= 64; m->no_emul_toc= 0; m->do_old_empty= 0; m->scdbackup_tag_name[0]= 0; diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 79a0ceb1..31b95182 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2017 Thomas Schmitt, + Copyright 2007-2020 Thomas Schmitt, Provided under GPL version 2 or later. @@ -2300,6 +2300,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " [:\"auto_chmod_on\"|\"auto_chmod_off\"]", " [:\"sort_lba_on\"|\"sort_lba_off\"]", " [:\"strict_acl_on\"|\"strict_acl_off\"]", +" [:\"check_md5_on\"|\"check_md5_off\"|\"check_md5_force\"]", " By default \"off\" the inverse operation of xorriso from ISO", " image to disk filesystem is disabled. \"on\" allows xorriso", " to create, overwrite, delete files in the disk filesystem.", diff --git a/xorriso/opts_i_o.c b/xorriso/opts_i_o.c index 1af9849f..064268bc 100644 --- a/xorriso/opts_i_o.c +++ b/xorriso/opts_i_o.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2019 Thomas Schmitt, + Copyright 2007-2020 Thomas Schmitt, Provided under GPL version 2 or later. @@ -1792,7 +1792,14 @@ int Xorriso_option_osirrox(struct XorrisO *xorriso, char *mode, int flag) xorriso->do_strict_acl|= 1; else if(strncmp(cpt, "strict_acl_off", l)==0 && l >= 14) xorriso->do_strict_acl&= ~1; - else { + else if(strncmp(cpt, "check_md5_on", l) == 0 && l >= 12) { + xorriso->do_md5|= 1 << 6; + xorriso->do_md5&= ~(2 << 6); + } else if(strncmp(cpt, "check_md5_force", l)==0 && l >= 15) { + xorriso->do_md5|= 3 << 6; + } else if(strncmp(cpt, "check_md5_off", l)==0 && l >= 13) { + xorriso->do_md5&= ~(3 << 6); + } else { unknown_mode:; sprintf(xorriso->info_text, "-osirrox: unknown mode '%s'", cpt); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); diff --git a/xorriso/read_run.c b/xorriso/read_run.c index 2e79c34a..ba13fd6e 100644 --- a/xorriso/read_run.c +++ b/xorriso/read_run.c @@ -2,7 +2,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2019 Thomas Schmitt, + Copyright 2007-2020 Thomas Schmitt, Provided under GPL version 2 or later. @@ -565,10 +565,15 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node, uint32_t lba; char *catcontent = NULL; off_t catsize; + char disk_md5[16], iso_md5[16]; + void *ctx= NULL; + int use_md5= 0, i; Xorriso_alloc_meM(buf, char, buf_size); Xorriso_alloc_meM(temp_path, char, SfileadrL); + if(!(flag & 2)) + img_offset= bytes= 0; if(LIBISO_ISDIR(node)) { what= "directory"; ret= mkdir(disk_path, 0777); @@ -583,6 +588,25 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node, 1); if(ret<=0) goto ex; + if((xorriso->do_md5 & 65) == 65 && !(flag & 2)) { + ret= Xorriso_is_plain_image_file(xorriso, (void *) node, img_path, 0); + if(ret > 0) { + ret= Xorriso_get_md5(xorriso, (void *) node, img_path, iso_md5, 1); + if(ret > 0) + ret= Xorriso_md5_start(xorriso, &ctx, 0); + if(ret > 0) { + use_md5= 1; + } else if(xorriso->do_md5 & 128) { + sprintf(xorriso->info_text, + "Cannot obtain any recorded MD5 of file "); + Text_shellsafe(img_path, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); + ret= Xorriso_eval_problem_status(xorriso, 0, 1 | 2); + if(ret < 0) + {ret= 0; goto ex;} + } + } + } } open_path_pt= disk_path; ret= stat(open_path_pt, &stbuf); @@ -696,6 +720,8 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node, break; } read_count+= ret; + if(use_md5) + Xorriso_md5_compute(xorriso, ctx, buf_pt, ret, 0); if(img_offset > read_count - ret) { /* skip the desired amount of bytes */ @@ -724,7 +750,30 @@ int Xorriso_tree_restore_node(struct XorrisO *xorriso, IsoNode *node, Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "FAILURE",0); break; } - } + } + + if(use_md5) { + ret= Xorriso_md5_end(xorriso, &ctx, disk_md5, 0); + if(ret <= 0) { + sprintf(xorriso->info_text, + "Internal problem with obtaining computed MD5 for extracted data of "); + goto bad_md5; + } else { + for(i= 0; i < 16; i++) + if(iso_md5[i] != disk_md5[i]) + break; + if(i < 16) { + sprintf(xorriso->info_text, + "MD5 of extracted data does not match recorded MD5 of file "); +bad_md5:; + Text_shellsafe(img_path, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); + ret= Xorriso_eval_problem_status(xorriso, 0, 1 | 2); + if(ret < 0) + {ret= 0; goto ex;} + } + } + } if(write_fd != -1) close(write_fd); write_fd= -1; @@ -847,6 +896,8 @@ ex:; free(catcontent); if(data_stream!=NULL) Xorriso_iso_file_close(xorriso, &data_stream, 0); + if(ctx != NULL) + Xorriso_md5_end(xorriso, &ctx, disk_md5, 0); Xorriso_process_msg_queues(xorriso,0); return(ret); } diff --git a/xorriso/text_io.c b/xorriso/text_io.c index 9154bf2f..c036a7e5 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2019 Thomas Schmitt, + Copyright 2007-2020 Thomas Schmitt, Provided under GPL version 2 or later. @@ -2990,12 +2990,15 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) if(xorriso->allow_restore == -1) sprintf(line,"-osirrox %s\n", mode_pt); else - sprintf(line,"-osirrox %s:%s:%s:%s:%s:%s\n", mode_pt, + sprintf(line,"-osirrox %s:%s:%s:%s:%s:%s:%s\n", mode_pt, xorriso->do_concat_split ? "concat_split_on" : "concat_split_off", xorriso->do_auto_chmod ? "auto_chmod_on" : "auto_chmod_off", xorriso->do_restore_sort_lba ? "sort_lba_on" : "sort_lba_off", xorriso->drives_exclusive ? "o_excl_on" : "o_excl_off", - (xorriso->do_strict_acl & 1) ? "strict_acl_on" : "strict_acl_off" + (xorriso->do_strict_acl & 1) ? "strict_acl_on" : "strict_acl_off", + (xorriso->do_md5 & 64) ? + (xorriso->do_md5 & 128) ? "check_md5_force" : "check_md5_on" + : "check_md5_off" ); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 5e6f117e..eba51ca3 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.3, Dec 23, 2019" +.TH XORRISO 1 "Version 1.5.3, Jan 02, 2020" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -990,6 +990,9 @@ will be used to avoid content reading from the image. Only the disk file content will be read and compared with that MD5. This can save much time if \-disk_dev_ino "on" is not suitable. .br +Commands which copy whole data files from ISO to hard disk will verify the +copied data stream by the recorded MD5, if \-osirrox "check_md5_on" is set. +.br At image generation time they are computed for each file which gets its data written into the new session. The checksums of files which have their data in older sessions get copied into the new session. Superblock, tree and whole @@ -4777,16 +4780,16 @@ Access permissions of files in the ISO image do not restrict restoring. The directory permissions on disk have to allow rwx. .TP \fB\-osirrox\fR setting[:option:...] -Setting "off" disables disk filesystem manipulations. This is the default -unless the program was started with leafname "osirrox". Elsewise -the capability to restore files can be enabled explicitly by \-osirrox "on". -It can be irrevocably disabled by \-osirrox "banned". +Setting \fBoff\fR disables disk filesystem manipulations. This is the default +unless the program was started with leafname \fBosirrox\fR. Elsewise the +capability to restore files can be enabled explicitly by \-osirrox \fBon\fR. +It can be irrevocably disabled by \-osirrox \fBbanned\fR. .br -The setting "blocked" is like "off". But it can only be revoked by -setting "unblock", which elsewise is like "on". This can be used to curb -command scripts which might use "on" undesiredly. +The setting \fBblocked\fR is like \fBoff\fR. But it can only be revoked +by setting \fBunblock\fR, which elsewise is like \fBon\fR. This can be +used to curb command scripts which might use \fBon\fR undesiredly. .br -To enable restoring of special files by "device_files" is potentially +To enable restoring of special files by \fBdevice_files\fR is potentially dangerous. The meaning of the number st_rdev (see man 2 stat) depends much on the operating system. Best is to restore device files only to the same system @@ -4797,34 +4800,43 @@ Due to a bug of previous versions, device files from previous sessions might have been altered to major=0, minor=1. So this combination does not get restored. .br -Option "concat_split_on" is default. It enables restoring of split file +Option \fBconcat_split_on\fR is default. It enables restoring of split file directories as data files if the directory contains a complete collection -of \-cut_out part files. With option "concat_split_off" such directories are -handled like any other ISO image directory. +of \-cut_out part files. With option \fBconcat_split_off\fR such directories +are handled like any other ISO image directory. .br -Option "auto_chmod_off" is default. If "auto_chmod_on" is set then access -restrictions for disk directories get circumvented if those directories -are owned by the effective user who runs \fBxorriso\fR. This happens -by temporarily granting rwx permission to the owner. +Option \fBauto_chmod_off\fR is default. If \fBauto_chmod_on\fR is set +then access restrictions for disk directories get circumvented if those +directories are owned by the effective user who runs \fBxorriso\fR. +This happens by temporarily granting rwx permission to the owner. .br -Option "sort_lba_on" may improve read performance with optical drives. It -can restore large numbers of hard links without exhausting +Option \fBsort_lba_on\fR may improve read performance with optical drives. +It can restore large numbers of hard links without exhausting \-temp_mem_limit. It does not preserve directory mtime and it needs \-osirrox option auto_chmod_on in order to extract directories which offer no -write permission. Default is "sort_lba_off". +write permission. Default is \fBsort_lba_off\fR. .br -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 by the +Option \fBo_excl_on\fR 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 \fBo_excl_off\fR 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, +get acquired while \fBo_excl_off\fR 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]. .br -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 event during restore with \-acl "on". +Option \fBstrict_acl_off\fR is default. It tolerates on FreeBSD the presence +of directory "default" ACLs in the ISO image. +With \fBstrict_acl_on\fR these GNU/Linux ACLs cause on FreeBSD a FAILURE +event during restore with \-acl "on". +.br +Option \fBcheck_md5_off\fR disables MD5 checking during copy to disk. +The default option \fBcheck_md5_on\fR enables it if \-md5 is "on". If a data +file with recorded MD5 is copied as a whole to the disk filesystem, then the +MD5 of the copied content gets computed and compared with the recorded MD5. +A mismatch causes an error message of severity SORRY. +Option \fBcheck_md5_force\fR causes an error message if \-md5 is "on" +but no MD5 is recorded for the data file. .TP \fB\-extract\fR iso_rr_path disk_path Copy the file objects at and underneath iso_rr_path to their corresponding diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 28e749bd..070d0aa1 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -894,6 +894,9 @@ activate them only after image loading. be used to avoid content reading from the image. Only the disk file content will be read and compared with that MD5. This can save much time if -disk_dev_ino "on" is not suitable. + Commands which copy whole data files from ISO to hard disk will + verify the copied data stream by the recorded MD5, if -osirrox + "check_md5_on" is set. At image generation time they are computed for each file which gets its data written into the new session. The checksums of files which have their data in older sessions get copied into the new @@ -4021,15 +4024,15 @@ Access permissions of files in the ISO image do not restrict restoring. The directory permissions on disk have to allow rwx. -osirrox setting[:option:...] - Setting "off" disables disk filesystem manipulations. This is the - default unless the program was started with leafname "osirrox". + Setting *off* disables disk filesystem manipulations. This is the + default unless the program was started with leafname *osirrox*. Elsewise the capability to restore files can be enabled explicitly - by -osirrox "on". It can be irrevocably disabled by -osirrox - "banned". - The setting "blocked" is like "off". But it can only be revoked by - setting "unblock", which elsewise is like "on". This can be used - to curb command scripts which might use "on" undesiredly. - To enable restoring of special files by "device_files" is + by -osirrox *on*. It can be irrevocably disabled by -osirrox + *banned*. + The setting *blocked* is like *off*. But it can only be revoked by + setting *unblock*, which elsewise is like *on*. This can be used + to curb command scripts which might use *on* undesiredly. + To enable restoring of special files by *device_files* is potentially dangerous. The meaning of the number st_rdev (see man 2 stat) depends much on the operating system. Best is to restore device files only to the same system from where they were copied. @@ -4038,32 +4041,39 @@ The directory permissions on disk have to allow rwx. Due to a bug of previous versions, device files from previous sessions might have been altered to major=0, minor=1. So this combination does not get restored. - Option "concat_split_on" is default. It enables restoring of split + Option *concat_split_on* is default. It enables restoring of split file directories as data files if the directory contains a complete - collection of -cut_out part files. With option "concat_split_off" + collection of -cut_out part files. With option *concat_split_off* such directories are handled like any other ISO image directory. - Option "auto_chmod_off" is default. If "auto_chmod_on" is set then + Option *auto_chmod_off* is default. If *auto_chmod_on* is set then access restrictions for disk directories get circumvented if those directories are owned by the effective user who runs 'xorriso'. This happens by temporarily granting rwx permission to the owner. - Option "sort_lba_on" may improve read performance with optical + Option *sort_lba_on* may improve read performance with optical drives. It can restore large numbers of hard links without exhausting -temp_mem_limit. It does not preserve directory mtime and it needs -osirrox option auto_chmod_on in order to extract directories which offer no write permission. Default is - "sort_lba_off". - Option "o_excl_on" is the default unless the program was started + *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 by + 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, + 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 + 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 + *strict_acl_on* these GNU/Linux ACLs cause on FreeBSD a FAILURE event during restore with -acl "on". + Option *check_md5_off* disables MD5 checking during copy to disk. + The default option *check_md5_on* enables it if -md5 is "on". If a + data file with recorded MD5 is copied as a whole to the disk + filesystem, then the MD5 of the copied content gets computed and + compared with the recorded MD5. A mismatch causes an error message + of severity SORRY. Option *check_md5_force* causes an error message + if -md5 is "on" but no MD5 is recorded for the data file. -extract iso_rr_path disk_path Copy the file objects at and underneath iso_rr_path to their corresponding addresses at and underneath disk_path. This is the @@ -5333,11 +5343,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -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 313) +* -ban_stdio_write demands real drive: Loading. (line 316) * -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 303) +* -calm_drive reduces drive activity: Loading. (line 306) * -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) @@ -5362,21 +5372,21 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -compare_l reports ISO/disk differences: Navigate. (line 147) * -compare_r reports ISO/disk differences: Navigate. (line 143) * -compliance controls standard compliance: SetWrite. (line 56) -* -concat copies ISO file content: Restore. (line 118) +* -concat copies ISO file content: Restore. (line 125) * -copyright_file sets copyright file name: SetWrite. (line 239) -* -cpax copies files to disk: Restore. (line 100) +* -cpax copies files to disk: Restore. (line 107) * -cpr inserts like with cp -r: Insert. (line 164) -* -cpx copies files to disk: Restore. (line 89) +* -cpx copies files to disk: Restore. (line 96) * -cp_clone copies ISO directory tree: Insert. (line 196) -* -cp_rx copies file trees to disk: Restore. (line 103) -* -cp_rx copies file trees to disk <1>: Restore. (line 111) +* -cp_rx copies file trees to disk: Restore. (line 110) +* -cp_rx copies file trees to disk <1>: Restore. (line 118) * -cut_out inserts piece of data file: Insert. (line 139) -* -data_cache_size adjusts read cache size: Loading. (line 329) +* -data_cache_size adjusts read cache size: Loading. (line 332) * -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 223) +* -disk_dev_ino fast incremental backup: Loading. (line 226) * -disk_pattern controls pattern expansion: Insert. (line 34) * -displacement compensate altered image start address: Loading. (line 57) @@ -5388,25 +5398,25 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -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 317) -* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 205) +* -early_stdio_test classifies stdio drives: Loading. (line 320) +* -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 208) * -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) * -error_behavior controls error workarounds: Exception. (line 92) * -external_filter registers data filter: Filter. (line 20) * -external_filter unregisters data filter: Filter. (line 47) -* -extract copies file tree to disk: Restore. (line 62) -* -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 243) +* -extract copies file tree to disk: Restore. (line 69) +* -extract_cut copies file piece to disk: Restore. (line 87) +* -extract_l copies files to disk: Restore. (line 83) +* -extract_single copies file to disk: Restore. (line 80) +* -file_name_limit curbs length of file names: Loading. (line 246) * -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 191) +* -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 194) * -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) @@ -5422,7 +5432,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -indev acquires a drive for input: AqDrive. (line 23) * -in_charset sets input character set: Loading. (line 91) * -iso_nowtime fixed "now" time for ISO 9660 objects: Loading. - (line 217) + (line 220) * -iso_rr_pattern controls pattern expansion: Manip. (line 10) * -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 37) * -joliet enables production of Joliet tree: SetWrite. (line 10) @@ -5453,7 +5463,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -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) +* -mount issues mount command for ISO session: Restore. (line 153) * -mount_cmd composes mount command line: Inquiry. (line 49) * -mount_cmd controls mount command: Inquiry. (line 65) * -msg_op perform operations on program messages: Frontend. (line 27) @@ -5473,7 +5483,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -pacifier controls pacifier text form: Emulation. (line 166) * -padding sets amount or mode of image padding: SetWrite. (line 424) * -page set terminal geometry: DialogCtl. (line 18) -* -paste_in copies file into disk file: Restore. (line 114) +* -paste_in copies file into disk file: Restore. (line 121) * -pathspecs sets meaning of = with -add: SetInsert. (line 115) * -path_list inserts paths from disk file: Insert. (line 81) * -pkt_output consolidates text output: Frontend. (line 7) @@ -5507,7 +5517,7 @@ 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 275) +* -rom_toc_scan searches for sessions: Loading. (line 278) * -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 95) @@ -5581,8 +5591,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 223) -* Backup, enable features, -for_backup: Loading. (line 191) +* Backup, enable fast incremental, -disk_dev_ino: Loading. (line 226) +* Backup, enable features, -for_backup: Loading. (line 194) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Blank media, _definition: Media. (line 29) * Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 374) @@ -5621,8 +5631,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Directory, delete, -rmdir: Manip. (line 29) * disk_path, _definition: Insert. (line 6) * 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, classify stdio, -early_stdio_test: Loading. (line 320) +* Drive, demand real MMC, -ban_stdio_write: Loading. (line 316) * Drive, eject tray, -eject: Writing. (line 50) * Drive, for input and output, -dev: AqDrive. (line 12) * Drive, for input, -indev: AqDrive. (line 23) @@ -5630,7 +5640,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 176) -* Drive, reduce activity, -calm_drive: Loading. (line 303) +* Drive, reduce activity, -calm_drive: Loading. (line 306) * Drive, report SCSI commands, -scsi_log: Scripting. (line 143) * Drive, write and eject, -commit_eject: Writing. (line 53) * Drive, _definition: Drives. (line 6) @@ -5645,9 +5655,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Emulation, pacifier form, -pacifier: Emulation. (line 166) * 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 243) -* File names, if neither Rock Ridge nor Joliet: Loading. (line 205) +* File content, copy, -concat: Restore. (line 125) +* File names, curb length, -file_name_limit: Loading. (line 246) +* File names, if neither Rock Ridge nor Joliet: Loading. (line 208) * 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) @@ -5670,7 +5680,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * 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 329) +* Image reading, cache size, -data_cache_size: Loading. (line 332) * 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 75) @@ -5722,7 +5732,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Jigdo Template Extraction, -jigdo: Jigdo. (line 37) * Jigdo Template Extraction, _definition: Jigdo. (line 6) * LBA, _definition: Drives. (line 17) -* libisofs, fixed "now" time: Loading. (line 217) +* libisofs, fixed "now" time: Loading. (line 220) * Linux device type, -scsi_dev_family: AqDrive. (line 95) * List delimiter, _definition: Processing. (line 9) * Local Character Set, _definition: Charset. (line 11) @@ -5807,22 +5817,22 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Relocation directory, set name, -rr_reloc_dir: SetWrite. (line 144) * Rename, in ISO image, -move: Manip. (line 31) * Rename, in ISO image, -mv: Manip. (line 37) -* Restore, copy file into disk file, -paste_in: Restore. (line 114) -* Restore, copy file piece to disk, -extract_cut: Restore. (line 80) -* Restore, copy file to disk, -extract_single: Restore. (line 73) -* Restore, copy file tree to disk, -extract: Restore. (line 62) -* Restore, copy file trees to disk, -cp_rx: Restore. (line 103) -* Restore, copy file trees to disk, -cp_rx <1>: Restore. (line 111) -* Restore, copy files to disk, -cpax: Restore. (line 100) -* Restore, copy files to disk, -cpx: Restore. (line 89) -* Restore, copy files to disk, -extract_l: Restore. (line 76) +* Restore, copy file into disk file, -paste_in: Restore. (line 121) +* Restore, copy file piece to disk, -extract_cut: Restore. (line 87) +* Restore, copy file to disk, -extract_single: Restore. (line 80) +* Restore, copy file tree to disk, -extract: Restore. (line 69) +* Restore, copy file trees to disk, -cp_rx: Restore. (line 110) +* Restore, copy file trees to disk, -cp_rx <1>: Restore. (line 118) +* Restore, copy files to disk, -cpax: Restore. (line 107) +* Restore, copy files to disk, -cpx: Restore. (line 96) +* Restore, copy files to disk, -extract_l: Restore. (line 83) * Restore, enable ISO-to-disk, -osirrox: Restore. (line 18) * Result layout, more shell-like, -sh_style_result: Scripting. (line 61) * Rock Ridge, _definition: Extras. (line 6) * Session, altered start address, -displacement: Loading. (line 57) * Session, info string, -session_string: Inquiry. (line 74) -* Session, issue mount command, -mount: Restore. (line 146) +* Session, issue mount command, -mount: Restore. (line 153) * Session, log when written, -session_log: Scripting. (line 134) * Session, mount command line, -mount_cmd: Inquiry. (line 49) * Session, mount parameters, -mount_opts: Inquiry. (line 65) @@ -5833,7 +5843,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 275) +* Table-of-content, search sessions, -rom_toc_scan: Loading. (line 278) * 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) @@ -5891,48 +5901,48 @@ Node: Commands25588 Node: ArgSort27265 Node: AqDrive28759 Node: Loading35916 -Node: Insert55869 -Node: SetInsert67372 -Node: Manip76804 -Node: CmdFind86904 -Node: Filter105833 -Node: Writing110455 -Node: SetWrite120602 -Node: Bootable145365 -Node: Jigdo172320 -Node: Charset177323 -Node: Exception180652 -Node: DialogCtl186781 -Node: Inquiry189383 -Node: Navigate198265 -Node: Verify206722 -Node: Restore217193 -Node: Emulation225870 -Node: Scripting236326 -Node: Frontend244109 -Node: Examples253735 -Node: ExDevices254913 -Node: ExCreate255574 -Node: ExDialog256874 -Node: ExGrowing258145 -Node: ExModifying258954 -Node: ExBootable259464 -Node: ExCharset260019 -Node: ExPseudo260915 -Node: ExCdrecord261842 -Node: ExMkisofs262162 -Node: ExGrowisofs264059 -Node: ExException265212 -Node: ExTime265670 -Node: ExIncBackup266128 -Node: ExRestore270154 -Node: ExRecovery271100 -Node: Files271672 -Node: Environ273006 -Node: Seealso273754 -Node: Bugreport274471 -Node: Legal275062 -Node: CommandIdx276074 -Node: ConceptIdx293617 +Node: Insert56034 +Node: SetInsert67537 +Node: Manip76969 +Node: CmdFind87069 +Node: Filter105998 +Node: Writing110620 +Node: SetWrite120767 +Node: Bootable145530 +Node: Jigdo172485 +Node: Charset177488 +Node: Exception180817 +Node: DialogCtl186946 +Node: Inquiry189548 +Node: Navigate198430 +Node: Verify206887 +Node: Restore217358 +Node: Emulation226524 +Node: Scripting236980 +Node: Frontend244763 +Node: Examples254389 +Node: ExDevices255567 +Node: ExCreate256228 +Node: ExDialog257528 +Node: ExGrowing258799 +Node: ExModifying259608 +Node: ExBootable260118 +Node: ExCharset260673 +Node: ExPseudo261569 +Node: ExCdrecord262496 +Node: ExMkisofs262816 +Node: ExGrowisofs264713 +Node: ExException265866 +Node: ExTime266324 +Node: ExIncBackup266782 +Node: ExRestore270808 +Node: ExRecovery271754 +Node: Files272326 +Node: Environ273660 +Node: Seealso274408 +Node: Bugreport275125 +Node: Legal275716 +Node: CommandIdx276728 +Node: ConceptIdx294271  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 136c842d..bfb86894 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.3, Dec 23, 2019" +@c man .TH XORRISO 1 "Version 1.5.3, Jan 02, 2020" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -1238,6 +1238,9 @@ will be used to avoid content reading from the image. Only the disk file content will be read and compared with that MD5. This can save much time if -disk_dev_ino "on" is not suitable. @* +Commands which copy whole data files from ISO to hard disk will verify the +copied data stream by the recorded MD5, if -osirrox "check_md5_on" is set. +@* At image generation time they are computed for each file which gets its data written into the new session. The checksums of files which have their data in older sessions get copied into the new session. Superblock, tree and whole @@ -5510,16 +5513,16 @@ The directory permissions on disk have to allow rwx. @item -osirrox setting[:option:...] @kindex -osirrox enables ISO-to-disk copying @cindex Restore, enable ISO-to-disk, -osirrox -Setting "off" disables disk filesystem manipulations. This is the default -unless the program was started with leafname "osirrox". Elsewise -the capability to restore files can be enabled explicitly by -osirrox "on". -It can be irrevocably disabled by -osirrox "banned". +Setting @strong{off} disables disk filesystem manipulations. This is the default +unless the program was started with leafname @strong{osirrox}. Elsewise the +capability to restore files can be enabled explicitly by -osirrox @strong{on}. +It can be irrevocably disabled by -osirrox @strong{banned}. @* -The setting "blocked" is like "off". But it can only be revoked by -setting "unblock", which elsewise is like "on". This can be used to curb -command scripts which might use "on" undesiredly. +The setting @strong{blocked} is like @strong{off}. But it can only be revoked +by setting @strong{unblock}, which elsewise is like @strong{on}. This can be +used to curb command scripts which might use @strong{on} undesiredly. @* -To enable restoring of special files by "device_files" is potentially +To enable restoring of special files by @strong{device_files} is potentially dangerous. The meaning of the number st_rdev (see man 2 stat) depends much on the operating system. Best is to restore device files only to the same system @@ -5530,34 +5533,43 @@ Due to a bug of previous versions, device files from previous sessions might have been altered to major=0, minor=1. So this combination does not get restored. @* -Option "concat_split_on" is default. It enables restoring of split file +Option @strong{concat_split_on} is default. It enables restoring of split file directories as data files if the directory contains a complete collection -of -cut_out part files. With option "concat_split_off" such directories are -handled like any other ISO image directory. +of -cut_out part files. With option @strong{concat_split_off} such directories +are handled like any other ISO image directory. @* -Option "auto_chmod_off" is default. If "auto_chmod_on" is set then access -restrictions for disk directories get circumvented if those directories -are owned by the effective user who runs @command{xorriso}. This happens -by temporarily granting rwx permission to the owner. +Option @strong{auto_chmod_off} is default. If @strong{auto_chmod_on} is set +then access restrictions for disk directories get circumvented if those +directories are owned by the effective user who runs @command{xorriso}. +This happens by temporarily granting rwx permission to the owner. @* -Option "sort_lba_on" may improve read performance with optical drives. It -can restore large numbers of hard links without exhausting +Option @strong{sort_lba_on} may improve read performance with optical drives. +It can restore large numbers of hard links without exhausting -temp_mem_limit. It does not preserve directory mtime and it needs -osirrox option auto_chmod_on in order to extract directories which offer no -write permission. Default is "sort_lba_off". +write permission. Default is @strong{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 by the +Option @strong{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 @strong{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, +get acquired while @strong{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 event during restore with -acl "on". +Option @strong{strict_acl_off} is default. It tolerates on FreeBSD the presence +of directory "default" ACLs in the ISO image. +With @strong{strict_acl_on} these GNU/Linux ACLs cause on FreeBSD a FAILURE +event during restore with -acl "on". +@* +Option @strong{check_md5_off} disables MD5 checking during copy to disk. +The default option @strong{check_md5_on} enables it if -md5 is "on". If a data +file with recorded MD5 is copied as a whole to the disk filesystem, then the +MD5 of the copied content gets computed and compared with the recorded MD5. +A mismatch causes an error message of severity SORRY. +Option @strong{check_md5_force} causes an error message if -md5 is "on" +but no MD5 is recorded for the data file. @c man .TP @item -extract iso_rr_path disk_path @kindex -extract copies file tree to disk diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 9558fbfa..1bfb7dc4 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -173,6 +173,8 @@ struct XorrisO { /* the global context of xorriso */ bit3= make file content stability check by double reading bit4= use recorded MD5 as proxy of ISO file bit5= with bit0: do not check tags of superblock,tree,session + bit6= during extraction verify file content by recorded MD5 + bit7= with bit6: take lack of MD5 as error */ int no_emul_toc; /* bit0= On overwritables: