diff -Nru libisoburn-1.5.0/acinclude.m4 libisoburn-1.5.2/acinclude.m4 --- libisoburn-1.5.0/acinclude.m4 2017-01-27 15:02:45.000000000 +0000 +++ libisoburn-1.5.2/acinclude.m4 2019-04-05 16:22:11.000000000 +0000 @@ -1,3 +1,8 @@ +dnl Copyright (C) 2008 - 2019 Thomas Schmitt +dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc. +dnl Provided under GPL version 2 or later. + + AC_DEFUN([LIBBURNIA_SET_FLAGS], [ case $target_os in @@ -267,12 +272,12 @@ AC_DEFUN([LIBISOBURN_ASSERT_VERS_LIBS], [ libburnia_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,--version-script=libisoburn/libisoburn.ver" + LDFLAGS="$LDFLAGS -Wl,--version-script=$srcdir/libisoburn/libisoburn.ver" AC_TRY_LINK([#include ], [printf("Hello\n");], [vers_libs_test="yes"], [vers_libs_test="no"]) if test x$vers_libs_test = xyes then - LIBLDFLAGS="-Wl,--version-script=libisoburn/libisoburn.ver" + LIBLDFLAGS="-Wl,--version-script=$srcdir/libisoburn/libisoburn.ver" fi LDFLAGS="$libburnia_save_LDFLAGS" AC_SUBST(LIBLDFLAGS) diff -Nru libisoburn-1.5.0/aclocal.m4 libisoburn-1.5.2/aclocal.m4 --- libisoburn-1.5.0/aclocal.m4 2018-09-15 14:16:51.000000000 +0000 +++ libisoburn-1.5.2/aclocal.m4 2019-10-26 18:24:54.000000000 +0000 @@ -9463,42 +9463,6 @@ rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) -# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- -# From Jim Meyering - -# Copyright (C) 1996-2013 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAINTAINER_MODE([DEFAULT-MODE]) -# ---------------------------------- -# Control maintainer-specific portions of Makefiles. -# Default is to disable them, unless 'enable' is passed literally. -# For symmetry, 'disable' may be passed as well. Anyway, the user -# can override the default with the --enable/--disable switch. -AC_DEFUN([AM_MAINTAINER_MODE], -[m4_case(m4_default([$1], [disable]), - [enable], [m4_define([am_maintainer_other], [disable])], - [disable], [m4_define([am_maintainer_other], [enable])], - [m4_define([am_maintainer_other], [enable]) - m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode's default is 'disable' unless 'enable' is passed - AC_ARG_ENABLE([maintainer-mode], - [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], - am_maintainer_other[ make rules and dependencies not useful - (and sometimes confusing) to the casual installer])], - [USE_MAINTAINER_MODE=$enableval], - [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST([MAINT])dnl -] -) - # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. diff -Nru libisoburn-1.5.0/ChangeLog libisoburn-1.5.2/ChangeLog --- libisoburn-1.5.0/ChangeLog 2018-09-15 13:59:24.000000000 +0000 +++ libisoburn-1.5.2/ChangeLog 2019-10-26 18:20:05.000000000 +0000 @@ -1,3 +1,18 @@ +libisoburn-1.5.2.tar.gz Sat Oct 26 2019 +=============================================================================== +* Bug fix: -disk_pattern on -add ./ -- mistook "./" for the root directory + Thanks JBThiel. +* Bug fix: -disk_pattern on -add "" -- yielded SIGSEGV +* Bug fix: -osirrox "concat_split_on" worked only together with -split_size + larger than 0. Thanks William Willems. +* New API calls isoburn_igopt_set_part_type_guid(), + isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), + isoburn_igopt_get_iso_type_guid() +* Enabled GPT type GUIDs with -append_partition, + -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type +* Made libisoburn and GNU xorriso ready for building out-of-source. + Thanks Ross Burton. + libisoburn-1.5.0.tar.gz Sat Sep 15 2018 =============================================================================== * Bug fix: Multi-session emulation was not recognized with non-zero partition diff -Nru libisoburn-1.5.0/configure libisoburn-1.5.2/configure --- libisoburn-1.5.0/configure 2018-09-15 14:16:51.000000000 +0000 +++ libisoburn-1.5.2/configure 2019-10-26 18:24:54.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libisoburn 1.5.0. +# Generated by GNU Autoconf 2.69 for libisoburn 1.5.2. # # Report bugs to . # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='libisoburn' PACKAGE_TARNAME='libisoburn' -PACKAGE_VERSION='1.5.0' -PACKAGE_STRING='libisoburn 1.5.0' +PACKAGE_VERSION='1.5.2' +PACKAGE_STRING='libisoburn 1.5.2' PACKAGE_BUGREPORT='http://libburnia-project.org' PACKAGE_URL='' @@ -702,9 +702,6 @@ LDFLAGS CFLAGS CC -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE LT_CURRENT_MINUS_AGE LT_AGE LT_REVISION @@ -794,7 +791,6 @@ ac_user_opts=' enable_option_checking enable_silent_rules -enable_maintainer_mode enable_dependency_tracking enable_largefile enable_shared @@ -1381,7 +1377,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libisoburn 1.5.0 to adapt to many kinds of systems. +\`configure' configures libisoburn 1.5.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1452,7 +1448,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libisoburn 1.5.0:";; + short | recursive ) echo "Configuration of libisoburn 1.5.2:";; esac cat <<\_ACEOF @@ -1462,9 +1458,6 @@ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") - --enable-maintainer-mode - enable make rules and dependencies not useful (and - sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking @@ -1597,7 +1590,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libisoburn configure 1.5.0 +libisoburn configure 1.5.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2023,7 +2016,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libisoburn $as_me 1.5.0, which was +It was created by libisoburn $as_me 1.5.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3014,7 +3007,7 @@ # Define the identity of the package. PACKAGE='libisoburn' - VERSION='1.5.0' + VERSION='1.5.2' cat >>confdefs.h <<_ACEOF @@ -3112,7 +3105,7 @@ ISOBURN_MAJOR_VERSION=1 ISOBURN_MINOR_VERSION=5 -ISOBURN_MICRO_VERSION=0 +ISOBURN_MICRO_VERSION=2 @@ -3120,8 +3113,8 @@ LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION -LT_CURRENT=108 -LT_AGE=107 +LT_CURRENT=110 +LT_AGE=109 LT_REVISION=0 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` @@ -3135,29 +3128,6 @@ test "$prefix" = "NONE" && prefix=$ac_default_prefix -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" @@ -13691,7 +13661,7 @@ vers_libs_test=no libburnia_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,--version-script=libisoburn/libisoburn.ver" + LDFLAGS="$LDFLAGS -Wl,--version-script=$srcdir/libisoburn/libisoburn.ver" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -13712,7 +13682,7 @@ conftest$ac_exeext conftest.$ac_ext if test x$vers_libs_test = xyes then - LIBLDFLAGS="-Wl,--version-script=libisoburn/libisoburn.ver" + LIBLDFLAGS="-Wl,--version-script=$srcdir/libisoburn/libisoburn.ver" fi LDFLAGS="$libburnia_save_LDFLAGS" @@ -13786,8 +13756,8 @@ if test x$enable_pkg_check_modules = xyes; then - LIBBURN_REQUIRED=1.5.0 - LIBISOFS_REQUIRED=1.5.0 + LIBBURN_REQUIRED=1.5.2 + LIBISOFS_REQUIRED=1.5.2 @@ -14384,10 +14354,6 @@ am__EXEEXT_FALSE= fi -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -14794,7 +14760,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libisoburn $as_me 1.5.0, which was +This file was extended by libisoburn $as_me 1.5.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14851,7 +14817,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libisoburn config.status 1.5.0 +libisoburn config.status 1.5.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru libisoburn-1.5.0/configure.ac libisoburn-1.5.2/configure.ac --- libisoburn-1.5.0/configure.ac 2018-09-15 13:37:17.000000000 +0000 +++ libisoburn-1.5.2/configure.ac 2019-10-26 18:08:08.000000000 +0000 @@ -1,4 +1,4 @@ -AC_INIT([libisoburn], [1.5.0], [http://libburnia-project.org]) +AC_INIT([libisoburn], [1.5.2], [http://libburnia-project.org]) AC_PREREQ([2.50]) dnl AC_CONFIG_HEADER([config.h]) @@ -24,7 +24,7 @@ dnl These three are only copies to provide libtool with unused LT_RELEASE ISOBURN_MAJOR_VERSION=1 ISOBURN_MINOR_VERSION=5 -ISOBURN_MICRO_VERSION=0 +ISOBURN_MICRO_VERSION=2 dnl ISOBURN_VERSION=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION.$ISOBURN_MICRO_VERSION @@ -37,16 +37,16 @@ dnl Generate libisoburn.so.1.x.y dnl SONAME will become LT_CURRENT - LT_AGE dnl -dnl ts B80915 -dnl This is the release version 1.5.0 = libisoburn.so.1.107.0 +dnl ts B91026 +dnl This is the release version 1.5.2 = libisoburn.so.1.109.0 dnl ### This is the development version after above stable release dnl LT_CURRENT++, LT_AGE++ have not happened yet. dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile. dnl -dnl SONAME = 108 - 107 = 1 . Library name = libisoburn.so.1.107.0 +dnl SONAME = 110 - 109 = 1 . Library name = libisoburn.so.1.109.0 LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION -LT_CURRENT=108 -LT_AGE=107 +LT_CURRENT=110 +LT_AGE=109 LT_REVISION=0 LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` @@ -59,7 +59,8 @@ AC_PREFIX_DEFAULT([/usr/local]) test "$prefix" = "NONE" && prefix=$ac_default_prefix -AM_MAINTAINER_MODE +dnl ts B90405 : Disabled on advise of Ross Burton +dnl AM_MAINTAINER_MODE AM_PROG_CC_C_O AC_C_CONST @@ -442,8 +443,8 @@ dnl If PKG_CHECK_MODULES is to be used after this if-block, dnl then it might be necessary to perform PKG_PROG_PKG_CONFIG before the block. - LIBBURN_REQUIRED=1.5.0 - LIBISOFS_REQUIRED=1.5.0 + LIBBURN_REQUIRED=1.5.2 + LIBISOFS_REQUIRED=1.5.2 PKG_CHECK_MODULES(LIBBURN, libburn-1 >= $LIBBURN_REQUIRED) PKG_CHECK_MODULES(LIBISOFS, libisofs-1 >= $LIBISOFS_REQUIRED) if test x$LIBCDIO_DEF = x; then diff -Nru libisoburn-1.5.0/debian/changelog libisoburn-1.5.2/debian/changelog --- libisoburn-1.5.0/debian/changelog 2019-01-14 20:01:21.000000000 +0000 +++ libisoburn-1.5.2/debian/changelog 2019-12-09 16:16:12.000000000 +0000 @@ -1,8 +1,31 @@ -libisoburn (1.5.0-1build1) disco; urgency=medium +libisoburn (1.5.2-1) unstable; urgency=low - * No-change rebuild for readline soname change. + * New upstream release + + Bug fix: -disk_pattern on -add ./ -- mistook "./" for the root directory. + Thanks JBThiel. + + Bug fix: -disk_pattern on -add "" -- yielded SIGSEGV + + Bug fix: -osirrox "concat_split_on" worked only together with -split_size + larger than 0. Thanks William Willems. + + New API calls isoburn_igopt_set_part_type_guid(), + isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), + isoburn_igopt_get_iso_type_guid() + + New command -drive_access, new -as cdrecord option --drive_not_exclusive + + Enabled GPT type GUIDs with -append_partition, + -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type + + Made libisoburn and GNU xorriso ready for building out-of-source. + Thanks Ross Burton. + * Patch taken from upstream development + + Let libisofs demand libjte version >= 2.0.0 (libjte2 from jigit >= 1.22). + libjte2 is able to produce Jigdo with SHA256 instead of MD5. + * Changed Build-Depends: "debhelper (>= 9)" to "debhelper-compat (= 12)" and + removed debian/compat by cme "fix" "dpkg". + * Changed Standards-Version to 4.4.1 + No changes needed according to packaging-manuals/upgrading-checklist.txt + * Removed AUTHORS README NEWS from libisoburn-doc.docs because already + in -dev. + * control: removed unnecessary dep on dh-autoreconf - -- Matthias Klose Mon, 14 Jan 2019 20:01:21 +0000 + -- Thomas Schmitt Mon, 09 Dec 2019 17:16:12 +0100 libisoburn (1.5.0-1) unstable; urgency=low diff -Nru libisoburn-1.5.0/debian/compat libisoburn-1.5.2/debian/compat --- libisoburn-1.5.0/debian/compat 2018-10-09 11:21:28.000000000 +0000 +++ libisoburn-1.5.2/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -9 diff -Nru libisoburn-1.5.0/debian/control libisoburn-1.5.2/debian/control --- libisoburn-1.5.0/debian/control 2018-10-09 11:21:28.000000000 +0000 +++ libisoburn-1.5.2/debian/control 2019-12-09 16:16:12.000000000 +0000 @@ -5,15 +5,14 @@ Thomas Schmitt Section: libs Priority: optional -Build-Depends: dh-autoreconf, - pkg-config, - debhelper (>= 9), - libburn-dev (>= 1.5.0), - libisofs-dev (>= 1.5.0), +Build-Depends: pkg-config, + debhelper-compat (= 12), + libburn-dev (>= 1.5.2), + libisofs-dev (>= 1.5.2), libreadline-dev, - libjte-dev, + libjte-dev (>= 1.22), libcam-dev [kfreebsd-any] -Standards-Version: 4.2.1 +Standards-Version: 4.4.1 Vcs-Browser: https://salsa.debian.org/optical-media-team/libisoburn Vcs-Git: https://salsa.debian.org/optical-media-team/libisoburn.git Homepage: http://libburnia-project.org diff -Nru libisoburn-1.5.0/debian/libisoburn-doc.docs libisoburn-1.5.2/debian/libisoburn-doc.docs --- libisoburn-1.5.0/debian/libisoburn-doc.docs 2018-10-09 11:21:28.000000000 +0000 +++ libisoburn-1.5.2/debian/libisoburn-doc.docs 2019-12-09 16:16:12.000000000 +0000 @@ -1,5 +1,2 @@ -AUTHORS -README -TODO doc/* diff -Nru libisoburn-1.5.0/debian/patches/01-switch-to-libjte2.patch libisoburn-1.5.2/debian/patches/01-switch-to-libjte2.patch --- libisoburn-1.5.0/debian/patches/01-switch-to-libjte2.patch 1970-01-01 00:00:00.000000000 +0000 +++ libisoburn-1.5.2/debian/patches/01-switch-to-libjte2.patch 2019-12-09 16:16:12.000000000 +0000 @@ -0,0 +1,906 @@ +Description: Let libisoburn and xorriso demand libjte version >= 2.0.0. + Use the new function names and offer the new Jigdo related options. + .so numbering gets incremented from libisoburn.so.1.109.0 to + libisoburn.so.1.110.0 to reflect the increase of demand in comparison to + unpatched libisoburn-1.5.2. + The ./configure test now checks availability of new libjte2 function + libjte_set_checksum_algorithm. If not present, then libjte will not be used. + (Compile time and run-time checks would refuse if libjte < 2.0.0 is found.) +Author: Thomas Schmitt + +--- a/configure.ac ++++ b/configure.ac +@@ -37,16 +37,17 @@ + dnl Generate libisoburn.so.1.x.y + dnl SONAME will become LT_CURRENT - LT_AGE + dnl +-dnl ts B91026 +-dnl This is the release version 1.5.2 = libisoburn.so.1.109.0 ++dnl ts B91126 ++dnl This is the release version 1.5.2 patched to use libjte.so.2 ++dnl = libisoburn.so.1.110.0 + dnl ### This is the development version after above stable release +-dnl LT_CURRENT++, LT_AGE++ have not happened yet. +-dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile. ++dnl ### LT_CURRENT++, LT_AGE++ have not happened yet. ++dnl LT_CURRENT++, LT_AGE++ has happened because of the patch. + dnl +-dnl SONAME = 110 - 109 = 1 . Library name = libisoburn.so.1.109.0 ++dnl SONAME = 111 - 110 = 1 . Library name = libisoburn.so.1.110.0 + LT_RELEASE=$ISOBURN_MAJOR_VERSION.$ISOBURN_MINOR_VERSION +-LT_CURRENT=110 +-LT_AGE=109 ++LT_CURRENT=111 ++LT_AGE=110 + LT_REVISION=0 + LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE` + +@@ -276,11 +277,11 @@ + + dnl ts B00928 + AC_ARG_ENABLE(libjte, +-[ --enable-libjte Enable use of libjte by xorriso, default=yes], ++[ --enable-libjte Enable use of libjte >= 2.0 by xorriso, default=yes], + , enable_libjte=yes) + if test "x$enable_libjte" = xyes; then + LIBJTE_DEF="-DXorriso_with_libjtE" +- AC_CHECK_HEADER(libjte/libjte.h, AC_CHECK_LIB(jte, libjte_new, , LIBJTE_DEF= ), LIBJTE_DEF= ) ++ AC_CHECK_HEADER(libjte/libjte.h, AC_CHECK_LIB(jte, libjte_set_checksum_algorithm, , LIBJTE_DEF= ), LIBJTE_DEF= ) + else + LIBJTE_DEF= + fi +--- a/xorriso/emulators.c ++++ b/xorriso/emulators.c +@@ -657,8 +657,10 @@ + "-alpha-boot", "-hppa-cmdline", "-hppa-kernel-32", "-hppa-kernel-64", + "-hppa-bootloader", "-hppa-ramdisk", "-mips-boot", "-mipsel-boot", + "-jigdo-jigdo", "-jigdo-template", "-jigdo-min-file-size", +- "-jigdo-force-md5", "-jigdo-exclude", "-jigdo-map", "-md5-list", +- "-jigdo-template-compress", ++ "-jigdo-force-md5", "-jigdo-force-checksum", ++ "-md5-list", "-checksum-list", ++ "-jigdo-exclude", "-jigdo-map", ++ "-jigdo-template-compress", "-jigdo-checksum-algorithm", + "-checksum_algorithm_iso", "-checksum_algorithm_template", + "--stdio_sync", "--quoted_path_list", "--efi-boot", "--embedded-boot", + "-isohybrid-mbr", "-e", "-partition_offset", "-partition_hd_cyl", +@@ -852,11 +854,16 @@ + " -jigdo-jigdo FILE Produce a jigdo .jigdo file as well as the .iso", + " -jigdo-template FILE Produce a jigdo .template file as well as the .iso", + " -jigdo-min-file-size SIZE Minimum size for a file to be listed in the jigdo file", +-" -jigdo-force-md5 PATTERN Pattern(s) where files MUST match an externally-supplied MD5sum", ++" -jigdo-force-checksum PTRN Pattern(s) where files MUST match an externally-supplied checksum", ++" -jigdo-force-md5 PATTERN Outdated alias of -jigdo-force-checksum", + " -jigdo-exclude PATTERN Pattern(s) to exclude from the jigdo file", + " -jigdo-map PATTERN1=PATTERN2", + " Pattern(s) to map paths (e.g. Debian=/mirror/debian)", +-" -md5-list FILE File containing MD5 sums of the files that should be checked", ++" -checksum-list FILE File containing checksums of the files that should be checked", ++" -md5-list FILE Outdated alias of -checksum-list", ++" -jigdo-checksum-algorithm ALGORITHM", ++" Choose algorithm for file matching checksums: md5, sha256", ++" Expected in the -checksum-list FILE, written into .jigdo file.", + " -jigdo-template-compress ALGORITHM", + " Choose to use gzip or bzip2 compression for template data; default is gzip", + " -checksum_algorithm_iso alg1,alg2,...", +@@ -2097,11 +2104,14 @@ + strcmp(argpt, "-jigdo-min-file-size") == 0 || + strcmp(argpt, "-jigdo-exclude") == 0 || + strcmp(argpt, "-jigdo-force-md5") == 0 || ++ strcmp(argpt, "-jigdo-force-checksum") == 0 || + strcmp(argpt, "-jigdo-map") == 0 || ++ strcmp(argpt, "-jigdo-checksum-algorithm") == 0 || + strcmp(argpt, "-jigdo-template-compress") == 0 || + strcmp(argpt, "-checksum_algorithm_iso") == 0 || + strcmp(argpt, "-checksum_algorithm_template") == 0 || +- strcmp(argpt, "-md5-list") == 0) { ++ strcmp(argpt, "-md5-list") == 0 || ++ strcmp(argpt, "-checksum-list") == 0) { + i++; + ret= Xorriso_option_jigdo(xorriso, argpt, argv[i], 0); + if(ret <= 0) +--- a/xorriso/lib_mgt.c ++++ b/xorriso/lib_mgt.c +@@ -765,8 +765,10 @@ + goto jte_failed; + xorriso->libjte_params_given|= 8; + } else if(strcmp(aspect, "md5_path") == 0 || +- strcmp(aspect, "-md5-list") == 0) { +- ret= libjte_set_md5_path(jte, arg); ++ strcmp(aspect, "-md5-list") == 0 || ++ strcmp(aspect, "checksum_path") == 0 || ++ strcmp(aspect, "-checksum-list") == 0) { ++ ret= libjte_set_checksum_path(jte, arg); + if(ret <= 0) + goto jte_failed; + xorriso->libjte_params_given|= 16; +@@ -802,8 +804,10 @@ + goto jte_failed; + xorriso->libjte_params_given|= 512; + } else if(strcmp(aspect, "demand_md5") == 0 || +- strcmp(aspect, "-jigdo-force-md5") == 0) { +- ret= libjte_add_md5_demand(jte, arg); ++ strcmp(aspect, "-jigdo-force-md5") == 0 || ++ strcmp(aspect, "demand_checksum") == 0 || ++ strcmp(aspect, "-jigdo-force-checksum") == 0) { ++ ret= libjte_add_checksum_demand(jte, arg); + if(ret <= 0) + goto jte_failed; + xorriso->libjte_params_given|= 1024; +@@ -813,6 +817,13 @@ + if(ret <= 0) + goto jte_failed; + xorriso->libjte_params_given|= 2048; ++ } else if(strcmp(aspect, "checksum_algorithm") == 0 || ++ strcmp(aspect, "-jigdo-checksum-algorithm") == 0) { ++ int ck_size; ++ ret= libjte_set_checksum_algorithm(jte, arg, &ck_size); ++ if(ret <= 0) ++ goto jte_failed; ++ xorriso->libjte_params_given|= 4096; + } else { + sprintf(xorriso->info_text, "-jigdo: unknown aspect '%s'", aspect); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); +--- a/xorriso/opts_d_h.c ++++ b/xorriso/opts_d_h.c +@@ -1879,6 +1879,7 @@ + " Opportunity to omit Rock Ridge info. (Do not do it !)", + " -jigdo \"clear\"|\"template_path\"|\"jigdo_path\"|\"md5_path\"", + " |\"min_size\"|\"checksum_iso\"|\"checksum_template\"", ++" |\"checksum_path\"|\"demand_checksum\"|\"checksum_algorithm\"", + " |\"compression\"|\"exclude\"|\"demand_md5\"|\"mapping\"", + " |\"checksum_iso\"|\"checksum_template\"", + " value", +--- 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.2, Oct 26, 2019" ++.TH XORRISO 1 "Version 1.5.2, Nov 26, 2019" + .\" Please adjust this date whenever revising the manpage. + .\" + .\" Some roff macros, for reference: +@@ -3772,14 +3772,19 @@ + instead of the content bytes of the listed files. + .br + Input for this process are the normal arguments for a \fBxorriso\fR session +-on a blank \-outdev, and a .md5 file which lists those data files which may be +-listed in the .jigdo file and externally referenced in the .template file. +-Each designated file is represented in the .md5 file by a single text line: ++on a blank \-outdev, and a checksum file which lists those data files which may ++be listed in the .jigdo file and externally referenced in the .template file. ++Each designated file is represented in the checksum file by a single text line: + .br +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, + symbolic file address + .br +-The file address in an .md5 line has to bear the same basename as the ++The kind of checksum is chosen by \-jigdo "checksum_algorithm" with values "md5" ++(32 hex digits) or "sha256" (64 hex digits). ++It will also be used for the file address lines in the .jigdo file. ++The default is "md5". ++.br ++The file address in a checksum file line has to bear the same basename as the + disk_path of the file which it shall match. The directory path of + the file address is decisive for To=From mapping, not for file recognition. + After To=From mapping, the file address gets written into the .jigdo +@@ -3801,6 +3806,12 @@ + Parameter \fBclear\fR with any value empties the whole list. + No .jigdo and .template file will be produced. + .br ++\fBchecksum_algorithm\fR chooses the checksum algorithm which shall be used ++for the data file entries in the .jigdo file and is expected in the checksum ++file. Permissible are "md5" or "sha256". Default is "md5". ++.br ++Alias: \-jigdo\-checksum\-algorithm ++.br + \fBtemplate_path\fR sets the disk_path for the .template file with the + holed and compressed ISO image copy. + .br +@@ -3811,7 +3822,12 @@ + .br + Alias: \-jigdo\-jigdo + .br +-\fBmd5_path\fR sets the disk_path where to find the .md5 input file. ++\fBchecksum_path\fR sets the disk_path where to find the checksum file with ++symbolic file addresses and checksums according to \fBchecksum_algorithm\fR. ++.br ++Alias: md5_path ++.br ++Alias: \-checksum\-list + .br + Alias: \-md5\-list + .br +@@ -3826,15 +3842,19 @@ + .br + Alias: \-jigdo\-exclude + .br +-\fBdemand_md5\fR adds a regular expression pattern which will get compared +-with the absolute disk_path of any data file that was not found in the .md5 +-list. A match causes a MISHAP event. ++\fBdemand_checksum\fR adds a regular expression pattern which will get ++compared with the absolute disk_path of any data file that was not found ++in the checksum list file as of "checksum_path". A match causes a MISHAP event. ++.br ++Alias: demand_md5 ++.br ++Alias: \-jigdo\-force\-checksum + .br + Alias: \-jigdo\-force\-md5 + .br + \fBmapping\fR adds a string pair of the form To=From to the parameter list. + If a data file gets listed in the .jigdo file, then it is referred by the +-file address from its line in the .md5 file. This file address gets checked ++file address from its line in the checksum file. This file address gets checked + whether it begins with the From string. If so, then this string will be + replaced by the To string and a ':' character, before it goes into the .jigdo + file. The From string should end by a '/' character. +--- a/xorriso/xorriso.info ++++ b/xorriso/xorriso.info +@@ -3185,18 +3185,22 @@ + image with reference tags instead of the content bytes of the listed + files. + Input for this process are the normal arguments for a 'xorriso' session +-on a blank -outdev, and a .md5 file which lists those data files which +-may be listed in the .jigdo file and externally referenced in the +-.template file. Each designated file is represented in the .md5 file by +-a single text line: +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 ++on a blank -outdev, and a checksum file which lists those data files ++which may be listed in the .jigdo file and externally referenced in the ++.template file. Each designated file is represented in the checksum ++file by a single text line: ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 + blanks, symbolic file address +-The file address in an .md5 line has to bear the same basename as the +-disk_path of the file which it shall match. The directory path of the +-file address is decisive for To=From mapping, not for file recognition. +-After To=From mapping, the file address gets written into the .jigdo +-file. Jigdo restore tools will convert these addresses into really +-reachable data source addresses from which they can read. ++The kind of checksum is chosen by -jigdo "checksum_algorithm" with ++values "md5" (32 hex digits) or "sha256" (64 hex digits). It will also ++be used for the file address lines in the .jigdo file. The default is ++"md5". ++The file address in a checksum file line has to bear the same basename ++as the disk_path of the file which it shall match. The directory path ++of the file address is decisive for To=From mapping, not for file ++recognition. After To=From mapping, the file address gets written into ++the .jigdo file. Jigdo restore tools will convert these addresses into ++really reachable data source addresses from which they can read. + If the list of jigdo parameters is not empty, then 'xorriso' will refuse + to write to non-blank targets, it will disable multi-session emulation, + and padding will be counted as part of the ISO image. +@@ -3208,6 +3212,11 @@ + they are recognized by the -as mkisofs emulation command. + Parameter *clear* with any value empties the whole list. No .jigdo + and .template file will be produced. ++ *checksum_algorithm* chooses the checksum algorithm which shall be ++ used for the data file entries in the .jigdo file and is expected ++ in the checksum file. Permissible are "md5" or "sha256". Default ++ is "md5". ++ Alias: -jigdo-checksum-algorithm + *template_path* sets the disk_path for the .template file with the + holed and compressed ISO image copy. + Alias: -jigdo-template +@@ -3215,7 +3224,11 @@ + checksums and download addresses for filling the holes in + .template. + Alias: -jigdo-jigdo +- *md5_path* sets the disk_path where to find the .md5 input file. ++ *checksum_path* sets the disk_path where to find the checksum file ++ with symbolic file addresses and checksums according to ++ *checksum_algorithm*. ++ Alias: md5_path ++ Alias: -checksum-list + Alias: -md5-list + *min_size* sets the minimum size for a data file to be listed in + the .jigdo file and being a hole in the .template file. +@@ -3224,17 +3237,20 @@ + with the absolute disk_path of any data file. A match causes the + file to stay in .template in any case. + Alias: -jigdo-exclude +- *demand_md5* adds a regular expression pattern which will get ++ *demand_checksum* adds a regular expression pattern which will get + compared with the absolute disk_path of any data file that was not +- found in the .md5 list. A match causes a MISHAP event. ++ found in the checksum list file as of "checksum_path". A match ++ causes a MISHAP event. ++ Alias: demand_md5 ++ Alias: -jigdo-force-checksum + Alias: -jigdo-force-md5 + *mapping* adds a string pair of the form To=From to the parameter + list. If a data file gets listed in the .jigdo file, then it is +- referred by the file address from its line in the .md5 file. This +- file address gets checked whether it begins with the From string. +- If so, then this string will be replaced by the To string and a ':' +- character, before it goes into the .jigdo file. The From string +- should end by a '/' character. ++ referred by the file address from its line in the checksum file. ++ This file address gets checked whether it begins with the From ++ string. If so, then this string will be replaced by the To string ++ and a ':' character, before it goes into the .jigdo file. The From ++ string should end by a '/' character. + Alias: -jigdo-map + *compression* chooses one of "bzip2" or "gzip" for the compression + of the template file. The jigdo file is put out uncompressed. +@@ -5409,7 +5425,7 @@ + * -iso_nowtime fixed "now" time for ISO 9660 objects: Loading. + (line 217) + * -iso_rr_pattern controls pattern expansion: Manip. (line 10) +-* -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 33) ++* -jigdo clears JTE or or adds parameter to JTE: Jigdo. (line 37) + * -joliet enables production of Joliet tree: SetWrite. (line 10) + * -launch_frontend starts frontend program at pipes: Frontend. + (line 141) +@@ -5704,7 +5720,7 @@ + * Interval reader for system area and partitions: Bootable. (line 32) + * ISO 9660, _definition: Model. (line 6) + * iso_rr_path, _definition: Insert. (line 7) +-* Jigdo Template Extraction, -jigdo: Jigdo. (line 33) ++* 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) +@@ -5885,39 +5901,39 @@ + 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 ++Node: Charset177344 ++Node: Exception180673 ++Node: DialogCtl186802 ++Node: Inquiry189404 ++Node: Navigate198288 ++Node: Verify206745 ++Node: Restore217216 ++Node: Emulation225893 ++Node: Scripting236352 ++Node: Frontend244135 ++Node: Examples253761 ++Node: ExDevices254939 ++Node: ExCreate255600 ++Node: ExDialog256900 ++Node: ExGrowing258171 ++Node: ExModifying258980 ++Node: ExBootable259490 ++Node: ExCharset260045 ++Node: ExPseudo260941 ++Node: ExCdrecord261868 ++Node: ExMkisofs262188 ++Node: ExGrowisofs264086 ++Node: ExException265240 ++Node: ExTime265698 ++Node: ExIncBackup266156 ++Node: ExRestore270182 ++Node: ExRecovery271128 ++Node: Files271700 ++Node: Environ273034 ++Node: Seealso273782 ++Node: Bugreport274499 ++Node: Legal275090 ++Node: CommandIdx276102 ++Node: ConceptIdx293645 +  + End Tag Table +--- 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.2, Oct 26, 2019" ++@c man .TH XORRISO 1 "Version 1.5.2, Nov 26, 2019" + @c man .\" Please adjust this date whenever revising the manpage. + @c man .\" + @c man .\" Some roff macros, for reference: +@@ -4351,14 +4351,19 @@ + instead of the content bytes of the listed files. + @* + Input for this process are the normal arguments for a @command{xorriso} session +-on a blank -outdev, and a .md5 file which lists those data files which may be +-listed in the .jigdo file and externally referenced in the .template file. +-Each designated file is represented in the .md5 file by a single text line: ++on a blank -outdev, and a checksum file which lists those data files which may ++be listed in the .jigdo file and externally referenced in the .template file. ++Each designated file is represented in the checksum file by a single text line: + @* +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, + symbolic file address + @* +-The file address in an .md5 line has to bear the same basename as the ++The kind of checksum is chosen by -jigdo "checksum_algorithm" with values "md5" ++(32 hex digits) or "sha256" (64 hex digits). ++It will also be used for the file address lines in the .jigdo file. ++The default is "md5". ++@* ++The file address in a checksum file line has to bear the same basename as the + disk_path of the file which it shall match. The directory path of + the file address is decisive for To=From mapping, not for file recognition. + After To=From mapping, the file address gets written into the .jigdo +@@ -4384,6 +4389,12 @@ + Parameter @strong{clear} with any value empties the whole list. + No .jigdo and .template file will be produced. + @* ++@strong{checksum_algorithm} chooses the checksum algorithm which shall be used ++for the data file entries in the .jigdo file and is expected in the checksum ++file. Permissible are "md5" or "sha256". Default is "md5". ++@* ++Alias: -jigdo-checksum-algorithm ++@* + @strong{template_path} sets the disk_path for the .template file with the + holed and compressed ISO image copy. + @* +@@ -4394,7 +4405,12 @@ + @* + Alias: -jigdo-jigdo + @* +-@strong{md5_path} sets the disk_path where to find the .md5 input file. ++@strong{checksum_path} sets the disk_path where to find the checksum file with ++symbolic file addresses and checksums according to @strong{checksum_algorithm}. ++@* ++Alias: md5_path ++@* ++Alias: -checksum-list + @* + Alias: -md5-list + @* +@@ -4409,15 +4425,19 @@ + @* + Alias: -jigdo-exclude + @* +-@strong{demand_md5} adds a regular expression pattern which will get compared +-with the absolute disk_path of any data file that was not found in the .md5 +-list. A match causes a MISHAP event. ++@strong{demand_checksum} adds a regular expression pattern which will get ++compared with the absolute disk_path of any data file that was not found ++in the checksum list file as of "checksum_path". A match causes a MISHAP event. ++@* ++Alias: demand_md5 ++@* ++Alias: -jigdo-force-checksum + @* + Alias: -jigdo-force-md5 + @* + @strong{mapping} adds a string pair of the form To=From to the parameter list. + If a data file gets listed in the .jigdo file, then it is referred by the +-file address from its line in the .md5 file. This file address gets checked ++file address from its line in the checksum file. This file address gets checked + whether it begins with the From string. If so, then this string will be + replaced by the To string and a ':' character, before it goes into the .jigdo + file. The From string should end by a '/' character. +--- a/xorriso/xorrisofs.1 ++++ b/xorriso/xorrisofs.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 XORRISOFS 1 "Version 1.5.2, Oct 26, 2019" ++.TH XORRISOFS 1 "Version 1.5.2, Nov 26, 2019" + .\" Please adjust this date whenever revising the manpage. + .\" + .\" Some roff macros, for reference: +@@ -1529,15 +1529,20 @@ + instead of the content bytes of the listed files. + .br + Input for this process are the normal arguments for a \fBxorrisofs\fR +-session +-with no image loaded, and a .md5 file which lists those data files which may be ++session with no image loaded, and a checksum file which lists those ++data files which may be + listed in the .jigdo file and externally referenced in the .template file. +-Each designated file is represented in the .md5 file by a single text line: ++Each designated file is represented in the checksum file by a single text line: + .br +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, + symbolic file address + .br +-The file address in an .md5 line has to bear the same basename as the ++The kind of checksum is chosen by \-jigdo "checksum_algorithm" with values "md5" ++(32 hex digits) or "sha256" (64 hex digits). ++It will also be used for the file address lines in the .jigdo file. ++ The default is "md5". ++.br ++The file address in a checksum file line has to bear the same basename as the + disk_path of the file which it shall match. The directory path of + the file address is decisive for To=From mapping, not for file recognition. + After To=From mapping, the file address gets written into the .jigdo +@@ -1548,6 +1553,10 @@ + counted as part of the ISO image. + .br + .TP ++\fB\-jigdo-checksum-algorithm\fR "md5"|"sha256" ++Set the checksum algorithm which shall be used for the data file entries ++in the .jigdo file and is expected in the checksum file. Default is "md5". ++.TP + \fB\-jigdo-jigdo\fR disk_path + Set the disk_path for the .jigdo file with the checksums + and download addresses for filling the holes in .template. +@@ -1563,12 +1572,16 @@ + letter "k", "m", "g" to count KiB (1024 bytes), MiB (1024 KiB), or + GiB (1024 MiB). + .TP +-\fB\-jigdo-force-md5\fR disk_path_pattern ++\fB\-jigdo-force-checksum\fR disk_path_pattern + adds a regular expression pattern which will get compared +-with the absolute disk_path of any data file that was not found in the .md5 +-list. A match causes a MISHAP event, which normally does not abort the ++with the absolute disk_path of any data file that was not found in the ++checksum file. ++A match causes a MISHAP event, which normally does not abort the + program run but finally causes a non\-zero exit value of the program. + .TP ++\fB\-jigdo-force-md5\fR disk_path_pattern ++Outdated alias of \-jigdo\-force\-checksum. ++.TP + \fB\-jigdo-exclude\fR disk_path_pattern + Add a regular expression pattern which will get compared + with the absolute disk_path of any data file. A match causes the file to +@@ -1577,13 +1590,17 @@ + \fB\-jigdo-map\fR To=From + Add a string pair of the form To=From to the parameter list. + If a data file gets listed in the .jigdo file, then it is referred by the +-file address from its line in the .md5 file. This file address gets checked ++file address from its line in the checksum file. This file address gets checked + whether it begins with the From string. If so, then this string will be + replaced by the To string and a ':' character, before it goes into the .jigdo + file. The From string should end by a '/' character. + .TP ++\fB\-checksum-list\fR disk_path ++Set the disk_path where to find the checksum file file with ++symbolic file addresses and checksums according to \-jigdo\-checksum\-algorithm. ++.TP + \fB\-md5-list\fR disk_path +-Set the disk_path where to find the .md5 input file. ++Outdated alias of \-checksum\-list. + .TP + \fB\-jigdo-template-compress\fR "gzip"|"bzip2" + Choose one of "bzip2" or "gzip" for the compression of +--- a/xorriso/xorrisofs.info ++++ b/xorriso/xorrisofs.info +@@ -1334,21 +1334,29 @@ + .template file contains the compressed ISO image with reference tags + instead of the content bytes of the listed files. + Input for this process are the normal arguments for a 'xorrisofs' +-session with no image loaded, and a .md5 file which lists those data ++session with no image loaded, and a checksum file which lists those data + files which may be listed in the .jigdo file and externally referenced +-in the .template file. Each designated file is represented in the .md5 +-file by a single text line: +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 ++in the .template file. Each designated file is represented in the ++checksum file by a single text line: ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 + blanks, symbolic file address +-The file address in an .md5 line has to bear the same basename as the +-disk_path of the file which it shall match. The directory path of the +-file address is decisive for To=From mapping, not for file recognition. +-After To=From mapping, the file address gets written into the .jigdo +-file. Jigdo restore tools will convert these addresses into really +-reachable data source addresses from which they can read. ++The kind of checksum is chosen by -jigdo "checksum_algorithm" with ++values "md5" (32 hex digits) or "sha256" (64 hex digits). It will also ++be used for the file address lines in the .jigdo file. The default is ++"md5". ++The file address in a checksum file line has to bear the same basename ++as the disk_path of the file which it shall match. The directory path ++of the file address is decisive for To=From mapping, not for file ++recognition. After To=From mapping, the file address gets written into ++the .jigdo file. Jigdo restore tools will convert these addresses into ++really reachable data source addresses from which they can read. + If the list of jigdo parameters is not empty, then padding will be + counted as part of the ISO image. + ++-jigdo-checksum-algorithm "md5"|"sha256" ++ Set the checksum algorithm which shall be used for the data file ++ entries in the .jigdo file and is expected in the checksum file. ++ Default is "md5". + -jigdo-jigdo disk_path + Set the disk_path for the .jigdo file with the checksums and + download addresses for filling the holes in .template. +@@ -1360,12 +1368,14 @@ + file and being a hole in the .template file. size may be a plain + number counting bytes, or a number with appended letter "k", "m", + "g" to count KiB (1024 bytes), MiB (1024 KiB), or GiB (1024 MiB). +--jigdo-force-md5 disk_path_pattern ++-jigdo-force-checksum disk_path_pattern + adds a regular expression pattern which will get compared with the +- absolute disk_path of any data file that was not found in the .md5 +- list. A match causes a MISHAP event, which normally does not abort +- the program run but finally causes a non-zero exit value of the +- program. ++ absolute disk_path of any data file that was not found in the ++ checksum file. A match causes a MISHAP event, which normally does ++ not abort the program run but finally causes a non-zero exit value ++ of the program. ++-jigdo-force-md5 disk_path_pattern ++ Outdated alias of -jigdo-force-checksum. + -jigdo-exclude disk_path_pattern + Add a regular expression pattern which will get compared with the + absolute disk_path of any data file. A match causes the file to +@@ -1373,13 +1383,17 @@ + -jigdo-map To=From + Add a string pair of the form To=From to the parameter list. If a + data file gets listed in the .jigdo file, then it is referred by +- the file address from its line in the .md5 file. This file address +- gets checked whether it begins with the From string. If so, then +- this string will be replaced by the To string and a ':' character, +- before it goes into the .jigdo file. The From string should end by +- a '/' character. ++ the file address from its line in the checksum file. This file ++ address gets checked whether it begins with the From string. If ++ so, then this string will be replaced by the To string and a ':' ++ character, before it goes into the .jigdo file. The From string ++ should end by a '/' character. ++-checksum-list disk_path ++ Set the disk_path where to find the checksum file file with ++ symbolic file addresses and checksums according to ++ -jigdo-checksum-algorithm. + -md5-list disk_path +- Set the disk_path where to find the .md5 input file. ++ Outdated alias of -checksum-list. + -jigdo-template-compress "gzip"|"bzip2" + Choose one of "bzip2" or "gzip" for the compression of the template + file. The jigdo file is put out uncompressed. +@@ -2011,9 +2025,10 @@ + * -C set load address and write address offset: Loading. (line 25) + * -cdrecord-params set load address and write address offset: Loading. + (line 41) +-* -checksum_algorithm_iso choose .jigdo checksums: Jigdo. (line 72) ++* -checksum-list set path of input checksum file: Jigdo. (line 77) ++* -checksum_algorithm_iso choose .jigdo checksums: Jigdo. (line 86) + * -checksum_algorithm_template choose .template checksums: Jigdo. +- (line 78) ++ (line 92) + * -chrp-boot CHRP partition: SystemArea. (line 267) + * -chrp-boot-part CHRP partition: SystemArea. (line 258) + * -copyright set Copyright File path: ImageId. (line 66) +@@ -2089,14 +2104,20 @@ + * -iso_mbr_part_type Set type of ISO MBR partition: SystemArea. + (line 127) + * -J enable production of Joliet directory tree: SetExtras. (line 147) +-* -jigdo-exclude add exclusion pattern for .md5: Jigdo. (line 55) +-* -jigdo-force-md5 add check pattern for .md5: Jigdo. (line 49) +-* -jigdo-jigdo set name of .jigdo file: Jigdo. (line 38) +-* -jigdo-map add address translation for .jigdo: Jigdo. (line 59) +-* -jigdo-min-file-size set minimum extract size: Jigdo. (line 44) +-* -jigdo-template set name of .template file: Jigdo. (line 41) ++* -jigdo-checksum-algorithm set data file checksum algorithm: Jigdo. ++ (line 42) ++* -jigdo-exclude add exclusion pattern for checksum file: Jigdo. ++ (line 65) ++* -jigdo-force-checksum add check pattern for checksum file: Jigdo. ++ (line 57) ++* -jigdo-force-md5 add check pattern for checksum file: Jigdo. ++ (line 63) ++* -jigdo-jigdo set name of .jigdo file: Jigdo. (line 46) ++* -jigdo-map add address translation for .jigdo: Jigdo. (line 69) ++* -jigdo-min-file-size set minimum extract size: Jigdo. (line 52) ++* -jigdo-template set name of .template file: Jigdo. (line 49) + * -jigdo-template-compress choose compression algorithm: Jigdo. +- (line 69) ++ (line 83) + * -joliet enable production of Joliet directory tree: SetExtras. + (line 151) + * -joliet-long allow longer Joliet names: SetExtras. (line 153) +@@ -2107,7 +2128,7 @@ + * -M set path for loading existing ISO image: Loading. (line 11) + * -max-iso9660-filenames allow 37 characters in ISO file names: SetCompl. + (line 61) +-* -md5-list set path of readable .md5: Jigdo. (line 67) ++* -md5-list set path of input checksum file: Jigdo. (line 81) + * -mips-boot MIPS Big Endian boot image: SystemArea. (line 274) + * -mipsel-boot MIPS Little Endian boot image: SystemArea. (line 280) + * -N omit version number in ISO file names: SetCompl. (line 64) +@@ -2330,17 +2351,21 @@ + * ISO level, specify, -iso-level <1>: SetCompl. (line 8) + * ISO root directory, redirect, -root: SetInsert. (line 55) + * iso_rr_path, _definition: Insert. (line 8) +-* Jigdo Template Extraction, -checksum_algorithm_iso: Jigdo. (line 72) ++* Jigdo Template Extraction, -checksum-list: Jigdo. (line 77) ++* Jigdo Template Extraction, -checksum_algorithm_iso: Jigdo. (line 86) + * Jigdo Template Extraction, -checksum_algorithm_template: Jigdo. +- (line 78) +-* Jigdo Template Extraction, -jigdo-exclude: Jigdo. (line 55) +-* Jigdo Template Extraction, -jigdo-force-md5: Jigdo. (line 49) +-* Jigdo Template Extraction, -jigdo-jigdo: Jigdo. (line 38) +-* Jigdo Template Extraction, -jigdo-map: Jigdo. (line 59) +-* Jigdo Template Extraction, -jigdo-min-file-size: Jigdo. (line 44) +-* Jigdo Template Extraction, -jigdo-template: Jigdo. (line 41) +-* Jigdo Template Extraction, -jigdo-template-compress: Jigdo. (line 69) +-* Jigdo Template Extraction, -md5-list: Jigdo. (line 67) ++ (line 92) ++* Jigdo Template Extraction, -jigdo-checksum-algorithm: Jigdo. ++ (line 42) ++* Jigdo Template Extraction, -jigdo-exclude: Jigdo. (line 65) ++* Jigdo Template Extraction, -jigdo-force-checksum: Jigdo. (line 57) ++* Jigdo Template Extraction, -jigdo-force-md5: Jigdo. (line 63) ++* Jigdo Template Extraction, -jigdo-jigdo: Jigdo. (line 46) ++* Jigdo Template Extraction, -jigdo-map: Jigdo. (line 69) ++* Jigdo Template Extraction, -jigdo-min-file-size: Jigdo. (line 52) ++* Jigdo Template Extraction, -jigdo-template: Jigdo. (line 49) ++* Jigdo Template Extraction, -jigdo-template-compress: Jigdo. (line 83) ++* Jigdo Template Extraction, -md5-list: Jigdo. (line 81) + * Jigdo Template Extraction, _definition: Jigdo. (line 6) + * Joliet, allows longer names, -joliet-long: SetExtras. (line 153) + * Joliet, enable, -J, -joliet: SetExtras. (line 147) +@@ -2418,21 +2443,21 @@ + Node: SystemArea45270 + Node: Charset63502 + Node: Jigdo64527 +-Node: Miscellaneous68804 +-Node: Examples70449 +-Node: ExSimple70943 +-Node: ExGraft71426 +-Node: ExMkisofs72726 +-Node: ExGrowisofs74535 +-Node: ExIncBackup75725 +-Node: ExIncBckAcc78902 +-Node: ExBootable80607 +-Node: Files84789 +-Node: Environ85884 +-Node: Seealso86757 +-Node: Bugreport87408 +-Node: Legal88001 +-Node: CommandIdx88898 +-Node: ConceptIdx104765 ++Node: Miscellaneous69497 ++Node: Examples71142 ++Node: ExSimple71636 ++Node: ExGraft72119 ++Node: ExMkisofs73419 ++Node: ExGrowisofs75228 ++Node: ExIncBackup76418 ++Node: ExIncBckAcc79595 ++Node: ExBootable81300 ++Node: Files85482 ++Node: Environ86577 ++Node: Seealso87450 ++Node: Bugreport88101 ++Node: Legal88694 ++Node: CommandIdx89591 ++Node: ConceptIdx105942 +  + End Tag Table +--- a/xorriso/xorrisofs.texi ++++ b/xorriso/xorrisofs.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 XORRISOFS 1 "Version 1.5.2, Oct 26, 2019" ++@c man .TH XORRISOFS 1 "Version 1.5.2, Nov 26, 2019" + @c man .\" Please adjust this date whenever revising the manpage. + @c man .\" + @c man .\" Some roff macros, for reference: +@@ -2004,15 +2004,20 @@ + instead of the content bytes of the listed files. + @* + Input for this process are the normal arguments for a @command{xorrisofs} +-session +-with no image loaded, and a .md5 file which lists those data files which may be ++session with no image loaded, and a checksum file which lists those ++data files which may be + listed in the .jigdo file and externally referenced in the .template file. +-Each designated file is represented in the .md5 file by a single text line: ++Each designated file is represented in the checksum file by a single text line: + @* +-MD5 as 32 hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, ++Checksum as hex digits, 2 blanks, size as 12 decimal digits or blanks, 2 blanks, + symbolic file address + @* +-The file address in an .md5 line has to bear the same basename as the ++The kind of checksum is chosen by -jigdo "checksum_algorithm" with values "md5" ++(32 hex digits) or "sha256" (64 hex digits). ++It will also be used for the file address lines in the .jigdo file. ++ The default is "md5". ++@* ++The file address in a checksum file line has to bear the same basename as the + disk_path of the file which it shall match. The directory path of + the file address is decisive for To=From mapping, not for file recognition. + After To=From mapping, the file address gets written into the .jigdo +@@ -2025,6 +2030,12 @@ + @table @asis + @sp 1 + @c man .TP ++@item -jigdo-checksum-algorithm "md5"|"sha256" ++@kindex -jigdo-checksum-algorithm set data file checksum algorithm ++@cindex Jigdo Template Extraction, -jigdo-checksum-algorithm ++Set the checksum algorithm which shall be used for the data file entries ++in the .jigdo file and is expected in the checksum file. Default is "md5". ++@c man .TP + @item -jigdo-jigdo disk_path + @kindex -jigdo-jigdo set name of .jigdo file + @cindex Jigdo Template Extraction, -jigdo-jigdo +@@ -2046,16 +2057,22 @@ + letter "k", "m", "g" to count KiB (1024 bytes), MiB (1024 KiB), or + GiB (1024 MiB). + @c man .TP +-@item -jigdo-force-md5 disk_path_pattern +-@kindex -jigdo-force-md5 add check pattern for .md5 +-@cindex Jigdo Template Extraction, -jigdo-force-md5 ++@item -jigdo-force-checksum disk_path_pattern ++@kindex -jigdo-force-checksum add check pattern for checksum file ++@cindex Jigdo Template Extraction, -jigdo-force-checksum + adds a regular expression pattern which will get compared +-with the absolute disk_path of any data file that was not found in the .md5 +-list. A match causes a MISHAP event, which normally does not abort the ++with the absolute disk_path of any data file that was not found in the ++checksum file. ++A match causes a MISHAP event, which normally does not abort the + program run but finally causes a non-zero exit value of the program. + @c man .TP ++@item -jigdo-force-md5 disk_path_pattern ++@kindex -jigdo-force-md5 add check pattern for checksum file ++@cindex Jigdo Template Extraction, -jigdo-force-md5 ++Outdated alias of -jigdo-force-checksum. ++@c man .TP + @item -jigdo-exclude disk_path_pattern +-@kindex -jigdo-exclude add exclusion pattern for .md5 ++@kindex -jigdo-exclude add exclusion pattern for checksum file + @cindex Jigdo Template Extraction, -jigdo-exclude + Add a regular expression pattern which will get compared + with the absolute disk_path of any data file. A match causes the file to +@@ -2066,15 +2083,21 @@ + @cindex Jigdo Template Extraction, -jigdo-map + Add a string pair of the form To=From to the parameter list. + If a data file gets listed in the .jigdo file, then it is referred by the +-file address from its line in the .md5 file. This file address gets checked ++file address from its line in the checksum file. This file address gets checked + whether it begins with the From string. If so, then this string will be + replaced by the To string and a ':' character, before it goes into the .jigdo + file. The From string should end by a '/' character. + @c man .TP ++@item -checksum-list disk_path ++@kindex -checksum-list set path of input checksum file ++@cindex Jigdo Template Extraction, -checksum-list ++Set the disk_path where to find the checksum file file with ++symbolic file addresses and checksums according to -jigdo-checksum-algorithm. ++@c man .TP + @item -md5-list disk_path +-@kindex -md5-list set path of readable .md5 ++@kindex -md5-list set path of input checksum file + @cindex Jigdo Template Extraction, -md5-list +-Set the disk_path where to find the .md5 input file. ++Outdated alias of -checksum-list. + @c man .TP + @item -jigdo-template-compress "gzip"|"bzip2" + @kindex -jigdo-template-compress choose compression algorithm diff -Nru libisoburn-1.5.0/debian/patches/series libisoburn-1.5.2/debian/patches/series --- libisoburn-1.5.0/debian/patches/series 2018-10-09 11:21:28.000000000 +0000 +++ libisoburn-1.5.2/debian/patches/series 2019-12-09 16:16:12.000000000 +0000 @@ -0,0 +1 @@ +01-switch-to-libjte2.patch diff -Nru libisoburn-1.5.0/frontend/grub-mkrescue-sed.sh libisoburn-1.5.2/frontend/grub-mkrescue-sed.sh --- libisoburn-1.5.0/frontend/grub-mkrescue-sed.sh 2017-04-10 07:58:30.000000000 +0000 +++ libisoburn-1.5.2/frontend/grub-mkrescue-sed.sh 2019-04-22 18:37:52.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (C) 2015 - 2016 +# Copyright (C) 2015 - 2019 # Thomas Schmitt , libburnia-project.org # Provided under BSD license: Use, modify, and distribute as you like. @@ -117,6 +117,16 @@ # command line.) # Each argument must be a single word. No whitespace. No quotation marks. +# "yes" overwrites the MBR partition table area in the EFI boot image by zeros. +# Some EFI implementations get stuck when seeing in the EFI partition a +# partition table entry which begins at LBA 0. +# "extra" not only zeros the partition table but also the MBR signature. +efi_zero_inner_pt=no +if test -n "$MKRESCUE_SED_IN_EFI_NO_PT" +then + efi_zero_inner_pt="$MKRESCUE_SED_IN_EFI_NO_PT" +fi + # # Do the work @@ -183,12 +193,55 @@ find "$dir" fi +if test "$efi_zero_inner_pt" = yes -o "$efi_zero_inner_pt" = extra +then + did_dd=0 + if test -e "$dir"/efi.img + then + # Look for 0x55 0xAA in bytes 510 and 511 + magic=$(dd bs=1 skip=510 count=2 if="$dir"/efi.img 2>/dev/null | \ + od -c | head -1 | awk '{print $2 " " $3}') + if test "$magic" = "U 252" + then + echo "Performing actions for MKRESCUE_SED_IN_EFI_NO_PT=$efi_zero_inner_pt" >&2 + dd if=/dev/zero bs=1 seek=446 count=64 conv=notrunc of="$dir"/efi.img + did_dd=1 + if test "$efi_zero_inner_pt" = extra + then + dd if=/dev/zero bs=1 seek=510 count=2 conv=notrunc of="$dir"/efi.img + fi + echo >&2 + fi + fi + if test "$did_dd" = 0 + then + echo >&2 + echo "$0 : NOTE : No EFI image found or no MBR signature in it." >&2 + echo "$0 : NOTE : Will not obey MKRESCUE_SED_IN_EFI_NO_PT=$efi_zero_inner_pt" >&2 + echo >&2 + fi +fi + efi_tmp_name= +if test x"$mode" = xmjg \ + -o x"$mode" = xmbr_only \ + -o x"$mode" = xgpt_appended \ + -o x"$mode" = xmbr_hfs +then + # Move EFI partition image file out of the "$dir" tree, i.e. out of the ISO + efi_tmp_name=grub-mkrescue-sed-efi-img.$$ + if test -e "$dir"/efi.img + then + mv "$dir"/efi.img /tmp/$efi_tmp_name + elif test -e /tmp/$efi_tmp_name + then + rm /tmp/$efi_tmp_name + fi +fi + if test x"$mode" = xmjg then # Exchange arguments for the experimental GRUB2 mjg layout - efi_tmp_name=grub-mkrescue-sed-efi-img.$$ - mv "$dir"/efi.img /tmp/$efi_tmp_name x=$(echo " $*" | sed \ -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition $partno 0xef \/tmp\/$efi_tmp_name/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_${partno}:all:: -no-emul-boot -isohybrid-gpt-basdat/" \ @@ -207,8 +260,6 @@ elif test x"$mode" = xmbr_only then # Exchange arguments for no-HFS MBR-only layout - efi_tmp_name=grub-mkrescue-sed-efi-img.$$ - mv "$dir"/efi.img /tmp/$efi_tmp_name x=$(echo " $*" | sed \ -e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ @@ -228,8 +279,6 @@ elif test x"$mode" = xmbr_hfs then # Exchange arguments for MBR and HFS+ layout - efi_tmp_name=grub-mkrescue-sed-efi-img.$$ - mv "$dir"/efi.img /tmp/$efi_tmp_name x=$(echo " $*" | sed \ -e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ @@ -247,8 +296,6 @@ elif test x"$mode" = xgpt_appended then # Exchange arguments for no-HFS MBR-only layout - efi_tmp_name=grub-mkrescue-sed-efi-img.$$ - mv "$dir"/efi.img /tmp/$efi_tmp_name x=$(echo " $*" | sed \ -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name -appended_part_as_gpt -partition_offset 16/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ diff -Nru libisoburn-1.5.0/frontend/xorriso-tcltk libisoburn-1.5.2/frontend/xorriso-tcltk --- libisoburn-1.5.0/frontend/xorriso-tcltk 2018-09-15 13:55:16.000000000 +0000 +++ libisoburn-1.5.2/frontend/xorriso-tcltk 2019-10-26 18:14:19.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/wish # # xorriso-tcltk -# Copyright (C) 2012 - 2018 +# Copyright (C) 2012 - 2019 # Thomas Schmitt , libburnia project. # Provided under BSD license: Use, modify, and distribute as you like. # @@ -23,7 +23,7 @@ # And, well, a graphical widget set would be nice. -set own_version "1.5.0" +set own_version "1.5.2" # Minimum version of xorriso to be used as backend process. # Older versions of xorriso do not offer commands -msg_op and -launch_frontend diff -Nru libisoburn-1.5.0/libisoburn/isoburn.c libisoburn-1.5.2/libisoburn/isoburn.c --- libisoburn-1.5.0/libisoburn/isoburn.c 2017-02-27 09:09:51.000000000 +0000 +++ libisoburn-1.5.2/libisoburn/isoburn.c 2019-02-18 12:02:46.000000000 +0000 @@ -6,8 +6,8 @@ /* Class core of libisoburn. - Copyright 2007 - 2017 Vreixo Formoso Lopes - Thomas Schmitt + Copyright 2007 - 2009 Vreixo Formoso Lopes + Copyright 2007 - 2019 Thomas Schmitt Provided under GPL version 2 or later. */ @@ -554,11 +554,16 @@ 0, "FAILURE", 0); {ret= -1; goto ex;} } + iso_write_opts_set_part_type_guid(wopts, i + 1, + opts->appended_part_type_guids[i], + opts->appended_part_gpt_flags[i] & 1); } iso_write_opts_set_appended_as_gpt(wopts, opts->appended_as_gpt); iso_write_opts_set_appended_as_apm(wopts, opts->appended_as_apm); iso_write_opts_set_part_like_isohybrid(wopts, opts->part_like_isohybrid); iso_write_opts_set_iso_mbr_part_type(wopts, opts->iso_mbr_part_type); + iso_write_opts_set_iso_type_guid(wopts, opts->iso_gpt_type_guid, + opts->iso_gpt_flag & 1); iso_write_opts_set_disc_label(wopts, opts->ascii_disc_label); ret= 1; @@ -1176,6 +1181,8 @@ o->appended_partitions[i]= NULL; o->appended_part_types[i]= 0; o->appended_part_flags[i]= 0; + memset(o->appended_part_type_guids[i], 0, 16); + o->appended_part_gpt_flags[i]= 0; } o->appended_as_gpt= 0; o->appended_as_apm= 0; @@ -1781,6 +1788,48 @@ } +int isoburn_igopt_set_part_type_guid(struct isoburn_imgen_opts *opts, + int partition_number, uint8_t guid[16], + int valid) +{ + char msg[80]; + + if (partition_number < 1 || + partition_number > Libisoburn_max_appended_partitionS) { + sprintf(msg, "Partition number is out of range (1 ... %d)", + Libisoburn_max_appended_partitionS); + isoburn_msgs_submit(NULL, 0x00060000, msg, 0, "FAILURE", 0); + return(0); + } + if(valid) + memcpy(opts->appended_part_type_guids[partition_number - 1], guid, 16); + if(valid) + opts->appended_part_gpt_flags[partition_number - 1]|= 1; + else + opts->appended_part_gpt_flags[partition_number - 1]&= ~1; + return(1); +} + +int isoburn_igopt_get_part_type_guid(struct isoburn_imgen_opts *opts, + int num_entries, uint8_t guids[][16], + int valids[]) +{ + int i, max_entry= 0; + + for(i= 0; i < num_entries; i++) { + memset(guids[i], 0, 16); + valids[i]= 0; + } + for(i= 0; i < Libisoburn_max_appended_partitionS; i++) { + if(i < num_entries) { + memcpy(guids[i], opts->appended_part_type_guids[i], 16); + valids[i]= opts->appended_part_gpt_flags[i] & 1; + } + max_entry= i + 1; + } + return(max_entry); +} + int isoburn_igopt_set_appended_as_apm(struct isoburn_imgen_opts *opts, int apm) { opts->appended_as_apm= !!apm; @@ -1830,6 +1879,24 @@ } +int isoburn_igopt_set_iso_type_guid(struct isoburn_imgen_opts *opts, + uint8_t guid[16], int valid) +{ + if(valid) + memcpy(opts->iso_gpt_type_guid, guid, 16); + opts->iso_gpt_flag= (opts->iso_gpt_flag & ~1) | !!valid; + return(1); +} + + +int isoburn_igopt_get_iso_type_guid(struct isoburn_imgen_opts *opts, + uint8_t guid[16]) +{ + memcpy(guid, opts->iso_gpt_type_guid, 16); + return(opts->iso_gpt_flag & 1); +} + + int isoburn_igopt_set_gpt_guid(struct isoburn_imgen_opts *opts, uint8_t guid[16], int mode) { diff -Nru libisoburn-1.5.0/libisoburn/isoburn.h libisoburn-1.5.2/libisoburn/isoburn.h --- libisoburn-1.5.0/libisoburn/isoburn.h 2017-02-27 09:09:23.000000000 +0000 +++ libisoburn-1.5.2/libisoburn/isoburn.h 2019-02-18 11:56:25.000000000 +0000 @@ -2,8 +2,9 @@ /* Class struct of libisoburn. - Copyright 2007 - 2017 Vreixo Formoso Lopes - and Thomas Schmitt + Copyright 2007 - 2009 Vreixo Formoso Lopes + Copyright 2007 - 2019 Thomas Schmitt + Provided under GPL version 2 or later. */ @@ -691,12 +692,19 @@ char *efi_boot_partition; int efi_boot_part_flag; - /* Eventual disk file paths of prepared images which shall be appended + /* Disk file paths of prepared images which shall be appended after the ISO image and described by partiton table entries in a MBR. + NULL means unused. */ char *appended_partitions[Libisoburn_max_appended_partitionS]; uint8_t appended_part_types[Libisoburn_max_appended_partitionS]; int appended_part_flags[Libisoburn_max_appended_partitionS]; + uint8_t appended_part_type_guids[Libisoburn_max_appended_partitionS][16]; + + /* Flags in case that appended partitions show up in GPT: + bit0= appended_part_type_guids[same_index] is valid + */ + uint8_t appended_part_gpt_flags[Libisoburn_max_appended_partitionS]; /* If 1: With appended partitions: create protective MBR and mark by GPT */ @@ -714,6 +722,13 @@ */ int iso_mbr_part_type; + /* isoburn_igopt_set_iso_type_guid() + */ + uint8_t iso_gpt_type_guid[16]; + /* bit0= iso_gpt_type_guid is valid + */ + int iso_gpt_flag; + /* See libisoburn.h isoburn_igopt_set_gpt_guid() */ uint8_t gpt_guid[16]; diff -Nru libisoburn-1.5.0/libisoburn/isofs_wrap.c libisoburn-1.5.2/libisoburn/isofs_wrap.c --- libisoburn-1.5.0/libisoburn/isofs_wrap.c 2018-05-08 09:26:18.000000000 +0000 +++ libisoburn-1.5.2/libisoburn/isofs_wrap.c 2019-08-14 14:47:47.000000000 +0000 @@ -675,22 +675,22 @@ /* * replace CD001 with CDXX1 in PVM. */ - strncpy(head + 16 * 2048 + 1, "CDXX1", 5); + memcpy(head + 16 * 2048 + 1, "CDXX1", 5); /* Invalidate further ECMA-119 volume descriptors and possible UDF volume recognition sequence */ for(i= 17 * 2048; i < 32 * 2048; i+= 2048) { if(end_ed_found) { if(head[i] == 0 && strncmp(head + i + 1, "BEA01", 5) == 0) - strncpy(head + i + 1, "BEAX1", 5); + memcpy(head + i + 1, "BEAX1", 5); else if(head[i] == 0 && strncmp(head + i + 1, "NSR", 3) == 0) - strncpy(head + i + 1, "NSRX", 4); + memcpy(head + i + 1, "NSRX", 4); else if(head[i] == 0 && strncmp(head + i + 1, "TEA", 3) == 0) - strncpy(head + i + 1, "TEAX", 4); + memcpy(head + i + 1, "TEAX", 4); } else if(strncmp(head + i + 1, "CD001", 5) == 0) { if(((unsigned char *) head)[i] == 0xff) end_ed_found= 1; - strncpy(head + i + 3, "XX", 2); + memcpy(head + i + 3, "XX", 2); } } diff -Nru libisoburn-1.5.0/libisoburn/libisoburn.h libisoburn-1.5.2/libisoburn/libisoburn.h --- libisoburn-1.5.0/libisoburn/libisoburn.h 2018-09-15 13:46:43.000000000 +0000 +++ libisoburn-1.5.2/libisoburn/libisoburn.h 2019-10-26 18:09:05.000000000 +0000 @@ -5,8 +5,8 @@ /* Lower level API definition of libisoburn. - Copyright 2007-2018 Vreixo Formoso Lopes - and Thomas Schmitt + Copyright 2007-2009 Vreixo Formoso Lopes + Copyright 2007-2019 Thomas Schmitt Provided under GPL version 2 or later. */ @@ -249,7 +249,7 @@ */ #define isoburn_libisofs_req_major 1 #define isoburn_libisofs_req_minor 5 -#define isoburn_libisofs_req_micro 0 +#define isoburn_libisofs_req_micro 2 /** The minimum version of libburn to be used with this version of libisoburn at compile time. @@ -257,7 +257,7 @@ */ #define isoburn_libburn_req_major 1 #define isoburn_libburn_req_minor 5 -#define isoburn_libburn_req_micro 0 +#define isoburn_libburn_req_micro 2 /** The minimum compile time requirements of libisoburn towards libjte are the same as of a suitable libisofs towards libjte. @@ -312,7 +312,7 @@ */ #define isoburn_header_version_major 1 #define isoburn_header_version_minor 5 -#define isoburn_header_version_micro 0 +#define isoburn_header_version_micro 2 /** Note: Above version numbers are also recorded in configure.ac because libtool wants them as parameters at build time. @@ -1898,7 +1898,6 @@ int isoburn_igopt_get_part_flags(struct isoburn_imgen_opts *opts, int num_entries, int part_flags[]); - /** Control whether partitions created by iso_write_opts_set_partition_img() are to be represented in MBR or as GPT partitions. @since 1.4.0 @@ -1929,6 +1928,50 @@ int isoburn_igopt_get_appended_as_gpt(struct isoburn_imgen_opts *opts, int *gpt); +/** Set the GPT Type GUID for a partition defined by + isoburn_igopt_set_partition_img(). + @since 1.5.2 + @param opts + The option set to be manipulated. + @param partition_number + Depicts the partition table entry which shall get the Type GUID. + @param guid + 16 bytes of user supplied GUID. Readily byte-swapped from the text + form as prescribed by UEFI specs: + 4 byte, 2 byte, 2 byte as little-endian. + 2 byte, 6 byte as big-endian. + @param valid + Set to 1 to make this Type GUID valid. + Set to 0 in order to invalidate a previously made setting. In this + case MBR type 0xEF will become the EFI Type GUID. All others will + become the Basic Data Partition Type GUID. + @return + <=0 = error, 1 = success +*/ +int isoburn_igopt_set_part_type_guid(struct isoburn_imgen_opts *opts, + int partition_number, uint8_t guid[16], + int valid); + +/** Inquire the current settings made by isoburn_igopt_set_part_type_guid(). + @since 1.5.2 + @param opts + The option set to be inquired. + @param num_entries + Number of array elements in part_flags[]. + @param type_guids + The array elements 0 to num_entries - 1 will get filled by the + 16 flag bits of the images of the corresponding partition. + @param valids + The array elements 0 to num_entries - 1 will get filled by 1 or 0 + to indicate whether the corresponding type_guids elemet is valid. + @return + <0 = error + 0 = no partition image set + >0 highest used partition number +*/ +int isoburn_igopt_get_part_type_guid(struct isoburn_imgen_opts *opts, + int num_entries, uint8_t guids[][16], + int valids[]); /** Control whether partitions created by iso_write_opts_set_partition_img() are to be represented in Apple Partition Map. @@ -2018,6 +2061,39 @@ int isoburn_igopt_get_iso_mbr_part_type(struct isoburn_imgen_opts *opts, int *part_type); +/** Set the GPT Type GUID for the partition which represents the ISO 9660 + filesystem, if such a partition emerges in GPT. + @since 1.5.2 + @param opts + The option set to be manipulated. + @param guid + 16 bytes of user supplied GUID. Readily byte-swapped from the text + form as prescribed by UEFI specs: + 4 byte, 2 byte, 2 byte as little-endian. + 2 byte, 6 byte as big-endian. + @param valid + Set to 1 to make this Type GUID valid. + Set to 0 in order to invalidate a previously made setting. In this + case the setting of isoburn_igopt_set_iso_mbr_part_type() or its + default gets into effect. + @return + <=0 = error, 1 = success +*/ +int isoburn_igopt_set_iso_type_guid(struct isoburn_imgen_opts *opts, + uint8_t guid[16], int valid); + +/** Inquire the current setting of isoburn_igopt_set_iso_type_guid(). + @since 1.5.2 + @param opts + The option set to be inquired. + @param guid + Gets filled with the 16 bytes of GUID. + @return + <= error, 0= guid is invalid, 1 = guid is valid +*/ +int isoburn_igopt_get_iso_type_guid(struct isoburn_imgen_opts *opts, + uint8_t guid[16]); + /** Control whether the emerging GPT gets a pseudo-randomly generated disk GUID or whether it gets a user supplied GUID. The partition GUIDs will be generated in a reproducible way by exoring a @@ -2026,7 +2102,10 @@ @param opts The option set to be manipulated. @param guid - 16 bytes of user supplied GUID. + 16 bytes of user supplied GUID. Readily byte-swapped from the text + form as prescribed by UEFI specs: + 4 byte, 2 byte, 2 byte as little-endian. + 2 byte, 6 byte as big-endian. The upper 4 bit of guid[6] and guid[7] should bear the value 4 to express the version 4 in both endiannesses. Bit 7 of byte[8] should be set to 1 and bit 6 be set to 0, in order to express the RFC 4122 diff -Nru libisoburn-1.5.0/libisoburn/libisoburn.ver libisoburn-1.5.2/libisoburn/libisoburn.ver --- libisoburn-1.5.0/libisoburn/libisoburn.ver 2017-02-27 09:13:49.000000000 +0000 +++ libisoburn-1.5.2/libisoburn/libisoburn.ver 2019-04-18 09:27:25.000000000 +0000 @@ -40,12 +40,14 @@ isoburn_igopt_get_hfsp_block_size; isoburn_igopt_get_hfsp_serial_number; isoburn_igopt_get_iso_mbr_part_type; +isoburn_igopt_get_iso_type_guid; isoburn_igopt_get_level; isoburn_igopt_get_out_charset; isoburn_igopt_get_over_mode; isoburn_igopt_get_over_ugid; isoburn_igopt_get_part_flags; isoburn_igopt_get_part_like_isohybrid; +isoburn_igopt_get_part_type_guid; isoburn_igopt_get_partition_img; isoburn_igopt_get_prep_partition; isoburn_igopt_get_pvd_times; @@ -69,12 +71,14 @@ isoburn_igopt_set_hfsp_block_size; isoburn_igopt_set_hfsp_serial_number; isoburn_igopt_set_iso_mbr_part_type; +isoburn_igopt_set_iso_type_guid; isoburn_igopt_set_level; isoburn_igopt_set_out_charset; isoburn_igopt_set_over_mode; isoburn_igopt_set_over_ugid; isoburn_igopt_set_part_flag; isoburn_igopt_set_part_like_isohybrid; +isoburn_igopt_set_part_type_guid; isoburn_igopt_set_partition_img; isoburn_igopt_set_prep_partition; isoburn_igopt_set_pvd_times; @@ -230,6 +234,7 @@ Xorriso_option_hfsplus; Xorriso_option_hide; Xorriso_option_history; +Xorriso_option_iso_nowtime; Xorriso_option_iso_rr_pattern; Xorriso_option_jigdo; Xorriso_option_joliet; diff -Nru libisoburn-1.5.0/Makefile.am libisoburn-1.5.2/Makefile.am --- libisoburn-1.5.0/Makefile.am 2017-09-29 11:31:45.000000000 +0000 +++ libisoburn-1.5.2/Makefile.am 2019-01-10 19:33:44.000000000 +0000 @@ -1,4 +1,8 @@ +# Copyright (C) 2006 - 2008 Vreixo Formoso +# Copyright (C) 2008 - 2019 Thomas Schmitt +# Provided under GPL version 2 or later. + # ts A90315 : LIBBURNIA_PKGCONFDIR is defined OS specific in acinclude.m4 # was: pkgconfigdir=$(libdir)/pkgconfig pkgconfigdir=$(LIBBURNIA_PKGCONFDIR) diff -Nru libisoburn-1.5.0/Makefile.in libisoburn-1.5.2/Makefile.in --- libisoburn-1.5.0/Makefile.in 2018-09-15 14:16:52.000000000 +0000 +++ libisoburn-1.5.2/Makefile.in 2019-10-26 18:24:54.000000000 +0000 @@ -14,6 +14,10 @@ @SET_MAKE@ +# Copyright (C) 2006 - 2008 Vreixo Formoso +# Copyright (C) 2008 - 2019 Thomas Schmitt +# Provided under GPL version 2 or later. + @@ -386,7 +390,6 @@ LT_CURRENT_MINUS_AGE = @LT_CURRENT_MINUS_AGE@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ -MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ @@ -676,7 +679,7 @@ .SUFFIXES: .c .dvi .lo .o .obj .ps am--refresh: Makefile @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -703,9 +706,9 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +$(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): doc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doc/doxygen.conf.in diff -Nru libisoburn-1.5.0/README libisoburn-1.5.2/README --- libisoburn-1.5.0/README 2018-09-15 13:42:28.000000000 +0000 +++ libisoburn-1.5.2/README 2019-10-26 18:08:40.000000000 +0000 @@ -4,9 +4,9 @@ libisoburn and xorriso. By Vreixo Formoso and Thomas Schmitt Integrated sub project of libburnia-project.org. -http://files.libburnia-project.org/releases/libisoburn-1.5.0.tar.gz +http://files.libburnia-project.org/releases/libisoburn-1.5.2.tar.gz Copyright (C) 2006-2009 Vreixo Formoso, -Copyright (C) 2006-2018 Thomas Schmitt. +Copyright (C) 2006-2019 Thomas Schmitt. Provided under GPL version 2 or later. ------------------------------------------------------------------------------ @@ -36,17 +36,17 @@ Compilation, First Glimpse, Installation -Dynamic library and compile time header requirements for libisoburn-1.5.0 : -- libburn.so.4 , version libburn-1.5.0 or higher -- libisofs.so.6 , version libisofs-1.5.0 or higher +Dynamic library and compile time header requirements for libisoburn-1.5.2 : +- libburn.so.4 , version libburn-1.5.2 or higher +- libisofs.so.6 , version libisofs-1.5.2 or higher libisoburn and xorriso will not start with libraries which are older than their include headers seen at compile time. -Obtain libisoburn-1.5.0.tar.gz, take it to a directory of your choice +Obtain libisoburn-1.5.2.tar.gz, take it to a directory of your choice and do: - tar xzf libisoburn-1.5.0.tar.gz - cd libisoburn-1.5.0 + tar xzf libisoburn-1.5.2.tar.gz + cd libisoburn-1.5.2 Within that directory execute: @@ -306,7 +306,7 @@ By Mario Danic , Vreixo Formoso Thomas Schmitt -Copyright (C) 2006-2018 Mario Danic, Vreixo Formoso, Thomas Schmitt. +Copyright (C) 2006-2019 Mario Danic, Vreixo Formoso, Thomas Schmitt. We will not raise any legal protest to dynamic linking of our libraries with applications that are not under GPL, as long as they fulfill diff -Nru libisoburn-1.5.0/test/compare_file.c libisoburn-1.5.2/test/compare_file.c --- libisoburn-1.5.0/test/compare_file.c 2016-11-13 08:29:14.000000000 +0000 +++ libisoburn-1.5.2/test/compare_file.c 2019-08-12 15:28:09.000000000 +0000 @@ -103,6 +103,7 @@ int ret, differs= 0, r1, r2, fd1= -1, fd2= -1, i, done; char buf1[4096], buf2[4096], a[4096], ttx1[40], ttx2[40]; off_t r1count= 0, r2count= 0, diffcount= 0, first_diff= -1; + double dcount; ret= lstat(adr1, &s1); if(ret==-1) { @@ -241,9 +242,13 @@ if(diffcount>0 || r1count!=r2count) { if(first_diff<0) first_diff= (r1count>r2count ? r2count : r1count); + if(r1count > r2count) + dcount= diffcount + (r1count - r2count); + else + dcount= diffcount + (r2count - r1count); printf("%s : %s : differs by at least %.f bytes. First at %.f\n", a, (s1.st_mtime==s2.st_mtime ? "CONTENT":"content"), - (double) (diffcount + abs(r1count-r2count)), (double) first_diff); + dcount, (double) first_diff); differs= 1; } } @@ -298,8 +303,10 @@ } strcpy(adr1, argv[1]); strcpy(adrc, argv[1]+strlen(argv[2])); - sprintf(adr2, "%s%s%s", - argv[3], (adrc[0]=='/' || adrc[0]==0 ? "" : "/"), adrc); + strcpy(adr2, argv[3]); + if(adrc[0] == '/' || adrc[0] == 0) + strcat(adr2, "/"); + strcat(adr2, adrc); ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1)); exit(ret<=0); diff -Nru libisoburn-1.5.0/xorriso/base_obj.c libisoburn-1.5.2/xorriso/base_obj.c --- libisoburn-1.5.0/xorriso/base_obj.c 2017-02-27 09:34:13.000000000 +0000 +++ libisoburn-1.5.2/xorriso/base_obj.c 2019-09-07 18:48:28.000000000 +0000 @@ -3,7 +3,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. @@ -207,6 +207,7 @@ 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 @@ 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 @@ 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; @@ -290,11 +293,15 @@ for(i= 0; i < Xorriso_max_appended_partitionS; i++) { m->appended_partitions[i]= NULL; m->appended_part_types[i]= 0; + memset(m->appended_part_type_guids[i], 0, 16); + m->appended_part_gpt_flags[i]= 0; } m->appended_as_gpt= 0; m->appended_as_apm= 0; m->part_like_isohybrid= 0; m->iso_mbr_part_type= -1; + memset(m->iso_gpt_type_guid, 0, 16); + m->iso_mbr_part_flag= 0; memset(m->gpt_guid, 0, 16); m->gpt_guid_mode= 0; m->ascii_disc_label[0]= 0; @@ -308,6 +315,8 @@ m->vol_effective_time= 0; m->vol_uuid[0]= 0; m->all_file_dates[0]= 0; + m->do_override_now_time= 0; + m->now_time_override= 0; #ifdef Xorriso_with_libjtE m->libjte_handle= NULL; @@ -469,6 +478,7 @@ 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 -Nru libisoburn-1.5.0/xorriso/changelog.txt libisoburn-1.5.2/xorriso/changelog.txt --- libisoburn-1.5.0/xorriso/changelog.txt 2018-09-15 14:00:26.000000000 +0000 +++ libisoburn-1.5.2/xorriso/changelog.txt 2019-10-26 18:21:26.000000000 +0000 @@ -18486,22 +18486,394 @@ xorriso/xorrecord.texi xorriso/xorrecord.1 xorriso/xorrecord.info +xorriso/xorriso-tcltk.texi (should have been done) +xorriso/xorriso-tcltk.1 (should have been done) +xorriso/xorriso-tcltk.info (should have been done) Version leap to libisoburn-1.5.0 -15 Sep 2018 [] +15 Sep 2018 [cb4ac1c] ChangeLog xorriso/changelog.txt Documented changes and release timestamp ----------------------------------- release - xorriso-1.5.0 - 2018.09.15.133001 - [] + +2018.09.16.145527 [08355f7] +configure.ac +libisoburn/libisoburn.h +xorriso/README_gnu_xorriso +xorriso/xorriso.h +xorriso/xorrisoburn.h +xorriso/xorriso_main.c +xorriso/make_xorriso_standalone.sh +xorriso/configure_ac.txt +frontend/xorriso-tcltk +xorriso/xorriso_timestamp.h +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +xorriso/xorrisofs.texi +xorriso/xorrisofs.1 +xorriso/xorrisofs.info +xorriso/xorrecord.texi +xorriso/xorrecord.1 +xorriso/xorrecord.info +xorriso/xorriso-tcltk.texi +xorriso/xorriso-tcltk.1 +xorriso/xorriso-tcltk.info +Made number transition to 1.5.1 + +2018.09.16.150917 [c2b33f4] +xorriso/opts_p_z.c +xorriso/emulators.c +Updated copyright messages + +16 Sep 2018 [c338597] ChangeLog +xorriso/changelog.txt +Updated change log and web page + +------------------------------------ cycle - xorriso-1.5.1 - 2018.09.16.150917 + + +24 Sep 2018 [1efe7aa] +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +xorriso/xorrisofs.texi +xorriso/xorrisofs.1 +xorriso/xorrisofs.info +Corrected typo in documentation (found by lintian) + +10 Oct 2018 [05732a2] +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +xorriso/xorrisofs.texi +xorriso/xorrisofs.1 +xorriso/xorrisofs.info +xorriso/xorrecord.texi +xorriso/xorrecord.1 +xorriso/xorrecord.info +Corrected typo in documentation (found by younger lintian) + +2018.10.10.114818 [1002df9] +xorriso/cmp_update.c +Displaying data file sizes with -update and -update_r + +2018.10.12.104229 [22aa52b] +xorriso/parse_exec.c +xorriso/emulators.c +Silenced gcc warnings about printf target buffer + +21 Oct 2018 [9cfd466] +test/compare_file.c +Silenced gcc warning about printf target buffer + +2018.11.01.100352 [ff68bda] +xorriso/drive_mgt.c +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +Re-enabled unconditional reporting of MD5 tags with -check_media + +11 Nov 2018 [b8ee16a] +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +xorriso/xorrisofs.texi +xorriso/xorrisofs.1 +xorriso/xorrisofs.info +xorriso/xorrecord.texi +xorriso/xorrecord.1 +xorriso/xorrecord.info +Changed prescription for safe loading of tray before xorrisofs add-on session + +10 Jan 2019 [c56842e] +acinclude.m4 +Makefile.am +Improved recognizability of copyright and license statements in various files + +2019.01.10.194009 [122e43d] xorriso/xorriso_eng.html xorriso/changelog.txt Updated change log and web page ------------------------------------- cycle - xorriso-1.5.1 - +------------------------------------ cycle - xorriso-1.5.1 - 2019.01.10.194009 +* Bug fix in libisofs: Appended GPT partitions were not covered by the + protective MBR partition +* Bug fix in libisofs: Multi-session emulation spoiled GPT production + "GPT partitions ... overlap". Regression towards 1.4.8 + + +18 Feb 2019 [caf38e8] +libisoburn/libisoburn.h +libisoburn/isoburn.h +libisoburn/isoburn.c +libisoburn/libisoburn.ver +New API calls isoburn_igopt_set_part_type_guid(), isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), isoburn_igopt_get_iso_type_guid() + +18 Feb 2019 [fc71cec] +xorriso/xorriso_private.h +xorriso/xorrisoburn.h +xorriso/base_obj.c +xorriso/opts_a_c.c +xorriso/iso_img.c +xorriso/write_run.c +xorriso/emulators.c +xorriso/text_io.c +xorriso/lib_mgt.c +xorriso/misc_funct.h +xorriso/misc_funct.c +xorriso/xorriso.texi +xorriso/xorriso.info +xorriso/xorriso.1 +xorriso/xorrisofs.texi +xorriso/xorrisofs.info +xorriso/xorrisofs.1 +Enabled GPT type GUIDs with -append_partition, -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type + +2019.02.18.121941 [7a1cac3] +xorriso/xorriso_timestamp.h +Updated xorriso timestamp + +05 Apr 2019 [0722502] +acinclude.m4 +Made libisoburn ready for building out-of-source. Thanks Ross Burton. + +05 Apr 2019 [720d289] +xorriso/xorriso_makefile_am.txt +Made GNU xorriso ready for building out-of-source. Thanks Ross Burton. + +07 Apr 2019 [1ff0913] +configure.ac +xorriso/configure_ac.txt +Disabled autotools macro AM_MAINTAINER_MODE on advise of Ross Burton + +2019.04.08.115541 [e9a424a] +xorriso/xorrisoburn.h +xorriso/cmp_update.c +xorriso/iso_tree.c +xorriso/disk_ops.h +xorriso/disk_ops.c +Displaying directory tree sizes with -update and -update_r + +2019.04.18.092737 [1f8d9c7] +xorriso/xorriso.h +xorriso/xorriso_private.h +xorriso/xorrisoburn.h +xorriso/base_obj.c +xorriso/parse_exec.c +xorriso/opts_d_h.c +xorriso/opts_i_o.c +xorriso/lib_mgt.c +xorriso/text_io.c +xorriso/xorriso.texi +xorriso/xorriso.info +xorriso/xorriso.1 +xorriso/xorrisofs.texi +xorriso/xorrisofs.info +xorriso/xorrisofs.1 +libisoburn/libisoburn.ver +New command -iso_nowtime to set fixed timestamp for synthetic files + +2019.04.18.092941 [5b62c55] +xorriso/parse_exec.c +Bug fix: Environment variable SOURCE_DATE_EPOCH did not affect synthetic files + +22 Apr 2019 [3a2a3ba] +frontend/grub-mkrescue-sed.sh +New control variable for grub-mkrescue-sed.sh: MKRESCUE_SED_IN_EFI_NO_PT + +2019.04.22.082211 [95c2e7c] +xorriso/text_io.c +Correction of default output of command -status about -iso_nowtime + +22 Apr 2019 [1eb51f4] +frontend/grub-mkrescue-sed.sh +grub-mkrescue-sed.sh: MKRESCUE_SED_IN_EFI_NO_PT="extra" to erase MBR signature + +2019.05.02.175412 [aa50f5c] +xorriso/write_run.c +Re-assessing drive status after automatic formatting by a write run + +2019.05.02.175539 [31450dc] +xorriso/opts_p_z.c +xorriso/emulators.c +Updated year in copyright message texts + +2019.07.06.130540 [c0ad17b] +ChangeLog +xorriso/xorriso_eng.html +xorriso/changelog.txt +Updated change log and web page + +------------------------------------ cycle - xorriso-1.5.1 - 2019.07.06.130540 +* New API calls isoburn_igopt_set_part_type_guid(), + isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), + isoburn_igopt_get_iso_type_guid() +* Enabled GPT type GUIDs with -append_partition, + -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type +* Made libisoburn and GNU xorriso ready for building out-of-source. + Thanks Ross Burton. + + +2019.07.13.153027 [3b0abc1] +xorriso/drive_mgt.c +Improved -toc summary of sessions with multiple tracks or non-data sessions + +2019.07.22.181418 [397551f] +xorriso/iso_img.c +With report_system_area of iso_mbr_part_type: give MBR precedence over GPT + +2019.07.24.073750 [321a047] +xorriso/opts_p_z.c +xorriso/text_io.h +xorriso/text_io.c +Bug fix: Very large ACL texts led to SIGSEGV with -setfacl* commands. +Thanks Eliska Svobodova. + +2019.07.24.141555 [e3ff5a9] +xorriso/iso_manip.c +Enabled verbous error reporting of iso_node_set_acl_text() + +2019.08.12.152719 [fb61be0] +xorriso/cmp_update.c +test/compare_file.c +Fixed a comparation report text problem with files of 4 GiB or larger. +Thanks Eliska Svobodova. + +2019.08.12.190808 [56a5962] +xorriso/cmp_update.c +xorriso/disk_ops.c +xorriso/drive_mgt.c +xorriso/emulators.c +xorriso/iso_manip.c +xorriso/opts_p_z.c +xorriso/read_run.c +Changed all occurences of (1<<31) to (1u<<31). Thanks Eliska Svobodova. + +2019.08.13.160439 [e17db6a] +xorriso/opts_d_h.c +xorriso/parse_exec.c +Avoided potential dereference of NULL. Thanks Eliska Svobodova. + +2019.08.13.161913 [b356291] +xorriso/iso_manip.c +Added a missing pointer initialization. Thanks Eliska Svobodova. + +2019.08.14.094038 [3eba8cc] +xorriso/opts_p_z.c +xorriso/emulators.c +xorriso/text_io.c +Closed potential memory leaks. Thanks Eliska Svobodova. + +2019.08.14.141748 [06346c1] +xorriso/opts_a_c.c +Prevented potential string overruns. Thanks Eliska Svobodova. + +2019.08.14.144754 [fe5fd8e] +libisoburn/isofs_wrap.c +Changed strncpy() to memcpy() in order to please static analyzers + +2019.09.01.071701 [4db0aab] +xorriso/match.c +Bug fix: -disk_pattern on -add ./ -- mistook "./" for the root directory + +2019.09.01.071948 [7066fd4] +xorriso/iso_manip.c +Improved rejection message in case case of local root directory as input file + +2019.09.01.072438 [8828d6f] +xorriso/parse_exec.c +Bug fix: -disk_pattern on -add "" -- yielded SIGSEGV + +2019.09.08.102946 [9019399] +xorriso/xorriso.h +xorriso/xorriso_private.h +xorriso/parse_exec.c +xorriso/opts_d_h.c +xorriso/base_obj.c +xorriso/text_io.c +xorriso/emulators.c +xorriso/drive_mgt.c +xorriso/xorriso.texi +xorriso/xorriso.info +xorriso/xorriso.1 +xorriso/xorrecord.texi +xorriso/xorrecord.info +xorriso/xorrecord.1 +New command -drive_access, new -as cdrecord option --drive_not_exclusive + +2019.09.29.205332 [a6328e8] +xorriso/iso_img.c +Prevented -report_system_area as_mkisofs from combining -efi-boot-part with -e --interval:appended_partition + +2019.09.29.205504 [cb597ec] +xorriso/text_io.c +Clarified the message for file paths which are much too long + +2019.10.11.104334 [e2c71a3] +xorriso/opts_a_c.c +xorriso/iso_tree.c +xorriso/read_run.c +xorriso/xorriso.texi +xorriso/xorriso.info +xorriso/xorriso.1 +Bug fix: -osirrox "concat_split_on" worked only together with -split_size +larger than 0. Thanks William Willems. + +2019.10.26.180001 [3c8f270] +configure.ac +README +libisoburn/libisoburn.h +xorriso/README_gnu_xorriso +xorriso/xorriso.h +xorriso/xorrisoburn.h +xorriso/xorriso_main.c +xorriso/xorriso_eng.html +xorriso/make_xorriso_standalone.sh +xorriso/configure_ac.txt +frontend/xorriso-tcltk +xorriso/xorriso_timestamp.h +xorriso/xorriso.texi +xorriso/xorriso.1 +xorriso/xorriso.info +xorriso/xorrisofs.texi +xorriso/xorrisofs.1 +xorriso/xorrisofs.info +xorriso/xorrecord.texi +xorriso/xorrecord.1 +xorriso/xorrecord.info +xorriso/xorriso-tcltk.texi +xorriso/xorriso-tcltk.1 +xorriso/xorriso-tcltk.info +Version leap to libisoburn-1.5.2 + +26 Oct 2019 [] +ChangeLog +xorriso/changelog.txt +Documented changes and release timestamp + + +----------------------------------- release - xorriso-1.5.2 - 2019.10.26.180001 +* Bug fix in libisofs: Appended GPT partitions were not covered by the + protective MBR partition +* Bug fix in libisofs: Multi-session emulation spoiled GPT production + "GPT partitions ... overlap". Regression towards 1.4.8 +* Bug fix: -disk_pattern on -add ./ -- mistook "./" for the root directory +* Bug fix: -disk_pattern on -add "" -- yielded SIGSEGV +* Bug fix: -osirrox "concat_split_on" worked only together with -split_size + larger than 0. Thanks William Willems. +* New API calls isoburn_igopt_set_part_type_guid(), + isoburn_igopt_get_part_type_guid(), isoburn_igopt_set_iso_type_guid(), + isoburn_igopt_get_iso_type_guid() +* Enabled GPT type GUIDs with -append_partition, + -boot_image any iso_mbr_part_type=, and -as mkisofs -iso_mbr_part_type +* Made libisoburn and GNU xorriso ready for building out-of-source. + Thanks Ross Burton. + [] ChangeLog @@ -18509,7 +18881,7 @@ xorriso/changelog.txt Updated change log and web page ------------------------------------- cycle - xorriso-1.5.1 - +------------------------------------ cycle - xorriso-1.5.3 - ********************************************************************** diff -Nru libisoburn-1.5.0/xorriso/cmp_update.c libisoburn-1.5.2/xorriso/cmp_update.c --- libisoburn-1.5.0/xorriso/cmp_update.c 2016-11-13 08:29:14.000000000 +0000 +++ libisoburn-1.5.2/xorriso/cmp_update.c 2019-08-12 19:05:53.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2014 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -62,6 +62,7 @@ char disk_md5[16], iso_md5[16]; void *ctx= NULL; int buf_size= 32 * 1024; + double dcount; Xorriso_alloc_meM(buf1, char, buf_size); Xorriso_alloc_meM(buf2, char, buf_size); @@ -73,7 +74,7 @@ sprintf(respt, "- %s (DISK) : cannot open() : %s\n", disk_adr, strerror(errno)); cannot_address:; - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 2048; {ret= 0; goto ex;} @@ -105,7 +106,7 @@ ret= Xorriso_iso_file_open(xorriso, iso_adr, NULL, &stream2, 0); if(ret<=0) { sprintf(respt, "- %s (ISO) : cannot open() file in ISO image\n",iso_adr); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); close(fd1); (*result)|= 4096; @@ -155,7 +156,7 @@ if(disk_size > r1count + r1 + offset) { sprintf(respt, "- %s (DISK) : early EOF after %.f bytes\n", disk_adr, (double) r1count); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 8196; } @@ -168,7 +169,7 @@ if(iso_size > r2count + r2) { sprintf(respt, "- %s (ISO) : early EOF after %.f bytes\n", iso_adr, (double) r2count); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= (1<<14); } @@ -179,7 +180,7 @@ if(disk_size > r1count + r1 + offset) { sprintf(respt, "- %s (DISK) : early EOF after %.f bytes\n", disk_adr, (double) r1count); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 8196; } @@ -204,7 +205,7 @@ if(!(flag&(1<<29))) { xorriso->pacifier_count+= r1; xorriso->pacifier_byte_count+= r1; - if(flag&(1<<31)) + if(flag&(1u<<31)) Xorriso_pacifier_callback(xorriso, "content bytes read", xorriso->pacifier_count, 0, "", 8); else @@ -228,7 +229,7 @@ sprintf(offset_text, "%.f+", (double) offset); sprintf(respt, "%s %s : differs by MD5 sums.\n", common_adr, (flag&1 ? "CONTENT": "content")); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= (1<<15); } @@ -238,11 +239,14 @@ offset_text[0]= 0; if(offset>0) sprintf(offset_text, "%.f+", (double) offset); + if(r1count > r2count) + dcount= diffcount + (r1count - r2count); + else + dcount= diffcount + (r2count - r1count); sprintf(respt, "%s %s : differs by at least %.f bytes. First at %s%.f\n", common_adr, (flag&1 ? "CONTENT": "content"), - (double) (diffcount + abs(r1count-r2count)), - offset_text, (double) first_diff); - if(!(flag&(1<<31))) + dcount, offset_text, (double) first_diff); + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= (1<<15); } @@ -335,7 +339,7 @@ Text_shellsafe(disk_adr, respt, 1); sprintf(respt + strlen(respt), " (DISK) : exluded by %s\n", (ret==1 ? "-not_paths" : "-not_leaf")); - if(! (flag & ((1 << 31) | (1 << 26)))) + if(! (flag & ((1u << 31) | (1 << 26)))) Xorriso_result(xorriso,0); missing= 1; (*result)|= 1; @@ -351,7 +355,7 @@ Text_shellsafe(disk_adr, respt, 1); sprintf(respt + strlen(respt), " (DISK) : cannot lstat() : %s\n", strerror(errno)); - if(! (flag & ((1 << 31) | (1 << 26)))) + if(! (flag & ((1u << 31) | (1 << 26)))) Xorriso_result(xorriso,0); missing= 1; (*result)|= 1; @@ -380,7 +384,7 @@ strcpy(respt, "? "); Text_shellsafe(iso_adr, respt, 1); strcat(respt, " (ISO) : cannot find this file in ISO image\n"); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); missing= 1; (*result)|= 2; @@ -406,7 +410,7 @@ sprintf(respt, "%s st_mode : %7.7o <> %7.7o\n", a, (unsigned int) (s1.st_mode & ~S_IFMT), (unsigned int) (s2.st_mode & ~S_IFMT)); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 4; } @@ -414,7 +418,7 @@ if((s1.st_mode&S_IFMT)!=(s2.st_mode&S_IFMT)) { sprintf(respt, "%s type : %s <> %s\n", a, Ftypetxt(s1.st_mode, 0), Ftypetxt(s2.st_mode, 0)); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 8; if((s1.st_mode&S_IFMT) == S_IFLNK) { @@ -454,7 +458,7 @@ if((*result) & (1 << 19)) { sprintf(respt, "%s ACL : %d difference%s\n", a, diff_count, diff_count == 1 ? "" : "s"); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); } } @@ -475,7 +479,7 @@ (*result)|= (1 << 20); sprintf(respt, "%s xattr : %d difference%s\n", a, diff_count, diff_count == 1 ? "" : "s"); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); } } @@ -483,14 +487,14 @@ if(s1.st_uid != s2.st_uid) { sprintf(respt, "%s st_uid : %lu <> %lu\n", a, (unsigned long) s1.st_uid, (unsigned long) s2.st_uid); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 16; } if(s1.st_gid != s2.st_gid) { sprintf(respt, "%s st_gid : %lu <> %lu\n", a, (unsigned long) s1.st_gid, (unsigned long) s2.st_gid); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 32; } @@ -500,7 +504,7 @@ sprintf(respt, "%s %s st_rdev : %lu <> %lu\n", a, (S_ISCHR(s1.st_mode) ? "S_IFCHR" : "S_IFBLK"), (unsigned long) s1.st_rdev, (unsigned long) s1.st_rdev); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 64; } @@ -510,7 +514,7 @@ sprintf(respt, "%s st_size : %.f <> %.f diff= %.f\n", a, (double) s1.st_size, (double) s2.st_size, ((double) s1.st_size) - (double) s2.st_size); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 128; } @@ -519,7 +523,7 @@ a, Ftimetxt(s1.st_mtime, ttx1, 0), Ftimetxt(s2.st_mtime, ttx2, 0), ((double) s1.st_mtime) - (double) s2.st_mtime); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 256; } @@ -529,7 +533,7 @@ a, Ftimetxt(s1.st_atime, ttx1, 0), Ftimetxt(s2.st_atime, ttx2, 0), ((double) s1.st_atime) - (double) s2.st_atime); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 512; } @@ -540,7 +544,7 @@ a, Ftimetxt(s1.st_ctime, ttx1, 0), Ftimetxt(s2.st_ctime, ttx2, 0), ((double) s1.st_ctime) - (double) s2.st_ctime); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= 1024; } @@ -569,7 +573,7 @@ !((*result) & (8 | 128 | 256 | 512 | 1024))) { sprintf(respt, "%s content : node timestamp younger than image timestamp\n", a); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); stamp= s2.st_mtime; if((flag & 1) && s2.st_atime >= stamp) @@ -580,19 +584,19 @@ a, Ftimetxt(stamp, ttx1, 3 << 1), Ftimetxt(xorriso->isofs_st_in, ttx2, 3 << 1), ((double) stamp) - (double) xorriso->isofs_st_in); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); } sprintf(respt, "%s content : assuming inequality due to size or timestamps\n", a); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); } } } else if(ret == 1) { /* mismatch */ (*result)|= (1 << 21); sprintf(respt, "%s dev_ino : differing\n", a); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); if((xorriso->do_aaip & 64) && S_ISREG(s1.st_mode) && S_ISREG(s2.st_mode)){ @@ -601,12 +605,12 @@ (*result)|= (1 << 15); /* content bytes differ */ sprintf(respt, "%s content : assuming inequality after dev_ino mismatch\n", a); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); } } else { sprintf(respt, "%s dev_ino : no dev_ino stored with image node\n", a); - if((xorriso->do_aaip & 32) && !(flag&(1<<31))) + if((xorriso->do_aaip & 32) && !(flag&(1u<<31))) Xorriso_result(xorriso,0); (*result)|= (1 << 22); } @@ -630,7 +634,7 @@ ret= Xorriso_compare_2_contents(xorriso, a, disk_adr, s1.st_size, offset, bytes, part_path, stbuf.st_size, result, - (s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1<<31)))); + (s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1u<<31)))); if(ret<0) was_error= 1; } @@ -638,7 +642,7 @@ sprintf(xorriso->info_text, "- %s/* (ISO) : Not all split parts present (%d of %d)\n", iso_adr, split_count, total_parts); - if(!(flag&(1<<31))) + if(!(flag&(1u<<31))) Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 1); (*result)|= 1<<18; } @@ -646,7 +650,7 @@ ret= Xorriso_compare_2_contents(xorriso, a, disk_adr, s1.st_size, (off_t) 0, s1.st_size, iso_adr, s2.st_size, result, - (s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1<<31)))); + (s1.st_mtime==s2.st_mtime) | (flag&((1<<29)|(1u<<31)))); if(ret<0) was_error= 1; } @@ -742,7 +746,7 @@ (xorriso->do_follow_param && !(flag&2))) <<28; ret= Xorriso_compare_2_files(xorriso, disk_path, iso_path, "", &result, 2 | follow_links | ((!!(flag & 4)) << 26) - | ((!(flag&2))<<27) | ((flag&1)<<31)); + | ((!(flag&2))<<27) | (((unsigned)(flag&1))<<31)); /* was once: | ((!(flag&1))<<29) */ if(retfind_compare_result) xorriso->find_compare_result= ret; @@ -795,8 +799,8 @@ struct SplitparT *split_parts= NULL; int split_count= 0; char *part_path= NULL, *part_name; - int partno, total_parts, new_total_parts; - off_t offset, bytes, total_bytes, disk_size, first_bytes; + int partno, total_parts, new_total_parts, added_overwrote= 0; + off_t offset, bytes, total_bytes, disk_size, first_bytes, du_size; if((compare_result&3)==3) { sprintf(xorriso->info_text, "Missing on disk and in ISO: disk_path "); @@ -959,10 +963,12 @@ if(ret <= 0) goto ex; } - if(flag & 1) + if(flag & 1) { sprintf(xorriso->info_text, "Widened hard link "); - else + } else { sprintf(xorriso->info_text, "Added/overwrote "); + added_overwrote= 1; + } } else if(compare_result&(4|16|32|256|512|1024|(1<<19)|(1<<20)|(1<<22))) { /* access permissions, user id, group id, mtime, atime, ctime, ACL, xattr, @@ -1005,6 +1011,25 @@ ret= 1; if(ret>0 && xorriso->info_text[0]) { Text_shellsafe(iso_rr_path, xorriso->info_text, 1); + if(added_overwrote) { + ret= Xorriso_iso_lstat(xorriso, iso_rr_path, &stbuf, 0); + if(ret == 0 && S_ISREG(stbuf.st_mode)) { + strcat(xorriso->info_text, " ("); + Sfile_scale((double) stbuf.st_size, + xorriso->info_text + strlen(xorriso->info_text), 5, 1e4, + 1 | 2); + strcat(xorriso->info_text, ")"); + } else if (ret == 0 && S_ISDIR(stbuf.st_mode)) { + ret= Xorriso_get_dus(xorriso, iso_rr_path, &du_size, (off_t) 0, 0); + if(ret > 0 && du_size > 0) { + strcat(xorriso->info_text, " ("); + Sfile_scale((double) du_size, + xorriso->info_text + strlen(xorriso->info_text), 5, 1e4, + 1 | 2); + strcat(xorriso->info_text, ")"); + } + } + } Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0); } ret= 1; diff -Nru libisoburn-1.5.0/xorriso/disk_ops.c libisoburn-1.5.2/xorriso/disk_ops.c --- libisoburn-1.5.0/xorriso/disk_ops.c 2016-11-19 17:21:36.000000000 +0000 +++ libisoburn-1.5.2/xorriso/disk_ops.c 2019-08-12 19:06:23.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2016 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -343,6 +343,7 @@ /* @param flag bit0= do not only sum up sizes but also print subdirs bit1= this is a recursion + bit2= do not report result by Xorriso_result() @return <=0 error , 1 ok , 2 could not open directory */ int Xorriso_show_dux_subs(struct XorrisO *xorriso, @@ -563,13 +564,15 @@ report_size= sub_size/1024; if(report_size*1024sh_style_result) - sprintf(xorriso->result_line, "%-7.f ",(double) (report_size)); - else - sprintf(xorriso->result_line, "%7.f ",(double) (report_size)); - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", - Xorriso_esc_filepath(xorriso,show_path, sfe, 0)); - Xorriso_result(xorriso, 0); + if(!(flag & 4)) { + if(xorriso->sh_style_result) + sprintf(xorriso->result_line, "%-7.f ",(double) (report_size)); + else + sprintf(xorriso->result_line, "%7.f ",(double) (report_size)); + sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", + Xorriso_esc_filepath(xorriso,show_path, sfe, 0)); + Xorriso_result(xorriso, 0); + } } ret= 1; @@ -902,7 +905,7 @@ if(ret<=0) link_target[0]= 0; } - } else if(flag&4) { /* -du or -dus */ + } else if(flag&4) { /* -dux or -dusx */ size= stbuf.st_size; if(S_ISDIR(stbuf.st_mode)) { ret= Xorriso_show_dux_subs(xorriso, path, filev[i], &size, boss_mem, @@ -1186,7 +1189,7 @@ ret= 1; } else if(action==18) { /* add_missing */ ret= Xorriso_compare_2_files(xorriso, abs_path, iso_path, abs_path+dpl, - &compare_result, 4|(1<<31)); + &compare_result, 4|(1u<<31)); if(retfind_compare_result) xorriso->find_compare_result= ret; if(ret==0) { diff -Nru libisoburn-1.5.0/xorriso/disk_ops.h libisoburn-1.5.2/xorriso/disk_ops.h --- libisoburn-1.5.0/xorriso/disk_ops.h 2016-11-13 08:29:14.000000000 +0000 +++ libisoburn-1.5.2/xorriso/disk_ops.h 2019-04-08 11:54:53.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2010 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -45,6 +45,17 @@ int Xorriso_lsx_filev(struct XorrisO *xorriso, char *wd, int filec, char **filev, off_t boss_mem, int flag); +/* @param flag bit0= do not only sum up sizes but also print subdirs + bit1= this is a recursion + bit2= do not report result by Xorriso_result() + @return <=0 error , 1 ok , 2 could not open directory +*/ +int Xorriso_show_dux_subs(struct XorrisO *xorriso, + char *abs_path, char *rel_path, off_t *size, + off_t boss_mem, + struct LinkiteM *link_stack, + int flag); + /* @param flag >>> bit0= remove whole sub tree: rm -r bit1= remove empty directory: rmdir diff -Nru libisoburn-1.5.0/xorriso/drive_mgt.c libisoburn-1.5.2/xorriso/drive_mgt.c --- libisoburn-1.5.0/xorriso/drive_mgt.c 2018-09-01 19:13:29.000000000 +0000 +++ libisoburn-1.5.2/xorriso/drive_mgt.c 2019-09-08 10:21:00.000000000 +0000 @@ -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 @@ 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 @@ 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 @@ if(ret==1) { dinfo= in_dinfo; xorriso->outdev_is_exclusive= xorriso->indev_is_exclusive; + xorriso->outdev_access= xorriso->indev_access; } } @@ -360,12 +366,16 @@ } if(flag&1) - if(xorriso->image_start_mode&(1<<31)) /* used up setting */ + 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); @@ -380,7 +390,7 @@ state= isoburn_disc_get_status(drive); Xorriso_process_msg_queues(xorriso,0); if(flag&1) { - if(xorriso->image_start_mode&(1<<31)) /* used up setting */ + if(xorriso->image_start_mode&(1u<<31)) /* used up setting */ xorriso->image_start_mode&= ~0xffff; /* perform auto setting */ if((xorriso->image_start_mode&(1<<30))) { /* if enabled at all */ adr_pt= xorriso->image_start_value; @@ -410,10 +420,10 @@ !!(xorriso->image_start_mode & (1<<16))); if(ret<=0) goto ex; - if(xorriso->image_start_mode&(1<<31)) + if(xorriso->image_start_mode&(1u<<31)) xorriso->image_start_mode= 0; /* disable msc1 setting completely */ else - xorriso->image_start_mode|= (1<<31); /* mark as used up */ + xorriso->image_start_mode|= (1u<<31); /* mark as used up */ } } if(flag&1) { @@ -727,9 +737,9 @@ 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 @@ } 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_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); } @@ -979,7 +990,9 @@ { int num_sessions= 0, num_tracks= 0, lba= 0, nwa= -1, ret; int track_count= 0, session_no, track_no, profile_no= -1, track_size; - int last_track_start= 0, last_track_size= -1, num_data= 0, is_data= 0; + int session_size, first_track_start= 0; + int num_session_data, num_session_other; + int num_data= 0, other_data= 0, is_data= 0; int is_inout_drive= 0, drive_role, status, num_formats, emul_lba; int not_recognizable= 0, start_lba, end_lba; int sessions_seen, open_sessions= 0, have_real_open_session= 0; @@ -1024,6 +1037,25 @@ 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)) @@ -1267,19 +1299,16 @@ } if(!(flag&1)) Xorriso_toc_line(xorriso, flag & 8); - last_track_start= lba; -/* - num_payload= num_data= last_track_size= nwa; -*/ num_sessions= 1; } else { - num_data= 0; + num_data= other_data= 0; sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions); open_sessions= isoburn_toc_disc_get_incmpl_sess(disc); for (session_no= 0; session_no < num_sessions + open_sessions && !(xorriso->request_to_abort); session_no++) { + num_session_data= num_session_other= 0; tracks= isoburn_toc_session_get_tracks(sessions[session_no], &num_tracks); if (tracks == NULL || num_tracks <= 0) continue; @@ -1290,6 +1319,8 @@ track_count++; is_data= 0; isoburn_toc_track_get_entry(tracks[track_no], &toc_entry); + if((toc_entry.control & 7) >= 4) /* data track */ + is_data= 1; if (toc_entry.extensions_valid & 1) { /* DVD extension valid */ lba= toc_entry.start_lba; @@ -1306,9 +1337,9 @@ track_size= burn_msf_to_lba(next_toc_entry.pmin, next_toc_entry.psec, next_toc_entry.pframe) - lba; } - if(flag&(1|4)) + if((flag & (1 | 4)) || !is_data) { ret= 0; - else { + } else { ret= isoburn_toc_track_get_emul(tracks[track_no], &emul_lba, &image_blocks, volume_id, 0); if(ret <= 0) @@ -1348,13 +1379,12 @@ } if(!(flag&1)) Xorriso_toc_line(xorriso, flag & 8); -/* - if(track_no>0) - num_payload+= lba - last_track_start; -*/ - last_track_start= lba; - if((toc_entry.control&7)>=4) /* data track */ - is_data= 1; + if(is_data) + num_session_data+= track_size; + else + num_session_other+= track_size; + if(track_no == 0) + first_track_start= lba; } isoburn_toc_session_get_leadout_entry(sessions[session_no], &toc_entry); if (toc_entry.extensions_valid & 1) { @@ -1362,20 +1392,19 @@ } else { lba= burn_msf_to_lba(toc_entry.pmin, toc_entry.psec, toc_entry.pframe); } - last_track_size= lba - last_track_start; -/* - num_payload+= last_track_size; -*/ - if(is_data) - num_data+= last_track_size; + session_size= lba - first_track_start; + if(num_session_data > 0 && num_session_other > 0) { + num_data+= num_session_data; + other_data+= num_session_other; + } else if(is_data) { + num_data+= session_size; + } else { + other_data+= session_size; + } } } if(xorriso->request_to_abort) {ret= 1; goto ex;} -/* - num_wasted= lba - num_payload; - num_nondata= lba - num_data; -*/ Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1); sessions_seen= num_sessions + open_sessions; @@ -1393,6 +1422,11 @@ sprintf(respt+strlen(respt), "\n"); Xorriso_toc_line(xorriso, flag & 8); + if(other_data > 0) { + sprintf(respt, "Non-data blks: %d\n", other_data); + Xorriso_toc_line(xorriso, flag & 8); + } + if (s==BURN_DISC_APPENDABLE && nwa!=0) { ret= isoburn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa); if(ret>0) { @@ -1413,11 +1447,11 @@ 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); } @@ -2543,8 +2577,7 @@ Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, sev_text, 0); } if(valid && (tag_type == 1 || (tag_type == 4 && pos == lba && lba < 32))){ - if(state->md5_spot_value != Xorriso_read_quality_untesteD && - Xorriso_read_quality_md5_mismatcH <= xorriso->check_media_bad_limit){ + if(state->md5_spot_value != Xorriso_read_quality_untesteD) { ret= Xorriso__add_spot(state, state->md5_start, state->md5_spot_lba - state->md5_start, state->md5_spot_value, 0); if(ret <= 0) diff -Nru libisoburn-1.5.0/xorriso/emulators.c libisoburn-1.5.2/xorriso/emulators.c --- libisoburn-1.5.0/xorriso/emulators.c 2017-11-17 14:29:15.000000000 +0000 +++ libisoburn-1.5.2/xorriso/emulators.c 2019-09-08 08:54:46.000000000 +0000 @@ -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. @@ -55,6 +55,7 @@ "\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 @@ 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) { @@ -430,7 +433,7 @@ /* Perform actions */ Xorriso_option_report_about(xorriso, "NOTE", 0); if(do_version) { - sprintf(xorriso->result_line, "Cdrecord 2.01-Emulation Copyright (C) 2017 see libburnia-project.org xorriso\n"); + sprintf(xorriso->result_line, "Cdrecord 2.01-Emulation Copyright (C) 2019 see libburnia-project.org xorriso\n"); Xorriso_result(xorriso, 1); Xorriso_option_version(xorriso, 0); } @@ -880,7 +883,8 @@ " -isohybrid-gpt-hfsplus Mark El Torito boot image as HFS+ in GPT", " -isohybrid-apm-hfsplus Mark El Torito boot image as HFS+ in APM", " -part_like_isohybrid Mark in MBR, GPT, APM without -isohybrid-mbr", -" -iso_mbr_part_type Set type byte of ISO partition in MBR", +" -iso_mbr_part_type Set type byte or GUID of ISO partition in MBR", +" or type GUID if a GPT ISO partition emerges.", " --gpt_disk_guid GUID Set GPT disk GUID or choose automatic GUID", " -G FILE, -generic-boot FILE Set generic boot image name", " --embedded-boot FILE Alias of -G", @@ -908,7 +912,8 @@ " -chrp-boot Alias of -chrp-boot-part", " -prep-boot-part DISKFILE Set data source for MBR partition type 0x41", " -append_partition NUMBER TYPE FILE", -" Append FILE after image. TYPE is hex: 0x..", +" Append FILE after image. TYPE is hex: 0x.. or", +" a GUID to be used if -appended_part_as_gpt.", " -appended_part_as_gpt mark appended partitions in GPT instead of MBR.", " -appended_part_as_apm mark appended partitions in APM.", " --modification-date=YYYYMMDDhhmmsscc", @@ -1032,8 +1037,7 @@ } ret= 1; ex:; - if(flag & 1) - Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 2); + Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 2); if(fp != NULL && fp != stdin) fclose(fp); if(ret<=0) @@ -1330,7 +1334,7 @@ char *sfe= NULL, *adr= NULL, ra_text[80], *pathspec= NULL, *sort_file= NULL; char *ept, *add_pt, *eff_path= NULL, *indev= NULL, msc[80], *cpt; char *old_root= NULL, *argpt, *hargv[1]; - char *boot_path, partno_text[8], *iso_rr_pt, *disk_pt, *rpt, *wpt; + char *boot_path, partno_text[24], *iso_rr_pt, *disk_pt, *rpt, *wpt; char *rm_merge_args[3], *rr_reloc_dir_pt= NULL; char *sort_weight_args[4], *bless_args[6], *sa_path; @@ -1399,7 +1403,7 @@ continue; if(strcmp(argpt, "-version")==0) { sprintf(xorriso->result_line, -"mkisofs 2.01-Emulation Copyright (C) 2017 see libburnia-project.org xorriso\n" +"mkisofs 2.01-Emulation Copyright (C) 2019 see libburnia-project.org xorriso\n" ); fd= xorriso->dev_fd_1; if(fd<0) @@ -1780,7 +1784,7 @@ /* Memorize command until all pathspecs are processed */ delay_opt_list[delay_opt_count++]= i; if(argv[i] != argpt) - delay_opt_list[delay_opt_count - 1]|= 1<<31; + delay_opt_list[delay_opt_count - 1]|= 1u<<31; i+= arg_count; } else if(strcmp(argpt, "-hfsplus") == 0) { /* was already handled in first argument scan */; @@ -1934,7 +1938,7 @@ strcmp(argpt, "-part_like_isohybrid")==0) { delay_opt_list[delay_opt_count++]= i; if(argv[i] != argpt) - delay_opt_list[delay_opt_count - 1]|= 1<<31; + delay_opt_list[delay_opt_count - 1]|= 1u<<31; } else if(strcmp(argpt, "-b") == 0 || strcmp(argpt, "-eltorito-boot") == 0 || strcmp(argpt, "-eltorito-platform") == 0 || @@ -1964,7 +1968,7 @@ goto not_enough_args; delay_opt_list[delay_opt_count++]= i; if(argv[i] != argpt) - delay_opt_list[delay_opt_count - 1]|= 1<<31; + delay_opt_list[delay_opt_count - 1]|= 1u<<31; i++; } else if(strncmp(argpt, "--modification-date=", 20)==0) { ret= Xorriso_option_volume_date(xorriso, "uuid", argpt + 20, 0); @@ -2440,8 +2444,8 @@ /* After all pathspecs are added: perform delayed options, mostly boot related */ for(j= 0; j < delay_opt_count; j++) { - i= delay_opt_list[j] & ~(1 << 31); - if(delay_opt_list[j] & (1 << 31)) + i= delay_opt_list[j] & ~(1u << 31); + if(delay_opt_list[j] & (1u << 31)) argpt= argv[i] + 1; else argpt= argv[i]; diff -Nru libisoburn-1.5.0/xorriso/iso_img.c libisoburn-1.5.2/xorriso/iso_img.c --- libisoburn-1.5.0/xorriso/iso_img.c 2018-09-12 11:32:47.000000000 +0000 +++ libisoburn-1.5.2/xorriso/iso_img.c 2019-09-29 20:53:19.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2016 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -627,7 +627,7 @@ int Xorriso_append_part_status(struct XorrisO *xorriso, IsoImage *image, char *filter, FILE *fp, int flag) { - int i, is_default; + int i, l, is_default; is_default= (xorriso->appended_as_gpt == 0); sprintf(xorriso->result_line, "-boot_image any appended_part_as=%s\n", @@ -637,8 +637,16 @@ for(i= 0; i < Xorriso_max_appended_partitionS; i++) { if(xorriso->appended_partitions[i] == NULL) continue; - sprintf(xorriso->result_line, "-append_partition %d 0x%2.2x ", - i + 1, (unsigned int) xorriso->appended_part_types[i]); + sprintf(xorriso->result_line, "-append_partition %d ", i + 1); + l= strlen(xorriso->result_line); + if(xorriso->appended_part_gpt_flags[i] & 1) { + Xorriso__format_guid(xorriso->appended_part_type_guids[i], + xorriso->result_line + l, 0); + strcpy(xorriso->result_line + l + 32, " "); + } else { + sprintf(xorriso->result_line + l, "0x%2.2x ", + (unsigned int) xorriso->appended_part_types[i]); + } Text_shellsafe(xorriso->appended_partitions[i], xorriso->result_line, 1); strcat(xorriso->result_line, "\n"); Xorriso_status_result(xorriso, filter, fp, flag & 2); @@ -1654,12 +1662,12 @@ int appended_partition= 0; #endif - int iso_mbr_part_type= -1; + int iso_mbr_part_type= -1, iso_gpt_part_idx= -1; unsigned int prev_pltf= 0; unsigned long int sa_options= 0, partno, id_tag, perms, start_cyl, num_blocks; unsigned long int part_status, part_type, start_block, partition_offset= 0; uint32_t high_block= 0; - char name[24], *textpt, *contentpt, *buf= NULL; + char name[24], *textpt, *contentpt, *buf= NULL, part_type_text[37]; char **lines= NULL; double num[8]; char *cat_path= ""; @@ -1687,6 +1695,7 @@ struct gpt_par { int ptype; /* 0= unknown, 1= gpt-basdat, 2=gpt-hfsplus, 3=EFI */ + uint8_t type_guid[16]; int is_gap; int has_path; char *path; @@ -1942,13 +1951,18 @@ gpts[idx].ptype= 3; /* EFI System Partition */ else gpts[idx].ptype= 0; + Xorriso_parse_guid(xorriso, textpt, gpts[idx].type_guid, 1); } else if(strcmp(name, "GPT start and size :") == 0) { idx= num[0] - 1; if(num[2] > 0) appended_as_gpt= 1; - gpts[idx].start_block= num[1]; - gpts[idx].block_count= num[2]; + start_block= gpts[idx].start_block= num[1]; + num_blocks= gpts[idx].block_count= num[2]; + if(start_block == partition_offset * 4 && + (start_block + num_blocks) >= high_block * 4 && + iso_gpt_part_idx < 0) + iso_gpt_part_idx= idx; } else if(strcmp(name, "GPT partition path :") == 0) { idx= num[0] - 1; @@ -2210,9 +2224,13 @@ } } if(mbr_idx >= mbr_count) { - if(appended_as_gpt == 1) + if(appended_as_gpt == 1) { appended_as_gpt= 2; - sprintf(buf, "-append_partition %d 0x%lx ", idx + 1, part_type); + Xorriso__format_guid(gpts[idx].type_guid, part_type_text, 0); + } else { + sprintf(part_type_text, "0x%lx", part_type); + } + sprintf(buf, "-append_partition %d %s ", idx + 1, part_type_text); Xorriso_add_intvl_adr(xorriso, buf, (uint64_t) num[1], (uint64_t) (num[1] + num[2] - 1.0), "d", imported_iso); @@ -2484,13 +2502,23 @@ sprintf(buf, "-boot_image any iso_mbr_part_type=0x%2.2x", (unsigned int) iso_mbr_part_type); Xorriso_record_cmd_linE + + } else if(iso_gpt_part_idx >= 0) { + if(mkisofs) + sprintf(buf, "-iso_mbr_part_type "); + else + sprintf(buf, "-boot_image any iso_mbr_part_type="); + Xorriso__format_guid(gpts[iso_gpt_part_idx].type_guid, buf + strlen(buf), + 0); + Xorriso_record_cmd_linE + } /* Issue commands related to El Torito */ if(elto_count <= 0) goto after_el_torito; - if(efi_boot_part) { + if(efi_boot_part == 1) { if(mkisofs) sprintf(buf, "-efi-boot-part --efi-boot-image"); else @@ -2565,7 +2593,7 @@ (unsigned long) mbrpts[i].block_count); et_imgs[idx].path= app_pseudo_paths[idx]; } - if (et_imgs[idx].path[0] == 0) { + if (et_imgs[idx].path[0] == 0 && efi_boot_part != 2) { for(i= 0; i < gpt_count; i++) { if(have_protective_msdos && ( gpts[i].start_block == ((uint64_t) et_imgs[idx].lba) * 4 && diff -Nru libisoburn-1.5.0/xorriso/iso_manip.c libisoburn-1.5.2/xorriso/iso_manip.c --- libisoburn-1.5.0/xorriso/iso_manip.c 2017-11-15 10:02:48.000000000 +0000 +++ libisoburn-1.5.2/xorriso/iso_manip.c 2019-09-01 07:19:45.000000000 +0000 @@ -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. @@ -365,7 +365,7 @@ char *name, *img_name, *srcpt, *stbuf_src= ""; struct stat stbuf, hstbuf; dev_t dir_dev; - struct LinkiteM *own_link_stack; + struct LinkiteM *own_link_stack = NULL; char *sfe= NULL, *sfe2= NULL; char *disk_path= NULL, *img_path= NULL, *link_target= NULL; @@ -871,6 +871,13 @@ apt= npt= path; if(!(flag & (1 | 1024))) { + if(disk_path[0] == 0) { + Xorriso_msgs_submit(xorriso, 0, "/", 0, "ERRFILE", 0); + sprintf(xorriso->info_text, + "Will not graft-in the whole local filesystem by path '/'"); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + {ret= 0; goto ex;} + } ret= lstat(disk_path, &stbuf); if(ret!=-1) { if(S_ISDIR(stbuf.st_mode)) @@ -1584,7 +1591,7 @@ if(sub_path!=NULL) free(sub_path); Xorriso_findi_iter(xorriso, (IsoDir *) victim_node, &mem, &iter, - &node_array, &node_count, &node_idx, &node, (1<<31)); + &node_array, &node_count, &node_idx, &node, (1u<<31)); return(ret); } @@ -2092,7 +2099,8 @@ if(ret<=0) goto ex; } - ret= iso_node_set_acl_text(node, access_text, default_text, 0); + ret= iso_node_set_acl_text(node, access_text, default_text, 4); + Xorriso_process_msg_queues(xorriso,0); if(ret <= 0) { Xorriso_report_iso_error(xorriso, "", ret, "Error when setting ACL to image node", @@ -2107,7 +2115,6 @@ Xorriso_set_change_pending(xorriso, 0); ret= 1; ex:; - Xorriso_process_msg_queues(xorriso,0); return(ret); } @@ -2582,7 +2589,7 @@ } } - if(flag&(1<<31)) { + if(flag&(1u<<31)) { if(*node_count>=0 && *node_array!=NULL) { for(i= 0; i<*node_count; i++) iso_node_unref((*node_array)[i]); @@ -2597,7 +2604,7 @@ } } - if(flag&(1|(1<<31))) + if(flag&(1|(1u<<31))) return(1); if(*node_count>=0) { /* return next node_array element */ @@ -3545,7 +3552,7 @@ Xorriso_process_msg_queues(xorriso,0); Xorriso_findi_iter(xorriso, dir_node, &mem, &iter, &node_array, &node_count, - &node_idx, &node, (1<<31)); + &node_idx, &node, (1u<<31)); if(ret<=0) return(ret); if(deleted) diff -Nru libisoburn-1.5.0/xorriso/iso_tree.c libisoburn-1.5.2/xorriso/iso_tree.c --- libisoburn-1.5.0/xorriso/iso_tree.c 2017-11-15 10:04:12.000000000 +0000 +++ libisoburn-1.5.2/xorriso/iso_tree.c 2019-10-11 10:42:02.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2016 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -495,7 +495,7 @@ /* @param flag bit0= in_node is valid, do not resolve iso_adr bit2= recognize and parse split parts despite - xorrio->split_size <= 0 + xorriso->split_size <= 0 */ int Xorriso_identify_split(struct XorrisO *xorriso, char *iso_adr, void *in_node, @@ -627,6 +627,8 @@ /* @param flag bit0= node is valid, do not resolve path bit1= insist in complete collection of part files + bit2= recognize and parse split parts despite + xorriso->split_size <= 0 */ int Xorriso_is_split(struct XorrisO *xorriso, char *path, void *node, int flag) @@ -636,7 +638,7 @@ struct stat stbuf; ret= Xorriso_identify_split(xorriso, path, node, &split_parts, - &split_count, &stbuf, flag & 3); + &split_count, &stbuf, flag & 7); if(split_parts!=NULL) Splitparts_destroy(&split_parts, split_count, 0); return(ret>0); @@ -1400,6 +1402,8 @@ /* @param flag bit0= do not only sum up sizes but also print subdirs + + bit2= do not report result by Xorriso_result() */ int Xorriso_show_du_subs(struct XorrisO *xorriso, IsoDir *dir_node, char *abs_path, char *rel_path, off_t *size, @@ -1516,13 +1520,15 @@ report_size= sub_size/1024; if(report_size*1024sh_style_result) - sprintf(xorriso->result_line, "%-7.f ",(double) (report_size)); - else - sprintf(xorriso->result_line, "%7.f ",(double) (report_size)); - sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", - Xorriso_esc_filepath(xorriso, show_path, sfe, 0)); - Xorriso_result(xorriso, 0); + if(!(flag & 4)) { + if(xorriso->sh_style_result) + sprintf(xorriso->result_line, "%-7.f ",(double) (report_size)); + else + sprintf(xorriso->result_line, "%7.f ",(double) (report_size)); + sprintf(xorriso->result_line+strlen(xorriso->result_line), "%s\n", + Xorriso_esc_filepath(xorriso, show_path, sfe, 0)); + Xorriso_result(xorriso, 0); + } } ret= 1; ex:; @@ -1843,6 +1849,41 @@ return(ret); } + +/* + @return: <=0 = error, 1= directory tree, 2= path leads to non-directory +*/ +int Xorriso_get_dus(struct XorrisO *xorriso, char *iso_rr_path, off_t *size, + off_t boss_mem, int flag) +{ + int ret; + IsoNode *node; + char *path= NULL; + struct stat stbuf; + + Xorriso_alloc_meM(path, char, SfileadrL); + + ret= Xorriso_make_abs_adr(xorriso, xorriso->wdi, iso_rr_path, path, + 1 | 2 | 4); + if(ret <= 0) + goto ex; + ret= Xorriso_fake_stbuf(xorriso, path, &stbuf, &node, 0); + if(ret <= 0) + goto ex; + if(!S_ISDIR(stbuf.st_mode)) { + *size= stbuf.st_size; + ret= 2; goto ex; + } + ret= Xorriso_show_du_subs(xorriso, (IsoDir *) node, path, iso_rr_path, size, + boss_mem, 4); + if(ret <= 0) + goto ex; + ret= 1; +ex: + Xorriso_free_meM(path); + return(ret); +} + /* This function needs less buffer memory than Xorriso_ls_filev() but cannot perform structured pattern matching as done by Xorriso_expand_pattern() diff -Nru libisoburn-1.5.0/xorriso/lib_mgt.c libisoburn-1.5.2/xorriso/lib_mgt.c --- libisoburn-1.5.0/xorriso/lib_mgt.c 2016-11-13 08:29:14.000000000 +0000 +++ libisoburn-1.5.2/xorriso/lib_mgt.c 2019-04-18 09:24:30.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2016 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -979,26 +979,14 @@ return(ret); } + int Xorriso_format_guid(struct XorrisO *xorriso, uint8_t guid[16], char *line, int flag) { - int i; - line[0]= 0; - for(i= 3; i >= 0; i--) - sprintf(line + strlen(line), "%-2.2x", guid[i]); - sprintf(line + strlen(line), "-"); - for(i= 5; i >= 4; i--) - sprintf(line + strlen(line), "%-2.2x", guid[i]); - sprintf(line + strlen(line), "-"); - for(i= 7; i >= 6; i--) - sprintf(line + strlen(line), "%-2.2x", guid[i]); - sprintf(line + strlen(line), "-"); - for(i= 8; i < 10; i++) - sprintf(line + strlen(line), "%-2.2x", guid[i]); - sprintf(line + strlen(line), "-"); - for(i= 10; i < 16; i++) - sprintf(line + strlen(line), "%-2.2x", guid[i]); + /* >>> Maybe let the user switch between hex string and structured text */; + + Xorriso__format_guid(guid, line, 1); return(1); } @@ -1013,3 +1001,18 @@ return(ret); } + +int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag) +{ + int ret; + time_t now; + + if(xorriso->do_override_now_time) { + now= xorriso->now_time_override; + ret= iso_nowtime(&now, 1); + } else { + ret= iso_nowtime(&now, 0); + } + return(ret); +} + diff -Nru libisoburn-1.5.0/xorriso/match.c libisoburn-1.5.2/xorriso/match.c --- libisoburn-1.5.0/xorriso/match.c 2016-12-05 13:33:08.000000000 +0000 +++ libisoburn-1.5.2/xorriso/match.c 2019-09-01 07:16:58.000000000 +0000 @@ -113,8 +113,7 @@ if(adr_part[0]==0) goto next_adr_part; - if(adr_part[0]=='.' && adr_part[1]==0 && - (xorriso->re_fill>0 || iinfo_text, 0, "FAILURE",0); {ret= 0; goto ex;} } + if(xorriso->re_fill == 0 && is_still_relative) { + /* "." and its equivalents end up here */ + if(Sregex_string(&(xorriso->re_constants[0]), ".", 0) <=0) + {ret= -1; goto ex;} + xorriso->re_fill= 1; + } Xorriso__bourne_to_reg(adr_start,xorriso->reg_expr,0); /* just for show */ diff -Nru libisoburn-1.5.0/xorriso/misc_funct.c libisoburn-1.5.2/xorriso/misc_funct.c --- libisoburn-1.5.0/xorriso/misc_funct.c 2016-12-05 13:33:36.000000000 +0000 +++ libisoburn-1.5.2/xorriso/misc_funct.c 2019-02-18 12:17:20.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2012 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -1334,3 +1334,36 @@ return(1); } + +/* @param text takes result, must provide at least 37 characters of storage + @param flag bit0= structured text format (else hex string) +*/ +int Xorriso__format_guid(uint8_t guid[16], char *text, int flag) +{ + int i; + + if(flag & 1) { + /* Structured text */ + text[0]= 0; + for(i= 3; i >= 0; i--) + sprintf(text + strlen(text), "%-2.2x", (unsigned int) guid[i]); + sprintf(text + strlen(text), "-"); + for(i= 5; i >= 4; i--) + sprintf(text + strlen(text), "%-2.2x", (unsigned int) guid[i]); + sprintf(text + strlen(text), "-"); + for(i= 7; i >= 6; i--) + sprintf(text + strlen(text), "%-2.2x", (unsigned int) guid[i]); + sprintf(text + strlen(text), "-"); + for(i= 8; i <= 9; i++) + sprintf(text + strlen(text), "%-2.2x", (unsigned int) guid[i]); + sprintf(text + strlen(text), "-"); + for(i= 10; i <= 15; i++) + sprintf(text + strlen(text), "%-2.2x", (unsigned int) guid[i]); + } else { + /* Plain hex string */ + for(i= 0; i < 16; i++) + sprintf(text + i * 2, "%-2.2x", (unsigned int) guid[i]); + } + return(1); +} + diff -Nru libisoburn-1.5.0/xorriso/misc_funct.h libisoburn-1.5.2/xorriso/misc_funct.h --- libisoburn-1.5.0/xorriso/misc_funct.h 2016-12-05 13:33:22.000000000 +0000 +++ libisoburn-1.5.2/xorriso/misc_funct.h 2019-02-18 12:16:53.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2012 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -14,6 +14,14 @@ #include +#ifdef HAVE_STDINT_H +#include +#else +#ifdef HAVE_INTTYPES_H +#include +#endif +#endif + char *Text_shellsafe(char *in_text, char *out_text, int flag); @@ -101,5 +109,10 @@ int Xorriso__exchange_prefix(char *source_prefix, char *target_prefix, char *eff_source, char *eff_target, int flag); +/* @param text takes result, must provide at least 37 characters of storage + @param flag bit0= structured text format (else hex string) +*/ +int Xorriso__format_guid(uint8_t guid[16], char *text, int flag); + #endif /* ! Xorriso_pvt_misc_includeD */ diff -Nru libisoburn-1.5.0/xorriso/opts_a_c.c libisoburn-1.5.2/xorriso/opts_a_c.c --- libisoburn-1.5.0/xorriso/opts_a_c.c 2017-02-27 09:34:41.000000000 +0000 +++ libisoburn-1.5.2/xorriso/opts_a_c.c 2019-10-11 10:41:18.000000000 +0000 @@ -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. @@ -295,9 +295,10 @@ int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text, char *type_text, char *image_path, int flag) { - int partno = 0, type_code= -1, i; + int partno = 0, type_code= -1, i, guid_valid= 0, ret; unsigned int unum; char *tpt; + uint8_t guid[16]; static char *part_type_names[] = {"FAT12", "FAT16", "Linux", "", NULL}; static int part_type_codes[] = { 0x01, 0x06, 0x83, 0x00}; @@ -315,6 +316,12 @@ if(part_type_names[i] != NULL) type_code= part_type_codes[i]; if(type_code < 0) { + ret= Xorriso_parse_type_guid(xorriso, type_text, guid, &type_code, 0); + if(ret > 0) + guid_valid= 1; + } + + if(type_code < 0) { tpt= type_text; if(strncmp(tpt, "0x", 2) == 0) tpt+= 2; @@ -325,7 +332,7 @@ if(unum > 0xff) { bad_type:; sprintf(xorriso->info_text, - "-append_partition: Partition type '%s' is out of range (0x00...0xff)", +"-append_partition: Partition type '%s' is out of range (0x00...0xff or GUID)", type_text); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); @@ -341,6 +348,12 @@ return(-1); } xorriso->appended_part_types[partno - 1]= type_code; + if(guid_valid) { + memcpy(xorriso->appended_part_type_guids[partno - 1], guid, 16); + xorriso->appended_part_gpt_flags[partno - 1]|= 1; + } else { + xorriso->appended_part_gpt_flags[partno - 1]&= ~1; + } return(1); } @@ -683,7 +696,7 @@ char *treatment, int flag) { int was_ok= 1, ret, isolinux_grub= 0, count, bin_count, parm_len; - int palohdrversion; + int palohdrversion, type_code; unsigned int u; char *formpt, *treatpt, *eff_path= NULL, *eqpt, parm[20]; uint8_t sn[8]; @@ -834,6 +847,14 @@ xorriso->boot_efi_default= 0; } else if(strncmp(treatpt, "bin_path=", 9) == 0) { if(strncmp(treatpt + 9, "--interval:appended_partition_", 30) == 0) { + if(strlen(treatpt + 9) >= sizeof(xorriso->boot_image_bin_path)) { +interval_text_long:; + sprintf(xorriso->info_text, + "-boot_image: --interval text is much too long (%d)", + (int) strlen(treatpt + 9)); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + ret= 0; goto ex; + } strcpy(xorriso->boot_image_bin_path, treatpt + 9); } else { ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 9, @@ -858,6 +879,8 @@ xorriso->boot_efi_default= 0; } else if(strncmp(treatpt, "efi_path=", 9) == 0) { if(strncmp(treatpt + 9, "--interval:appended_partition_", 30) == 0) { + if(strlen(treatpt + 9) >= sizeof(xorriso->boot_image_bin_path)) + goto interval_text_long; strcpy(xorriso->boot_image_bin_path, treatpt + 9); } else { ret= Xorriso_normalize_img_path(xorriso, xorriso->wdi, treatpt + 9, @@ -1097,6 +1120,7 @@ } else if(strncmp(treatpt, "iso_mbr_part_type=", 18) == 0) { ret= 256; + xorriso->iso_mbr_part_flag&= ~1; if(strncmp(treatpt + 18, "default", 2) == 0) { ret= -1; } else if(strncmp(treatpt + 18, "0x", 2) == 0) { @@ -1104,8 +1128,16 @@ sscanf(treatpt + 20, "%x", &u); ret= u; } else { - sscanf(treatpt + 18, "%d", &ret); + ret= Xorriso_parse_type_guid(xorriso, treatpt + 18, + xorriso->iso_gpt_type_guid, &type_code, 0); + if(ret > 0) { + ret= type_code; + xorriso->iso_mbr_part_flag|= 1; + } else { + sscanf(treatpt + 18, "%d", &ret); + } } + if(ret < -1 || ret > 0xff) { sprintf(xorriso->info_text, "-boot_image %s : iso_mbr_part_type='%s' wrong (\"default\", 0 ... 255, 0x00 ... 0xff)", @@ -2649,7 +2681,7 @@ /* only allow directories if they actually represent split data files */ ret= 0; if(xorriso->do_concat_split) - ret= Xorriso_is_split(xorriso, eff_origin, NULL, 0); + ret= Xorriso_is_split(xorriso, eff_origin, NULL, 4); if(ret<0) goto problem_handler; if(ret==0) { diff -Nru libisoburn-1.5.0/xorriso/opts_d_h.c libisoburn-1.5.2/xorriso/opts_d_h.c --- libisoburn-1.5.0/xorriso/opts_d_h.c 2017-10-23 09:58:55.000000000 +0000 +++ libisoburn-1.5.2/xorriso/opts_d_h.c 2019-09-07 18:48:09.000000000 +0000 @@ -257,6 +257,43 @@ } +/* 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) @@ -1390,15 +1427,15 @@ if(deleter && !(flag&2)) Xorriso_pacifier_callback(xorriso, "iso_rr_paths deleted", xorriso->pacifier_count, 0, "", 1|2); - else if(first_job->action == 28 && !(flag&2)) + else if(first_job != NULL && first_job->action == 28 && !(flag&2)) Xorriso_pacifier_callback(xorriso, "file filters processed", xorriso->pacifier_count, 0, "", 1 | 2); else if(mem_lut!=xorriso->last_update_time && mem_lut!=0.0 && !(flag&2)) Xorriso_pacifier_callback(xorriso, "content bytes read", xorriso->pacifier_count, 0, "", 1 | 8 | 32); - if(first_job->action == 35 && !(flag & 1)) + if(first_job != NULL && first_job->action == 35 && !(flag & 1)) Xorriso_report_md5_outcome(xorriso, first_job->target, 0); - if(first_job->action == 40) { + if(first_job != NULL && first_job->action == 40) { sprintf(xorriso->result_line,"Size lower : %lus\n", (unsigned long) (first_job->estim_lower_size / (off_t) 2048)); Xorriso_result(xorriso,0); @@ -1737,13 +1774,16 @@ " -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.", @@ -1787,6 +1827,10 @@ " -ecma119_map \"unmapped\"|\"stripped\"|\"uppercase\"|\"lowercase\"", " Choose conversion of file names if neither Rock Ridge", " nor Joliet is present in the loaded ISO session.", +" -iso_nowtime \"dynamic\"|timestring", +" Choose use of current time or a fixed point in time for", +" timestamps where libisofs would normally use the current", +" (i.e. dynamic) time.", " -disk_dev_ino \"on\"|\"ino_only\"|\"off\"", " Enable or disable recording of disk file dev_t and ino_t", " and their use in file comparison.", diff -Nru libisoburn-1.5.0/xorriso/opts_i_o.c libisoburn-1.5.2/xorriso/opts_i_o.c --- libisoburn-1.5.0/xorriso/opts_i_o.c 2016-12-14 09:13:03.000000000 +0000 +++ libisoburn-1.5.2/xorriso/opts_i_o.c 2019-04-18 09:24:03.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2015 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -29,6 +29,35 @@ #include "xorrisoburn.h" +/* Command -iso_nowtime "dynamic"|timespec */ +int Xorriso_option_iso_nowtime(struct XorrisO *xorriso, char *text, int flag) +{ + char *time_type = "m"; + int t_type= 0, ret; + time_t t; + + if(strcmp(text, "dynamic") == 0) { + xorriso->do_override_now_time= 0; + Xorriso_set_libisofs_now(xorriso, 2); + Xorriso_msgs_submit(xorriso, 0, "-iso_nowtime: Set to \"dynamic\"", 0, + "NOTE", 0); + return(1); + } + ret= Xorriso_convert_datestring(xorriso, "-iso_nowtime", time_type, text, + &t_type, &t, 0); + if(ret<=0) + goto ex; + xorriso->do_override_now_time= 1; + xorriso->now_time_override= t; + Xorriso_set_libisofs_now(xorriso, 1); + sprintf(xorriso->info_text, "-iso_nowtime: Set to =%.f", (double) t); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); + ret= 1; +ex:; + return(ret); +} + + /* Option -iso_rr_pattern "on"|"ls"|"off" */ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode,int flag) { diff -Nru libisoburn-1.5.0/xorriso/opts_p_z.c libisoburn-1.5.2/xorriso/opts_p_z.c --- libisoburn-1.5.0/xorriso/opts_p_z.c 2017-11-15 10:11:59.000000000 +0000 +++ libisoburn-1.5.2/xorriso/opts_p_z.c 2019-08-14 09:23:11.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2017 Thomas Schmitt, + Copyright 2007-2018 Thomas Schmitt, Provided under GPL version 2 or later. @@ -218,8 +218,7 @@ xorriso->allow_graft_points= allow_graft_points_mem; Sfile_make_argv("", "", &argc, &argv, 2); Xorriso_free_meM(pathspec); - if(flag & 1) - Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 2); + Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 2); if(fp != NULL && fp != stdin) fclose(fp); @@ -694,7 +693,7 @@ ret= Xorriso_give_up_drive(xorriso, 1|8); if(ret<=0) goto ex; - xorriso->image_start_mode&= ~(1<<31); /* reactivate eventual -load address */ + xorriso->image_start_mode&= ~(1u<<31); /* reactivate eventual -load address */ ret= Xorriso_option_dev(xorriso, indev, 1|4); ex:; Xorriso_free_meM(indev); @@ -831,12 +830,13 @@ int Xorriso_option_setfacl_listi(struct XorrisO *xorriso, char *path, int flag) { int ret, eaten, line_size; - size_t buf_size= 0, buf_add= 64 * 1024, l, linecount= 0; + size_t buf_size= 0, buf_add, l, linecount= 0, diff_buf_wpt; char *line= NULL, *buf= NULL, *wpt, *new_buf, limit_text[80]; char *file_path= NULL, *uid= NULL, *gid= NULL; FILE *fp= NULL; line_size= SfileadrL * 4; + buf_add= line_size * 4; Xorriso_alloc_meM(line, char, line_size); Xorriso_alloc_meM(file_path, char, SfileadrL); Xorriso_alloc_meM(uid, char, 161); @@ -923,11 +923,13 @@ Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); ret= 0; goto ex; } + diff_buf_wpt= wpt - buf; buf_size+= buf_add; new_buf= realloc(buf, buf_size); if(new_buf == NULL) goto out_of_mem; buf= new_buf; + wpt= buf + diff_buf_wpt; } memcpy(wpt, line, l); *(wpt + l)= '\n'; @@ -989,9 +991,11 @@ ret= Xorriso_normalize_acl_text(xorriso, acl_text, &access_acl_text, &default_acl_text, 0); if(access_acl_text != NULL && default_acl_text != NULL) { - sprintf(xorriso->info_text, "Access-ACL :\n%s", access_acl_text); + strcpy(xorriso->info_text, "Access-ACL :\n"); + Xorriso_set_info_text(xorriso, access_acl_text, 2000, 1); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); - sprintf(xorriso->info_text, "Default-ACL :\n%s", default_acl_text); + strcpy(xorriso->info_text, "Default-ACL :\n"); + Xorriso_set_info_text(xorriso, default_acl_text, 2000, 1); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); } else if(access_acl_text == NULL && default_acl_text == NULL) { sprintf(xorriso->info_text, "Will delete Access-ACL and Default-ACL"); @@ -1989,7 +1993,7 @@ sprintf(xorriso->result_line, "ISO 9660 Rock Ridge filesystem manipulator and CD/DVD/BD burn program\n"); sprintf(xorriso->result_line+strlen(xorriso->result_line), -"Copyright (C) 2017, Thomas Schmitt , libburnia project.\n"); +"Copyright (C) 2019, Thomas Schmitt , libburnia project.\n"); Xorriso_result(xorriso, 0); sprintf(xorriso->result_line, "xorriso version : %d.%d.%d%s\n", diff -Nru libisoburn-1.5.0/xorriso/parse_exec.c libisoburn-1.5.2/xorriso/parse_exec.c --- libisoburn-1.5.0/xorriso/parse_exec.c 2017-10-23 09:58:37.000000000 +0000 +++ libisoburn-1.5.2/xorriso/parse_exec.c 2019-09-07 18:47:17.000000000 +0000 @@ -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. @@ -97,7 +97,7 @@ else do_expand= (xorriso->do_iso_rr_pattern==1 && !(flag&4)) || (flag & 512); if(flag&256) { - if(*optv < argv || (*optv >= argv + argc && argc > 0)) + if(argv == NULL || *optv < argv || (*optv >= argv + argc && argc > 0)) Sfile_destroy_argv(optc, optv, 0); return(1); } @@ -121,6 +121,7 @@ *optc= *end_idx - idx; *optv= NULL; if(*optc<=0 || !do_expand) { +copy_args:; if(*optc > 0) { Xorriso_alloc_meM(*optv, char *, *optc); for(i= 0; i < *optc; i++) { @@ -153,7 +154,7 @@ } if(nump<=0) { /* Only empty texts. May the caller get happy with them. */ free(patterns); - return(1); + goto copy_args; } if(flag&2) ret= Xorriso_expand_disk_pattern(xorriso, nump, patterns, was_empty, @@ -540,8 +541,8 @@ "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", - "iso_rr_pattern","file_name_limit","follow","format","fs", + "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", "list_delimiter","list_extras","list_profiles","local_charset", @@ -683,18 +684,21 @@ "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", - "scsi_dev_family", + "data_cache_size", + "scsi_dev_family", "iso_nowtime", "* Character sets:", "charset", "local_charset", @@ -1254,6 +1258,10 @@ (*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); @@ -1406,6 +1414,10 @@ (*idx)++; ret= Xorriso_option_charset(xorriso, arg1, 1); + } else if(strcmp(cmd,"iso_nowtime")==0) { + (*idx)++; + ret= Xorriso_option_iso_nowtime(xorriso, arg1, 0); + } else if(strcmp(cmd,"iso_rr_pattern")==0) { (*idx)++; ret= Xorriso_option_iso_rr_pattern(xorriso, arg1, 0); @@ -2574,7 +2586,10 @@ */ int Xorriso_source_date_epoch(struct XorrisO *xorriso, int flag) { - char *sec_text, double_text[40]; + /* num_text must be able to take the sprintf output of "%.f". + num_text + 12 must be able to take "%d" with a 64 bit int. + */ + char *sec_text, num_text[40]; double dsec= -1.0; time_t tsec; struct tm *gmt; @@ -2584,10 +2599,10 @@ return(2); sscanf(sec_text, "%lf", &dsec); - sprintf(double_text, "%.f", dsec); + sprintf(num_text, "%.f", dsec); tsec= dsec; if(dsec < 0 || ((double) tsec) != dsec || - strcmp(sec_text, double_text) != 0) { + strcmp(sec_text, num_text) != 0) { malformed:; Xorriso_msgs_submit(xorriso, 0, "Malformed environment variable SOURCE_DATE_EPOCH encountered", @@ -2600,11 +2615,21 @@ gmt= gmtime(&tsec); if(gmt == NULL) goto malformed; - sprintf(xorriso->vol_uuid, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d00", - 1900 + gmt->tm_year, gmt->tm_mon + 1, gmt->tm_mday, - gmt->tm_hour, gmt->tm_min, gmt->tm_sec); + + sprintf(num_text, "%4.4d", 1900 + gmt->tm_year); + sprintf(num_text + 4, "%2.2d", gmt->tm_mon + 1); + sprintf(num_text + 6, "%2.2d", gmt->tm_mday); + sprintf(num_text + 8, "%2.2d", gmt->tm_hour); + sprintf(num_text + 10, "%2.2d", gmt->tm_min); + sprintf(num_text + 12, "%2.2d", gmt->tm_sec); + strcpy(num_text + 14, "00"); + strcpy(xorriso->vol_uuid, num_text); xorriso->gpt_guid_mode= 2; /* Disk GUID from vol_uuid */ strcpy(xorriso->all_file_dates, "set_to_mtime"); + xorriso->do_override_now_time= 1; + xorriso->now_time_override= tsec; + Xorriso_set_libisofs_now(xorriso, 0); + sprintf(xorriso->info_text, "Environment variable SOURCE_DATE_EPOCH encountered with value %s", sec_text); @@ -2617,8 +2642,12 @@ xorriso->all_file_dates); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); sprintf(xorriso->info_text, - "SOURCE_DATE_EPOCH : -boot_image any volume_date_uuid"); + "SOURCE_DATE_EPOCH : -boot_image any gpt_disk_guid=volume_date_uuid"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); + sprintf(xorriso->info_text, + "SOURCE_DATE_EPOCH : -iso_nowtime =%.f", (double) tsec); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0); + return(1); } diff -Nru libisoburn-1.5.0/xorriso/README_gnu_xorriso libisoburn-1.5.2/xorriso/README_gnu_xorriso --- libisoburn-1.5.0/xorriso/README_gnu_xorriso 2018-09-15 13:47:28.000000000 +0000 +++ libisoburn-1.5.2/xorriso/README_gnu_xorriso 2019-10-26 18:09:27.000000000 +0000 @@ -4,7 +4,7 @@ GNU xorriso. By Thomas Schmitt Derived from and supported by libburnia-project.org, published via: http://www.gnu.org/software/xorriso/xorriso_eng.html -http://www.gnu.org/software/xorriso/xorriso-1.5.0.tar.gz +http://www.gnu.org/software/xorriso/xorriso-1.5.2.tar.gz Provided under GPL version 3 or later. No warranty. ------------------------------------------------------------------------------ @@ -49,10 +49,10 @@ If they were present at compile time, then the optional libraries have to be present at runtime, too. -Obtain xorriso-1.5.0.tar.gz, take it to a directory of your choice and do: +Obtain xorriso-1.5.2.tar.gz, take it to a directory of your choice and do: - tar xzf xorriso-1.5.0.tar.gz - cd xorriso-1.5.0 + tar xzf xorriso-1.5.2.tar.gz + cd xorriso-1.5.2 Within that directory execute: @@ -378,9 +378,9 @@ This binary is very lean but depends on properly installed libraries of suitable revision. -Dynamic library and compile time header requirements for libisoburn-1.5.0 : -- libburn.so.4 , version libburn-1.5.0 or higher -- libisofs.so.6 , version libisofs-1.5.0 or higher +Dynamic library and compile time header requirements for libisoburn-1.5.2 : +- libburn.so.4 , version libburn-1.5.2 or higher +- libisofs.so.6 , version libisofs-1.5.2 or higher libisoburn and xorriso will not start with libraries which are older than their headers seen at compile time. So compile in the oldest possible installation setup unless you have reason to enforce a newer bug fix level. @@ -504,7 +504,7 @@ Vreixo Formoso , libisofs, libisoburn Thomas Schmitt , libburn, libisofs, libisoburn, xorriso -Copyright (C) 2006-2018 Mario Danic, Vreixo Formoso, Thomas Schmitt. +Copyright (C) 2006-2019 Mario Danic, Vreixo Formoso, Thomas Schmitt. libburnia-project.org is inspired by and in libburn still containing parts of old @@ -520,7 +520,7 @@ ------------------------------------------------------------------------------ This text itself is -Copyright (c) 2007 - 2018 Thomas Schmitt +Copyright (c) 2007 - 2019 Thomas Schmitt and is freely distributable. 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 diff -Nru libisoburn-1.5.0/xorriso/read_run.c libisoburn-1.5.2/xorriso/read_run.c --- libisoburn-1.5.0/xorriso/read_run.c 2017-10-23 10:05:01.000000000 +0000 +++ libisoburn-1.5.2/xorriso/read_run.c 2019-10-11 10:42:46.000000000 +0000 @@ -2,7 +2,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2015 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -1062,7 +1062,7 @@ if(LIBISO_ISDIR(node) && xorriso->do_concat_split) leaf_is_split= Xorriso_identify_split(xorriso, img_path, node, - &split_parts, &split_count, &stbuf, 1|2); + &split_parts, &split_count, &stbuf, 1 | 4); if(leaf_is_split) { /* map all files in directory img_path into regular file disk_path */ @@ -1437,7 +1437,7 @@ source_is_dir= 1; source_is_split= 0; if(source_is_dir) - source_is_split= Xorriso_is_split(xorriso, img_path, node, 1|2); + source_is_split= Xorriso_is_split(xorriso, img_path, node, 1 | 2 | 4); if(source_is_split) do_not_dive= 1; @@ -1509,7 +1509,7 @@ if(link_target!=NULL) free(link_target); Xorriso_findi_iter(xorriso, dir, &mem, &iter, &node_array, &node_count, - &node_idx, &node, (1<<31)); + &node_idx, &node, (1u<<31)); Xorriso_process_msg_queues(xorriso,0); @@ -1627,7 +1627,7 @@ ret= 0; goto ex; } if(is_dir && xorriso->do_concat_split) - leaf_is_split= Xorriso_is_split(xorriso, img_path, node, 1|2); + leaf_is_split= Xorriso_is_split(xorriso, img_path, node, 1 | 2 | 4); } for(npt= apt; !done; apt= npt+1) { npt= strchr(apt, '/'); diff -Nru libisoburn-1.5.0/xorriso/text_io.c libisoburn-1.5.2/xorriso/text_io.c --- libisoburn-1.5.0/xorriso/text_io.c 2017-11-16 11:42:11.000000000 +0000 +++ libisoburn-1.5.2/xorriso/text_io.c 2019-09-29 20:55:02.000000000 +0000 @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2016 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -725,8 +725,11 @@ if(*argv == NULL) {ret= -1; goto ex;} (*argv)[0]= strdup(line); - if((*argv)[0] == NULL) + if((*argv)[0] == NULL) { + free(*argv); + (*argv)= NULL; {ret= -1; goto ex;} + } *argc= 1; } ret= 1; @@ -2055,6 +2058,8 @@ 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}, @@ -2768,6 +2773,7 @@ { 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; @@ -3067,11 +3073,15 @@ is_default= (xorriso->iso_mbr_part_type == -1); sprintf(line, "-boot_image any iso_mbr_part_type="); - if(xorriso->iso_mbr_part_type == -1) + if(xorriso->iso_mbr_part_flag & 1) { + Xorriso__format_guid(xorriso->iso_gpt_type_guid, line + strlen(line), 0); + strcat(line, "\n"); + } else if(xorriso->iso_mbr_part_type == -1) { sprintf(line + strlen(line), "default\n"); - else + } else { sprintf(line + strlen(line), "0x%-2.2x\n", (unsigned int) xorriso->iso_mbr_part_type); + } if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); @@ -3209,6 +3219,14 @@ if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); + is_default= (xorriso->do_override_now_time == 0); + if(xorriso->do_override_now_time) + sprintf(line, "-iso_nowtime =%.f\n", (double) xorriso->now_time_override); + else + sprintf(line, "-iso_nowtime dynamic\n"); + if(!(is_default && no_defaults)) + Xorriso_status_result(xorriso, filter, fp, flag & 2); + is_default= (xorriso->do_iso_rr_pattern==1); sprintf(line,"-iso_rr_pattern %s\n", (xorriso->do_iso_rr_pattern == 1 ? "on" : @@ -3799,13 +3817,20 @@ } } + 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); @@ -3818,43 +3843,52 @@ 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); } } @@ -4031,7 +4065,7 @@ { if(len>=SfileadrL || (flag&2)) { sprintf(xorriso->info_text, - "Path given for %s is much too long (%d)", + "Path given for file in %s is much too long (%d)", ((flag&1) ? "local filesystem" : "ISO image"), len); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(0); @@ -4695,3 +4729,27 @@ return(out_text); } + +/* @param flag bit=add to existing info_text +*/ +int Xorriso_set_info_text(struct XorrisO *xorriso, char *text, + size_t trunc_len, int flag) +{ + size_t offst= 0, maxl; + + maxl= sizeof(xorriso->info_text) - 1; + if(flag & 1) + offst= strlen(xorriso->info_text); + if(offst >= maxl) + return(0); + maxl-= offst; + if(maxl > trunc_len) + maxl= trunc_len; + strncpy(xorriso->info_text + offst, text, maxl + 1); + if(strlen(text) > maxl) { + strcpy(xorriso->info_text + offst + maxl - 12, "#[truncated]"); + return(2); + } + return(1); +} + diff -Nru libisoburn-1.5.0/xorriso/text_io.h libisoburn-1.5.2/xorriso/text_io.h --- libisoburn-1.5.0/xorriso/text_io.h 2016-11-13 08:29:14.000000000 +0000 +++ libisoburn-1.5.2/xorriso/text_io.h 2019-07-24 07:37:10.000000000 +0000 @@ -105,6 +105,9 @@ char *Xorriso_esc_filepath(struct XorrisO *xorriso, char *in_text, char *out_text, int flag); +int Xorriso_set_info_text(struct XorrisO *xorriso, char *text, + size_t trunc_len, int flag); + #ifdef Xorriso_with_editlinE int Xorriso__shutdown_editline(int flag); #endif diff -Nru libisoburn-1.5.0/xorriso/write_run.c libisoburn-1.5.2/xorriso/write_run.c --- libisoburn-1.5.0/xorriso/write_run.c 2017-10-23 10:00:57.000000000 +0000 +++ libisoburn-1.5.2/xorriso/write_run.c 2019-05-02 17:53:54.000000000 +0000 @@ -340,6 +340,7 @@ Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); return(ret); } + burn_drive_re_assess(drive, 0); } } return(1); @@ -958,11 +959,16 @@ isoburn_igopt_set_partition_img(sopts, i + 1, xorriso->appended_part_types[i], part_image); isoburn_igopt_set_part_flag(sopts, i + 1, intvl_string); + isoburn_igopt_set_part_type_guid(sopts, i + 1, + xorriso->appended_part_type_guids[i], + xorriso->appended_part_gpt_flags[i] & 1); } isoburn_igopt_set_appended_as_gpt(sopts, xorriso->appended_as_gpt); isoburn_igopt_set_appended_as_apm(sopts, xorriso->appended_as_apm); isoburn_igopt_set_part_like_isohybrid(sopts, xorriso->part_like_isohybrid); isoburn_igopt_set_iso_mbr_part_type(sopts, xorriso->iso_mbr_part_type); + 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); isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label); isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number); @@ -3125,20 +3131,14 @@ } -int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag) +/* @param flag bit0= no error message +*/ +int Xorriso_parse_guid(struct XorrisO *xorriso, char *text, + uint8_t guid[16], int flag) { int bin_count= 0, ret; uint8_t u[16], tr; - if(strcmp(text, "random") == 0) { - xorriso->gpt_guid_mode= 0; - return(1); - } - if(strcmp(text, "modification-date") == 0 || - strcmp(text, "volume_date_uuid") == 0) { - xorriso->gpt_guid_mode= 2; - return(1); - } /* Try RFC 4122 : big endian XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Translate to UEFI: first three components to little-endian */ @@ -3163,8 +3163,7 @@ ret= Hex_to_bin(text + 24, 6, &bin_count, u + 10, 0); if(ret < 0 || bin_count != 6) goto malformed; - xorriso->gpt_guid_mode= 1; - memcpy(xorriso->gpt_guid, u, 16); + memcpy(guid, u, 16); return(1); } } @@ -3172,15 +3171,67 @@ ret= Hex_to_bin(text, 16, &bin_count, u, 0); if(ret < 0 || bin_count != 16) goto malformed; - xorriso->gpt_guid_mode= 1; - memcpy(xorriso->gpt_guid, u, 16); + memcpy(guid, u, 16); return(1); } malformed:; - sprintf(xorriso->info_text, "Malformed GUID string: "); - Text_shellsafe(text, xorriso->info_text, 1); - Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + if(!(flag & 1)) { + sprintf(xorriso->info_text, "Malformed GUID string: "); + Text_shellsafe(text, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + } + return(0); +} + + +int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag) +{ + int ret; + + if(strcmp(text, "random") == 0) { + xorriso->gpt_guid_mode= 0; + return(1); + } + if(strcmp(text, "modification-date") == 0 || + strcmp(text, "volume_date_uuid") == 0) { + xorriso->gpt_guid_mode= 2; + return(1); + } + ret= Xorriso_parse_guid(xorriso, text, xorriso->gpt_guid, 0); + if(ret <= 0) + return(ret); + xorriso->gpt_guid_mode= 1; + return(1); +} + +/* @return Tells the recognition status + 0= not recognized as GUID + 1= non-EFI type GUID + 2= EFI type GUID +*/ +int Xorriso_parse_type_guid(struct XorrisO *xorriso, char *text, + uint8_t guid[16], int *mbr_type, int flag) +{ + int j, ret; + static uint8_t efi_sys_uuid[16] = { + 0x28, 0x73, 0x2a, 0xc1, 0x1f, 0xf8, 0xd2, 0x11, + 0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b + }; + + ret= Xorriso_parse_guid(xorriso, text, guid, 1); + if(ret > 0) { + for(j= 0; j < 16; j++) + if(guid[j] != efi_sys_uuid[j]) + break; + if(j >= 16) { + *mbr_type= 0xef; + return(2); + } else { + *mbr_type= 0x83; + return(1); + } + } return(0); } diff -Nru libisoburn-1.5.0/xorriso/xorrecord.1 libisoburn-1.5.2/xorriso/xorrecord.1 --- libisoburn-1.5.0/xorriso/xorrecord.1 2018-09-15 13:57:26.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrecord.1 2019-10-26 18:16:52.000000000 +0000 @@ -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.0, Sep 15, 2018" +.TH XORRECORD 1 "Version 1.5.2, Oct 26, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -511,7 +511,7 @@ This might be of interest if \fBxorrecord\fR and a particular drive or medium do not cooperate as expected, or if you just want to know how libburn interacts with the drive. -To understand this extremely verbous log, one needs to read SCSI +To understand this extremely verbose log, one needs to read SCSI specs SPC, SBC, and MMC. .br Please do not add such a log to a bug report on the first hand, @@ -531,6 +531,16 @@ 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 @@ -736,18 +746,19 @@ of the medium. Further it will read data from the medium by using the system's read\-only CD\-ROM driver. .br -It is advised to load the tray manually -or via dd by the CD\-ROM driver, rather than letting xorrecord do this -by its own SCSI driver. Many system CD\-ROM drivers do not take notice -of xorrecord's activities. -.br - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Many systems do not take notice of xorrecord's write activities. It is +necessary to force their attention by ejecting and reloading the drive tray. +Therefore above run uses option \-eject. .br -Now get the \-msinfo numbers: +Get the \-msinfo numbers (and properly reload the tray if it has a motor) by: .br $ m=$(xorrecord dev=/dev/sr0 \-msinfo) .br -and use them with xorrisofs to add ./tree2 to the image as /dir2: +Offer a victim to any problem caused by obtrusive demons after tray loading: +.br + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +.br +Use the numbers with xorrisofs to add ./tree2 to the image as /dir2: .br $ xorrisofs \-M /dev/sr0 \-C $m \-o image_2.iso \\ .br @@ -766,7 +777,19 @@ .SS .B Write ISO 9660 session on-the-fly: It is possible to combine the run of \fBxorrisofs\fR and \fBxorrecord\fR -in a pipeline without storing the ISO 9660 image as file on hard disk: +in a pipeline without storing the ISO 9660 image as file on hard disk. +.br +The piped run is more vulnerable to the problem that some systems have not +enough patience with automatic tray loading and that demons may interfere +with a first CD\-ROM driver read attempt from a freshly loaded medium. +It is advised to load the tray manually or via a separate run of xorriso with +a subsequent run of dd. +.br +Again, xorriso has the patience and dd is a dispensable victim for demons. +.br + $ m=$(xorrecord dev=/dev/sr0 \-msinfo) +.br + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 .br $ xorrisofs \-M /dev/sr0 \-C $m \\ .br @@ -779,7 +802,7 @@ \-eject padsize=300k \- .br This is also the main use case of program \fBxorriso\fR itself, -where this run would look like: +where the run would need no system workarounds and simply look like: .br $ xorriso \-dev /dev/sr0 \-joliet on \-speed 12 \-fs 8m \\ .br @@ -857,7 +880,7 @@ .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 -Nru libisoburn-1.5.0/xorriso/xorrecord.info libisoburn-1.5.2/xorriso/xorrecord.info --- libisoburn-1.5.0/xorriso/xorrecord.info 2018-09-15 13:57:22.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrecord.info 2019-10-26 18:17:08.000000000 +0000 @@ -3,9 +3,9 @@ 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. + Permission is granted to distribute this text freely. INFO-DIR-SECTION Archiving START-INFO-DIR-ENTRY * Xorrecord: (xorrecord). Emulates CD/DVD/BD program cdrecord @@ -14,7 +14,7 @@  File: xorrecord.info, Node: Top, Next: Overview, Up: (dir) -xorrecord 1.5.0 +xorrecord 1.5.2 *************** xorrecord - Emulation of CD/DVD/BD program cdrecord by program xorriso @@ -479,7 +479,7 @@ Log SCSI commands and drive replies to standard error. This might be of interest if *xorrecord* and a particular drive or medium do not cooperate as expected, or if you just want to know how libburn - interacts with the drive. To understand this extremely verbous + interacts with the drive. To understand this extremely verbose log, one needs to read SCSI specs SPC, SBC, and MMC. Please do not add such a log to a bug report on the first hand, unless you want to point out a particular deviation from said @@ -501,6 +501,14 @@ 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* @@ -718,15 +726,18 @@ For the second session xorrisofs needs to know the -msinfo numbers of the medium. Further it will read data from the medium by using the system's read-only CD-ROM driver. -It is advised to load the tray manually or via dd by the CD-ROM driver, -rather than letting xorrecord do this by its own SCSI driver. Many -system CD-ROM drivers do not take notice of xorrecord's activities. - - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -Now get the -msinfo numbers: +Many systems do not take notice of xorrecord's write activities. It is +necessary to force their attention by ejecting and reloading the drive +tray. Therefore above run uses option -eject. +Get the -msinfo numbers (and properly reload the tray if it has a motor) +by: $ m=$(xorrecord dev=/dev/sr0 -msinfo) - and use them with xorrisofs to add ./tree2 to the image as /dir2: + Offer a victim to any problem caused by obtrusive demons after tray +loading: +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 + + Use the numbers with xorrisofs to add ./tree2 to the image as /dir2: $ xorrisofs -M /dev/sr0 -C $m -o image_2.iso \ -J -graft-points /dir2=./tree2 @@ -748,7 +759,18 @@ ===================================== It is possible to combine the run of *xorrisofs* and 'xorrecord' in a -pipeline without storing the ISO 9660 image as file on hard disk: +pipeline without storing the ISO 9660 image as file on hard disk. +The piped run is more vulnerable to the problem that some systems have +not enough patience with automatic tray loading and that demons may +interfere with a first CD-ROM driver read attempt from a freshly loaded +medium. It is advised to load the tray manually or via a separate run +of xorriso with a subsequent run of dd. +Again, xorriso has the patience and dd is a dispensable victim for +demons. + + $ m=$(xorrecord dev=/dev/sr0 -msinfo) + + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 $ xorrisofs -M /dev/sr0 -C $m \ -J -graft-points /dir2=./tree2 \ @@ -756,8 +778,8 @@ -waiti -multi -grow_overwriteable_iso \ -eject padsize=300k - - This is also the main use case of program *xorriso* itself, where -this run would look like: + This is also the main use case of program *xorriso* itself, where the +run would need no system workarounds and simply look like: $ xorriso -dev /dev/sr0 -joliet on -speed 12 -fs 8m \ -map ./tree2 /dir2 -commit_eject all @@ -854,7 +876,7 @@ 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 @@ -880,10 +902,11 @@ * 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) @@ -896,7 +919,7 @@ * -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) @@ -912,19 +935,19 @@ * 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 @@ -936,25 +959,27 @@ * 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) @@ -962,7 +987,7 @@ * 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) @@ -977,21 +1002,21 @@ * 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) @@ -1009,21 +1034,21 @@ Node: SetBurn10487 Node: Verbous21115 Node: NonCdrecord22665 -Node: Examples30005 -Node: ExDevices30666 -Node: ExMedium30884 -Node: ExBlank31147 -Node: ExFormat31368 -Node: ExDeformat31886 -Node: ExIsoSingle32153 -Node: ExIsoMulti32437 -Node: ExIsoFly34071 -Node: ExAfio34742 -Node: Files35740 -Node: Seealso36296 -Node: Bugreport36659 -Node: Legal37250 -Node: CommandIdx38179 -Node: ConceptIdx41669 +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 -Nru libisoburn-1.5.0/xorriso/xorrecord.texi libisoburn-1.5.2/xorriso/xorrecord.texi --- libisoburn-1.5.0/xorriso/xorrecord.texi 2018-09-15 13:57:17.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrecord.texi 2019-10-26 18:16:26.000000000 +0000 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename xorrecord.info -@settitle GNU xorrecord 1.5.0 +@settitle GNU xorrecord 1.5.2 @c %**end of header @c @c man-ignore-lines begin @@ -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.0, Sep 15, 2018" +@c man .TH XORRECORD 1 "Version 1.5.2, Oct 26, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -68,15 +68,15 @@ @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. +Permission is granted to distribute this text freely. @end quotation @end copying @c man-ignore-lines end @titlepage -@title Manual of GNU xorriso personality xorrecord 1.5.0 +@title Manual of GNU xorriso personality xorrecord 1.5.2 @author Thomas Schmitt @page @vskip 0pt plus 1filll @@ -85,7 +85,7 @@ @contents @ifnottex @node Top -@top xorrecord 1.5.0 +@top xorrecord 1.5.2 @c man-ignore-lines 1 @c man .SH NAME @@ -707,7 +707,7 @@ This might be of interest if @strong{xorrecord} and a particular drive or medium do not cooperate as expected, or if you just want to know how libburn interacts with the drive. -To understand this extremely verbous log, one needs to read SCSI +To understand this extremely verbose log, one needs to read SCSI specs SPC, SBC, and MMC. @* Please do not add such a log to a bug report on the first hand, @@ -736,6 +736,18 @@ 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 @@ -998,20 +1010,21 @@ of the medium. Further it will read data from the medium by using the system's read-only CD-ROM driver. @* -It is advised to load the tray manually -or via dd by the CD-ROM driver, rather than letting xorrecord do this -by its own SCSI driver. Many system CD-ROM drivers do not take notice -of xorrecord's activities. -@* -@sp 1 - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Many systems do not take notice of xorrecord's write activities. It is +necessary to force their attention by ejecting and reloading the drive tray. +Therefore above run uses option -eject. @* -Now get the -msinfo numbers: +Get the -msinfo numbers (and properly reload the tray if it has a motor) by: @* $ m=$(xorrecord dev=/dev/sr0 -msinfo) @* @sp 1 -and use them with xorrisofs to add ./tree2 to the image as /dir2: +Offer a victim to any problem caused by obtrusive demons after tray loading: +@* + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +@* +@sp 1 +Use the numbers with xorrisofs to add ./tree2 to the image as /dir2: @* @sp 1 $ xorrisofs -M /dev/sr0 -C $m -o image_2.iso \ @@ -1036,7 +1049,21 @@ @node ExIsoFly, ExAfio, ExIsoMulti, Examples @section Write ISO 9660 session on-the-fly It is possible to combine the run of @strong{xorrisofs} and @command{xorrecord} -in a pipeline without storing the ISO 9660 image as file on hard disk: +in a pipeline without storing the ISO 9660 image as file on hard disk. +@* +The piped run is more vulnerable to the problem that some systems have not +enough patience with automatic tray loading and that demons may interfere +with a first CD-ROM driver read attempt from a freshly loaded medium. +It is advised to load the tray manually or via a separate run of xorriso with +a subsequent run of dd. +@* +Again, xorriso has the patience and dd is a dispensable victim for demons. +@* +@sp 1 + $ m=$(xorrecord dev=/dev/sr0 -msinfo) +@* +@sp 1 + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 @* @sp 1 $ xorrisofs -M /dev/sr0 -C $m \ @@ -1051,7 +1078,7 @@ @* @sp 1 This is also the main use case of program @strong{xorriso} itself, -where this run would look like: +where the run would need no system workarounds and simply look like: @* @sp 1 $ xorriso -dev /dev/sr0 -joliet on -speed 12 -fs 8m \ @@ -1170,7 +1197,7 @@ 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 -Nru libisoburn-1.5.0/xorriso/xorriso.1 libisoburn-1.5.2/xorriso/xorriso.1 --- libisoburn-1.5.0/xorriso/xorriso.1 2018-09-15 13:56:05.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso.1 2019-10-26 18:15:01.000000000 +0000 @@ -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.0, Sep 15, 2018" +.TH XORRISO 1 "Version 1.5.2, Oct 26, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -690,6 +690,64 @@ 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 @@ 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 @@ -947,9 +970,9 @@ .br Modes "on" and "user" read and write only attributes from namespace "user". .br -Mode "any" processes attributes of all namespaces. This might need adminstrator -privileges, even if the owner of the disk file tries to read or write the -attributes. +Mode "any" processes attributes of all namespaces. This might need +administrator privileges, even if the owner of the disk file tries to read or +write the attributes. .br Note that xattr from namespace "isofs." are never read from disk or restored to disk. Further it is not possible to set them via xorriso xattr manipulation @@ -1019,6 +1042,14 @@ Mode "uppercase" is like "stripped" but maps lowercase letters to uppercase, if any occur despite the prescriptions of ECMA\-119. .TP +\fB\-iso_nowtime\fR "dynamic"|timestring +Choose whether to use the current time ("dynamic") or a fixed time point +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 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 (dev_t and ino_t). If enabled they are stored as xattr and can @@ -1595,7 +1626,7 @@ .br While command \-split_size is set larger than 0 such a directory with split file pieces will be recognized and handled like a regular file by commands -\-compare* , \-update*, and in overwrite situations. There are \-ossirox +\-compare* , \-update*, and in overwrite situations. There are \-osirrox parameters "concat_split_on" and "concat_split_off" which control the handling when files get restored to disk. .br @@ -3226,7 +3257,7 @@ "appended_partition_NNN" with a decimal number NNN works only for \-boot_image bootspecs which announce El Torito boot image paths: bin_path=, efi_path=. The number gives the partition number as used with the corresponding -option \-append_partition. +command \-append_partition. .br The component Interval consists of two byte address numbers separated by a "\-" character. E.g. "0\-429" means to read bytes 0 to 429. .br @@ -3473,13 +3504,20 @@ .br \fB\-boot_image any iso_mbr_part_type=\fRnumber sets the partition type of the MBR partition which represents the ISO or at least protects it. +.br Number may be 0x00 to 0xff. The text "default" re\-enables the default types of the various occasions to create an ISO MBR partition. -.br This is without effect if no such partition emerges by other settings or if the partition type is prescribed mandatorily like 0xee for GPT protective MBR or 0x96 for CHRP. .br +If instead a type_guid is given by a 32\-digit hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like +EBD0A0A2\-B9E5\-4433\-87C0\-68B6B72699C7, then it will be used as partition type +if the ISO filesystem appears as partition in GPT. +In MBR, C12A7328\-F81F\-11D2\-BA4B\-00A0C93EC93B will be mapped to 0xef. +Any other GUID will be mapped to 0x83. +.br \fBgrub2_mbr=\fRdisk_path works like "any" system_area= with additional patching for modern GRUB MBRs. The content start address of the first boot image is converted to a count of 512 byte blocks, and an offset of 4 is added. @@ -3695,8 +3733,14 @@ .br The type_code may be "FAT12", "FAT16", "Linux", or a hexadecimal number between 0x00 and 0xff. Not all those numbers will -yield usable results. For a list of codes search the Internet for -"Partition Types" or run fdisk command "L". +yield usable results. For a list of MBR partition type codes search the +Internet for "Partition Types" or run fdisk command "L". +.br +type_code may also be a type GUID as plain hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like +EBD0A0A2\-B9E5\-4433\-87C0\-68B6B72699C7. It will be used if the partition is +mentioned in GPT. In MBR, C12A7328\-F81F\-11D2\-BA4B\-00A0C93EC93B will be mapped +to 0xef. Any other GUID will be mapped to 0x83. .br If some other command causes the production of GPT, then the appended partitions will be mentioned there too. @@ -4663,6 +4707,12 @@ The former is a strong confirmation for quality, the latter only tells that one or more blocks of the region must be wrong. .br +By default bad_limit is set higher than md5_mismatch, so that mismatches are +classified as quality class "0" rather than "\-". This means that the sectors +of a MD5 mismatch range are recorded in the sector_map as successfully read, +if the drive handed them out at all. Set "bad_limit=md5_mismatch" to let the +sector_map record the whole mismatching range as yet not retrieved. +.br \fBslow_limit=threshold\fR sets the time threshold for a single read chunk to be considered slow. This may be a fractional number like 0.1 or 1.5. @@ -4746,7 +4796,8 @@ 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]. @@ -5287,7 +5338,7 @@ The first three items are single words, the rest of the line is the volume ID. .TP \fB\-scsi_log\fR "on"|"off" -Mode "on" enables very verbous logging of SCSI commands and drive replies. +Mode "on" enables very verbose logging of SCSI commands and drive replies. Logging messages get printed to stderr, not to any of the \fBxorriso\fR output channels. .br @@ -5814,24 +5865,36 @@ .br xorriso \-as cdrecord \-v dev=/dev/sr0 blank=fast \-multi \-eject \- .br -Follow\-up sessions are written like this: -.br -$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Follow\-up sessions are written like this (the run of dd is only to give demons +a chance to spoil it): .br $ m=$(xorriso \-as cdrecord dev=/dev/sr0 \-msinfo) .br +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +.br $ xorriso \-as mkisofs \-M /dev/sr0 \-C $m prepared_for_iso/tree2 | \\ .br xorriso \-as cdrecord \-v dev=/dev/sr0 \-waiti \-multi \-eject \- .br -Always eject the drive tray between sessions. The old sessions -get read via /dev/sr0. Its device driver might not be aware -of the changed content before it loads the medium again. -In this case the previous session would not be loaded and the -new session would contain only the newly added files. +Always eject the drive tray between sessions. .br -For the same reason do not let \fBxorriso\fR \-as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +The run of xorriso \-as mkisofs will read old sessions via the CD\-ROM +driver of /dev/sr0. This driver might not be aware of the changed content +as long as the medium is not loaded again. In this case the previous session +would not be properly assessed by xorriso and the new session would contain +only the newly added files. +.br +Some systems have not enough patience with automatic tray loading and some +demons may interfere with a first CD\-ROM driver read attempt from a freshly +loaded medium. +.br +When loading the tray manually, wait 10 seconds after the drive has stopped +blinking. +.br +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall offer +itself to any problems caused by demons assessing the changed drive status. +If this does not help, insert a run of "sleep 10" between xorriso and dd. .br This example works for multi\-session media only. Add cdrskin option \-\-grow_overwriteable_iso @@ -5870,7 +5933,7 @@ It does not emulate session history on overwriteable media, though. .SS .B Adjust thresholds for verbosity, exit value and program abort -Be quite verbous, exit 32 if severity "FAILURE" was encountered, +Be quite verbose, exit 32 if severity "FAILURE" was encountered, do not abort prematurely but forcibly go on until the end of commands. .br $ xorriso ... \\ @@ -6107,7 +6170,8 @@ which tells the seconds since january 1st 1970. If it contains a number, then it is used as time value to set the default of \-volume date "uuid", sets \-boot_image "any" "gpt_disk_guid=" to -"volume_date_uuid", and \-volume_date "all_file_dates" to "set_to_mtime", +"volume_date_uuid", \-volume_date "all_file_dates" to "set_to_mtime", +and \-iso_nowtime to "=$SOURCE_DATE_EPOCH". .br Startup files and program options can override the effect of SOURCE_DATE_EPOCH. .br @@ -6165,7 +6229,7 @@ .br for libburnia\-project.org .SH COPYRIGHT -Copyright (c) 2007 \- 2018 Thomas Schmitt +Copyright (c) 2007 \- 2019 Thomas Schmitt .br Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of \fBxorriso\fR. diff -Nru libisoburn-1.5.0/xorriso/xorrisoburn.h libisoburn-1.5.2/xorriso/xorrisoburn.h --- libisoburn-1.5.0/xorriso/xorrisoburn.h 2018-09-15 13:49:41.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrisoburn.h 2019-10-26 18:10:43.000000000 +0000 @@ -4,7 +4,7 @@ a command line oriented batch and dialog tool which creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2018 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -19,7 +19,7 @@ */ #define xorriso_libisoburn_req_major 1 #define xorriso_libisoburn_req_minor 5 -#define xorriso_libisoburn_req_micro 0 +#define xorriso_libisoburn_req_micro 2 struct SpotlisT; /* List of intervals with different read qualities */ @@ -151,6 +151,12 @@ */ int Xorriso_ls(struct XorrisO *xorriso, int flag); +/* + @return: <=0 = error, 1= directory tree, 2= path leads to non-directory +*/ +int Xorriso_get_dus(struct XorrisO *xorriso, char *iso_rr_path, off_t *size, + off_t boss_mem, int flag); + /* @param wd Path to prepend in case img_path is not absolute @param img_path Absolute or relative path to be normalized @param eff_path returns resulting effective path. @@ -642,12 +648,20 @@ int Xorriso_graftable_pathspec(struct XorrisO *xorriso, char *in_pathspec, char *pathspec, int flag); +int Xorriso_parse_guid(struct XorrisO *xorriso, char *text, + uint8_t guid[16], int flag); + int Xorriso_parse_gpt_guid(struct XorrisO *xorriso, char *text, int flag); +int Xorriso_parse_type_guid(struct XorrisO *xorriso, char *text, + uint8_t guid[16], int *mbr_type, int flag); + int Xorriso_format_guid(struct XorrisO *xorriso, uint8_t guid[16], char *line, int flag); int Xorriso_make_guid(struct XorrisO *xorriso, char *line, int flag); +int Xorriso_set_libisofs_now(struct XorrisO *xorriso, int flag); + #endif /* Xorrisoburn_includeD */ diff -Nru libisoburn-1.5.0/xorriso/xorrisofs.1 libisoburn-1.5.2/xorriso/xorrisofs.1 --- libisoburn-1.5.0/xorriso/xorrisofs.1 2018-09-15 13:56:51.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrisofs.1 2019-10-26 18:15:43.000000000 +0000 @@ -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 XORRISOFS 1 "Version 1.5.0, Sep 15, 2018" +.TH XORRISOFS 1 "Version 1.5.2, Oct 26, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -194,11 +194,7 @@ .br Both values can be inquired from optical media by help of burn programs and cdrecord option \-msinfo. xorriso itself can obtain it in its -cdrecord emulation. Do not let it load the drive, but rather do this manually -or by a program like dd which reads a few bytes. Only then it is sure that -the device driver knows the true readable size of the medium. -.br - dd if=/dev/... count=1 >/dev/null 2>&1 +cdrecord emulation. .br values=$(xorriso \-as cdrecord dev=/dev/... \-msinfo) .br @@ -672,7 +668,7 @@ \fB--xattr-any\fR .br Enable recording and loading of GNU/Linux or FreeBSD extended attributes in -all namespaces. This might need adminstrator privileges, even if the owner +all namespaces. This might need administrator privileges, even if the owner of the disk file tries to read the attributes. .TP \fB--md5\fR @@ -1245,15 +1241,22 @@ Gaps between GPT and APM partitions will not be filled by more partitions. Appended partitions get mentioned in APM if other APM partitions emerge. .TP -\fB\-iso_mbr_part_type\fR "default"|number +\fB\-iso_mbr_part_type\fR "default"|number|type_guid Set the partition type -of the MBR partition which represents the ISO or at least protects it. +of the MBR or GPT partition which represents the ISO or at least protects it. +.br Number may be 0x00 to 0xff. The text "default" re\-enables the default types of the various occasions to create an ISO MBR partition. -.br This is without effect if no such partition emerges by other settings or if the partition type is prescribed mandatorily like 0xee for GPT protective MBR or 0x96 for CHRP. +.br +If instead a type_guid is given by a 32\-digit hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like +EBD0A0A2\-B9E5\-4433\-87C0\-68B6B72699C7, then it will be used as partition type +if the ISO filesystem appears as partition in GPT. +In MBR, C12A7328\-F81F\-11D2\-BA4B\-00A0C93EC93B will be mapped to 0xef. +Any other GUID will be mapped to 0x83. .TP \fB--protective-msdos-label\fR Patch the System Area by a simple PC\-DOS partition table where partition 1 @@ -1339,7 +1342,14 @@ or a hexadecimal number between 0x00 and 0xff. Not all those numbers will yield usable results. For a list of codes search the Internet for "Partition Types" or run fdisk command "L". -This code matters only with MBR, not with GPT. +If the partition appears in GPT then type_code 0xef is mapped to the EFI System +Partition Type GUID. All others get mapped to Basic Data Type GUID. +.br +type_code may also be a type GUID as plain hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like +EBD0A0A2\-B9E5\-4433\-87C0\-68B6B72699C7. It will be used if the partition is +mentioned in GPT. In MBR, C12A7328\-F81F\-11D2\-BA4B\-00A0C93EC93B will be mapped +to 0xef. Any other GUID will be mapped to 0x83. .br If some other command causes the production of GPT, then the appended partitions will be mentioned there too, even if not \-appended_part_as_gpt @@ -1737,26 +1747,38 @@ .br | xorriso \-as cdrecord \-v dev=/dev/sr0 blank=fast \-multi \-eject \- .br -Follow\-up sessions are written like this: -.br - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Follow\-up sessions are written like this (the run of dd is only to give demons +a chance to spoil it): .br $ m=$(xorriso \-as cdrecord dev=/dev/sr0 \-msinfo) .br + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +.br $ xorrisofs \-M /dev/sr0 \-C $m \-graft\-points \\ .br /tree2=prepared_for_iso/tree2 \\ .br | xorriso \-as cdrecord \-v dev=/dev/sr0 \-waiti \-multi \-eject \- .br -Always eject the drive tray between sessions. The old sessions -get read via /dev/sr0. Its device driver might not be aware -of the changed content before it loads the medium again. -In this case the previous session would not be loaded and the -new session would contain only the newly added files. +Always eject the drive tray between sessions. .br -For the same reason do not let xorriso \-as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +The run of xorriso \-as mkisofs will read old sessions via the CD\-ROM +driver of /dev/sr0. This driver might not be aware of the changed content +as long as the medium is not loaded again. In this case the previous session +would not be properly assessed by xorriso and the new session would contain +only the newly added files. +.br +Some systems have not enough patience with automatic tray loading and some +demons may interfere with a first CD\-ROM driver read attempt from a freshly +loaded medium. +.br +When loading the tray manually, wait 10 seconds after the drive has stopped +blinking. +.br +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall offer +itself to any problems caused by demons assessing the changed drive status. +If this does not help, insert a run of "sleep 10" between xorriso and dd. .SS .B Let xorrisofs work underneath growisofs growisofs expects an ISO formatter program which understands options \-C and @@ -1809,13 +1831,14 @@ update it until he run fails gracefully due to lack of remaining space on the old one. .br -Do not let xorriso \-as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. -.br - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Always eject the drive tray between sessions. +A run of dd shall give demons a chance to spoil the first read on freshly +loaded media. .br $ msinfo=$(xorriso \-as cdrecord dev=/dev/sr0 \-msinfo) .br + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +.br $ load_opts= .br $ test \-n "$msinfo" && load_opts="\-M /dev/sr0 \-C $msinfo" @@ -1909,13 +1932,14 @@ With the second session, option \-old\-root refers to /session1 and the new \-root is /session2. .br -Do not let xorriso \-as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. -.br - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +Always eject the drive tray between sessions. +A run of dd shall give demons a chance to spoil the first read on freshly +loaded media. .br $ msinfo=$(xorriso \-as cdrecord dev=/dev/sr0 \-msinfo) .br + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +.br $ load_opts= .br $ test \-n "$msinfo" && load_opts="\-M /dev/sr0 \-C $msinfo" @@ -2109,6 +2133,8 @@ \-\-modification\-date=. \-\-gpt_disk_guid defaults to "modification\-date". The default of \-\-set_all_file_dates is then "set_to_mtime". +Further the "now" time for ISO nodes without disk source is then set to +the SOURCE_DATE_EPOCH value. .br Startup files and program options can override the effect of SOURCE_DATE_EPOCH. .SS @@ -2163,7 +2189,7 @@ .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 -Nru libisoburn-1.5.0/xorriso/xorrisofs.info libisoburn-1.5.2/xorriso/xorrisofs.info --- libisoburn-1.5.0/xorriso/xorrisofs.info 2018-09-15 13:56:48.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrisofs.info 2019-10-26 18:16:01.000000000 +0000 @@ -3,9 +3,9 @@ xorrisofs - Emulation of ISO 9660 program mkisofs by program xorriso - Copyright (C) 2011 - 2017 Thomas Schmitt + Copyright (C) 2011 - 2019 Thomas Schmitt - Permission is granted to distrubute this text freely. + Permission is granted to distribute this text freely. INFO-DIR-SECTION Archiving START-INFO-DIR-ENTRY * Xorrisofs: (xorrisofs). Emulates ISO 9660 program mkisofs @@ -14,7 +14,7 @@  File: xorrisofs.info, Node: Top, Next: Overview, Up: (dir) -xorrisofs 1.5.0 +xorrisofs 1.5.2 *************** xorrisofs - Emulation of ISO 9660 program mkisofs by program xorriso @@ -205,12 +205,7 @@ superblock address on the intended medium. Both values can be inquired from optical media by help of burn programs and cdrecord option -msinfo. xorriso itself can obtain it - in its cdrecord emulation. Do not let it load the drive, but - rather do this manually or by a program like dd which reads a few - bytes. Only then it is sure that the device driver knows the true - readable size of the medium. - - dd if=/dev/... count=1 >/dev/null 2>&1 + in its cdrecord emulation. values=$(xorriso -as cdrecord dev=/dev/... -msinfo) echo $values @@ -614,7 +609,7 @@ --xattr-any Enable recording and loading of GNU/Linux or FreeBSD extended - attributes in all namespaces. This might need adminstrator + attributes in all namespaces. This might need administrator privileges, even if the owner of the disk file tries to read the attributes. --md5 @@ -1091,14 +1086,20 @@ Gaps between GPT and APM partitions will not be filled by more partitions. Appended partitions get mentioned in APM if other APM partitions emerge. --iso_mbr_part_type "default"|number - Set the partition type of the MBR partition which represents the - ISO or at least protects it. Number may be 0x00 to 0xff. The text - "default" re-enables the default types of the various occasions to - create an ISO MBR partition. - This is without effect if no such partition emerges by other - settings or if the partition type is prescribed mandatorily like - 0xee for GPT protective MBR or 0x96 for CHRP. +-iso_mbr_part_type "default"|number|type_guid + Set the partition type of the MBR or GPT partition which represents + the ISO or at least protects it. + Number may be 0x00 to 0xff. The text "default" re-enables the + default types of the various occasions to create an ISO MBR + partition. This is without effect if no such partition emerges by + other settings or if the partition type is prescribed mandatorily + like 0xee for GPT protective MBR or 0x96 for CHRP. + If instead a type_guid is given by a 32-digit hex string like + a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like + EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, then it will be used as + partition type if the ISO filesystem appears as partition in GPT. + In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to + 0xef. Any other GUID will be mapped to 0x83. --protective-msdos-label Patch the System Area by a simple PC-DOS partition table where partition 1 claims the range of the ISO image but leaves the first @@ -1168,8 +1169,16 @@ The type_code may be "FAT12", "FAT16", "Linux", or a hexadecimal number between 0x00 and 0xff. Not all those numbers will yield usable results. For a list of codes search the Internet for - "Partition Types" or run fdisk command "L". This code matters only - with MBR, not with GPT. + "Partition Types" or run fdisk command "L". If the partition + appears in GPT then type_code 0xef is mapped to the EFI System + Partition Type GUID. All others get mapped to Basic Data Type GUID. + + type_code may also be a type GUID as plain hex string like + a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like + EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. It will be used if the + partition is mentioned in GPT. In MBR, + C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to 0xef. Any + other GUID will be mapped to 0x83. If some other command causes the production of GPT, then the appended partitions will be mentioned there too, even if not -appended_part_as_gpt is given. @@ -1530,21 +1539,31 @@ /tree1=prepared_for_iso/tree1 \ | xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject - - Follow-up sessions are written like this: + Follow-up sessions are written like this (the run of dd is only to +give demons a chance to spoil it): - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) + $ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 $ xorrisofs -M /dev/sr0 -C $m -graft-points \ /tree2=prepared_for_iso/tree2 \ | xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject - - Always eject the drive tray between sessions. The old sessions get -read via /dev/sr0. Its device driver might not be aware of the changed -content before it loads the medium again. In this case the previous -session would not be loaded and the new session would contain only the -newly added files. -For the same reason do not let xorriso -as cdrecord load the medium, but -rather do this manually or by a program that reads from /dev/sr0. + Always eject the drive tray between sessions. +The run of xorriso -as mkisofs will read old sessions via the CD-ROM +driver of /dev/sr0. This driver might not be aware of the changed +content as long as the medium is not loaded again. In this case the +previous session would not be properly assessed by xorriso and the new +session would contain only the newly added files. +Some systems have not enough patience with automatic tray loading and +some demons may interfere with a first CD-ROM driver read attempt from a +freshly loaded medium. +When loading the tray manually, wait 10 seconds after the drive has +stopped blinking. +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall +offer itself to any problems caused by demons assessing the changed +drive status. If this does not help, insert a run of "sleep 10" between +xorriso and dd.  File: xorrisofs.info, Node: ExGrowisofs, Next: ExIncBackup, Prev: ExMkisofs, Up: Examples @@ -1597,11 +1616,11 @@ the two disk trees to the medium is desired. Begin with a blank medium and update it until he run fails gracefully due to lack of remaining space on the old one. -Do not let xorriso -as cdrecord load the medium, but rather do this -manually or by a program that reads from /dev/sr0. +Always eject the drive tray between sessions. A run of dd shall give +demons a chance to spoil the first read on freshly loaded media. - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -$ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) + $ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 $ load_opts= $ test -n "$msinfo" && load_opts="-M /dev/sr0 -C $msinfo" $ xorrisofs $load_opts -o - --for_backup -m '*.o' -m '*.swp' \ @@ -1676,11 +1695,11 @@ With the second session, option -old-root refers to /session1 and the new -root is /session2. -Do not let xorriso -as cdrecord load the medium, but rather do this -manually or by a program that reads from /dev/sr0. +Always eject the drive tray between sessions. A run of dd shall give +demons a chance to spoil the first read on freshly loaded media. - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -$ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) + $ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 $ load_opts= $ test -n "$msinfo" && load_opts="-M /dev/sr0 -C $msinfo" $ xorrisofs $load_opts -root /session2 -old-root /session1 \ @@ -1846,7 +1865,9 @@ tells the seconds since january 1st 1970. If it contains a number, then it is used as time value to set the default of --modification-date=. --gpt_disk_guid defaults to "modification-date". The default of ---set_all_file_dates is then "set_to_mtime". +--set_all_file_dates is then "set_to_mtime". Further the "now" time for +ISO nodes without disk source is then set to the SOURCE_DATE_EPOCH +value. Startup files and program options can override the effect of SOURCE_DATE_EPOCH. @@ -1904,7 +1925,7 @@ 11.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 @@ -1936,13 +1957,13 @@ * --embedded-boot Fill System Area e.g. by MBR: SystemArea. (line 79) * --emul-toc enable table-of-content emulation: SetProduct. (line 33) * --for_backup Enable backup fidelity: SetExtras. (line 92) -* --gpt_disk_guid GPT GUID: SystemArea. (line 231) +* --gpt_disk_guid GPT GUID: SystemArea. (line 245) * --grub2-boot-info Patch El Torito boot image: Bootable. (line 109) * --grub2-mbr Install modern GRUB2 MBR: SystemArea. (line 81) -* --grub2-sparc-core SUN SPARC core file: SystemArea. (line 286) +* --grub2-sparc-core SUN SPARC core file: SystemArea. (line 300) * --hardlinks Recording of hardlink relations: SetExtras. (line 130) * --mbr-force-bootable Enforce MBR bootable/active flag: SystemArea. - (line 139) + (line 145) * --md5 Recording of MD5 checksums: SetExtras. (line 122) * --modification-date set ISO image timestamps: ImageId. (line 70) * --no-emul-toc no table-of-content emulation: SetProduct. (line 41) @@ -1956,7 +1977,7 @@ (line 73) * --old-root-no-md5 disable MD5 with -old-root: SetInsert. (line 91) * --protective-msdos-label Patch System Area partition table: SystemArea. - (line 135) + (line 141) * --quoted_path_list read pathspecs from disk file: SetInsert. (line 12) * --scdbackup_tag Recording of MD5 checksum: SetExtras. (line 138) @@ -1973,28 +1994,28 @@ * -A set Application Id: ImageId. (line 34) * -abstract set Abstract File path: ImageId. (line 57) * -allow-lowercase lowercase in ISO file names: SetCompl. (line 42) -* -alpha-boot DEC Alpha SRM bootloader: SystemArea. (line 309) +* -alpha-boot DEC Alpha SRM bootloader: SystemArea. (line 323) * -appended_part_as_apm Appended partitions in APM: SystemArea. - (line 215) + (line 229) * -appended_part_as_gpt Appended partitions in GPT: SystemArea. - (line 209) + (line 223) * -append_partition Append MBR or GPT partition after image: SystemArea. - (line 189) + (line 195) * -appid set Application Id: ImageId. (line 41) * -b El Torito PC-BIOS boot image: Bootable. (line 38) -* -B SUN SPARC boot images: SystemArea. (line 271) +* -B SUN SPARC boot images: SystemArea. (line 285) * -biblio set Biblio File path: ImageId. (line 62) * -boot-info-table Patch El Torito boot image: Bootable. (line 104) * -boot-load-size El Torito boot image load size: Bootable. (line 72) * -c El Torito boot catalog name: Bootable. (line 114) * -C set load address and write address offset: Loading. (line 25) * -cdrecord-params set load address and write address offset: Loading. - (line 46) + (line 41) * -checksum_algorithm_iso choose .jigdo checksums: Jigdo. (line 72) * -checksum_algorithm_template choose .template checksums: Jigdo. (line 78) -* -chrp-boot CHRP partition: SystemArea. (line 253) -* -chrp-boot-part CHRP partition: SystemArea. (line 244) +* -chrp-boot CHRP partition: SystemArea. (line 267) +* -chrp-boot-part CHRP partition: SystemArea. (line 258) * -copyright set Copyright File path: ImageId. (line 66) * -D allow deep directory hierachies: SetExtras. (line 60) * -d omit trailing dot in ISO file names: SetCompl. (line 50) @@ -2005,7 +2026,7 @@ * -disallow_dir_id_ext enforce ISO level 1 directory names: SetCompl. (line 23) * -e El Torito EFI boot image: Bootable. (line 53) -* -efi-boot-part EFI boot partition: SystemArea. (line 221) +* -efi-boot-part EFI boot partition: SystemArea. (line 235) * -eltorito-alt-boot begin next boot catalog entry: Bootable. (line 47) * -eltorito-boot El Torito PC-BIOS boot image: Bootable. (line 45) * -eltorito-catalog El Torito boot catalog name: Bootable. (line 119) @@ -2051,12 +2072,12 @@ (line 15) * -hide-rr-moved set deep directory relocation target: SetExtras. (line 90) -* -hppa-bootloader HP-PA bootloader file: SystemArea. (line 298) -* -hppa-cmdline HP-PA PALO command line: SystemArea. (line 292) -* -hppa-hdrversion HP-PA PALO header version: SystemArea. (line 306) -* -hppa-kernel_32 HP-PA kernel_32 file: SystemArea. (line 300) -* -hppa-kernel_64 HP-PA kernel_64 file: SystemArea. (line 302) -* -hppa-ramdisk HP-PA ramdisk file: SystemArea. (line 304) +* -hppa-bootloader HP-PA bootloader file: SystemArea. (line 312) +* -hppa-cmdline HP-PA PALO command line: SystemArea. (line 306) +* -hppa-hdrversion HP-PA PALO header version: SystemArea. (line 320) +* -hppa-kernel_32 HP-PA kernel_32 file: SystemArea. (line 314) +* -hppa-kernel_64 HP-PA kernel_64 file: SystemArea. (line 316) +* -hppa-ramdisk HP-PA ramdisk file: SystemArea. (line 318) * -input-charset set character set of disk file names: Charset. (line 17) * -iso-level define ISO 9660 limitations: SetCompl. (line 7) @@ -2087,8 +2108,8 @@ * -max-iso9660-filenames allow 37 characters in ISO file names: SetCompl. (line 61) * -md5-list set path of readable .md5: Jigdo. (line 67) -* -mips-boot MIPS Big Endian boot image: SystemArea. (line 260) -* -mipsel-boot MIPS Little Endian boot image: SystemArea. (line 266) +* -mips-boot MIPS Big Endian boot image: SystemArea. (line 274) +* -mipsel-boot MIPS Little Endian boot image: SystemArea. (line 280) * -N omit version number in ISO file names: SetCompl. (line 64) * -no-emul-boot El Torito boot image emulation: Bootable. (line 86) * -no-pad do not add zeros to ISO tree: SetProduct. (line 101) @@ -2104,15 +2125,15 @@ * -p set Preparer Id: ImageId. (line 47) * -P set Publisher Id: ImageId. (line 28) * -pad add 300 KiB of zeros to ISO tree: SetProduct. (line 94) -* -partition_cyl_align Image size alignment: SystemArea. (line 178) -* -partition_hd_cyl MBR heads per cylinder: SystemArea. (line 161) +* -partition_cyl_align Image size alignment: SystemArea. (line 184) +* -partition_hd_cyl MBR heads per cylinder: SystemArea. (line 167) * -partition_offset Make mountable by partition 1: SystemArea. - (line 150) -* -partition_sec_hd MBR sectors per head: SystemArea. (line 164) + (line 156) +* -partition_sec_hd MBR sectors per head: SystemArea. (line 170) * -part_like_isohybrid Mark partitions like with isohybrid: SystemArea. (line 120) * -path-list read pathspecs from disk file: SetInsert. (line 8) -* -prep-boot-part PReP partition: SystemArea. (line 255) +* -prep-boot-part PReP partition: SystemArea. (line 269) * -preparer set Preparer Id: ImageId. (line 55) * -prev-session set path for loading existing ISO image: Loading. (line 21) @@ -2129,8 +2150,8 @@ * -root redirect ISO root directory: SetInsert. (line 55) * -rr_reloc_dir set deep directory relocation target: SetExtras. (line 74) -* -sparc-boot SUN SPARC boot images: SystemArea. (line 282) -* -sparc-label SUN Disk Label text: SystemArea. (line 284) +* -sparc-boot SUN SPARC boot images: SystemArea. (line 296) +* -sparc-label SUN Disk Label text: SystemArea. (line 298) * -sysid set System Id: ImageId. (line 43) * -transparent-compression enable recognition of zisofs files: SetInsert. (line 53) @@ -2139,9 +2160,9 @@ * -untranslated-filenames very relaxed filename rules: SetCompl. (line 34) * -untranslated_name_len untranslated file names: SetCompl. (line 36) -* -v enable verbous messages: Miscellaneous. (line 38) +* -v enable verbose messages: Miscellaneous. (line 38) * -V set Volume Id: ImageId. (line 13) -* -verbose enable verbous messages: Miscellaneous. (line 41) +* -verbose enable verbose messages: Miscellaneous. (line 41) * -version report program version: Miscellaneous. (line 43) * -volid set Volume Id: ImageId. (line 23) * -volset set Volume Set Id: ImageId. (line 25) @@ -2160,7 +2181,7 @@ * Abstract File, set path, -abstract: ImageId. (line 57) * ACL, record and load, --acl: SetExtras. (line 103) * APM, mark appended partitions, -appended_part_as_apm: SystemArea. - (line 215) + (line 229) * APM, _definition: SystemArea. (line 16) * Application Id, set, -A, -appid: ImageId. (line 34) * Backup, enable fidelity, --for_backup: SetExtras. (line 92) @@ -2184,31 +2205,31 @@ * Bootability, boot image patching, -boot-info-table: Bootable. (line 104) * Bootability, bootable MBR partition, --mbr-force-bootable: SystemArea. - (line 139) -* Bootability, control, --grub2-sparc-core: SystemArea. (line 286) + (line 145) +* Bootability, control, --grub2-sparc-core: SystemArea. (line 300) * Bootability, control, --efi-boot: Bootable. (line 59) -* Bootability, control, -alpha-boot: SystemArea. (line 309) +* Bootability, control, -alpha-boot: SystemArea. (line 323) * Bootability, control, -b, -eltorito-boot: Bootable. (line 38) -* Bootability, control, -B, -sparc-boot: SystemArea. (line 271) +* Bootability, control, -B, -sparc-boot: SystemArea. (line 285) * Bootability, control, -e: Bootable. (line 53) * Bootability, control, -eltorito-platform: Bootable. (line 63) -* Bootability, control, -hppa-bootloader: SystemArea. (line 298) -* Bootability, control, -hppa-cmdline: SystemArea. (line 292) -* Bootability, control, -hppa-hdrversion: SystemArea. (line 306) -* Bootability, control, -hppa-kernel_32: SystemArea. (line 300) -* Bootability, control, -hppa-kernel_64: SystemArea. (line 302) -* Bootability, control, -hppa-ramdisk: SystemArea. (line 304) -* Bootability, control, -mips-boot: SystemArea. (line 260) -* Bootability, control, -mipsel-boot: SystemArea. (line 266) +* Bootability, control, -hppa-bootloader: SystemArea. (line 312) +* Bootability, control, -hppa-cmdline: SystemArea. (line 306) +* Bootability, control, -hppa-hdrversion: SystemArea. (line 320) +* Bootability, control, -hppa-kernel_32: SystemArea. (line 314) +* Bootability, control, -hppa-kernel_64: SystemArea. (line 316) +* Bootability, control, -hppa-ramdisk: SystemArea. (line 318) +* Bootability, control, -mips-boot: SystemArea. (line 274) +* Bootability, control, -mipsel-boot: SystemArea. (line 280) * Bootability, El Torito section id string, -eltorito-id: Bootable. (line 93) * Bootability, El Torito selection criteria, -eltorito-selcrit: Bootable. (line 100) * Bootability, fill System Area e.g. by MBR, -G, --embedded-boot, -generic-boot: SystemArea. (line 68) -* Bootability, for CHRP, -chrp-boot-part: SystemArea. (line 244) -* Bootability, for EFI, -efi-boot-part: SystemArea. (line 221) -* Bootability, for PReP, -prep-boot-part: SystemArea. (line 255) +* Bootability, for CHRP, -chrp-boot-part: SystemArea. (line 258) +* Bootability, for EFI, -efi-boot-part: SystemArea. (line 235) +* Bootability, for PReP, -prep-boot-part: SystemArea. (line 269) * Bootability, install ISOLINUX isohybrid MBR, -isohybrid-mbr: SystemArea. (line 87) * Bootability, install modern GRUB2 MBR, --grub2-mbr: SystemArea. @@ -2225,8 +2246,8 @@ * Bootability, partitions like with isohybrid, -part_like_isohybrid: SystemArea. (line 120) * Bootability, patch System Area partition table, --protective-msdos-label: SystemArea. - (line 135) -* Bootability, SUN Disk Label text, -sparc-label: SystemArea. (line 284) + (line 141) +* Bootability, SUN Disk Label text, -sparc-label: SystemArea. (line 298) * Bootability, type of ISO MBR partition, -iso_mbr_part_type: SystemArea. (line 127) * Bugs, reporting: Bugreport. (line 6) @@ -2245,7 +2266,7 @@ * Disk files, exclude, -hide-list: SetInsert. (line 44) * Disk files, exclude, -m, -exclude, -x, -old-exclude: SetInsert. (line 31) -* Disk GUID, for GPT, --gpt_disk_guid: SystemArea. (line 231) +* Disk GUID, for GPT, --gpt_disk_guid: SystemArea. (line 245) * disk_path, _definition: Insert. (line 7) * ECMA-119, _definition: Standards. (line 6) * El Torito, _definition: Bootable. (line 13) @@ -2254,7 +2275,7 @@ * File timestamps, set all, --set_all_file_dates: SetExtras. (line 35) * Forced output, control, --stdio_sync: SetProduct. (line 23) * GPT, mark appended partitions, -appended_part_as_gpt: SystemArea. - (line 209) + (line 223) * GPT, _definition: SystemArea. (line 13) * Group, for all files, -gid: SetProduct. (line 83) * HFS+, enables production: SetExtras. (line 164) @@ -2272,7 +2293,7 @@ * Hiding, from ISO and Rock Ridge, -hide-list: SetHide. (line 15) * Hiding, from Joliet, -hide-joliet: SetHide. (line 18) * Hiding, from Joliet, -hide-joliet-list: SetHide. (line 22) -* Image size, alignment, -partition_cyl_align: SystemArea. (line 178) +* Image size, alignment, -partition_cyl_align: SystemArea. (line 184) * Incremental insertion, disable disk ino, --old-root-no-ino: SetInsert. (line 73) * Incremental insertion, disable MD5, --old-root-no-md5: SetInsert. @@ -2326,16 +2347,16 @@ * Joliet, _definition: Standards. (line 21) * Links, follow on disk, -f, -follow-links: SetInsert. (line 22) * Links, record and load hard links, --hardlinks: SetExtras. (line 130) -* MBR, GPT, append partition, -append_partition: SystemArea. (line 189) -* MBR, sectors per head, -partition_sec_hd: SystemArea. (line 161) -* MBR, sectors per head, -partition_sec_hd <1>: SystemArea. (line 164) +* MBR, GPT, append partition, -append_partition: SystemArea. (line 195) +* MBR, sectors per head, -partition_sec_hd: SystemArea. (line 167) +* MBR, sectors per head, -partition_sec_hd <1>: SystemArea. (line 170) * MBR, _definition: SystemArea. (line 9) * MD5, record and load, --md5: SetExtras. (line 122) * Message output, increase frequency, -gui: Miscellaneous. (line 29) * Message output, redirect stderr, -log-file: Miscellaneous. (line 33) * Message output, suppress, -quiet: Miscellaneous. (line 25) * Mountability, by non-trivial partition 1, -partition_offset: SystemArea. - (line 150) + (line 156) * Options, list, -help: Miscellaneous. (line 21) * Output file, set address, -o, -output: SetProduct. (line 8) * Ownership, for all files, -uid: SetProduct. (line 79) @@ -2387,31 +2408,31 @@ Node: Xorriso5616 Node: Options6762 Node: Loading7489 -Node: SetInsert9789 -Node: SetProduct14198 -Node: SetCompl19769 -Node: SetExtras22361 -Node: SetHide33655 -Node: ImageId34959 -Node: Bootable39241 -Node: SystemArea45527 -Node: Charset62893 -Node: Jigdo63918 -Node: Miscellaneous68195 -Node: Examples69840 -Node: ExSimple70334 -Node: ExGraft70817 -Node: ExMkisofs72117 -Node: ExGrowisofs73383 -Node: ExIncBackup74573 -Node: ExIncBckAcc77734 -Node: ExBootable79423 -Node: Files83605 -Node: Environ84700 -Node: Seealso85471 -Node: Bugreport86122 -Node: Legal86715 -Node: CommandIdx87612 -Node: ConceptIdx103479 +Node: SetInsert9531 +Node: SetProduct13940 +Node: SetCompl19511 +Node: SetExtras22103 +Node: SetHide33398 +Node: ImageId34702 +Node: Bootable38984 +Node: SystemArea45270 +Node: Charset63502 +Node: Jigdo64527 +Node: Miscellaneous68804 +Node: Examples70449 +Node: ExSimple70943 +Node: ExGraft71426 +Node: ExMkisofs72726 +Node: ExGrowisofs74535 +Node: ExIncBackup75725 +Node: ExIncBckAcc78902 +Node: ExBootable80607 +Node: Files84789 +Node: Environ85884 +Node: Seealso86757 +Node: Bugreport87408 +Node: Legal88001 +Node: CommandIdx88898 +Node: ConceptIdx104765  End Tag Table diff -Nru libisoburn-1.5.0/xorriso/xorrisofs.texi libisoburn-1.5.2/xorriso/xorrisofs.texi --- libisoburn-1.5.0/xorriso/xorrisofs.texi 2018-09-15 13:56:43.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorrisofs.texi 2019-10-26 18:15:29.000000000 +0000 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename xorrisofs.info -@settitle GNU xorrisofs 1.5.0 +@settitle GNU xorrisofs 1.5.2 @c %**end of header @c @c man-ignore-lines begin @@ -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 XORRISOFS 1 "Version 1.5.0, Sep 15, 2018" +@c man .TH XORRISOFS 1 "Version 1.5.2, Oct 26, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -68,15 +68,15 @@ @copying xorrisofs - Emulation of ISO 9660 program mkisofs by program xorriso -Copyright @copyright{} 2011 - 2017 Thomas Schmitt +Copyright @copyright{} 2011 - 2019 Thomas Schmitt @quotation -Permission is granted to distrubute this text freely. +Permission is granted to distribute this text freely. @end quotation @end copying @c man-ignore-lines end @titlepage -@title Manual of GNU xorriso personality xorrisofs 1.5.0 +@title Manual of GNU xorriso personality xorrisofs 1.5.2 @author Thomas Schmitt @page @vskip 0pt plus 1filll @@ -85,7 +85,7 @@ @contents @ifnottex @node Top -@top xorrisofs 1.5.0 +@top xorrisofs 1.5.2 @c man-ignore-lines 1 @c man .SH NAME @@ -325,12 +325,7 @@ @* Both values can be inquired from optical media by help of burn programs and cdrecord option -msinfo. xorriso itself can obtain it in its -cdrecord emulation. Do not let it load the drive, but rather do this manually -or by a program like dd which reads a few bytes. Only then it is sure that -the device driver knows the true readable size of the medium. -@* -@sp 1 - dd if=/dev/... count=1 >/dev/null 2>&1 +cdrecord emulation. @* values=$(xorriso -as cdrecord dev=/dev/... -msinfo) @* @@ -937,7 +932,7 @@ @cindex xattr, record and load, @minus{}@minus{}xattr-any @* Enable recording and loading of GNU/Linux or FreeBSD extended attributes in -all namespaces. This might need adminstrator privileges, even if the owner +all namespaces. This might need administrator privileges, even if the owner of the disk file tries to read the attributes. @c man .TP @item @minus{}@minus{}md5 @@ -1650,17 +1645,24 @@ Gaps between GPT and APM partitions will not be filled by more partitions. Appended partitions get mentioned in APM if other APM partitions emerge. @c man .TP -@item -iso_mbr_part_type "default"|number +@item -iso_mbr_part_type "default"|number|type_guid @kindex -iso_mbr_part_type Set type of ISO MBR partition @cindex Bootability, type of ISO MBR partition, -iso_mbr_part_type Set the partition type -of the MBR partition which represents the ISO or at least protects it. +of the MBR or GPT partition which represents the ISO or at least protects it. +@* Number may be 0x00 to 0xff. The text "default" re-enables the default types of the various occasions to create an ISO MBR partition. -@* This is without effect if no such partition emerges by other settings or if the partition type is prescribed mandatorily like 0xee for GPT protective MBR or 0x96 for CHRP. +@* +If instead a type_guid is given by a 32-digit hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like +EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, then it will be used as partition type +if the ISO filesystem appears as partition in GPT. +In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to 0xef. +Any other GUID will be mapped to 0x83. @c man .TP @item @minus{}@minus{}protective-msdos-label @kindex @minus{}@minus{}protective-msdos-label Patch System Area partition table @@ -1760,7 +1762,14 @@ or a hexadecimal number between 0x00 and 0xff. Not all those numbers will yield usable results. For a list of codes search the Internet for "Partition Types" or run fdisk command "L". -This code matters only with MBR, not with GPT. +If the partition appears in GPT then type_code 0xef is mapped to the EFI System +Partition Type GUID. All others get mapped to Basic Data Type GUID. +@* +type_code may also be a type GUID as plain hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like +EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. It will be used if the partition is +mentioned in GPT. In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped +to 0xef. Any other GUID will be mapped to 0x83. @* If some other command causes the production of GPT, then the appended partitions will be mentioned there too, even if not -appended_part_as_gpt @@ -2146,13 +2155,13 @@ output to stderr. @c man .TP @item -v -@kindex -v enable verbous messages +@kindex -v enable verbose messages @cindex Verbosity, high, -v, -verbose @* Enable the output of informational program messages. @c man .TP @item -verbose -@kindex -verbose enable verbous messages +@kindex -verbose enable verbose messages Alias of -v. @c man .TP @item -version @@ -2295,13 +2304,14 @@ | xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject - @* @sp 1 -Follow-up sessions are written like this: +Follow-up sessions are written like this (the run of dd is only to give demons +a chance to spoil it): @* @sp 1 - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -@* $ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) @* + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +@* $ xorrisofs -M /dev/sr0 -C $m -graft-points \ @* /tree2=prepared_for_iso/tree2 \ @@ -2309,14 +2319,25 @@ | xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject - @* @sp 1 -Always eject the drive tray between sessions. The old sessions -get read via /dev/sr0. Its device driver might not be aware -of the changed content before it loads the medium again. -In this case the previous session would not be loaded and the -new session would contain only the newly added files. +Always eject the drive tray between sessions. @* -For the same reason do not let xorriso -as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +The run of xorriso -as mkisofs will read old sessions via the CD-ROM +driver of /dev/sr0. This driver might not be aware of the changed content +as long as the medium is not loaded again. In this case the previous session +would not be properly assessed by xorriso and the new session would contain +only the newly added files. +@* +Some systems have not enough patience with automatic tray loading and some +demons may interfere with a first CD-ROM driver read attempt from a freshly +loaded medium. +@* +When loading the tray manually, wait 10 seconds after the drive has stopped +blinking. +@* +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall offer +itself to any problems caused by demons assessing the changed drive status. +If this does not help, insert a run of "sleep 10" between xorriso and dd. @c man .SS @c man .B Let xorrisofs work underneath growisofs @node ExGrowisofs, ExIncBackup, ExMkisofs, Examples @@ -2379,14 +2400,15 @@ update it until he run fails gracefully due to lack of remaining space on the old one. @* -Do not let xorriso -as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +Always eject the drive tray between sessions. +A run of dd shall give demons a chance to spoil the first read on freshly +loaded media. @* @sp 1 - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -@* $ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) @* + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +@* $ load_opts= @* $ test -n "$msinfo" && load_opts="-M /dev/sr0 -C $msinfo" @@ -2496,14 +2518,15 @@ With the second session, option -old-root refers to /session1 and the new -root is /session2. @* -Do not let xorriso -as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +Always eject the drive tray between sessions. +A run of dd shall give demons a chance to spoil the first read on freshly +loaded media. @* @sp 1 - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -@* $ msinfo=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) @* + $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +@* $ load_opts= @* $ test -n "$msinfo" && load_opts="-M /dev/sr0 -C $msinfo" @@ -2731,6 +2754,8 @@ @minus{}@minus{}modification-date=. @minus{}@minus{}gpt_disk_guid defaults to "modification-date". The default of @minus{}@minus{}set_all_file_dates is then "set_to_mtime". +Further the "now" time for ISO nodes without disk source is then set to +the SOURCE_DATE_EPOCH value. @* Startup files and program options can override the effect of SOURCE_DATE_EPOCH. @c man .SS @@ -2827,7 +2852,7 @@ 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 -Nru libisoburn-1.5.0/xorriso/xorriso.h libisoburn-1.5.2/xorriso/xorriso.h --- libisoburn-1.5.0/xorriso/xorriso.h 2018-09-15 13:48:04.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso.h 2019-10-26 18:09:43.000000000 +0000 @@ -2,7 +2,7 @@ /* xorriso - libisoburn higher level API which creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2018 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Provided under GPL version 2 or later. @@ -74,7 +74,7 @@ */ #define Xorriso_header_version_majoR 1 #define Xorriso_header_version_minoR 5 -#define Xorriso_header_version_micrO 0 +#define Xorriso_header_version_micrO 2 /** If needed: Something like ".pl01" to indicate a bug fix. Normally empty. @@ -820,6 +820,9 @@ (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_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, @@ -1645,6 +1652,10 @@ /* @since 0.1.0 */ int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag); +/* Command -iso_nowtime "dynamic"|timespec */ +/* @since 1.5.2 */ +int Xorriso_option_iso_nowtime(struct XorrisO *xorriso, char *text, int flag); + /* Command -iso_rr_pattern "on"|"ls"|"off" */ /* @since 0.1.0 */ int Xorriso_option_iso_rr_pattern(struct XorrisO *xorriso, char *mode, diff -Nru libisoburn-1.5.0/xorriso/xorriso.info libisoburn-1.5.2/xorriso/xorriso.info --- libisoburn-1.5.0/xorriso/xorriso.info 2018-09-15 13:56:01.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso.info 2019-10-26 18:15:15.000000000 +0000 @@ -4,9 +4,9 @@ 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. + Permission is granted to distribute this text freely. INFO-DIR-SECTION Archiving START-INFO-DIR-ENTRY * Xorriso: (xorriso). Burns ISO 9660 on CD, DVD, BD. @@ -15,7 +15,7 @@  File: xorriso.info, Node: Top, Next: Overview, Up: (dir) -GNU xorriso 1.5.0 +GNU xorriso 1.5.2 ***************** xorriso - creates, loads, manipulates and writes ISO 9660 filesystem @@ -638,6 +638,58 @@ 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 @@ 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 @@ -856,7 +879,7 @@ Modes "on" and "user" read and write only attributes from namespace "user". Mode "any" processes attributes of all namespaces. This might need - adminstrator privileges, even if the owner of the disk file tries + administrator privileges, even if the owner of the disk file tries to read or write the attributes. Note that xattr from namespace "isofs." are never read from disk or restored to disk. Further it is not possible to set them via @@ -915,6 +938,12 @@ mount behavior. Mode "uppercase" is like "stripped" but maps lowercase letters to uppercase, if any occur despite the prescriptions of ECMA-119. +-iso_nowtime "dynamic"|timestring + Choose whether to use the current time ("dynamic") or a fixed time + 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 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 @@ -1399,7 +1428,7 @@ While command -split_size is set larger than 0 such a directory with split file pieces will be recognized and handled like a regular file by commands -compare* , -update*, and in overwrite - situations. There are -ossirox parameters "concat_split_on" and + situations. There are -osirrox parameters "concat_split_on" and "concat_split_off" which control the handling when files get restored to disk. In order to be recognizable, the names of the part files have to @@ -2732,7 +2761,7 @@ "appended_partition_NNN" with a decimal number NNN works only for -boot_image bootspecs which announce El Torito boot image paths: bin_path=, efi_path=. The number gives the partition number as used -with the corresponding option -append_partition. +with the corresponding command -append_partition. The component Interval consists of two byte address numbers separated by a "-" character. E.g. "0-429" means to read bytes 0 to 429. The component Zeroizers consists of zero or more comma separated @@ -2927,12 +2956,18 @@ APM if other APM partitions emerge. *-boot_image any iso_mbr_part_type=*number sets the partition type of the MBR partition which represents the ISO or at least protects - it. Number may be 0x00 to 0xff. The text "default" re-enables the + it. + Number may be 0x00 to 0xff. The text "default" re-enables the default types of the various occasions to create an ISO MBR - partition. - This is without effect if no such partition emerges by other - settings or if the partition type is prescribed mandatorily like - 0xee for GPT protective MBR or 0x96 for CHRP. + partition. This is without effect if no such partition emerges by + other settings or if the partition type is prescribed mandatorily + like 0xee for GPT protective MBR or 0x96 for CHRP. + If instead a type_guid is given by a 32-digit hex string like + a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like + EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, then it will be used as + partition type if the ISO filesystem appears as partition in GPT. + In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to + 0xef. Any other GUID will be mapped to 0x83. *grub2_mbr=*disk_path works like "any" system_area= with additional patching for modern GRUB MBRs. The content start address of the first boot image is converted to a count of 512 byte blocks, and an @@ -3114,8 +3149,14 @@ natural choice. The type_code may be "FAT12", "FAT16", "Linux", or a hexadecimal number between 0x00 and 0xff. Not all those numbers will yield - usable results. For a list of codes search the Internet for - "Partition Types" or run fdisk command "L". + usable results. For a list of MBR partition type codes search the + Internet for "Partition Types" or run fdisk command "L". + type_code may also be a type GUID as plain hex string like + a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like + EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. It will be used if the + partition is mentioned in GPT. In MBR, + C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to 0xef. Any + other GUID will be mapped to 0x83. If some other command causes the production of GPT, then the appended partitions will be mentioned there too. The disk_path must provide the necessary data bytes at commit time. @@ -3914,6 +3955,13 @@ other quality. The former is a strong confirmation for quality, the latter only tells that one or more blocks of the region must be wrong. + By default bad_limit is set higher than md5_mismatch, so that + mismatches are classified as quality class "0" rather than + "-". This means that the sectors of a MD5 mismatch range are + recorded in the sector_map as successfully read, if the drive + handed them out at all. Set "bad_limit=md5_mismatch" to let + the sector_map record the whole mismatching range as yet not + retrieved. slow_limit=threshold sets the time threshold for a single read chunk to be considered slow. This may be a fractional number like 0.1 or @@ -3992,11 +4040,11 @@ 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 @@ -4426,7 +4474,7 @@ The first three items are single words, the rest of the line is the volume ID. -scsi_log "on"|"off" - Mode "on" enables very verbous logging of SCSI commands and drive + Mode "on" enables very verbose logging of SCSI commands and drive replies. Logging messages get printed to stderr, not to any of the 'xorriso' output channels. A special property of this command is that the first -scsi_log @@ -4875,20 +4923,30 @@ $ xorriso -as mkisofs prepared_for_iso/tree1 | \ xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject - - Follow-up sessions are written like this: + Follow-up sessions are written like this (the run of dd is only to +give demons a chance to spoil it): - $ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -$ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) + $ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \ xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject - - Always eject the drive tray between sessions. The old sessions get -read via /dev/sr0. Its device driver might not be aware of the changed -content before it loads the medium again. In this case the previous -session would not be loaded and the new session would contain only the -newly added files. -For the same reason do not let 'xorriso' -as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. + Always eject the drive tray between sessions. +The run of xorriso -as mkisofs will read old sessions via the CD-ROM +driver of /dev/sr0. This driver might not be aware of the changed +content as long as the medium is not loaded again. In this case the +previous session would not be properly assessed by xorriso and the new +session would contain only the newly added files. +Some systems have not enough patience with automatic tray loading and +some demons may interfere with a first CD-ROM driver read attempt from a +freshly loaded medium. +When loading the tray manually, wait 10 seconds after the drive has +stopped blinking. +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall +offer itself to any problems caused by demons assessing the changed +drive status. If this does not help, insert a run of "sleep 10" between +xorriso and dd. This example works for multi-session media only. Add cdrskin option --grow_overwriteable_iso to all -as cdrecord runs in order to enable @@ -4931,7 +4989,7 @@ 10.12 Adjust thresholds for verbosity, exit value and program abort =================================================================== -Be quite verbous, exit 32 if severity "FAILURE" was encountered, do not +Be quite verbose, exit 32 if severity "FAILURE" was encountered, do not abort prematurely but forcibly go on until the end of commands. $ xorriso ... \ @@ -5156,8 +5214,9 @@ is supposed to be either undefined or to contain a decimal number which tells the seconds since january 1st 1970. If it contains a number, then it is used as time value to set the default of -volume date "uuid", sets --boot_image "any" "gpt_disk_guid=" to "volume_date_uuid", and --volume_date "all_file_dates" to "set_to_mtime", +-boot_image "any" "gpt_disk_guid=" to "volume_date_uuid", -volume_date +"all_file_dates" to "set_to_mtime", and -iso_nowtime to +"=$SOURCE_DATE_EPOCH". Startup files and program options can override the effect of SOURCE_DATE_EPOCH. @@ -5217,7 +5276,7 @@ 15.2 Copyright ============== -Copyright (c) 2007 - 2018 Thomas Schmitt +Copyright (c) 2007 - 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 @@ -5246,30 +5305,30 @@ * # 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) * -alter_date_r sets timestamps in ISO image: Manip. (line 174) * -append_partition adds arbitrary file after image end: Bootable. - (line 415) + (line 421) * -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 336) +* -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 326) +* -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) * -charset sets input/output character set: Charset. (line 54) -* -check_md5 verifies file checksum: Verify. (line 166) -* -check_md5_r verifies file tree checksums: Verify. (line 180) +* -check_md5 verifies file checksum: Verify. (line 173) +* -check_md5_r verifies file tree checksums: Verify. (line 187) * -check_media reads media block by block: Verify. (line 21) * -check_media_defaults sets -check_media options: Verify. (line 40) * -chgrp sets group in ISO image: Manip. (line 49) @@ -5297,24 +5356,25 @@ * -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 352) +* -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 246) +* -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 340) -* -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) @@ -5325,27 +5385,29 @@ * -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 266) +* -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 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) @@ -5373,7 +5435,7 @@ * -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) @@ -5414,7 +5476,7 @@ * -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) @@ -5430,10 +5492,10 @@ (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 298) +* -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) @@ -5477,7 +5539,7 @@ * -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)  @@ -5489,23 +5551,23 @@ [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) * ACL, show in ISO image, -getfacl: Navigate. (line 60) * ACL, show in ISO image, -getfacl_r: Navigate. (line 66) * ACL, _definition: Extras. (line 50) -* APM block size: Bootable. (line 406) +* APM block size: Bootable. (line 412) * APM, _definition: Extras. (line 42) * Appendable media, _definition: Media. (line 38) -* Appended Filesystem Image, -append_partition: Bootable. (line 415) -* Appended partition, in APM: Bootable. (line 283) -* Appended partition, in MBR or GPT: Bootable. (line 276) +* Appended Filesystem Image, -append_partition: Bootable. (line 421) +* Appended partition, in APM: Bootable. (line 289) +* 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 246) -* 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) @@ -5513,24 +5575,25 @@ * 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 288) +* CHRP partition, _definition: Bootable. (line 294) * Closed media, _definition: Media. (line 44) * Comment, #: Scripting. (line 156) * Control, signal handling, -signal_handling: Exception. (line 66) * Create, new ISO image, _definition: Methods. (line 7) -* Cylinder alignment, _definition: Bootable. (line 332) -* Cylinder size, _definition: Bootable. (line 317) +* Cylinder alignment, _definition: Bootable. (line 338) +* Cylinder size, _definition: Bootable. (line 323) * Damaged track and session, close, -close_damaged: Writing. (line 164) -* DEC Alpha SRM boot sector, production: Bootable. (line 392) +* DEC Alpha SRM boot sector, production: Bootable. (line 398) * 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) @@ -5542,9 +5605,9 @@ * 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 340) -* Drive, demand real MMC, -ban_stdio_write: Loading. (line 336) +* 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) @@ -5552,13 +5615,13 @@ * 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 326) +* 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) * EA, _definition: Extras. (line 66) * ECMA-119, _definition: Model. (line 6) -* EFI system partition, _definition: Bootable. (line 297) +* EFI system partition, _definition: Bootable. (line 303) * El Torito, _definition: Extras. (line 19) * Emulation, -as: Emulation. (line 13) * Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 155) @@ -5568,8 +5631,8 @@ * 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 266) -* 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) @@ -5587,15 +5650,15 @@ * 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) -* HFS+ allocation block size: Bootable. (line 403) -* HFS+ serial number: Bootable. (line 400) +* 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 375) -* Image reading, cache size, -data_cache_size: Loading. (line 352) -* Image, demand volume ID, -assert_volid: Loading. (line 113) +* HP-PA boot sector, production: Bootable. (line 381) +* 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) @@ -5644,18 +5707,19 @@ * Jigdo Template Extraction, -jigdo: Jigdo. (line 33) * Jigdo Template Extraction, _definition: Jigdo. (line 6) * LBA, _definition: Drives. (line 17) -* 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 343) +* 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) * Media, list write speeds, -list_speeds: Writing. (line 140) -* MIPS boot file, activation: Bootable. (line 354) +* MIPS boot file, activation: Bootable. (line 360) * mkisofs, Emulation: Emulation. (line 17) * Modifying, _definition: Methods. (line 28) * Multi-session media, _definition: Media. (line 7) @@ -5676,21 +5740,21 @@ * 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) * Ownership, in ISO image, -chown: Manip. (line 43) * Ownership, in ISO image, -chown_r: Manip. (line 47) -* Partition offset, _definition: Bootable. (line 307) -* Partition table, _definition: Bootable. (line 257) +* Partition offset, _definition: Bootable. (line 313) +* Partition table, _definition: Bootable. (line 263) * Pathspec, _definition: SetInsert. (line 117) * Pattern expansion, for disk paths, -disk_pattern: Insert. (line 34) * Pattern expansion, for ISO paths, -iso_rr_pattern: Manip. (line 10) * Pattern expansion, _definition: Processing. (line 25) * Permissions, in ISO image, -chmod: Manip. (line 55) * Permissions, in ISO image, -chmod_r: Manip. (line 66) -* PReP partition, _definition: Bootable. (line 292) +* PReP partition, _definition: Bootable. (line 298) * Problems, reporting: Bugreport. (line 6) * Process, consolidate text output, -pkt_output: Frontend. (line 7) * Process, control abort on error, -abort_on: Exception. (line 27) @@ -5750,11 +5814,11 @@ * Session, select as input, -load: Loading. (line 33) * Session, _definition: Model. (line 6) * Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26) -* SUN Disk Label, production: Bootable. (line 365) -* SUN SPARC boot images, activation: Bootable. (line 438) +* SUN Disk Label, production: Bootable. (line 371) +* 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 298) +* 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) @@ -5765,8 +5829,8 @@ * Verify, compare ISO and disk file, -compare: Navigate. (line 131) * Verify, compare ISO and disk tree, -compare_r: Navigate. (line 143) * Verify, compare ISO and disk, -compare_l: Navigate. (line 147) -* Verify, file checksum, -check_md5: Verify. (line 166) -* Verify, file tree checksums, -check_md5_r: Verify. (line 180) +* Verify, file checksum, -check_md5: Verify. (line 173) +* Verify, file tree checksums, -check_md5_r: Verify. (line 187) * Verify, preset -check_media, -check_media_defaults: Verify. (line 40) * Write, block size, -dvd_obs: SetWrite. (line 330) * Write, bootability, -boot_image: Bootable. (line 75) @@ -5788,7 +5852,7 @@ * 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) @@ -5811,49 +5875,49 @@ Node: Commands25598 Node: ArgSort27275 Node: AqDrive28769 -Node: Loading32883 -Node: Insert54149 -Node: SetInsert65652 -Node: Manip75084 -Node: CmdFind85184 -Node: Filter104113 -Node: Writing108735 -Node: SetWrite118891 -Node: Bootable143650 -Node: Jigdo169845 -Node: Charset174104 -Node: Exception177433 -Node: DialogCtl183562 -Node: Inquiry186164 -Node: Navigate195048 -Node: Verify203505 -Node: Restore213528 -Node: Emulation222141 -Node: Scripting232600 -Node: Frontend240383 -Node: Examples250009 -Node: ExDevices251187 -Node: ExCreate251848 -Node: ExDialog253148 -Node: ExGrowing254419 -Node: ExModifying255228 -Node: ExBootable255738 -Node: ExCharset256293 -Node: ExPseudo257189 -Node: ExCdrecord258116 -Node: ExMkisofs258436 -Node: ExGrowisofs259793 -Node: ExException260947 -Node: ExTime261405 -Node: ExIncBackup261863 -Node: ExRestore265889 -Node: ExRecovery266835 -Node: Files267407 -Node: Environ268741 -Node: Seealso269450 -Node: Bugreport270167 -Node: Legal270758 -Node: CommandIdx271770 -Node: ConceptIdx289104 +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 -Nru libisoburn-1.5.0/xorriso/xorriso_main.c libisoburn-1.5.2/xorriso/xorriso_main.c --- libisoburn-1.5.0/xorriso/xorriso_main.c 2018-09-15 13:49:52.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso_main.c 2019-10-26 18:11:15.000000000 +0000 @@ -2,7 +2,7 @@ /* xorriso - Command line oriented batch and dialog tool which creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2018 Thomas Schmitt, + Copyright 2007-2019 Thomas Schmitt, Initial code of this program was derived from program src/askme.c out of scdbackup-0.8.8, Copyright 2007 Thomas Schmitt, BSD-License. @@ -111,7 +111,7 @@ */ #define Xorriso_req_majoR 1 #define Xorriso_req_minoR 5 -#define Xorriso_req_micrO 0 +#define Xorriso_req_micrO 2 static void yell_xorriso() diff -Nru libisoburn-1.5.0/xorriso/xorriso_private.h libisoburn-1.5.2/xorriso/xorriso_private.h --- libisoburn-1.5.0/xorriso/xorriso_private.h 2017-10-23 09:58:24.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso_private.h 2019-09-07 18:45:12.000000000 +0000 @@ -2,7 +2,7 @@ /* Command line oriented batch and dialog tool which 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. @@ -288,6 +288,7 @@ 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 @@ 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 @@ 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. */ @@ -495,6 +498,11 @@ /* Path and type of image files to be appended as MBR partitions */ char *appended_partitions[Xorriso_max_appended_partitionS]; uint8_t appended_part_types[Xorriso_max_appended_partitionS]; + uint8_t appended_part_type_guids[Xorriso_max_appended_partitionS][16]; + /* Flags in case that appended partitions show up in GPT: + bit0= appended_part_type_guids is valid + */ + uint8_t appended_part_gpt_flags[Xorriso_max_appended_partitionS]; /* If 1: With appended partitions: create protective MBR and mark by GPT */ int appended_as_gpt; /* If 1: With appended partitions: mark by APM */ @@ -507,6 +515,11 @@ if not real GPT or CHRP. */ int iso_mbr_part_type; + uint8_t iso_gpt_type_guid[16]; + int iso_mbr_part_flag; + /* Flags in case that the partition table is GPT: + bit0= iso_gpt_type_guid is valid + */ /* See libisoburn.h isoburn_igopt_set_gpt_guid() */ uint8_t gpt_guid[16]; @@ -544,6 +557,12 @@ */ char all_file_dates[80]; + /* Timestamp for ISO files which have no origin file on disk and thus + normally get time(NULL) as timestamps + */ + int do_override_now_time; + time_t now_time_override; + #ifdef Xorriso_with_libjtE /* Parameters and state of Jigdo Template Export environment */ struct libjte_env *libjte_handle; diff -Nru libisoburn-1.5.0/xorriso/xorriso-tcltk.1 libisoburn-1.5.2/xorriso/xorriso-tcltk.1 --- libisoburn-1.5.0/xorriso/xorriso-tcltk.1 2017-09-29 11:46:19.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso-tcltk.1 2019-10-26 18:17:52.000000000 +0000 @@ -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-TCLTK 1 "Version 1.4.9, Sep 29, 2017" +.TH XORRISO-TCLTK 1 "Version 1.5.2, Oct 26, 2019" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -119,7 +119,7 @@ .br for libburnia\-project.org .SH COPYRIGHT -Copyright (c) 2011 \- 2017 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\-tcltk. diff -Nru libisoburn-1.5.0/xorriso/xorriso-tcltk.info libisoburn-1.5.2/xorriso/xorriso-tcltk.info --- libisoburn-1.5.0/xorriso/xorriso-tcltk.info 2017-09-29 11:46:14.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso-tcltk.info 2019-10-26 18:18:04.000000000 +0000 @@ -3,9 +3,9 @@ xorriso-tcltk - Educational GUI frontend for xorriso - Copyright (C) 2011 - 2017 Thomas Schmitt + Copyright (C) 2011 - 2019 Thomas Schmitt - Permission is granted to distrubute this text freely. + Permission is granted to distribute this text freely. INFO-DIR-SECTION Archiving START-INFO-DIR-ENTRY * Xorriso-tcltk: (xorriso-tcltk). Educational GUI frontend for xorriso @@ -14,7 +14,7 @@  File: xorriso-tcltk.info, Node: Top, Next: Overview, Up: (dir) -xorriso-tcltk 1.4.9 +xorriso-tcltk 1.5.2 ******************* xorriso-tcltk - Educational GUI frontend for xorriso @@ -147,7 +147,7 @@ 7.2 Copyright ============= -Copyright (c) 2011 - 2017 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-tcltk. If you make use of the license to derive modified versions of xorriso-tcltk diff -Nru libisoburn-1.5.0/xorriso/xorriso-tcltk.texi libisoburn-1.5.2/xorriso/xorriso-tcltk.texi --- libisoburn-1.5.0/xorriso/xorriso-tcltk.texi 2017-09-29 11:46:06.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso-tcltk.texi 2019-10-26 18:17:31.000000000 +0000 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename xorriso-tcltk.info -@settitle GNU xorriso-tcltk 1.4.9 +@settitle GNU xorriso-tcltk 1.5.2 @c %**end of header @c @c man-ignore-lines begin @@ -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-TCLTK 1 "Version 1.4.9, Sep 29, 2017" +@c man .TH XORRISO-TCLTK 1 "Version 1.5.2, Oct 26, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -68,15 +68,15 @@ @copying xorriso-tcltk - Educational GUI frontend for xorriso -Copyright @copyright{} 2011 - 2017 Thomas Schmitt +Copyright @copyright{} 2011 - 2019 Thomas Schmitt @quotation -Permission is granted to distrubute this text freely. +Permission is granted to distribute this text freely. @end quotation @end copying @c man-ignore-lines end @titlepage -@title Manual of GNU xorriso frontend xorriso-tcltk 1.4.9 +@title Manual of GNU xorriso frontend xorriso-tcltk 1.5.2 @author Thomas Schmitt @page @vskip 0pt plus 1filll @@ -85,7 +85,7 @@ @contents @ifnottex @node Top -@top xorriso-tcltk 1.4.9 +@top xorriso-tcltk 1.5.2 @c man-ignore-lines 1 @c man .SH NAME @@ -237,7 +237,7 @@ for libburnia-project.org @c man .SH COPYRIGHT @section Copyright -Copyright (c) 2011 - 2017 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-tcltk. diff -Nru libisoburn-1.5.0/xorriso/xorriso.texi libisoburn-1.5.2/xorriso/xorriso.texi --- libisoburn-1.5.0/xorriso/xorriso.texi 2018-09-15 13:55:54.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso.texi 2019-10-26 18:14:47.000000000 +0000 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename xorriso.info -@settitle GNU xorriso 1.5.0 +@settitle GNU xorriso 1.5.2 @c %**end of header @c @c man-ignore-lines begin @@ -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.0, Sep 15, 2018" +@c man .TH XORRISO 1 "Version 1.5.2, Oct 26, 2019" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -69,15 +69,15 @@ 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. +Permission is granted to distribute this text freely. @end quotation @end copying @c man-ignore-lines end @titlepage -@title Manual of GNU xorriso 1.5.0 +@title Manual of GNU xorriso 1.5.2 @author Thomas Schmitt @page @vskip 0pt plus 1filll @@ -86,7 +86,7 @@ @contents @ifnottex @node Top -@top GNU xorriso 1.5.0 +@top GNU xorriso 1.5.2 @c man-ignore-lines 1 @c man .SH NAME @@ -903,6 +903,68 @@ 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 @@ 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 @@ -1191,9 +1216,9 @@ @* Modes "on" and "user" read and write only attributes from namespace "user". @* -Mode "any" processes attributes of all namespaces. This might need adminstrator -privileges, even if the owner of the disk file tries to read or write the -attributes. +Mode "any" processes attributes of all namespaces. This might need +administrator privileges, even if the owner of the disk file tries to read or +write the attributes. @* Note that xattr from namespace "isofs." are never read from disk or restored to disk. Further it is not possible to set them via xorriso xattr manipulation @@ -1269,6 +1294,16 @@ Mode "uppercase" is like "stripped" but maps lowercase letters to uppercase, if any occur despite the prescriptions of ECMA-119. @c man .TP +@item -iso_nowtime "dynamic"|timestring +@kindex -iso_nowtime fixed "now" time for ISO 9660 objects +@cindex libisofs, fixed "now" time +Choose whether to use the current time ("dynamic") or a fixed time 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 timestrings see command @strong{-alter_date}. +@c man .TP @item -disk_dev_ino "on"|"ino_only"|"off" @kindex -disk_dev_ino fast incremental backup @cindex Backup, enable fast incremental, -disk_dev_ino @@ -1933,7 +1968,7 @@ @* While command -split_size is set larger than 0 such a directory with split file pieces will be recognized and handled like a regular file by commands --compare* , -update*, and in overwrite situations. There are -ossirox +-compare* , -update*, and in overwrite situations. There are -osirrox parameters "concat_split_on" and "concat_split_off" which control the handling when files get restored to disk. @* @@ -3762,7 +3797,7 @@ "appended_partition_NNN" with a decimal number NNN works only for -boot_image bootspecs which announce El Torito boot image paths: bin_path=, efi_path=. The number gives the partition number as used with the corresponding -option -append_partition. +command -append_partition. @* The component Interval consists of two byte address numbers separated by a "-" character. E.g. "0-429" means to read bytes 0 to 429. @* @@ -4021,13 +4056,20 @@ @* @strong{-boot_image any iso_mbr_part_type=}number sets the partition type of the MBR partition which represents the ISO or at least protects it. +@* Number may be 0x00 to 0xff. The text "default" re-enables the default types of the various occasions to create an ISO MBR partition. -@* This is without effect if no such partition emerges by other settings or if the partition type is prescribed mandatorily like 0xee for GPT protective MBR or 0x96 for CHRP. @* +If instead a type_guid is given by a 32-digit hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or by a structured text like +EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, then it will be used as partition type +if the ISO filesystem appears as partition in GPT. +In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped to 0xef. +Any other GUID will be mapped to 0x83. +@* @strong{grub2_mbr=}disk_path works like "any" system_area= with additional patching for modern GRUB MBRs. The content start address of the first boot image is converted to a count of 512 byte blocks, and an offset of 4 is added. @@ -4265,8 +4307,14 @@ @* The type_code may be "FAT12", "FAT16", "Linux", or a hexadecimal number between 0x00 and 0xff. Not all those numbers will -yield usable results. For a list of codes search the Internet for -"Partition Types" or run fdisk command "L". +yield usable results. For a list of MBR partition type codes search the +Internet for "Partition Types" or run fdisk command "L". +@* +type_code may also be a type GUID as plain hex string like +a2a0d0ebe5b9334487c068b6b72699c7 or as structured text like +EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. It will be used if the partition is +mentioned in GPT. In MBR, C12A7328-F81F-11D2-BA4B-00A0C93EC93B will be mapped +to 0xef. Any other GUID will be mapped to 0x83. @* If some other command causes the production of GPT, then the appended partitions will be mentioned there too. @@ -5380,6 +5428,12 @@ The former is a strong confirmation for quality, the latter only tells that one or more blocks of the region must be wrong. @* +By default bad_limit is set higher than md5_mismatch, so that mismatches are +classified as quality class "0" rather than "-". This means that the sectors +of a MD5 mismatch range are recorded in the sector_map as successfully read, +if the drive handed them out at all. Set "bad_limit=md5_mismatch" to let the +sector_map record the whole mismatching range as yet not retrieved. +@* @item slow_limit=threshold sets the time threshold for a single read chunk to be considered slow. This may be a fractional number like 0.1 or 1.5. @@ -5475,7 +5529,8 @@ 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]. @@ -6107,7 +6162,7 @@ @item -scsi_log "on"|"off" @kindex -scsi_log reports SCSI commands @cindex Drive, report SCSI commands, -scsi_log -Mode "on" enables very verbous logging of SCSI commands and drive replies. +Mode "on" enables very verbose logging of SCSI commands and drive replies. Logging messages get printed to stderr, not to any of the @command{xorriso} output channels. @* @@ -6753,26 +6808,38 @@ xorriso -as cdrecord -v dev=/dev/sr0 blank=fast -multi -eject - @* @sp 1 -Follow-up sessions are written like this: +Follow-up sessions are written like this (the run of dd is only to give demons +a chance to spoil it): @* @sp 1 -$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 -@* $ m=$(xorriso -as cdrecord dev=/dev/sr0 -msinfo) @* +$ dd if=/dev/sr0 count=1 >/dev/null 2>&1 +@* $ xorriso -as mkisofs -M /dev/sr0 -C $m prepared_for_iso/tree2 | \ @* xorriso -as cdrecord -v dev=/dev/sr0 -waiti -multi -eject - @* @sp 1 -Always eject the drive tray between sessions. The old sessions -get read via /dev/sr0. Its device driver might not be aware -of the changed content before it loads the medium again. -In this case the previous session would not be loaded and the -new session would contain only the newly added files. +Always eject the drive tray between sessions. @* -For the same reason do not let @command{xorriso} -as cdrecord load the medium, -but rather do this manually or by a program that reads from /dev/sr0. +The run of xorriso -as mkisofs will read old sessions via the CD-ROM +driver of /dev/sr0. This driver might not be aware of the changed content +as long as the medium is not loaded again. In this case the previous session +would not be properly assessed by xorriso and the new session would contain +only the newly added files. +@* +Some systems have not enough patience with automatic tray loading and some +demons may interfere with a first CD-ROM driver read attempt from a freshly +loaded medium. +@* +When loading the tray manually, wait 10 seconds after the drive has stopped +blinking. +@* +A safe automatic way seems to be a separate run of xorriso for loading +the tray with proper waiting, and a subsequent run of dd which shall offer +itself to any problems caused by demons assessing the changed drive status. +If this does not help, insert a run of "sleep 10" between xorriso and dd. @* @sp 1 This example works for multi-session media only. @@ -6822,7 +6889,7 @@ @c man .B Adjust thresholds for verbosity, exit value and program abort @node ExException, ExTime, ExGrowisofs, Examples @section Adjust thresholds for verbosity, exit value and program abort -Be quite verbous, exit 32 if severity "FAILURE" was encountered, +Be quite verbose, exit 32 if severity "FAILURE" was encountered, do not abort prematurely but forcibly go on until the end of commands. @* @sp 1 @@ -7118,7 +7185,8 @@ which tells the seconds since january 1st 1970. If it contains a number, then it is used as time value to set the default of -volume date "uuid", sets -boot_image "any" "gpt_disk_guid=" to -"volume_date_uuid", and -volume_date "all_file_dates" to "set_to_mtime", +"volume_date_uuid", -volume_date "all_file_dates" to "set_to_mtime", +and -iso_nowtime to "=$SOURCE_DATE_EPOCH". @* Startup files and program options can override the effect of SOURCE_DATE_EPOCH. @* @@ -7220,7 +7288,7 @@ for libburnia-project.org @c man .SH COPYRIGHT @section Copyright -Copyright (c) 2007 - 2018 Thomas Schmitt +Copyright (c) 2007 - 2019 Thomas Schmitt @* Permission is granted to distribute this text freely. It shall only be modified in sync with the technical properties of @command{xorriso}. diff -Nru libisoburn-1.5.0/xorriso/xorriso_timestamp.h libisoburn-1.5.2/xorriso/xorriso_timestamp.h --- libisoburn-1.5.0/xorriso/xorriso_timestamp.h 2018-09-15 13:55:28.000000000 +0000 +++ libisoburn-1.5.2/xorriso/xorriso_timestamp.h 2019-10-26 18:14:29.000000000 +0000 @@ -1 +1 @@ -#define Xorriso_timestamP "2018.09.15.133001" +#define Xorriso_timestamP "2019.10.26.180001"