Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libostree for openSUSE:Factory checked in at 2026-11-01 22:21:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libostree (Old) and /work/SRC/openSUSE:Factory/.libostree.new.1255 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libostree" Sun Nov 1 22:21:42 2026 rev:58 rq:1394078 version:2026.6 Changes: -------- --- /work/SRC/openSUSE:Factory/libostree/libostree.changes 2026-10-30 18:12:34.403953256 +0100 +++ /work/SRC/openSUSE:Factory/.libostree.new.1255/libostree.changes 2026-11-01 22:21:59.586453330 +0100 @@ -1,0 +2,13 @@ +Sat Oct 31 10:38:55 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to version 2026.6: + * sign: Compare OpenSSL sign results against 1, test more spki cases + * core: Reject duplicate names in dirtree objects + * static-delta: Parse superblock files as untrusted + * prepare-root: Allow /run/ostree to exist already + * fetcher-uri: Keep https scheme when dropping default port + * rofiles-fuse: Check hardlinks for O_TRUNC opens and removexattr + * sign-spki: Pass GBytes when looking up revoked keys + * static-delta: Avoid mapping BSPATCH output on FUSE + +------------------------------------------------------------------- Old: ---- libostree-2026.5.tar.xz New: ---- libostree-2026.6.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libostree.spec ++++++ --- /var/tmp/diff_new_pack.U1zJF8/_old 2026-11-01 22:22:00.503491331 +0100 +++ /var/tmp/diff_new_pack.U1zJF8/_new 2026-11-01 22:22:00.505491414 +0100 @@ -24,7 +24,7 @@ %bcond_without ed25519 %bcond_with tests Name: libostree -Version: 2026.5 +Version: 2026.6 Release: 0 Summary: Git for operating system binaries License: LGPL-2.0-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.U1zJF8/_old 2026-11-01 22:22:00.538492781 +0100 +++ /var/tmp/diff_new_pack.U1zJF8/_new 2026-11-01 22:22:00.541492906 +0100 @@ -1,7 +1,7 @@ -mtime: 1792837151 -commit: 7c37e52ccbe92b1828aafd790a5b243cd58dff15eb58d4ca0ae63caf5609db3d +mtime: 1793447325 +commit: f7991c2e6aab4faa2b4faf1a31444aa25fefc6521f46bbd596197d09e46c6ea4 url: https://src.opensuse.org/GNOME/libostree -revision: 7c37e52ccbe92b1828aafd790a5b243cd58dff15eb58d4ca0ae63caf5609db3d +revision: f7991c2e6aab4faa2b4faf1a31444aa25fefc6521f46bbd596197d09e46c6ea4 trackingbranch: factory projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-10-31 12:48:45.000000000 +0100 @@ -0,0 +1,5 @@ +*.obscpio +*.osc +_build.* +.pbuild +osc-collab.* ++++++ libostree-2026.5.tar.xz -> libostree-2026.6.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/Makefile-tests.am new/libostree-2026.6/Makefile-tests.am --- old/libostree-2026.5/Makefile-tests.am 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/Makefile-tests.am 2026-10-30 13:55:20.000000000 +0100 @@ -311,6 +311,10 @@ test_programs += tests/test-repo-finder-avahi endif +if USE_CURL_OR_SOUP +test_programs += tests/test-fetcher-uri +endif + # An interactive tool noinst_PROGRAMS += tests/test-rollsum-cli @@ -341,6 +345,12 @@ tests_test_bloom_CFLAGS = $(TESTS_CFLAGS) tests_test_bloom_LDADD = $(TESTS_LDADD) +if USE_CURL_OR_SOUP +tests_test_fetcher_uri_SOURCES = src/libostree/ostree-fetcher-uri.c tests/test-fetcher-uri.c +tests_test_fetcher_uri_CFLAGS = $(TESTS_CFLAGS) +tests_test_fetcher_uri_LDADD = $(TESTS_LDADD) +endif + tests_test_include_ostree_h_SOURCES = tests/test-include-ostree-h.c # Don't use TESTS_CFLAGS so we test if the public header can be included by external programs tests_test_include_ostree_h_CFLAGS = $(AM_CFLAGS) $(OT_INTERNAL_GIO_UNIX_CFLAGS) -I$(srcdir)/src/libostree -I$(builddir)/src/libostree diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/Makefile.in new/libostree-2026.6/Makefile.in --- old/libostree-2026.5/Makefile.in 2026-10-23 22:12:49.000000000 +0200 +++ new/libostree-2026.6/Makefile.in 2026-10-30 15:34:21.000000000 +0100 @@ -375,13 +375,13 @@ sbin_PROGRAMS = libexec_PROGRAMS = pkglibexec_PROGRAMS = -noinst_PROGRAMS = $(am__EXEEXT_17) tests/test-rollsum-cli$(EXEEXT) \ +noinst_PROGRAMS = $(am__EXEEXT_18) tests/test-rollsum-cli$(EXEEXT) \ tests/test-commit-sign-sh-ext$(EXEEXT) -ostree_boot_PROGRAMS = $(am__EXEEXT_18) $(am__EXEEXT_19) -TESTS = $(am__EXEEXT_8) $(am__EXEEXT_26) \ - $(dist_uninstalled_test_scripts) $(am__EXEEXT_14) -installed_test_PROGRAMS = $(am__EXEEXT_16) -check_PROGRAMS = $(am__EXEEXT_13) $(am__EXEEXT_14) $(am__EXEEXT_15) +ostree_boot_PROGRAMS = $(am__EXEEXT_19) $(am__EXEEXT_20) +TESTS = $(am__EXEEXT_9) $(am__EXEEXT_27) \ + $(dist_uninstalled_test_scripts) $(am__EXEEXT_15) +installed_test_PROGRAMS = $(am__EXEEXT_17) +check_PROGRAMS = $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_1 = $(all_test_ltlibs) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_2 = $(all_test_programs) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_3 = $(all_test_scripts) @@ -562,30 +562,31 @@ @USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__append_92 = ostree-trivial-httpd @USE_AVAHI_TRUE@am__append_93 = tests/test-repo-finder-avahi -@USE_LIBARCHIVE_TRUE@am__append_94 = tests/test-libarchive-import -@USE_GPGME_TRUE@am__append_95 = \ +@USE_CURL_OR_SOUP_TRUE@am__append_94 = tests/test-fetcher-uri +@USE_LIBARCHIVE_TRUE@am__append_95 = tests/test-libarchive-import +@USE_GPGME_TRUE@am__append_96 = \ @USE_GPGME_TRUE@ tests/gpg-verify-data/README.md \ @USE_GPGME_TRUE@ $(NULL) -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_96 = $(_installed_or_uninstalled_test_scripts) -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_97 = $(_installed_or_uninstalled_test_programs) -@ENABLE_INSTALLED_TESTS_TRUE@am__append_98 = install-installed-tests-extra +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_97 = $(_installed_or_uninstalled_test_scripts) +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_98 = $(_installed_or_uninstalled_test_programs) +@ENABLE_INSTALLED_TESTS_TRUE@am__append_99 = install-installed-tests-extra # Allow the distcheck install under $prefix test to pass -@BUILDOPT_SYSTEMD_TRUE@am__append_99 = --with-systemdsystemunitdir='$${libdir}/systemd/system' +@BUILDOPT_SYSTEMD_TRUE@am__append_100 = --with-systemdsystemunitdir='$${libdir}/systemd/system' # We're using the system grub2-mkconfig generator -@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_100 = src/boot/grub2/grub2-15_ostree -@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_101 = install-grub2-config-hook +@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_101 = src/boot/grub2/grub2-15_ostree +@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_102 = install-grub2-config-hook # We're using our internal generator -@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_TRUE@am__append_102 = src/boot/grub2/ostree-grub-generator -@BUILDOPT_FUSE_TRUE@@ENABLE_MAN_TRUE@am__append_103 = rofiles-fuse.1 -@ENABLE_MAN_TRUE@@USE_GPGME_TRUE@am__append_104 = ostree-gpg-sign.1 -@ENABLE_MAN_HTML_TRUE@@ENABLE_MAN_TRUE@am__append_105 = $(manhtml_files) -@ENABLE_MAN_TRUE@am__append_106 = man/index.xml $(man1_MANS:.1=.xml) \ +@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_TRUE@am__append_103 = src/boot/grub2/ostree-grub-generator +@BUILDOPT_FUSE_TRUE@@ENABLE_MAN_TRUE@am__append_104 = rofiles-fuse.1 +@ENABLE_MAN_TRUE@@USE_GPGME_TRUE@am__append_105 = ostree-gpg-sign.1 +@ENABLE_MAN_HTML_TRUE@@ENABLE_MAN_TRUE@am__append_106 = $(manhtml_files) +@ENABLE_MAN_TRUE@am__append_107 = man/index.xml $(man1_MANS:.1=.xml) \ @ENABLE_MAN_TRUE@ $(man5_MANS:.5=.xml) $(man8_MANS:.8=.xml) \ @ENABLE_MAN_TRUE@ $(XSLT_HTML_STYLESHEET) -@ENABLE_MAN_TRUE@am__append_107 = \ +@ENABLE_MAN_TRUE@am__append_108 = \ @ENABLE_MAN_TRUE@ $(man1_MANS) \ @ENABLE_MAN_TRUE@ $(man5_MANS) \ @ENABLE_MAN_TRUE@ $(man8_MANS) \ @@ -648,11 +649,12 @@ "$(DESTDIR)$(libostreeincludedir)" am__EXEEXT_2 = @USE_AVAHI_TRUE@am__EXEEXT_3 = tests/test-repo-finder-avahi$(EXEEXT) -@USE_GPGME_TRUE@am__EXEEXT_4 = tests/test-gpg-verify-result$(EXEEXT) \ +@USE_CURL_OR_SOUP_TRUE@am__EXEEXT_4 = tests/test-fetcher-uri$(EXEEXT) +@USE_GPGME_TRUE@am__EXEEXT_5 = tests/test-gpg-verify-result$(EXEEXT) \ @USE_GPGME_TRUE@ $(am__EXEEXT_2) -@USE_LIBARCHIVE_TRUE@am__EXEEXT_5 = \ +@USE_LIBARCHIVE_TRUE@am__EXEEXT_6 = \ @USE_LIBARCHIVE_TRUE@ tests/test-libarchive-import$(EXEEXT) -am__EXEEXT_6 = tests/test-varint$(EXEEXT) \ +am__EXEEXT_7 = tests/test-varint$(EXEEXT) \ tests/test-ot-unix-utils$(EXEEXT) tests/test-bsdiff$(EXEEXT) \ tests/test-otcore$(EXEEXT) tests/test-mutable-tree$(EXEEXT) \ tests/test-keyfile-utils$(EXEEXT) \ @@ -664,31 +666,32 @@ tests/test-pull-c$(EXEEXT) tests/test-repo$(EXEEXT) \ tests/test-include-ostree-h$(EXEEXT) tests/test-kargs$(EXEEXT) \ tests/test-rfc2616-dates$(EXEEXT) tests/test-pem$(EXEEXT) \ - tests/test-validate-utf8$(EXEEXT) $(am__EXEEXT_4) \ - $(am__EXEEXT_5) -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_7 = \ -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@ $(am__EXEEXT_6) -am__EXEEXT_8 = tests/test-bloom$(EXEEXT) \ + tests/test-validate-utf8$(EXEEXT) $(am__EXEEXT_5) \ + $(am__EXEEXT_6) +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_8 = \ +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@ $(am__EXEEXT_7) +am__EXEEXT_9 = tests/test-bloom$(EXEEXT) \ tests/test-repo-finder-config$(EXEEXT) \ tests/test-repo-finder-mount$(EXEEXT) $(am__EXEEXT_2) \ - $(am__EXEEXT_3) $(am__EXEEXT_7) -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@am__EXEEXT_9 = $(am__EXEEXT_6) -@USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__EXEEXT_10 = \ + $(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_8) +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@am__EXEEXT_10 = \ +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@ $(am__EXEEXT_7) +@USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__EXEEXT_11 = \ @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ ostree-trivial-httpd$(EXEEXT) -am__EXEEXT_11 = tests/get-byte-order$(EXEEXT) \ +am__EXEEXT_12 = tests/get-byte-order$(EXEEXT) \ tests/repo-finder-mount$(EXEEXT) $(am__EXEEXT_2) \ - $(am__EXEEXT_10) -am__EXEEXT_12 = $(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_11) -@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_13 = $(am__EXEEXT_12) -am__EXEEXT_14 = test-libglnx-xattrs$(EXEEXT) \ + $(am__EXEEXT_11) +am__EXEEXT_13 = $(am__EXEEXT_9) $(am__EXEEXT_10) $(am__EXEEXT_12) +@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_14 = $(am__EXEEXT_13) +am__EXEEXT_15 = test-libglnx-xattrs$(EXEEXT) \ test-libglnx-fdio$(EXEEXT) test-libglnx-errors$(EXEEXT) \ test-libglnx-macros$(EXEEXT) test-libglnx-shutil$(EXEEXT) -@BUILDOPT_SYSTEMD_FALSE@am__EXEEXT_15 = ostree-remount$(EXEEXT) -@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_16 = $(am__EXEEXT_8) \ -@ENABLE_INSTALLED_TESTS_TRUE@ $(am__EXEEXT_9) $(am__EXEEXT_11) -@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_17 = $(am__EXEEXT_12) -@BUILDOPT_SYSTEMD_TRUE@am__EXEEXT_18 = ostree-remount$(EXEEXT) -@BUILDOPT_USE_STATIC_COMPILER_FALSE@am__EXEEXT_19 = ostree-prepare-root$(EXEEXT) +@BUILDOPT_SYSTEMD_FALSE@am__EXEEXT_16 = ostree-remount$(EXEEXT) +@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_17 = $(am__EXEEXT_9) \ +@ENABLE_INSTALLED_TESTS_TRUE@ $(am__EXEEXT_10) $(am__EXEEXT_12) +@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_18 = $(am__EXEEXT_13) +@BUILDOPT_SYSTEMD_TRUE@am__EXEEXT_19 = ostree-remount$(EXEEXT) +@BUILDOPT_USE_STATIC_COMPILER_FALSE@am__EXEEXT_20 = ostree-prepare-root$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(installed_test_PROGRAMS) \ $(libexec_PROGRAMS) $(noinst_PROGRAMS) $(ostree_boot_PROGRAMS) \ $(pkglibexec_PROGRAMS) $(sbin_PROGRAMS) \ @@ -1387,6 +1390,17 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(tests_test_commit_sign_sh_ext_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__tests_test_fetcher_uri_SOURCES_DIST = \ + src/libostree/ostree-fetcher-uri.c tests/test-fetcher-uri.c +@USE_CURL_OR_SOUP_TRUE@am_tests_test_fetcher_uri_OBJECTS = src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.$(OBJEXT) \ +@USE_CURL_OR_SOUP_TRUE@ tests/test_fetcher_uri-test-fetcher-uri.$(OBJEXT) +tests_test_fetcher_uri_OBJECTS = $(am_tests_test_fetcher_uri_OBJECTS) +@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_DEPENDENCIES = \ +@USE_CURL_OR_SOUP_TRUE@ $(am__DEPENDENCIES_18) +tests_test_fetcher_uri_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ am__tests_test_gpg_verify_result_SOURCES_DIST = \ src/libostree/ostree-gpg-verify-result-private.h \ tests/test-gpg-verify-result.c @@ -1721,6 +1735,7 @@ src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po \ src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po \ src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po \ + src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po \ src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po \ src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po \ src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po \ @@ -1836,6 +1851,7 @@ tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po \ tests/$(DEPDIR)/test_checksum-test-checksum.Po \ tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po \ + tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po \ tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po \ tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po \ tests/$(DEPDIR)/test_kargs-test-kargs.Po \ @@ -1894,6 +1910,7 @@ $(tests_test_bootconfig_parser_internals_SOURCES) \ tests/test-bsdiff.c $(tests_test_checksum_SOURCES) \ tests/test-commit-sign-sh-ext.c \ + $(tests_test_fetcher_uri_SOURCES) \ $(tests_test_gpg_verify_result_SOURCES) \ $(tests_test_include_ostree_h_SOURCES) \ $(tests_test_kargs_SOURCES) tests/test-keyfile-utils.c \ @@ -1927,6 +1944,7 @@ $(tests_test_bootconfig_parser_internals_SOURCES) \ tests/test-bsdiff.c $(tests_test_checksum_SOURCES) \ tests/test-commit-sign-sh-ext.c \ + $(am__tests_test_fetcher_uri_SOURCES_DIST) \ $(am__tests_test_gpg_verify_result_SOURCES_DIST) \ $(tests_test_include_ostree_h_SOURCES) \ $(tests_test_kargs_SOURCES) tests/test-keyfile-utils.c \ @@ -2169,15 +2187,15 @@ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) -am__EXEEXT_20 = tests/test-remote-gpg-import.sh \ +am__EXEEXT_21 = tests/test-remote-gpg-import.sh \ tests/test-remote-gpg-list-keys.sh \ tests/test-gpg-signed-commit.sh tests/test-admin-gpg.sh \ $(am__EXEEXT_2) -@USE_GPGME_TRUE@am__EXEEXT_21 = $(am__EXEEXT_20) -am__EXEEXT_22 = tests/test-core.js tests/test-remotes-config-dir.js \ +@USE_GPGME_TRUE@am__EXEEXT_22 = $(am__EXEEXT_21) +am__EXEEXT_23 = tests/test-core.js tests/test-remotes-config-dir.js \ tests/test-sizes.js tests/test-sysroot.js $(am__EXEEXT_2) -@BUILDOPT_GJS_TRUE@am__EXEEXT_23 = $(js_tests) $(am__EXEEXT_22) -am__EXEEXT_24 = tests/test-basic.sh \ +@BUILDOPT_GJS_TRUE@am__EXEEXT_24 = $(js_tests) $(am__EXEEXT_23) +am__EXEEXT_25 = tests/test-basic.sh \ tests/test-basic-bare-split-xattrs.sh tests/test-basic-user.sh \ tests/test-basic-user-only.sh tests/test-basic-root.sh \ tests/test-cli-extensions.sh tests/test-pull-subpath.sh \ @@ -2242,11 +2260,11 @@ tests/test-signed-commit-dummy.sh tests/test-signed-pull.sh \ tests/test-pre-signed-pull.sh \ tests/test-signed-pull-summary.sh $(am__EXEEXT_2) \ - $(am__append_77) $(am__append_79) $(am__EXEEXT_21) \ - $(am__append_83) $(am__append_86) $(am__EXEEXT_23) -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_25 = \ -@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@ $(am__EXEEXT_24) -am__EXEEXT_26 = $(am__EXEEXT_2) $(am__EXEEXT_25) + $(am__append_77) $(am__append_79) $(am__EXEEXT_22) \ + $(am__append_83) $(am__append_86) $(am__EXEEXT_24) +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_26 = \ +@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@ $(am__EXEEXT_25) +am__EXEEXT_27 = $(am__EXEEXT_2) $(am__EXEEXT_26) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) @@ -2561,7 +2579,7 @@ # Allow the distcheck install under $prefix test to pass AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man \ --disable-maintainer-mode $(NULL) $(am__append_74) \ - $(am__append_99) \ + $(am__append_100) \ BASH_COMPLETIONSDIR='$${datadir}/bash-completion/completions' SUBDIRS = . $(am__append_15) NULL = @@ -2575,7 +2593,7 @@ tests/ostree-remount-symlink-stamp \ tests/rofiles-fuse-symlink-stamp tests/ostree \ tests/ostree-prepare-root tests/ostree-remount \ - tests/rofiles-fuse $(am__append_107) + tests/rofiles-fuse $(am__append_108) EXTRA_DIST = $(all_dist_test_scripts) $(all_dist_test_data) autogen.sh \ COPYING README.md libglnx/README.md libglnx/COPYING \ libglnx/LICENSES/LGPL-2.0-or-later.txt \ @@ -2595,7 +2613,7 @@ tests/ostree.supp $(NULL) $(am__append_78) $(am__append_80) \ $(am__append_82) $(am__append_85) $(am__append_87) \ $(am__append_89) tests/libtest.sh $(am__append_90) \ - $(am__append_95) tests/libostreetest.h tests/libtest.sh \ + $(am__append_96) tests/libostreetest.h tests/libtest.sh \ $(NULL) src/boot/dracut/module-setup.sh \ src/boot/dracut/ostree.conf src/boot/mkinitcpio \ src/boot/ostree-boot-complete.service \ @@ -2605,10 +2623,10 @@ src/boot/ostree-finalize-staged-hold.service \ src/boot/[email protected] \ src/boot/grub2/grub2-15_ostree \ - src/boot/grub2/ostree-grub-generator $(NULL) $(am__append_106) + src/boot/grub2/ostree-grub-generator $(NULL) $(am__append_107) bin_SCRIPTS = lib_LTLIBRARIES = libostree-1.la -pkglibexec_SCRIPTS = $(am__append_100) +pkglibexec_SCRIPTS = $(am__append_101) noinst_LTLIBRARIES = $(am__append_1) libglnx.la libbsdiff.la \ libotutil.la libotcore.la libbupsplit.la libostreetest.la privlibdir = $(pkglibdir) @@ -2622,7 +2640,7 @@ typelib_DATA = $(am__append_47) gsettings_SCHEMAS = ostree_bootdir = $(prefix)/lib/ostree -ostree_boot_SCRIPTS = $(am__append_59) $(am__append_102) +ostree_boot_SCRIPTS = $(am__append_59) $(am__append_103) # We should probably consider flipping the default for DEBUG. Also, # include the builddir in $PATH so we find our just-built ostree @@ -2648,7 +2666,7 @@ installed_test_DATA = $(am__append_11) nobase_installed_test_DATA = noinst_SCRIPTS = $(am__append_3) -noinst_DATA = $(am__append_4) $(am__append_105) +noinst_DATA = $(am__append_4) $(am__append_106) check_LTLIBRARIES = $(am__append_5) check_SCRIPTS = $(am__append_7) check_DATA = $(am__append_8) @@ -2680,8 +2698,8 @@ # This initializes some more variables # This is a special facility to chain together hooks easily -INSTALL_DATA_HOOKS = install-mkdir-remotes-d-hook $(am__append_98) \ - $(am__append_101) +INSTALL_DATA_HOOKS = install-mkdir-remotes-d-hook $(am__append_99) \ + $(am__append_102) ALL_LOCAL_RULES = shortened_sysconfdir = $$(echo "$(sysconfdir)" | sed -e 's|^$(prefix)||' -e 's|^/||') OSTREE_GITREV = $(shell cd $(srcdir) && if command -v git >/dev/null 2>&1 && test -d .git; then git describe --abbrev=42 --tags --always HEAD; fi) @@ -3116,10 +3134,10 @@ # tests *only* run installed, to avoid having to run them twice in CI. # This overrides the glib-tap.mk emphasis on doing both, if we'd # used e.g. `dist_test_scripts`. -dist_test_scripts = $(NULL) $(am__append_96) +dist_test_scripts = $(NULL) $(am__append_97) test_programs = tests/test-bloom tests/test-repo-finder-config \ tests/test-repo-finder-mount $(NULL) $(am__append_93) \ - $(am__append_97) + $(am__append_94) $(am__append_98) _installed_or_uninstalled_test_scripts = tests/test-basic.sh \ tests/test-basic-bare-split-xattrs.sh tests/test-basic-user.sh \ tests/test-basic-user-only.sh tests/test-basic-root.sh \ @@ -3271,7 +3289,7 @@ tests/test-sysroot-c tests/test-pull-c tests/test-repo \ tests/test-include-ostree-h tests/test-kargs \ tests/test-rfc2616-dates tests/test-pem \ - tests/test-validate-utf8 $(am__append_91) $(am__append_94) + tests/test-validate-utf8 $(am__append_91) $(am__append_95) @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_SOURCES = src/ostree/ostree-trivial-httpd.c @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_CFLAGS = $(common_tests_cflags) $(OT_INTERNAL_SOUP_CFLAGS) @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_LDADD = $(common_tests_ldadd) $(OT_INTERNAL_SOUP_LIBS) @@ -3291,6 +3309,9 @@ tests_test_bloom_SOURCES = src/libostree/ostree-bloom.c tests/test-bloom.c tests_test_bloom_CFLAGS = $(TESTS_CFLAGS) tests_test_bloom_LDADD = $(TESTS_LDADD) +@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_SOURCES = src/libostree/ostree-fetcher-uri.c tests/test-fetcher-uri.c +@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_CFLAGS = $(TESTS_CFLAGS) +@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_LDADD = $(TESTS_LDADD) tests_test_include_ostree_h_SOURCES = tests/test-include-ostree-h.c # Don't use TESTS_CFLAGS so we test if the public header can be included by external programs tests_test_include_ostree_h_CFLAGS = $(AM_CFLAGS) $(OT_INTERNAL_GIO_UNIX_CFLAGS) -I$(srcdir)/src/libostree -I$(builddir)/src/libostree @@ -3431,7 +3452,7 @@ @ENABLE_MAN_TRUE@ ostree-reset.1 ostree-rev-parse.1 \ @ENABLE_MAN_TRUE@ ostree-show.1 ostree-sign.1 ostree-summary.1 \ @ENABLE_MAN_TRUE@ ostree-static-delta.1 ostree-prepare-root.1 \ -@ENABLE_MAN_TRUE@ $(am__append_103) $(am__append_104) +@ENABLE_MAN_TRUE@ $(am__append_104) $(am__append_105) @ENABLE_MAN_TRUE@man5_files = ostree.repo.5 ostree.repo-config.5 @ENABLE_MAN_TRUE@man8_files = [email protected] @ENABLE_MAN_TRUE@man1_MANS = $(addprefix man/,$(man1_files)) @@ -4754,6 +4775,15 @@ tests/test-commit-sign-sh-ext$(EXEEXT): $(tests_test_commit_sign_sh_ext_OBJECTS) $(tests_test_commit_sign_sh_ext_DEPENDENCIES) $(EXTRA_tests_test_commit_sign_sh_ext_DEPENDENCIES) tests/$(am__dirstamp) @rm -f tests/test-commit-sign-sh-ext$(EXEEXT) $(AM_V_CCLD)$(tests_test_commit_sign_sh_ext_LINK) $(tests_test_commit_sign_sh_ext_OBJECTS) $(tests_test_commit_sign_sh_ext_LDADD) $(LIBS) +src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.$(OBJEXT): \ + src/libostree/$(am__dirstamp) \ + src/libostree/$(DEPDIR)/$(am__dirstamp) +tests/test_fetcher_uri-test-fetcher-uri.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +tests/test-fetcher-uri$(EXEEXT): $(tests_test_fetcher_uri_OBJECTS) $(tests_test_fetcher_uri_DEPENDENCIES) $(EXTRA_tests_test_fetcher_uri_DEPENDENCIES) tests/$(am__dirstamp) + @rm -f tests/test-fetcher-uri$(EXEEXT) + $(AM_V_CCLD)$(tests_test_fetcher_uri_LINK) $(tests_test_fetcher_uri_OBJECTS) $(tests_test_fetcher_uri_LDADD) $(LIBS) tests/test_gpg_verify_result-test-gpg-verify-result.$(OBJEXT): \ tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) @@ -5269,6 +5299,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po@am__quote@ # am--include-marker @@ -5384,6 +5415,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_checksum-test-checksum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_kargs-test-kargs.Po@am__quote@ # am--include-marker @@ -7559,6 +7591,34 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_commit_sign_sh_ext_CFLAGS) $(CFLAGS) -c -o tests/test_commit_sign_sh_ext-test-commit-sign-sh-ext.obj `if test -f 'tests/test-commit-sign-sh-ext.c'; then $(CYGPATH_W) 'tests/test-commit-sign-sh-ext.c'; else $(CYGPATH_W) '$(srcdir)/tests/test-commit-sign-sh-ext.c'; fi` +src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o: src/libostree/ostree-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o -MD -MP -MF src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o `test -f 'src/libostree/ostree-fetcher-uri.c' || echo '$(srcdir)/'`src/libostree/ostree-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libostree/ostree-fetcher-uri.c' object='src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o `test -f 'src/libostree/ostree-fetcher-uri.c' || echo '$(srcdir)/'`src/libostree/ostree-fetcher-uri.c + +src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj: src/libostree/ostree-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj -MD -MP -MF src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj `if test -f 'src/libostree/ostree-fetcher-uri.c'; then $(CYGPATH_W) 'src/libostree/ostree-fetcher-uri.c'; else $(CYGPATH_W) '$(srcdir)/src/libostree/ostree-fetcher-uri.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/libostree/ostree-fetcher-uri.c' object='src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj `if test -f 'src/libostree/ostree-fetcher-uri.c'; then $(CYGPATH_W) 'src/libostree/ostree-fetcher-uri.c'; else $(CYGPATH_W) '$(srcdir)/src/libostree/ostree-fetcher-uri.c'; fi` + +tests/test_fetcher_uri-test-fetcher-uri.o: tests/test-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT tests/test_fetcher_uri-test-fetcher-uri.o -MD -MP -MF tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo -c -o tests/test_fetcher_uri-test-fetcher-uri.o `test -f 'tests/test-fetcher-uri.c' || echo '$(srcdir)/'`tests/test-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/test-fetcher-uri.c' object='tests/test_fetcher_uri-test-fetcher-uri.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -c -o tests/test_fetcher_uri-test-fetcher-uri.o `test -f 'tests/test-fetcher-uri.c' || echo '$(srcdir)/'`tests/test-fetcher-uri.c + +tests/test_fetcher_uri-test-fetcher-uri.obj: tests/test-fetcher-uri.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT tests/test_fetcher_uri-test-fetcher-uri.obj -MD -MP -MF tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo -c -o tests/test_fetcher_uri-test-fetcher-uri.obj `if test -f 'tests/test-fetcher-uri.c'; then $(CYGPATH_W) 'tests/test-fetcher-uri.c'; else $(CYGPATH_W) '$(srcdir)/tests/test-fetcher-uri.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/test-fetcher-uri.c' object='tests/test_fetcher_uri-test-fetcher-uri.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -c -o tests/test_fetcher_uri-test-fetcher-uri.obj `if test -f 'tests/test-fetcher-uri.c'; then $(CYGPATH_W) 'tests/test-fetcher-uri.c'; else $(CYGPATH_W) '$(srcdir)/tests/test-fetcher-uri.c'; fi` + tests/test_gpg_verify_result-test-gpg-verify-result.o: tests/test-gpg-verify-result.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_gpg_verify_result_CFLAGS) $(CFLAGS) -MT tests/test_gpg_verify_result-test-gpg-verify-result.o -MD -MP -MF tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Tpo -c -o tests/test_gpg_verify_result-test-gpg-verify-result.o `test -f 'tests/test-gpg-verify-result.c' || echo '$(srcdir)/'`tests/test-gpg-verify-result.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Tpo tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po @@ -8836,6 +8896,13 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +tests/test-fetcher-uri.log: tests/test-fetcher-uri$(EXEEXT) + @p='tests/test-fetcher-uri$(EXEEXT)'; \ + b='tests/test-fetcher-uri'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) tests/test-varint.log: tests/test-varint$(EXEEXT) @p='tests/test-varint$(EXEEXT)'; \ b='tests/test-varint'; \ @@ -10271,6 +10338,7 @@ -rm -f src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po + -rm -f src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po -rm -f src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po @@ -10386,6 +10454,7 @@ -rm -f tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po -rm -f tests/$(DEPDIR)/test_checksum-test-checksum.Po -rm -f tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po + -rm -f tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po -rm -f tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po -rm -f tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po -rm -f tests/$(DEPDIR)/test_kargs-test-kargs.Po @@ -10581,6 +10650,7 @@ -rm -f src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po + -rm -f src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po -rm -f src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po @@ -10696,6 +10766,7 @@ -rm -f tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po -rm -f tests/$(DEPDIR)/test_checksum-test-checksum.Po -rm -f tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po + -rm -f tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po -rm -f tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po -rm -f tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po -rm -f tests/$(DEPDIR)/test_kargs-test-kargs.Po diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/apidoc/html/ostree-ostree-version.html new/libostree-2026.6/apidoc/html/ostree-ostree-version.html --- old/libostree-2026.5/apidoc/html/ostree-ostree-version.html 2026-10-23 22:15:21.000000000 +0200 +++ new/libostree-2026.6/apidoc/html/ostree-ostree-version.html 2026-10-30 15:50:44.000000000 +0100 @@ -126,7 +126,7 @@ <hr> <div class="refsect2"> <a name="OSTREE-RELEASE-VERSION:CAPS"></a><h3>OSTREE_RELEASE_VERSION</h3> -<pre class="programlisting">#define OSTREE_RELEASE_VERSION (5) +<pre class="programlisting">#define OSTREE_RELEASE_VERSION (6) </pre> <p>ostree release version component (e.g. 2 if <a class="link" href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" title="OSTREE_VERSION"><code class="literal">OSTREE_VERSION</code></a> is 2017.2)</p> <p class="since">Since: 2017.4</p> @@ -134,7 +134,7 @@ <hr> <div class="refsect2"> <a name="OSTREE-VERSION:CAPS"></a><h3>OSTREE_VERSION</h3> -<pre class="programlisting">#define OSTREE_VERSION (2026.5) +<pre class="programlisting">#define OSTREE_VERSION (2026.6) </pre> <p>ostree version.</p> <p class="since">Since: 2017.4</p> @@ -142,7 +142,7 @@ <hr> <div class="refsect2"> <a name="OSTREE-VERSION-S:CAPS"></a><h3>OSTREE_VERSION_S</h3> -<pre class="programlisting">#define OSTREE_VERSION_S "2026.5" +<pre class="programlisting">#define OSTREE_VERSION_S "2026.6" </pre> <p>ostree version, encoded as a string, useful for printing and concatenation.</p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/configure new/libostree-2026.6/configure --- old/libostree-2026.5/configure 2026-10-23 22:12:48.000000000 +0200 +++ new/libostree-2026.6/configure 2026-10-30 15:34:21.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libostree 2026.5. +# Generated by GNU Autoconf 2.71 for libostree 2026.6. # # Report bugs to <[email protected]>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libostree' PACKAGE_TARNAME='libostree' -PACKAGE_VERSION='2026.5' -PACKAGE_STRING='libostree 2026.5' +PACKAGE_VERSION='2026.6' +PACKAGE_STRING='libostree 2026.6' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1623,7 +1623,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 libostree 2026.5 to adapt to many kinds of systems. +\`configure' configures libostree 2026.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1694,7 +1694,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libostree 2026.5:";; + short | recursive ) echo "Configuration of libostree 2026.6:";; esac cat <<\_ACEOF @@ -1965,7 +1965,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libostree configure 2026.5 +libostree configure 2026.6 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2338,7 +2338,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libostree $as_me 2026.5, which was +It was created by libostree $as_me 2026.6, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3615,7 +3615,7 @@ # Define the identity of the package. PACKAGE='libostree' - VERSION='2026.5' + VERSION='2026.6' # Some tools Automake needs. @@ -6493,9 +6493,9 @@ YEAR_VERSION=2026 -RELEASE_VERSION=5 +RELEASE_VERSION=6 -PACKAGE_VERSION=2026.5 +PACKAGE_VERSION=2026.6 pkglibexecdir=$libexecdir/$PACKAGE @@ -20981,7 +20981,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libostree $as_me 2026.5, which was +This file was extended by libostree $as_me 2026.6, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21049,7 +21049,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libostree config.status 2026.5 +libostree config.status 2026.6 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/configure.ac new/libostree-2026.6/configure.ac --- old/libostree-2026.5/configure.ac 2026-10-23 21:19:42.000000000 +0200 +++ new/libostree-2026.6/configure.ac 2026-10-30 15:34:18.000000000 +0100 @@ -1,7 +1,7 @@ AC_PREREQ([2.63]) dnl To perform a release, follow the instructions in `docs/CONTRIBUTING.md`. m4_define([year_version], [2026]) -m4_define([release_version], [5]) +m4_define([release_version], [6]) m4_define([package_version], [year_version.release_version]) AC_INIT([libostree], [package_version], [[email protected]]) is_release_build=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-core.c new/libostree-2026.6/src/libostree/ostree-core.c --- old/libostree-2026.5/src/libostree/ostree-core.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-core.c 2026-10-30 13:55:20.000000000 +0100 @@ -2244,6 +2244,10 @@ g_autoptr (GVariant) content_csum_v = NULL; g_autoptr (GVariant) meta_csum_v = NULL; g_autoptr (GVariantIter) contents_iter = NULL; + /* A name must not appear twice, in particular not as both a file and a + * subdirectory: checkout would create the file (possibly a symlink) and + * then open it as the subdirectory. */ + g_autoptr (GHashTable) names = g_hash_table_new (g_str_hash, g_str_equal); if (!validate_variant (dirtree, OSTREE_TREE_GVARIANT_FORMAT, error)) return FALSE; @@ -2254,6 +2258,8 @@ { if (!ot_util_filename_validate (filename, error)) return FALSE; + if (!g_hash_table_add (names, (char *)filename)) + return glnx_throw (error, "Duplicate name in dirtree: %s", filename); if (!ostree_validate_structureof_csum_v (content_csum_v, error)) return FALSE; } @@ -2270,6 +2276,8 @@ { if (!ot_util_filename_validate (filename, error)) return FALSE; + if (!g_hash_table_add (names, (char *)filename)) + return glnx_throw (error, "Duplicate name in dirtree: %s", filename); if (!ostree_validate_structureof_csum_v (content_csum_v, error)) return FALSE; if (!ostree_validate_structureof_csum_v (meta_csum_v, error)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-fetcher-uri.c new/libostree-2026.6/src/libostree/ostree-fetcher-uri.c --- old/libostree-2026.5/src/libostree/ostree-fetcher-uri.c 2025-06-30 15:15:07.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-fetcher-uri.c 2026-10-30 13:55:20.000000000 +0100 @@ -65,10 +65,10 @@ default: return (OstreeFetcherURI *)uri; } - nuri = g_uri_build_with_user (g_uri_get_flags (uri), "http", g_uri_get_user (uri), - g_uri_get_password (uri), NULL, g_uri_get_host (uri), -1, - g_uri_get_path (uri), g_uri_get_query (uri), - g_uri_get_fragment (uri)); + nuri = g_uri_build_with_user (g_uri_get_flags (uri), g_uri_get_scheme (uri), + g_uri_get_user (uri), g_uri_get_password (uri), NULL, + g_uri_get_host (uri), -1, g_uri_get_path (uri), + g_uri_get_query (uri), g_uri_get_fragment (uri)); g_uri_unref (uri); uri = nuri; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo-private.h new/libostree-2026.6/src/libostree/ostree-repo-private.h --- old/libostree-2026.5/src/libostree/ostree-repo-private.h 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-repo-private.h 2026-10-30 13:55:20.000000000 +0100 @@ -75,6 +75,9 @@ { OSTREE_REPO_TEST_ERROR_PRE_COMMIT = (1 << 0), OSTREE_REPO_TEST_ERROR_INVALID_CACHE = (1 << 1), + /* Disable mmap only for static-delta BSPATCH output. Its source remains a + * read-only mapping, since bspatch() needs random access to it. */ + OSTREE_REPO_TEST_ERROR_DISABLE_MMAP = (1 << 2), } OstreeRepoTestErrorFlags; struct OstreeRepoCommitModifier diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo-static-delta-core.c new/libostree-2026.6/src/libostree/ostree-repo-static-delta-core.c --- old/libostree-2026.5/src/libostree/ostree-repo-static-delta-core.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-repo-static-delta-core.c 2026-10-30 13:55:20.000000000 +0100 @@ -381,7 +381,7 @@ if (out_value) *out_value = NULL; - if (!ot_variant_read_fd (fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE, &delta, + if (!ot_variant_read_fd (fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE, &delta, error)) return FALSE; @@ -414,10 +414,13 @@ g_variant_unref (item); } - if (out_value && ret) + if (!ret) + return glnx_throw (error, "no signatures in static-delta"); + + if (out_value) ot_transfer_out_value (out_value, &signatures); - return ret; + return TRUE; } static gboolean @@ -426,7 +429,7 @@ { g_autoptr (GVariant) delta = NULL; - if (!ot_variant_read_fd (fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE, &delta, + if (!ot_variant_read_fd (fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE, &delta, error)) return FALSE; @@ -533,7 +536,7 @@ } g_autoptr (GVariant) delta = NULL; - if (!ot_variant_read_fd (meta_fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE, + if (!ot_variant_read_fd (meta_fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE, &delta, error)) return FALSE; @@ -745,6 +748,8 @@ /* First byte is compression type */ if (!g_input_stream_read_all (source_in, buf, sizeof (buf), &bytes_read, cancellable, error)) return glnx_prefix_error (error, "Reading initial compression flag byte"); + if (bytes_read != sizeof (buf)) + return glnx_throw (error, "Empty static delta part"); comptype = buf[0]; } @@ -1051,7 +1056,7 @@ if (is_signed) { if (!ot_variant_read_fd (superblock_fd, 0, (GVariantType *)OSTREE_STATIC_DELTA_SIGNED_FORMAT, - TRUE, &delta, error)) + FALSE, &delta, error)) return FALSE; g_autoptr (GVariant) child = g_variant_get_child_value (delta, 1); @@ -1062,7 +1067,7 @@ else { if (!ot_variant_read_fd (superblock_fd, 0, - (GVariantType *)OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT, TRUE, + (GVariantType *)OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT, FALSE, &delta_superblock, error)) return FALSE; } @@ -1149,7 +1154,10 @@ g_autoptr (GVariant) checksum_v = NULL; char checksum[OSTREE_SHA256_STRING_LEN + 1]; g_variant_get_child (fallback, i, "(y@aytt)", NULL, &checksum_v, &size, &usize); - ostree_checksum_inplace_from_bytes (ostree_checksum_bytes_peek (checksum_v), checksum); + const guchar *csum = ostree_checksum_bytes_peek_validate (checksum_v, error); + if (!csum) + return FALSE; + ostree_checksum_inplace_from_bytes (csum, checksum); size = maybe_swap_endian_u64 (swap_endian, size); usize = maybe_swap_endian_u64 (swap_endian, usize); g_print (" %s\n", checksum); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo-static-delta-processing.c new/libostree-2026.6/src/libostree/ostree-repo-static-delta-processing.c --- old/libostree-2026.5/src/libostree/ostree-repo-static-delta-processing.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-repo-static-delta-processing.c 2026-10-30 13:55:20.000000000 +0100 @@ -408,7 +408,6 @@ GError **error) { guint64 offset, length; - (void)repo; if (!read_varuint64 (state, &offset, error)) return FALSE; @@ -427,9 +426,9 @@ if (!input_mfile) return FALSE; - /* Guard against integer truncation on 32-bit systems: mmap() takes gsize - * while bspatch() uses int64_t. Without this check the mapped region and - * the size used by bspatch() could differ. + /* Guard against integer truncation on 32-bit systems: allocation and + * mapping sizes use gsize while bspatch() uses int64_t. Without this check + * the output buffer and the size used by bspatch() could differ. * (CVE / RHEL-189207, CWE-680, CWE-122) */ if (G_UNLIKELY (state->content_size > G_MAXSIZE || state->content_size > (guint64)G_MAXINT64)) @@ -442,8 +441,28 @@ } guint8 *buf; - size_t buflen; - if (!_ostree_repo_bare_content_map (&state->content_out, &buf, &buflen, cancellable, error)) + size_t buflen = (size_t)state->content_size; + g_autofree guint8 *heap_buf = NULL; + const gboolean heap_output + = repo->is_on_fuse || (repo->test_error_flags & OSTREE_REPO_TEST_ERROR_DISABLE_MMAP) != 0; + + /* revokefs enables FUSE direct I/O for writable files. The kernel does + * not allow MAP_SHARED mappings of those files. The test-only + * disable-mmap flag exercises this output path; the BSPATCH source is + * still read through its read-only mapping above. + */ + if (heap_output) + { + heap_buf = g_try_malloc (MAX (buflen, (size_t)1)); + if (!heap_buf) + return glnx_throw (error, + "Unable to allocate %" G_GSIZE_FORMAT + " bytes for static delta bspatch output", + buflen); + buf = heap_buf; + } + else if (!_ostree_repo_bare_content_map (&state->content_out, &buf, &buflen, cancellable, + error)) return FALSE; struct bzpatch_opaque_s opaque; @@ -458,7 +477,13 @@ < 0) return glnx_throw (error, "bsdiff patch failed"); - if (!_ostree_repo_bare_content_finish_mapped (&state->content_out, cancellable, error)) + if (heap_output) + { + if (!_ostree_repo_bare_content_write (repo, &state->content_out, buf, buflen, cancellable, + error)) + return FALSE; + } + else if (!_ostree_repo_bare_content_finish_mapped (&state->content_out, cancellable, error)) return FALSE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo.c new/libostree-2026.6/src/libostree/ostree-repo.c --- old/libostree-2026.5/src/libostree/ostree-repo.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-repo.c 2026-10-30 13:55:20.000000000 +0100 @@ -1304,6 +1304,7 @@ const GDebugKey test_error_keys[] = { { "pre-commit", OSTREE_REPO_TEST_ERROR_PRE_COMMIT }, { "invalid-cache", OSTREE_REPO_TEST_ERROR_INVALID_CACHE }, + { "disable-mmap", OSTREE_REPO_TEST_ERROR_DISABLE_MMAP }, }; #ifndef OSTREE_DISABLE_GPGME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-sign-ed25519.c new/libostree-2026.6/src/libostree/ostree-sign-ed25519.c --- old/libostree-2026.5/src/libostree/ostree-sign-ed25519.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-sign-ed25519.c 2026-10-30 13:55:20.000000000 +0100 @@ -156,9 +156,11 @@ return glnx_throw (error, "openssl: Failed to initialize ed25519 key"); } - size_t len; - if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) - && EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data))) + /* Both calls return 1 on success, and 0 or a negative value on failure. */ + size_t len = OSTREE_SIGN_ED25519_SIG_SIZE; + if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) == 1 + && EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data)) + == 1) sig_size = len; EVP_PKEY_free (pkey); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-sign-spki.c new/libostree-2026.6/src/libostree/ostree-sign-spki.c --- old/libostree-2026.5/src/libostree/ostree-sign-spki.c 2025-09-26 17:56:01.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-sign-spki.c 2026-10-30 13:55:20.000000000 +0100 @@ -139,12 +139,15 @@ unsigned long long sig_size = 0; g_autofree guchar *sig = NULL; + /* Both calls return 1 on success, and 0 or a negative value on failure. */ size_t len; - if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) - && EVP_DigestSign (ctx, NULL, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data))) + if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) == 1 + && EVP_DigestSign (ctx, NULL, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data)) + == 1) { sig = g_malloc0 (len); - if (EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data))) + if (EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), g_bytes_get_size (data)) + == 1) sig_size = len; } @@ -448,7 +451,7 @@ g_debug ("Read spki revoked key = %s", hex); g_autoptr (GBytes) key_bytes = g_bytes_new_static (key, n_elements); - if (g_list_find_custom (sign->revoked_keys, key, g_bytes_compare) == NULL) + if (g_list_find_custom (sign->revoked_keys, key_bytes, g_bytes_compare) == NULL) { GBytes *new_key_bytes = g_bytes_new (key, n_elements); sign->revoked_keys = g_list_prepend (sign->revoked_keys, new_key_bytes); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-version.h new/libostree-2026.6/src/libostree/ostree-version.h --- old/libostree-2026.5/src/libostree/ostree-version.h 2026-10-23 22:13:02.000000000 +0200 +++ new/libostree-2026.6/src/libostree/ostree-version.h 2026-10-30 15:34:34.000000000 +0100 @@ -41,7 +41,7 @@ * * Since: 2017.4 */ -#define OSTREE_RELEASE_VERSION (5) +#define OSTREE_RELEASE_VERSION (6) /** * OSTREE_VERSION @@ -50,7 +50,7 @@ * * Since: 2017.4 */ -#define OSTREE_VERSION (2026.5) +#define OSTREE_VERSION (2026.6) /** * OSTREE_VERSION_S: @@ -60,7 +60,7 @@ * * Since: 2017.4 */ -#define OSTREE_VERSION_S "2026.5" +#define OSTREE_VERSION_S "2026.6" #define OSTREE_ENCODE_VERSION(year,release) \ ((year) << 16 | (release)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/rofiles-fuse/main.c new/libostree-2026.6/src/rofiles-fuse/main.c --- old/libostree-2026.5/src/rofiles-fuse/main.c 2025-06-30 15:15:07.000000000 +0200 +++ new/libostree-2026.6/src/rofiles-fuse/main.c 2026-10-30 13:55:20.000000000 +0100 @@ -446,7 +446,11 @@ path = ENSURE_RELPATH (path); - if ((finfo->flags & O_ACCMODE) == O_RDONLY) + /* With atomic_o_trunc (the libfuse3 default) the kernel passes O_TRUNC + * here instead of sending a separate truncate, and O_RDONLY | O_TRUNC + * truncates too, so treat any O_TRUNC open as a write. + */ + if ((finfo->flags & O_ACCMODE) == O_RDONLY && (finfo->flags & O_TRUNC) == 0) { /* Read */ fd = openat (basefd, path, finfo->flags, mode); @@ -632,7 +636,7 @@ static int callback_removexattr (const char *path, const char *name) { - path = ENSURE_RELPATH (path); + PATH_WRITE_ENTRYPOINT (path); char buf[PATH_MAX]; snprintf (buf, sizeof (buf), "/proc/self/fd/%d/%s", basefd, path); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/src/switchroot/ostree-prepare-root.c new/libostree-2026.6/src/switchroot/ostree-prepare-root.c --- old/libostree-2026.5/src/switchroot/ostree-prepare-root.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/src/switchroot/ostree-prepare-root.c 2026-10-30 13:55:20.000000000 +0100 @@ -298,8 +298,9 @@ // filename. g_assert (deploy_directory_name && *deploy_directory_name); - /* These are global state directories underneath /run */ - if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE, 0755) < 0) + /* These are global state directories underneath /run. The initramfs may + * have created /run/ostree already, to hold INITRAMFS_MOUNT_VAR. */ + if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE, 0755) < 0 && errno != EEXIST) err (EXIT_FAILURE, "Failed to create %s", OTCORE_RUN_OSTREE); if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE_PRIVATE, 0) < 0) err (EXIT_FAILURE, "Failed to create %s", OTCORE_RUN_OSTREE_PRIVATE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-basic-c.c new/libostree-2026.6/tests/test-basic-c.c --- old/libostree-2026.5/tests/test-basic-c.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/tests/test-basic-c.c 2026-10-30 13:55:20.000000000 +0100 @@ -636,6 +636,37 @@ g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_FAILED); } +static GVariant * +new_test_dirtree (const char *file_name, const char *dir_name) +{ + const guint8 csum[OSTREE_SHA256_DIGEST_LEN] = { 0 }; + g_autoptr (GVariantBuilder) files = g_variant_builder_new (G_VARIANT_TYPE ("a(say)")); + g_autoptr (GVariantBuilder) dirs = g_variant_builder_new (G_VARIANT_TYPE ("a(sayay)")); + g_variant_builder_add (files, "(s@ay)", file_name, + g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, sizeof (csum), 1)); + g_variant_builder_add (dirs, "(s@ay@ay)", dir_name, + g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, sizeof (csum), 1), + g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, sizeof (csum), 1)); + return g_variant_ref_sink (g_variant_new ("(@a(say)@a(sayay))", g_variant_builder_end (files), + g_variant_builder_end (dirs))); +} + +static void +test_dirtree_duplicate_name (void) +{ + g_autoptr (GError) local_error = NULL; + GError **error = &local_error; + + g_autoptr (GVariant) dirtree = new_test_dirtree ("foo", "bar"); + g_assert (ostree_validate_structureof_dirtree (dirtree, error)); + g_assert_no_error (local_error); + + /* A name listed as both a file and a subdirectory must be rejected */ + g_autoptr (GVariant) dup_dirtree = new_test_dirtree ("foo", "foo"); + g_assert (!ostree_validate_structureof_dirtree (dup_dirtree, error)); + g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_FAILED); +} + static void create_static_delta_file (int dfd, const char *path) { @@ -798,6 +829,7 @@ g_test_add_func ("/commit-sizes-short-entry", test_commit_sizes_short_entry); g_test_add_func ("/read-xattrs", test_read_xattrs); g_test_add_func ("/dirmeta-xattrs", test_dirmeta_xattrs); + g_test_add_func ("/dirtree-duplicate-name", test_dirtree_duplicate_name); g_test_add_func ("/list-static-delta-entries", test_list_static_delta_entries); return g_test_run (); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-delta-sign.sh new/libostree-2026.6/tests/test-delta-sign.sh --- old/libostree-2026.5/tests/test-delta-sign.sh 2025-06-30 15:15:07.000000000 +0200 +++ new/libostree-2026.6/tests/test-delta-sign.sh 2026-10-30 13:55:20.000000000 +0100 @@ -25,7 +25,7 @@ bindatafiles="bash true ostree" -echo '1..7' +echo '1..8' # This is explicitly opt in for testing export OSTREE_DUMMY_SIGN_ENABLED=1 @@ -170,3 +170,22 @@ assert_file_has_content apply-offline-bad-key.txt "signature: dummy: incorrect signatures found: 1" echo 'ok apply offline failed with dummy and bad key' + +# A superblock file comes from outside the repository and is read before its +# signature is checked; make sure one whose signature key is not +# NUL-terminated isn't accepted as signed. +${CMD_PREFIX} ostree --repo=repo static-delta generate --from=${origrev} --to=${newrev} --inline --sign-type=dummy --sign=dummysign --filename=signed.delta +${CMD_PREFIX} ostree --repo=repo static-delta verify --sign-type=dummy ./signed.delta dummysign > verify-file-signed.txt +assert_file_has_content verify-file-signed.txt "Verification OK" +cp signed.delta corrupt.delta +key=ostree.sign.dummy +offset=$(($(grep -obaF ${key} corrupt.delta | tail -n 1 | cut -d: -f1) + ${#key})) +assert_streq "$(dd if=corrupt.delta bs=1 skip=${offset} count=1 status=none | od -An -tx1 | tr -d ' ')" "00" +printf 'X' | dd of=corrupt.delta bs=1 seek=${offset} conv=notrunc status=none +${CMD_PREFIX} ostree --repo=repo static-delta verify --sign-type=dummy ./corrupt.delta dummysign > verify-corrupt-key.txt 2>&1 && exit 1 +assert_file_has_content verify-corrupt-key.txt "no signatures in static-delta" +${CMD_PREFIX} ostree --repo=repo static-delta show ./corrupt.delta > show-corrupt-key.txt 2>&1 && exit 1 +assert_file_has_content show-corrupt-key.txt "Signed: no" +assert_file_has_content show-corrupt-key.txt "^error: " + +echo 'ok corrupt signature key in delta superblock' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-delta.sh new/libostree-2026.6/tests/test-delta.sh --- old/libostree-2026.5/tests/test-delta.sh 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/tests/test-delta.sh 2026-10-30 13:55:20.000000000 +0100 @@ -26,7 +26,7 @@ bindatafiles="bash true ostree" morebindatafiles="false ls" -echo '1..14' +echo '1..15' mkdir repo ostree_repo_init repo --mode=archive @@ -268,6 +268,21 @@ echo 'ok generate + show empty delta part' +rm -rf repo3 +ostree_repo_init repo3 --mode=archive +${CMD_PREFIX} ostree --repo=repo3 pull-local repo ${newrev} ${samerev} +${CMD_PREFIX} ostree --repo=repo3 static-delta generate --from=${newrev} --to=${samerev} +deltaprefix=$(get_assert_one_direntry_matching repo3/deltas '.') +deltadir=$(get_assert_one_direntry_matching repo3/deltas/${deltaprefix} '-') +truncate -s 0 repo3/deltas/${deltaprefix}/${deltadir}/0 +if ${CMD_PREFIX} ostree --repo=repo3 static-delta show ${newrev}-${samerev} 2> err.txt; then + assert_not_reached "static-delta show with a zero-length part unexpectedly succeeded" +fi +assert_file_has_content err.txt "Empty static delta part" +rm -rf repo3 + +echo 'ok show zero-length delta part file' + ${CMD_PREFIX} ostree --repo=repo summary -u rm -rf repo2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-fetcher-uri.c new/libostree-2026.6/tests/test-fetcher-uri.c --- old/libostree-2026.5/tests/test-fetcher-uri.c 1970-01-01 01:00:00.000000000 +0100 +++ new/libostree-2026.6/tests/test-fetcher-uri.c 2026-10-30 13:55:20.000000000 +0100 @@ -0,0 +1,58 @@ +/* + * SPDX-License-Identifier: LGPL-2.0+ + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include <glib.h> + +#include "ostree-fetcher.h" + +static void +assert_parses_to (const char *input, const char *expected) +{ + g_autoptr (GError) error = NULL; + OstreeFetcherURI *uri = _ostree_fetcher_uri_parse (input, &error); + g_assert_no_error (error); + g_assert_nonnull (uri); + + g_autofree char *str = _ostree_fetcher_uri_to_string (uri); + g_assert_cmpstr (str, ==, expected); + + _ostree_fetcher_uri_free (uri); +} + +/* Dropping a default port must keep the scheme; in particular an explicit + * :443 must not turn an https URI into http. + */ +static void +test_fetcher_uri_default_port (void) +{ + assert_parses_to ("https://example.com:443/repo", "https://example.com/repo"); + assert_parses_to ("http://example.com:80/repo", "http://example.com/repo"); + assert_parses_to ("https://example.com:8443/repo", "https://example.com:8443/repo"); + assert_parses_to ("http://example.com:443/repo", "http://example.com:443/repo"); +} + +int +main (int argc, char **argv) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/fetcher-uri/default-port", test_fetcher_uri_default_port); + + return g_test_run (); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-otcore.c new/libostree-2026.6/tests/test-otcore.c --- old/libostree-2026.5/tests/test-otcore.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/tests/test-otcore.c 2026-10-30 13:55:20.000000000 +0100 @@ -33,34 +33,107 @@ #ifdef HAVE_OPENSSL /* An ECDSA P-256 public key in DER SubjectPublicKeyInfo form, as produced by - * openssl ecparam -name prime256v1 -genkey -noout | - * openssl ec -pubout -outform DER + * openssl ecparam -name prime256v1 -genkey -noout -out key.pem + * openssl ec -in key.pem -pubout -outform DER * The spki mechanism takes any key d2i_PUBKEY() understands. */ static const guint8 ec_p256_pubkey[] = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, - 0x04, 0x80, 0x85, 0xe0, 0x67, 0xba, 0x0e, 0x92, 0xec, 0xa9, 0xf6, 0xfc, 0xa0, - 0x58, 0xc1, 0xda, 0x3f, 0x9b, 0xb3, 0x23, 0x59, 0x88, 0x93, 0x9d, 0x66, 0x36, - 0x30, 0x74, 0xb2, 0x7a, 0x9f, 0x4a, 0xf5, 0x53, 0x8d, 0x1b, 0xd8, 0xe6, 0xc7, - 0x82, 0x46, 0xa1, 0x65, 0x4d, 0x8a, 0x70, 0x2e, 0x71, 0xc3, 0x84, 0x8a, 0x20, - 0x3a, 0xc4, 0x18, 0x38, 0x9e, 0x24, 0x92, 0x99, 0x82, 0xcd, 0x80, 0x7f, 0xfd }; + 0x04, 0xfe, 0x90, 0x44, 0x36, 0x3b, 0xf0, 0xd0, 0x3e, 0x11, 0xb5, 0x95, 0x5a, + 0x8e, 0x8f, 0x0f, 0x15, 0xc7, 0x10, 0x5d, 0x15, 0x2d, 0xd2, 0x1d, 0xe5, 0xf8, + 0x06, 0xfa, 0x0a, 0xe0, 0xf4, 0x55, 0x40, 0xc6, 0x09, 0xec, 0xad, 0x08, 0xfb, + 0x46, 0xed, 0xfe, 0xdc, 0x6f, 0xa3, 0x1a, 0x32, 0xc9, 0x23, 0xd3, 0xd1, 0xd3, + 0xee, 0x45, 0x04, 0xda, 0xd7, 0xde, 0xf7, 0xc2, 0x93, 0x7f, 0x2a, 0x91, 0xd8 }; + +/* A signature of spki_signed_data with the private half of ec_p256_pubkey, as + * produced by + * openssl dgst -sha256 -sign key.pem + */ +static const guint8 ec_p256_signature[] + = { 0x30, 0x46, 0x02, 0x21, 0x00, 0xb1, 0x7a, 0x54, 0xe8, 0x06, 0xf4, 0x6d, 0xed, 0x7e, 0xbb, + 0x13, 0xc0, 0x42, 0x56, 0x77, 0x78, 0x47, 0x26, 0xbc, 0xf3, 0x55, 0x2d, 0x45, 0x54, 0x01, + 0xb2, 0x37, 0xe8, 0x58, 0x73, 0x09, 0x6c, 0x02, 0x21, 0x00, 0xbc, 0xd7, 0x33, 0xc2, 0xa2, + 0xe0, 0x97, 0x45, 0x93, 0xf2, 0x55, 0xe3, 0xf8, 0x90, 0xbc, 0x6f, 0xa4, 0xcd, 0x74, 0x97, + 0x31, 0x4a, 0xfb, 0xc2, 0x85, 0xf7, 0xfe, 0x7f, 0x41, 0xb2, 0xd8, 0x0c }; + +/* A DSA public key in DER SubjectPublicKeyInfo form, as produced by + * openssl genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 \ + * -pkeyopt dsa_paramgen_q_bits:160 -out params.pem + * openssl genpkey -paramfile params.pem | openssl pkey -pubout -outform DER + */ +static const guint8 dsa_pubkey[] = { + 0x30, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0x2b, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x38, 0x04, + 0x01, 0x30, 0x82, 0x01, 0x1e, 0x02, 0x81, 0x81, 0x00, 0xed, 0x71, 0x14, 0xca, 0xc4, 0x6a, 0x57, + 0x2b, 0xe4, 0x59, 0x11, 0xef, 0x76, 0x1b, 0x02, 0xec, 0xde, 0x02, 0x12, 0x82, 0x5e, 0xeb, 0xda, + 0xc3, 0x6f, 0xbd, 0x9c, 0x68, 0xcc, 0x41, 0xfa, 0xf1, 0x35, 0x03, 0xf8, 0x96, 0x26, 0xa0, 0xf6, + 0x14, 0xdb, 0xea, 0xab, 0x49, 0xeb, 0x66, 0x4a, 0xf5, 0x04, 0xc8, 0x16, 0x9f, 0xf1, 0xbe, 0x2c, + 0xff, 0xbc, 0xc5, 0x40, 0xeb, 0xd1, 0xe9, 0x2c, 0x6f, 0x10, 0x1f, 0x02, 0x92, 0xf7, 0xd7, 0xc3, + 0x96, 0x05, 0x2d, 0x66, 0xb3, 0x73, 0x27, 0x27, 0xf1, 0x46, 0x88, 0x94, 0x07, 0x09, 0xc4, 0xf4, + 0xcc, 0xe5, 0x88, 0x03, 0x8e, 0x48, 0x2b, 0x5c, 0x89, 0x30, 0x87, 0xab, 0x9a, 0xf3, 0x9a, 0x4a, + 0x8a, 0xdd, 0x0b, 0xc1, 0x92, 0xd0, 0xc8, 0x4d, 0xe4, 0x10, 0xa5, 0xbf, 0xab, 0xd6, 0x3a, 0x9b, + 0x39, 0x03, 0xd4, 0x11, 0x3d, 0x15, 0xe0, 0x07, 0x99, 0x02, 0x15, 0x00, 0xa4, 0x8c, 0xf3, 0x4c, + 0xd4, 0xf7, 0x2c, 0x2c, 0x0e, 0x60, 0x87, 0x33, 0x7f, 0x15, 0x70, 0x0b, 0xa9, 0x35, 0x33, 0x85, + 0x02, 0x81, 0x80, 0x22, 0xc9, 0x2c, 0xac, 0x84, 0x09, 0xb9, 0x36, 0x4a, 0x33, 0xf7, 0x4d, 0xe1, + 0x3b, 0x88, 0xcf, 0x9f, 0xfc, 0xea, 0x0c, 0x6e, 0x21, 0x1c, 0xf4, 0x7c, 0x9d, 0x52, 0x04, 0x30, + 0xb8, 0x4e, 0x6d, 0x38, 0xa5, 0x9a, 0x8a, 0x0d, 0x4d, 0x6c, 0x83, 0x38, 0xa8, 0x58, 0x8f, 0x6b, + 0x67, 0x07, 0x6a, 0xb9, 0x4e, 0xae, 0x72, 0xee, 0x2f, 0xca, 0x05, 0x12, 0x03, 0x69, 0x85, 0x8b, + 0x65, 0x03, 0x87, 0x02, 0x07, 0x7d, 0xdb, 0x84, 0x4a, 0x97, 0x6f, 0xe8, 0x9a, 0xfc, 0x98, 0xf0, + 0xe2, 0xac, 0xf0, 0xc0, 0x60, 0xe2, 0xda, 0xd1, 0x8b, 0xb0, 0x78, 0x12, 0xc6, 0x44, 0xfa, 0x67, + 0x4b, 0x05, 0x9e, 0x47, 0xc7, 0xcc, 0x05, 0x85, 0xc5, 0x85, 0xc9, 0x55, 0xb3, 0x12, 0x02, 0xf3, + 0x15, 0xfb, 0x89, 0x4b, 0x30, 0x69, 0xc6, 0xac, 0xf7, 0x27, 0x86, 0x8b, 0x36, 0x97, 0x98, 0x9b, + 0xd4, 0x67, 0x31, 0x03, 0x81, 0x84, 0x00, 0x02, 0x81, 0x80, 0x3c, 0x0c, 0x79, 0x8b, 0x22, 0xac, + 0xe2, 0xd2, 0xa8, 0x4f, 0x60, 0x5c, 0xa4, 0xed, 0x24, 0xe9, 0xca, 0xab, 0x13, 0x47, 0x1a, 0xb7, + 0xd5, 0x70, 0x19, 0xd9, 0xc2, 0x48, 0x93, 0xe9, 0xba, 0xec, 0x19, 0x4b, 0xb4, 0xf9, 0x22, 0xa3, + 0x6f, 0x99, 0xc2, 0xe1, 0x4e, 0x93, 0xb0, 0x87, 0xe2, 0x5f, 0x3e, 0x8b, 0x68, 0x68, 0x26, 0x1f, + 0xd9, 0x7b, 0x34, 0xe7, 0x4d, 0xa9, 0x76, 0xa2, 0xd2, 0xd1, 0x9d, 0x6b, 0x6b, 0xdf, 0xa2, 0x32, + 0xf8, 0xc6, 0x15, 0x55, 0xb0, 0x83, 0x43, 0x1c, 0xf9, 0x05, 0xbb, 0x9f, 0x10, 0x8c, 0xb6, 0x91, + 0xf5, 0x9a, 0xef, 0xb4, 0xb2, 0xb8, 0x47, 0x2a, 0x5c, 0x0e, 0xa3, 0xde, 0x0d, 0x62, 0x16, 0x47, + 0xe0, 0x35, 0x98, 0x06, 0x4a, 0x17, 0xe1, 0xd5, 0xad, 0x52, 0x08, 0xb9, 0xfc, 0x88, 0x2a, 0x5f, + 0x52, 0xd0, 0xdc, 0xb6, 0xd6, 0x8e, 0x7f, 0x43, 0x61, 0x7d +}; -static void -test_spki (void) +static const char spki_signed_data[] = "some signed data"; + +/* Not a well-formed ECDSA or DSA signature, which openssl reports as an error + * rather than as a signature mismatch. + */ +static const char spki_malformed_signature[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + +static bool +validate_spki (const char *data, const guint8 *pubkey, gsize pubkey_size, const void *signature, + gsize signature_size) { - g_autoptr (GBytes) data = g_bytes_new_static ("some signed data", 16); - g_autoptr (GBytes) pubkey = g_bytes_new_static (ec_p256_pubkey, sizeof (ec_p256_pubkey)); - /* Not a well-formed ECDSA signature, which openssl reports as an error - * rather than as a signature mismatch. - */ - g_autoptr (GBytes) signature = g_bytes_new_static ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 32); + g_autoptr (GBytes) data_bytes = g_bytes_new_static (data, strlen (data)); + g_autoptr (GBytes) pubkey_bytes = g_bytes_new_static (pubkey, pubkey_size); + g_autoptr (GBytes) signature_bytes = g_bytes_new_static (signature, signature_size); bool valid = false; g_autoptr (GError) error = NULL; - g_assert (otcore_validate_spki_signature (data, pubkey, signature, &valid, &error)); + g_assert ( + otcore_validate_spki_signature (data_bytes, pubkey_bytes, signature_bytes, &valid, &error)); g_assert_no_error (error); - g_assert (!valid); + return valid; +} + +static void +test_spki_ecdsa (void) +{ + g_assert (validate_spki (spki_signed_data, ec_p256_pubkey, sizeof (ec_p256_pubkey), + ec_p256_signature, sizeof (ec_p256_signature))); + g_assert (!validate_spki ("some other data", ec_p256_pubkey, sizeof (ec_p256_pubkey), + ec_p256_signature, sizeof (ec_p256_signature))); + g_assert (!validate_spki (spki_signed_data, ec_p256_pubkey, sizeof (ec_p256_pubkey), + spki_malformed_signature, strlen (spki_malformed_signature))); + g_assert (!validate_spki (spki_signed_data, ec_p256_pubkey, sizeof (ec_p256_pubkey), "", 0)); +} + +static void +test_spki_dsa (void) +{ + g_assert (!validate_spki (spki_signed_data, dsa_pubkey, sizeof (dsa_pubkey), + spki_malformed_signature, strlen (spki_malformed_signature))); + g_assert (!validate_spki (spki_signed_data, dsa_pubkey, sizeof (dsa_pubkey), "", 0)); } #endif @@ -170,7 +243,8 @@ g_test_add_func ("/ed25519", test_ed25519); #ifdef HAVE_OPENSSL otcore_spki_init (); - g_test_add_func ("/spki", test_spki); + g_test_add_func ("/spki/ecdsa", test_spki_ecdsa); + g_test_add_func ("/spki/dsa", test_spki_dsa); #endif g_test_add_func ("/prepare-root-cmdline", test_prepare_root_cmdline); g_test_add_func ("/prepare-root-config", test_prepare_root_config); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-repo.c new/libostree-2026.6/tests/test-repo.c --- old/libostree-2026.5/tests/test-repo.c 2026-10-23 21:19:37.000000000 +0200 +++ new/libostree-2026.6/tests/test-repo.c 2026-10-30 13:55:20.000000000 +0100 @@ -840,11 +840,23 @@ typedef struct { + const char *path; size_t len; gboolean write_first; gboolean repeat_patch; } DeltaPatchTest; +static const DeltaPatchTest delta_patch_tests[] = { + { "/repo/delta/bspatch-write-empty", 0, FALSE, FALSE }, + { "/repo/delta/bspatch-write", 3, FALSE, FALSE }, + { "/repo/delta/bspatch-write-multi-chunk", 65537, FALSE, FALSE }, + { "/repo/delta/bspatch-write-checksum-chunks", 1024 * 1024 + 1, FALSE, FALSE }, + { "/repo/delta/write-bspatch", 3, TRUE, FALSE }, + { "/repo/delta/repeated-bspatch", 3, FALSE, TRUE }, + { "/repo/delta/write-bspatch-multi-chunk", 65537, TRUE, FALSE }, + { "/repo/delta/repeated-bspatch-multi-chunk", 65537, FALSE, TRUE }, +}; + /* Exercise the real opcode executor and commit path, including a WRITE after * BSPATCH. Checking the stored bytes independently of the accumulated checksum * catches an incorrect file offset after mapped output. @@ -859,17 +871,20 @@ g_autoptr (OstreeRepo) repo = ostree_repo_create_at ( fixture->tmpdir.fd, "repo", OSTREE_REPO_MODE_BARE_USER_ONLY, NULL, NULL, &error); g_assert_no_error (error); + if (g_strcmp0 (g_getenv ("OSTREE_REPO_TEST_ERROR"), "disable-mmap") == 0) + g_assert_true ((repo->test_error_flags & OSTREE_REPO_TEST_ERROR_DISABLE_MMAP) != 0); g_autoptr (OstreeRepo) reference = ostree_repo_create_at ( fixture->tmpdir.fd, "reference", OSTREE_REPO_MODE_BARE_USER_ONLY, NULL, NULL, &error); g_assert_no_error (error); g_autofree uint8_t *expected = g_malloc (expected_len); memset (expected, 'A', expected_len); expected[test->write_first ? 0 : expected_len - 1] = 'D'; + static const uint8_t source[] = "Dld"; g_autofree char *expected_checksum = ostree_repo_write_regfile_inline ( reference, NULL, 0, 0, S_IFREG | 0644, NULL, expected, expected_len, NULL, &error); g_assert_no_error (error); g_autofree char *source_checksum = ostree_repo_write_regfile_inline ( - repo, NULL, 0, 0, S_IFREG | 0644, NULL, (const uint8_t *)"Dld", 3, NULL, &error); + repo, NULL, 0, 0, S_IFREG | 0644, NULL, source, sizeof (source) - 1, NULL, &error); g_assert_no_error (error); uint8_t source_bytes[OSTREE_SHA256_DIGEST_LEN]; @@ -878,10 +893,19 @@ g_byte_array_append (payload, source_bytes, sizeof (source_bytes)); if (len > 0) { - /* A bspatch control triple: no diff bytes, len literal bytes, no seek. */ - uint64_t control[] = { 0, GUINT64_TO_LE (len), 0 }; + /* The diff block uses old bytes; the remaining bytes are literals. Keep + * the source small so fallocate fault injection still targets the output. + */ + const size_t diff_len = MIN (len, sizeof (source) - 1); + uint64_t control[] = { GUINT64_TO_LE (diff_len), GUINT64_TO_LE (len - diff_len), 0 }; g_byte_array_append (payload, (const uint8_t *)control, sizeof (control)); - g_byte_array_append (payload, expected + (test->write_first ? 1 : 0), len); + for (size_t i = 0; i < diff_len; i++) + { + const uint8_t diff = 'A' - source[i]; + g_byte_array_append (payload, &diff, 1); + } + g_byte_array_append (payload, expected + (test->write_first ? 1 : 0) + diff_len, + len - diff_len); } const size_t patch_len = payload->len - sizeof (source_bytes); const size_t write_offset = payload->len; @@ -1005,36 +1029,42 @@ g_assert_cmpmem (actual, bytes_read, expected, expected_len); } +/* Run the same opcode fixtures in a fresh process so OSTREE_REPO_TEST_ERROR is + * set before any repositories (or their worker threads) are created. */ +static void +test_delta_disable_mmap (void) +{ + g_autoptr (GError) error = NULL; + g_autofree char *self = g_file_read_link ("/proc/self/exe", &error); + g_assert_no_error (error); + g_auto (GStrv) disable_mmap_env + = g_environ_setenv (g_get_environ (), "OSTREE_REPO_TEST_ERROR", "disable-mmap", TRUE); + + for (guint i = 0; i < G_N_ELEMENTS (delta_patch_tests); i++) + { + char *argv[] = { self, "-p", (char *)delta_patch_tests[i].path, NULL }; + int status; + g_autofree char *stdout = NULL; + g_autofree char *stderr = NULL; + g_assert_true (g_spawn_sync (NULL, argv, disable_mmap_env, G_SPAWN_DEFAULT, NULL, NULL, + &stdout, &stderr, &status, &error)); + g_assert_no_error (error); + if (!g_spawn_check_exit_status (status, &error)) + g_error ("%s failed: %s\n%s", delta_patch_tests[i].path, error->message, stderr); + } +} + int main (int argc, char **argv) { setlocale (LC_ALL, ""); g_test_init (&argc, &argv, NULL); - static const DeltaPatchTest patch_tests[] = { - { 0, FALSE, FALSE }, { 3, FALSE, FALSE }, - { 65537, FALSE, FALSE }, { 1024 * 1024 + 1, FALSE, FALSE }, - { 3, TRUE, FALSE }, { 3, FALSE, TRUE }, - { 65537, TRUE, FALSE }, { 65537, FALSE, TRUE }, - }; - g_test_add ("/repo/hash", Fixture, NULL, setup, test_repo_hash, teardown); - g_test_add ("/repo/delta/bspatch-write-empty", Fixture, &patch_tests[0], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/bspatch-write", Fixture, &patch_tests[1], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/bspatch-write-multi-chunk", Fixture, &patch_tests[2], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/bspatch-write-checksum-chunks", Fixture, &patch_tests[3], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/write-bspatch", Fixture, &patch_tests[4], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/repeated-bspatch", Fixture, &patch_tests[5], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/write-bspatch-multi-chunk", Fixture, &patch_tests[6], setup, - test_delta_bspatch_write, teardown); - g_test_add ("/repo/delta/repeated-bspatch-multi-chunk", Fixture, &patch_tests[7], setup, - test_delta_bspatch_write, teardown); + for (guint i = 0; i < G_N_ELEMENTS (delta_patch_tests); i++) + g_test_add (delta_patch_tests[i].path, Fixture, &delta_patch_tests[i], setup, + test_delta_bspatch_write, teardown); + g_test_add_func ("/repo/delta/disable-mmap", test_delta_disable_mmap); g_test_add ("/repo/hash/closed", Fixture, NULL, setup, test_repo_hash_closed, teardown); g_test_add ("/repo/equal", Fixture, NULL, setup, test_repo_equal, teardown); g_test_add ("/repo/get_min_free_space", Fixture, NULL, setup, test_repo_get_min_free_space, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-rofiles-fuse.sh new/libostree-2026.6/tests/test-rofiles-fuse.sh --- old/libostree-2026.5/tests/test-rofiles-fuse.sh 2025-06-30 15:15:07.000000000 +0200 +++ new/libostree-2026.6/tests/test-rofiles-fuse.sh 2026-10-30 13:55:20.000000000 +0100 @@ -51,6 +51,12 @@ assert_file_has_content err.txt "Read-only file system" assert_file_has_content mnt/firstfile first assert_file_has_content checkout-test2/firstfile first + # O_RDONLY | O_TRUNC truncates too + if python3 -c 'import os, sys; os.open(sys.argv[1], os.O_RDONLY | os.O_TRUNC)' mnt/${path} 2>err.txt; then + assert_not_reached "inplace truncation O_RDONLY ${path}" + fi + assert_file_has_content err.txt "Read-only file system" + assert_file_has_content checkout-test2/firstfile first done echo "ok failed inplace mutation (open O_TRUNCATE)" @@ -76,6 +82,15 @@ if setfattr -n user.foo -v bar mnt/firstfile-link; then assert_not_reached "set xattr on linked file" fi +# Add an xattr behind the mount so there is one to remove +setfattr -n user.foo -v bar checkout-test2/firstfile +if setfattr -x user.foo mnt/firstfile 2>err.txt; then + assert_not_reached "remove xattr on linked file" +fi +assert_file_has_content err.txt "Read-only file system" +getfattr -n user.foo checkout-test2/firstfile > out.txt +assert_file_has_content_literal out.txt 'user.foo="bar"' +setfattr -x user.foo checkout-test2/firstfile # Test creating new files, using chown + chmod on them as well echo anewfile-for-fuse > mnt/anewfile-for-fuse diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libostree-2026.5/tests/test-signed-commit-spki.sh new/libostree-2026.6/tests/test-signed-commit-spki.sh --- old/libostree-2026.5/tests/test-signed-commit-spki.sh 2025-06-30 15:15:07.000000000 +0200 +++ new/libostree-2026.6/tests/test-signed-commit-spki.sh 2026-10-30 13:55:20.000000000 +0100 @@ -152,12 +152,14 @@ tap_ok "verify spki system-wide configuration" -# Add the public key into revoked list +# Add the public key into revoked list, next to another revoked key +gen_spki_random_public_pem > ${test_tmpdir}/revoked.spki.d/random cat "${SPKIPUBLICPEM}" > ${test_tmpdir}/revoked.spki.d/correct # Check if public key is not valid anymore -if ${CMD_PREFIX} ostree --repo=${test_tmpdir}/repo sign --verify --sign-type=spki --keys-dir=${test_tmpdir} ${COMMIT}; then +if ${CMD_PREFIX} ostree --repo=${test_tmpdir}/repo sign --verify --sign-type=spki --keys-dir=${test_tmpdir} ${COMMIT} 2>err.txt; then exit 1 fi +assert_file_has_content err.txt 'spki: Signature couldn.t be verified' rm -rf ${test_tmpdir}/{trusted,revoked}.spki.d tap_ok "verify spki revoking keys mechanism"
