From b4e10ced996c59e20bcdea77010195beeb7b7ecc Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 22 Jan 2023 16:19:28 +0100 Subject: [PATCH] New -compliance rules max_ce_entries=, max_ce_drop= --- xorriso/base_obj.c | 4 +- xorriso/write_run.c | 54 +++++++++- xorriso/xorriso.1 | 31 +++++- xorriso/xorriso.info | 205 ++++++++++++++++++++---------------- xorriso/xorriso.texi | 31 +++++- xorriso/xorriso_private.h | 6 +- xorriso/xorriso_timestamp.h | 2 +- 7 files changed, 228 insertions(+), 105 deletions(-) diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 1e73ba6c..110c5a31 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-2021 Thomas Schmitt, + Copyright 2007-2023 Thomas Schmitt, Provided under GPL version 2 or later. @@ -322,6 +322,8 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->iso_mbr_part_flag= 0; memset(m->gpt_guid, 0, 16); m->gpt_guid_mode= 0; + m->max_ce_entries= 31; /* Linux hates >= RR_MAX_CE_ENTRIES = 32 */ + m->max_ce_entries_flag= 2; /* omit non-isofs fattr and ACL if needed */ m->ascii_disc_label[0]= 0; m->grub2_sparc_core[0]= 0; memset(m->hfsp_serial_number, 0, 8); diff --git a/xorriso/write_run.c b/xorriso/write_run.c index fa021e27..577cd47c 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -2,7 +2,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2022 Thomas Schmitt, + Copyright 2007-2023 Thomas Schmitt, Provided under GPL version 2 or later. @@ -988,6 +988,10 @@ int Xorriso_make_iso_write_opts(struct XorrisO *xorriso, IsoImage *image, isoburn_igopt_set_iso_type_guid(sopts, xorriso->iso_gpt_type_guid, xorriso->iso_mbr_part_flag & 1); isoburn_igopt_set_gpt_guid(sopts, xorriso->gpt_guid, xorriso->gpt_guid_mode); + ret= isoburn_igopt_set_max_ce_entries(sopts, xorriso->max_ce_entries, + xorriso->max_ce_entries_flag); + if(ret <= 0) + {ret= 0; goto ex;} isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label); isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number); isoburn_igopt_set_hfsp_block_size(sopts, xorriso->hfsp_block_size, @@ -1059,6 +1063,7 @@ fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n", ret= 1; ex:; + Xorriso_process_msg_queues(xorriso, 0); return(ret); } @@ -2564,9 +2569,10 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode, int flag) { char *npt, *cpt; - int l, was, value, ret; + int l, was, value, ret, endl; struct isoburn_imgen_opts *opts= NULL; char *msg= NULL; + char submode[41], *endpt; off_t limit; was= xorriso->relax_compliance; @@ -2783,6 +2789,41 @@ int Xorriso_relax_compliance(struct XorrisO *xorriso, char *mode, } else if(l == 13 && strncmp(cpt, "old_empty_off", l) == 0) { xorriso->do_old_empty= 0; + } else if(l >= 15 && strncmp(cpt, "max_ce_entries=", 15) == 0) { + value= 0; + sscanf(cpt + 15, "%d", &value); + if(value < 1 || value > 100000) { + if(msg == NULL) + Xorriso_alloc_meM(msg, char, 160); + sprintf(msg, + "-compliance max_ce_entries=%d : Permissible is 1 to 100000", + value); + Xorriso_msgs_submit(xorriso, 0, msg, 0, "FAILURE", 0); + xorriso->relax_compliance= was; + ret= 0; goto ex; + } else { + xorriso->max_ce_entries= value; + } + } else if(l >= 12 && strncmp(cpt, "max_ce_drop=", 12) == 0) { + endl= sizeof(submode) - 1; + endpt= strchr(cpt + 12, ':'); + if(endpt != NULL) + if(endl > endpt - (cpt + 12)) + endl= endpt - (cpt + 12); + strncpy(submode, cpt + 12, endl); + submode[endl]= 0; + if(strcmp(submode, "off") == 0) { + xorriso->max_ce_entries_flag&= ~15; + } else if(strcmp(submode, "xattr") == 0) { + xorriso->max_ce_entries_flag= (xorriso->max_ce_entries_flag & ~15) | 1; + } else if(strcmp(submode, "xattr_acl") == 0) { + xorriso->max_ce_entries_flag= (xorriso->max_ce_entries_flag & ~15) | 2; + } else { + sprintf(xorriso->info_text, + "-compliance: unknown mode in max_ce_drop='%s'", submode); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + ret= 0; goto ex; + } } else { if(linfo_text, "-compliance: unknown rule '%s'", @@ -2806,7 +2847,7 @@ ex:; int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024], int flag) { - int r; + int r, drop; r= xorriso->relax_compliance; if(r == 0) { @@ -2865,10 +2906,15 @@ int Xorriso_get_relax_text(struct XorrisO *xorriso, char mode[1024], sprintf(mode + strlen(mode), ":iso_9660_1999"); if(xorriso->do_old_empty) sprintf(mode + strlen(mode), ":old_empty"); + sprintf(mode + strlen(mode), ":max_ce_entries=%u", xorriso->max_ce_entries); + drop= xorriso->max_ce_entries_flag & 15; + sprintf(mode + strlen(mode), ":max_ce_drop=%s", + drop == 0 ? "off" : drop == 1 ? "xattr" : "xattr_acl"); return(1 + (r == Xorriso_relax_compliance_defaulT && !(xorriso->no_emul_toc & 1) && xorriso->untranslated_name_len == 0 && !xorriso->do_iso1999 && - xorriso->iso_level == 3)); + xorriso->iso_level == 3 && xorriso->max_ce_entries == 31 && + drop == 2)); } diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index ff4684fc..5b34bff3 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.5, Jan 10, 2023" +.TH XORRISO 1 "Version 1.5.5, Jan 15, 2023" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -2975,11 +2975,36 @@ do not understand Rock Ridge. of [0,31] to files with no own data content. The new way is to have a dedicated block to which all such files will point. .br +"max_ce_entries="number sets the maximum number of SUSP CE entries and thus +continuation areas. Each continuation area can hold at most 2048 bytes of +SUSP data (Rock Ridge or AAIP). The first area can be smaller. There might +be some waste at the end of each area. +When the maximum number is exceeded during ISO filesystem production +then either xattr and ACL get dropped from the affected file or an error +gets reported and image production is prevented. +.br +Linux silently ignores a file when encountering its 32th CE entry. +(Workaround is to mount the filesystem with option "norock".) +So the default setting is 31. Minimum is 1, maximum is 100000. +If a limit higher than 31 is chosen and 31 gets surpassed, then a warning +message gets reported. +.br +"max_ce_drop="mode sets the behavior when the limit of max_ce_entries= is +surpassed. Mode "off" causes an error message and prevents image production. +Mode "xattr" and "xattr_acl" report a warning, delete from the affected +file all xattr of namespaces other than "isofs", and then try again. +If this still surpasses the limit, then mode "xattr_acl" deletes all ACL from +the file and retries. +If this still surpasses the limit, then an error message gets reported and +image production is prevented. +.br Default setting is .br - "clear:only_iso_version:deep_paths:long_paths:no_j_force_dots: + "clear:iso_9660_level=3:only_iso_version:deep_paths:long_paths: .br - always_gmt:old_rr". + no_j_force_dots:always_gmt:rec_mtime:old_rr:max_ce_entries=31: +.br + max_ce_drop=xattr_acl" .br Note: The term "ECMA\-119 name" means the plain ISO 9660 names and attributes which get visible if the reader ignores Rock Ridge. diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 053dc185..804fad22 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -2539,9 +2539,30 @@ according to the setting of command -acl. "old_empty" uses the old way of of giving block addresses in the range of [0,31] to files with no own data content. The new way is to have a dedicated block to which all such files will point. + "max_ce_entries="number sets the maximum number of SUSP CE entries + and thus continuation areas. Each continuation area can hold at + most 2048 bytes of SUSP data (Rock Ridge or AAIP). The first area + can be smaller. There might be some waste at the end of each area. + When the maximum number is exceeded during ISO filesystem + production then either xattr and ACL get dropped from the affected + file or an error gets reported and image production is prevented. + Linux silently ignores a file when encountering its 32th CE entry. + (Workaround is to mount the filesystem with option "norock".) So + the default setting is 31. Minimum is 1, maximum is 100000. If a + limit higher than 31 is chosen and 31 gets surpassed, then a + warning message gets reported. + "max_ce_drop="mode sets the behavior when the limit of + max_ce_entries= is surpassed. Mode "off" causes an error message + and prevents image production. Mode "xattr" and "xattr_acl" report + a warning, delete from the affected file all xattr of namespaces + other than "isofs", and then try again. If this still surpasses + the limit, then mode "xattr_acl" deletes all ACL from the file and + retries. If this still surpasses the limit, then an error message + gets reported and image production is prevented. Default setting is - "clear:only_iso_version:deep_paths:long_paths:no_j_force_dots: - always_gmt:old_rr". + "clear:iso_9660_level=3:only_iso_version:deep_paths:long_paths: + no_j_force_dots:always_gmt:rec_mtime:old_rr:max_ce_entries=31: + max_ce_drop=xattr_acl" Note: The term "ECMA-119 name" means the plain ISO 9660 names and attributes which get visible if the reader ignores Rock Ridge. -rr_reloc_dir name @@ -5653,7 +5674,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 250) +* -abstract_file sets abstract file name: SetWrite. (line 271) * -acl controls handling of ACLs: Loading. (line 165) * -add inserts one or more paths: Insert. (line 44) * -add_plainly inserts one or more paths: Insert. (line 68) @@ -5661,15 +5682,15 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -alter_date_r sets timestamps in ISO image: Manip. (line 174) * -append_partition adds arbitrary file after image end: Bootable. (line 433) -* -application_id sets application id: SetWrite. (line 197) -* -application_use sets application use field: SetWrite. (line 272) +* -application_id sets application id: SetWrite. (line 218) +* -application_use sets application use field: SetWrite. (line 293) * -as emulates mkisofs or cdrecord: Emulation. (line 13) * -assert_volid rejects undesired images: Loading. (line 105) * -assess_indev_features shows filesystem features: Inquiry. (line 49) * -auto_charset learns character set from image: Loading. (line 117) * -backslash_codes enables backslash conversion: Scripting. (line 71) * -ban_stdio_write demands real drive: Loading. (line 345) -* -biblio_file sets biblio file name: SetWrite. (line 256) +* -biblio_file sets biblio file name: SetWrite. (line 277) * -blank erases media: Writing. (line 57) * -boot_image controls bootability: Bootable. (line 75) * -calm_drive reduces drive activity: Loading. (line 335) @@ -5688,7 +5709,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -chown sets ownership in ISO image: Manip. (line 43) * -chown_r sets ownership in ISO image: Manip. (line 47) * -clone copies ISO directory tree: Insert. (line 195) -* -close controls media closing: SetWrite. (line 484) +* -close controls media closing: SetWrite. (line 505) * -close_damaged closes damaged track and session: Writing. (line 205) * -close_filter_list bans filter registration: Filter. (line 50) * -commit writes pending ISO image: Writing. (line 27) @@ -5698,7 +5719,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -compare_r reports ISO/disk differences: Navigate. (line 143) * -compliance controls standard compliance: SetWrite. (line 62) * -concat copies ISO file content: Restore. (line 148) -* -copyright_file sets copyright file name: SetWrite. (line 245) +* -copyright_file sets copyright file name: SetWrite. (line 266) * -cpax copies files to disk: Restore. (line 128) * -cpr inserts like with cp -r: Insert. (line 174) * -cpx copies files to disk: Restore. (line 117) @@ -5718,11 +5739,11 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -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 476) +* -dummy controls write simulation: SetWrite. (line 497) * -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 and end alignment: SetWrite. (line 400) +* -dvd_obs set write block size and end alignment: SetWrite. (line 421) * -early_stdio_test classifies stdio drives: Loading. (line 349) * -ecma119_map names w/o Rock Ridge, Joliet: Loading. (line 228) * -eject ejects drive tray: Writing. (line 50) @@ -5744,12 +5765,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -follow softlinks and mount points: SetInsert. (line 77) * -format formats media: Writing. (line 87) * -for_backup -acl,-xattr,-hardlinks,-md5: Loading. (line 214) -* -fs sets size of fifo: SetWrite. (line 479) +* -fs sets size of fifo: SetWrite. (line 500) * -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 293) +* -gid sets global ownership: SetWrite. (line 314) * -grow_blindly overrides next writeable address: AqDrive. (line 112) * -hardlinks controls handling of hard links: Loading. (line 128) * -help prints help text: Scripting. (line 19) @@ -5790,7 +5811,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -mark sets synchronizing message: Frontend. (line 23) * -md5 controls handling of MD5 sums: Loading. (line 183) * -mkdir creates ISO directory: Insert. (line 187) -* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 419) +* -modesty_on_drive keep drive buffer hungry: SetWrite. (line 440) * -mount issues mount command for ISO session: Restore. (line 204) * -mount_cmd composes mount command line: Inquiry. (line 83) * -mount_cmd controls mount command: Inquiry. (line 99) @@ -5806,16 +5827,16 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -options_from_file reads commands from file: Scripting. (line 12) * -osirrox enables ISO-to-disk copying: Restore. (line 25) * -outdev acquires a drive for output: AqDrive. (line 29) -* -out_charset sets output character set: SetWrite. (line 285) +* -out_charset sets output character set: SetWrite. (line 306) * -overwrite enables overwriting in ISO: SetInsert. (line 139) * -pacifier controls pacifier text form: Emulation. (line 166) -* -padding sets amount or mode of image padding: SetWrite. (line 507) +* -padding sets amount or mode of image padding: SetWrite. (line 528) * -page set terminal geometry: DialogCtl. (line 18) * -paste_in copies file into disk file: Restore. (line 142) * -pathspecs sets meaning of = with -add: SetInsert. (line 123) * -path_list inserts paths from disk file: Insert. (line 81) * -pkt_output consolidates text output: Frontend. (line 7) -* -preparer_id sets preparer id: SetWrite. (line 261) +* -preparer_id sets preparer id: SetWrite. (line 282) * -print prints result text line: Scripting. (line 102) * -print_info prints message text line: Scripting. (line 104) * -print_mark prints synchronizing text line: Scripting. (line 106) @@ -5823,7 +5844,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -prog sets program name: Frontend. (line 176) * -prog_help prints help text: Frontend. (line 178) * -prompt prompts for enter key: Scripting. (line 110) -* -publisher sets publisher id: SetWrite. (line 192) +* -publisher sets publisher id: SetWrite. (line 213) * -pvd_info shows image id strings: Inquiry. (line 142) * -pwd tells working directory in ISO: Navigate. (line 19) * -pwdx tells working directory on disk: Navigate. (line 21) @@ -5846,7 +5867,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 154) * -rom_toc_scan searches for sessions: Loading. (line 307) -* -rr_reloc_dir sets name of relocation directory: SetWrite. (line 150) +* -rr_reloc_dir sets name of relocation directory: SetWrite. (line 171) * -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 179) * -scsi_dev_family choose Linux device file type: AqDrive. (line 95) * -scsi_log reports SCSI commands: Scripting. (line 143) @@ -5867,34 +5888,34 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -signal_handling controls handling of system signals: Exception. (line 66) * -sleep waits for a given time span: Scripting. (line 113) -* -speed set write speed: SetWrite. (line 371) +* -speed set write speed: SetWrite. (line 392) * -split_size enables large file splitting: SetInsert. (line 153) * -status shows current settings: Scripting. (line 44) * -status_history_max curbs -status history: Scripting. (line 52) -* -stdio_sync controls stdio buffer: SetWrite. (line 469) -* -stream_recording controls defect management: SetWrite. (line 389) -* -system_id sets system id: SetWrite. (line 205) +* -stdio_sync controls stdio buffer: SetWrite. (line 490) +* -stream_recording controls defect management: SetWrite. (line 410) +* -system_id sets system id: SetWrite. (line 226) * -tell_media_space reports free space: Inquiry. (line 132) * -temp_mem_limit curbs memory consumption: Scripting. (line 96) * -toc shows list of sessions: Inquiry. (line 27) * -toc_of shows list of sessions: Inquiry. (line 41) * -truncate_overwritable activates older session: Writing. (line 167) -* -uid sets global ownership: SetWrite. (line 290) +* -uid sets global ownership: SetWrite. (line 311) * -update inserts path if different: Insert. (line 100) * -update_l inserts paths if different: Insert. (line 120) * -update_l inserts paths if different <1>: Insert. (line 128) * -update_li inserts paths if different: Insert. (line 124) * -update_r inserts paths if different: Insert. (line 110) -* -use_immed_bit controls use of Immed bit: SetWrite. (line 457) +* -use_immed_bit controls use of Immed bit: SetWrite. (line 478) * -use_readline enables readline for dialog: DialogCtl. (line 26) * -version prints help text: Scripting. (line 22) -* -volid sets volume id: SetWrite. (line 168) -* -volset_id sets volume set id: SetWrite. (line 188) -* -volume_date sets volume timestamp: SetWrite. (line 211) -* -write_type chooses TAO or SAO/DAO: SetWrite. (line 500) +* -volid sets volume id: SetWrite. (line 189) +* -volset_id sets volume set id: SetWrite. (line 209) +* -volume_date sets volume timestamp: SetWrite. (line 232) +* -write_type chooses TAO or SAO/DAO: SetWrite. (line 521) * -x enables automatic execution order of arguments: ArgSort. (line 16) * -xattr controls handling of xattr (EA): Loading. (line 172) -* -zisofs controls zisofs production: SetWrite. (line 296) +* -zisofs controls zisofs production: SetWrite. (line 317)  File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top @@ -5924,14 +5945,14 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Backup, enable features, -for_backup: Loading. (line 214) * Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 179) * Blank media, _definition: Media. (line 34) -* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 457) +* Blank, format, Immed bit, -use_immed_bit: SetWrite. (line 478) * Blind growing, _definition: Methods. (line 41) * 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 112) * Character Set, for input/output, -charset: Charset. (line 54) -* Character Set, for output, -out_charset: SetWrite. (line 285) +* Character Set, for output, -out_charset: SetWrite. (line 306) * Character set, learn from image, -auto_charset: Loading. (line 117) * Character Set, of terminal, -local_charset: Charset. (line 57) * Character Set, _definition: Charset. (line 6) @@ -5996,7 +6017,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Filter, show chain, -show_stream: Navigate. (line 151) * Filter, show chains of tree, -show_stream_r: Navigate. (line 169) * Filter, unregister, -unregister_filter: Filter. (line 47) -* Filter, zisofs parameters, -zisofs: SetWrite. (line 296) +* Filter, zisofs parameters, -zisofs: SetWrite. (line 317) * Filter, _definition: Filter. (line 6) * Frontend program, start at pipes, -launch_frontend: Frontend. (line 141) @@ -6004,7 +6025,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * GPT read-only flag, do not set for ISO: Bootable. (line 367) * GPT, control GUID, -boot_image gpt_disk_guid=: Bootable. (line 225) * GPT, _definition: Extras. (line 39) -* Group, global in ISO image, -gid: SetWrite. (line 293) +* Group, global in ISO image, -gid: SetWrite. (line 314) * Group, in ISO image, -chgrp: Manip. (line 49) * Group, in ISO image, -chgrp_r: Manip. (line 53) * Growing, _definition: Methods. (line 20) @@ -6018,18 +6039,18 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Image, discard pending changes, -rollback: Writing. (line 9) * Image, filesystem to load, -read_fs: Loading. (line 96) * Image, override change status, -changes_pending: Writing. (line 12) -* Image, set abstract file name, -abstract_file: SetWrite. (line 250) -* Image, set application id, -application_id: SetWrite. (line 197) +* Image, set abstract file name, -abstract_file: SetWrite. (line 271) +* Image, set application id, -application_id: SetWrite. (line 218) * Image, set application iuse field, -application_use: SetWrite. - (line 272) -* Image, set biblio file name, -biblio_file: SetWrite. (line 256) -* Image, set copyright file name, -copyright_file: SetWrite. (line 245) -* Image, set preparer id, -preparer_id: SetWrite. (line 261) -* Image, set publisher id, -publisher: SetWrite. (line 192) -* Image, set system id, -system_id: SetWrite. (line 205) -* Image, set volume id, -volid: SetWrite. (line 168) -* Image, set volume set id, -volset_id: SetWrite. (line 188) -* Image, set volume timestamp, -volume_date: SetWrite. (line 211) + (line 293) +* Image, set biblio file name, -biblio_file: SetWrite. (line 277) +* Image, set copyright file name, -copyright_file: SetWrite. (line 266) +* Image, set preparer id, -preparer_id: SetWrite. (line 282) +* Image, set publisher id, -publisher: SetWrite. (line 213) +* Image, set system id, -system_id: SetWrite. (line 226) +* Image, set volume id, -volid: SetWrite. (line 189) +* Image, set volume set id, -volset_id: SetWrite. (line 209) +* Image, set volume timestamp, -volume_date: SetWrite. (line 232) * Image, show Boot Catalog: Inquiry. (line 150) * Image, show id strings, -pvd_info: Inquiry. (line 142) * Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 180) @@ -6102,7 +6123,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Older session, activate, -truncate_overwritable: Writing. (line 167) * Output Character Set, _definition: Charset. (line 26) * Overwritable media, _definition: Media. (line 14) -* Ownership, global in ISO image, -uid: SetWrite. (line 290) +* Ownership, global in ISO image, -uid: SetWrite. (line 311) * Ownership, in ISO image, -chown: Manip. (line 43) * Ownership, in ISO image, -chown_r: Manip. (line 47) * Partition offset, _definition: Bootable. (line 315) @@ -6148,7 +6169,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Quoted input, _definition: Processing. (line 51) * Read, set speed, -read_speed: Loading. (line 11) * Recovery, retrieve blocks, -check_media: Verify. (line 21) -* Relocation directory, set name, -rr_reloc_dir: SetWrite. (line 150) +* Relocation directory, set name, -rr_reloc_dir: SetWrite. (line 171) * Rename, in ISO image, -move: Manip. (line 31) * Rename, in ISO image, -mv: Manip. (line 37) * Restore, copy boot equipment to disk, -extract_boot_images: Restore. @@ -6194,26 +6215,26 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Verify, file checksum, -check_md5: Verify. (line 184) * Verify, file tree checksums, -check_md5_r: Verify. (line 198) * Verify, preset -check_media, -check_media_defaults: Verify. (line 40) -* Write, block size and end alignment, -dvd_obs: SetWrite. (line 400) +* Write, block size and end alignment, -dvd_obs: SetWrite. (line 421) * Write, bootability, -boot_image: Bootable. (line 75) -* Write, buffer syncing, -stdio_sync: SetWrite. (line 469) -* Write, close media, -close: SetWrite. (line 484) +* Write, buffer syncing, -stdio_sync: SetWrite. (line 490) +* Write, close media, -close: SetWrite. (line 505) * Write, compliance to specs, -compliance: SetWrite. (line 62) -* Write, defect management, -stream_recording: SetWrite. (line 389) +* Write, defect management, -stream_recording: SetWrite. (line 410) * Write, disable Rock Ridge, -rockridge: SetWrite. (line 57) -* Write, drive buffer, -modesty_on_drive: SetWrite. (line 419) +* Write, drive buffer, -modesty_on_drive: SetWrite. (line 440) * Write, enable HFS+, -hfsplus: SetWrite. (line 14) * Write, enable Joliet, -joliet: SetWrite. (line 10) -* Write, fifo size, -fs: SetWrite. (line 479) +* Write, fifo size, -fs: SetWrite. (line 500) * Write, free space, -tell_media_space: Inquiry. (line 132) * Write, log problematic disk files, -errfile_log: Scripting. (line 116) * Write, log written sessions, -session_log: Scripting. (line 134) -* Write, padding image, -padding: SetWrite. (line 507) +* Write, padding image, -padding: SetWrite. (line 528) * Write, pending ISO image, -commit: Writing. (line 27) * Write, predict image size, -print_size: Inquiry. (line 120) -* Write, set speed, -speed: SetWrite. (line 371) -* Write, simulation, -dummy: SetWrite. (line 476) -* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 500) +* Write, set speed, -speed: SetWrite. (line 392) +* Write, simulation, -dummy: SetWrite. (line 497) +* Write, TAO or SAO/DAO, -write_type: SetWrite. (line 521) * xattr, control handling, -xattr: Loading. (line 172) * xattr, set in ISO image, -setfattr: Manip. (line 103) * xattr, set in ISO image, -setfattr_list: Manip. (line 120) @@ -6245,41 +6266,41 @@ Node: CmdFind90474 Node: Filter110498 Node: Writing115120 Node: SetWrite127375 -Node: Bootable157227 -Node: Jigdo185108 -Node: Charset190111 -Node: Exception193440 -Node: DialogCtl199569 -Node: Inquiry202171 -Node: Navigate213429 -Node: Verify222136 -Node: Restore233285 -Node: Emulation245493 -Node: Scripting255949 -Node: Frontend263732 -Node: Examples273358 -Node: ExDevices274536 -Node: ExCreate275197 -Node: ExDialog276497 -Node: ExGrowing277768 -Node: ExModifying278577 -Node: ExBootable279087 -Node: ExCharset279642 -Node: ExPseudo280538 -Node: ExCdrecord281465 -Node: ExMkisofs281785 -Node: ExGrowisofs283682 -Node: ExException284835 -Node: ExTime285293 -Node: ExIncBackup285751 -Node: ExRestore289777 -Node: ExRecovery290723 -Node: Files291295 -Node: Environ292629 -Node: Seealso293377 -Node: Bugreport294094 -Node: Legal294685 -Node: CommandIdx295697 -Node: ConceptIdx313595 +Node: Bootable158650 +Node: Jigdo186531 +Node: Charset191534 +Node: Exception194863 +Node: DialogCtl200992 +Node: Inquiry203594 +Node: Navigate214852 +Node: Verify223559 +Node: Restore234708 +Node: Emulation246916 +Node: Scripting257372 +Node: Frontend265155 +Node: Examples274781 +Node: ExDevices275959 +Node: ExCreate276620 +Node: ExDialog277920 +Node: ExGrowing279191 +Node: ExModifying280000 +Node: ExBootable280510 +Node: ExCharset281065 +Node: ExPseudo281961 +Node: ExCdrecord282888 +Node: ExMkisofs283208 +Node: ExGrowisofs285105 +Node: ExException286258 +Node: ExTime286716 +Node: ExIncBackup287174 +Node: ExRestore291200 +Node: ExRecovery292146 +Node: Files292718 +Node: Environ294052 +Node: Seealso294800 +Node: Bugreport295517 +Node: Legal296108 +Node: CommandIdx297120 +Node: ConceptIdx315018  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 53f9bab4..fe7eb83a 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.5, Jan 10, 2023" +@c man .TH XORRISO 1 "Version 1.5.5, Jan 15, 2023" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -3460,11 +3460,36 @@ do not understand Rock Ridge. of [0,31] to files with no own data content. The new way is to have a dedicated block to which all such files will point. @* +"max_ce_entries="number sets the maximum number of SUSP CE entries and thus +continuation areas. Each continuation area can hold at most 2048 bytes of +SUSP data (Rock Ridge or AAIP). The first area can be smaller. There might +be some waste at the end of each area. +When the maximum number is exceeded during ISO filesystem production +then either xattr and ACL get dropped from the affected file or an error +gets reported and image production is prevented. +@* +Linux silently ignores a file when encountering its 32th CE entry. +(Workaround is to mount the filesystem with option "norock".) +So the default setting is 31. Minimum is 1, maximum is 100000. +If a limit higher than 31 is chosen and 31 gets surpassed, then a warning +message gets reported. +@* +"max_ce_drop="mode sets the behavior when the limit of max_ce_entries= is +surpassed. Mode "off" causes an error message and prevents image production. +Mode "xattr" and "xattr_acl" report a warning, delete from the affected +file all xattr of namespaces other than "isofs", and then try again. +If this still surpasses the limit, then mode "xattr_acl" deletes all ACL from +the file and retries. +If this still surpasses the limit, then an error message gets reported and +image production is prevented. +@* Default setting is @* - "clear:only_iso_version:deep_paths:long_paths:no_j_force_dots: + "clear:iso_9660_level=3:only_iso_version:deep_paths:long_paths: @* - always_gmt:old_rr". + no_j_force_dots:always_gmt:rec_mtime:old_rr:max_ce_entries=31: +@* + max_ce_drop=xattr_acl" @* Note: The term "ECMA-119 name" means the plain ISO 9660 names and attributes which get visible if the reader ignores Rock Ridge. diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index df211ef2..38b75a4c 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -2,7 +2,7 @@ /* Command line oriented batch and dialog tool which creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2021 Thomas Schmitt, + Copyright 2007-2023 Thomas Schmitt, Provided under GPL version 2 or later. @@ -558,6 +558,10 @@ struct XorrisO { /* the global context of xorriso */ uint8_t gpt_guid[16]; int gpt_guid_mode; + /* See libisoburn.h isoburn_igopt_set_max_ce_entries() */ + uint32_t max_ce_entries; + uint32_t max_ce_entries_flag; + /* Eventual name of the non-ISO aspect of the image. E.g. SUN ASCII label. */ char ascii_disc_label[Xorriso_disc_label_sizE]; diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 8833a9b3..de4af232 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2023.01.22.151329" +#define Xorriso_timestamP "2023.01.22.151757"