lib/commit: disallow writing content in 'bare-split-xattrs' mode
authorLuca BRUNO <luca.bruno@coreos.com>
Wed, 2 Mar 2022 16:45:02 +0000 (16:45 +0000)
committerLuca BRUNO <luca.bruno@coreos.com>
Wed, 2 Mar 2022 16:45:02 +0000 (16:45 +0000)
This prevents writing content into 'bare-split-xattrs` repository,
while carving some space for experimenting via a temporary
`OSTREE_EXP_WRITE_BARE_SPLIT_XATTRS` environment flag.

src/libostree/ostree-repo-commit.c
tests/test-basic-bare-split-xattrs.sh

index 21ce288fb7cb6305481b63941381c239227053bb..5b16be5b72a4e74df8b6467fe6abae5c71ca58cc 100644 (file)
@@ -920,6 +920,9 @@ write_content_object (OstreeRepo         *self,
     return FALSE;
 
   OstreeRepoMode repo_mode = ostree_repo_get_mode (self);
+  if (repo_mode == OSTREE_REPO_MODE_BARE_SPLIT_XATTRS &&
+      g_getenv ("OSTREE_EXP_WRITE_BARE_SPLIT_XATTRS") == NULL)
+    return glnx_throw (error, "Not allowed due to repo mode");
 
   GInputStream *file_input; /* Unowned alias */
   g_autoptr(GInputStream) file_input_owned = NULL; /* We need a temporary for bare-user symlinks */
index 8bd6430d343f4bacdf82eca1b4070289661b9d8d..1eeb30390ceaa541f929af7bbb1f6a8c4819bbed 100755 (executable)
@@ -22,4 +22,26 @@ ${OSTREE} fsck --all
 tap_ok "repo fsck"
 rm -rf -- repo
 
+cd ${test_tmpdir}
+mkdir -p "${test_tmpdir}/files"
+touch files/foo
+${OSTREE} init --mode "${mode}"
+if ${OSTREE} commit --orphan -m "not implemented" files; then
+    assert_not_reached "commit to bare-split-xattrs should have failed"
+fi
+${OSTREE} fsck --all
+tap_ok "commit not implemented"
+rm -rf -- repo files
+
+cd ${test_tmpdir}
+mkdir -p "${test_tmpdir}/files"
+touch files/foo
+${OSTREE} init --mode "${mode}"
+OSTREE_EXP_WRITE_BARE_SPLIT_XATTRS=true ${OSTREE} commit --orphan -m "experimental" files
+if ${OSTREE} fsck --all; then
+    assert_not_reached "fsck should have failed"
+fi
+tap_ok "commit exp override"
+rm -rf -- repo files
+
 tap_end