From e44526ba3dc1ccd25800ba7a7f47fa0de0e23dee Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 30 Apr 2018 09:46:29 -0400 Subject: [PATCH] repo: Add checksum to error message opening unreadable object This would have debugged trying to do a pull as non-root from a sysroot repository. See for example: https://github.com/ostreedev/ostree/issues/1562 Closes: #1564 Approved by: jlebon --- src/libostree/ostree-repo.c | 5 ++++- .../installed/nondestructive/itest-bare-unit.sh | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 79006a6bb3..972f05ae54 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -3545,6 +3545,9 @@ _ostree_repo_load_file_bare (OstreeRepo *self, return FALSE; } + const char *errprefix = glnx_strjoina ("Opening content object ", checksum); + GLNX_AUTO_PREFIX_ERROR (errprefix, error); + struct stat stbuf; glnx_autofd int fd = -1; g_autofree char *ret_symlink = NULL; @@ -3585,7 +3588,7 @@ _ostree_repo_load_file_bare (OstreeRepo *self, } if (!(S_ISREG (stbuf.st_mode) || S_ISLNK (stbuf.st_mode))) - return glnx_throw (error, "Not a regular file or symlink: %s", loose_path_buf); + return glnx_throw (error, "Not a regular file or symlink"); /* In the non-bare-user case, gather symlink info if requested */ if (self->mode != OSTREE_REPO_MODE_BARE_USER diff --git a/tests/installed/nondestructive/itest-bare-unit.sh b/tests/installed/nondestructive/itest-bare-unit.sh index e331260817..bfd33172c3 100755 --- a/tests/installed/nondestructive/itest-bare-unit.sh +++ b/tests/installed/nondestructive/itest-bare-unit.sh @@ -21,3 +21,19 @@ trap _tmpdir_cleanup EXIT /usr/libexec/installed-tests/libostree/test-basic.sh /usr/libexec/installed-tests/libostree/test-basic-c date + +# Test error message when opening a non-world-readable object +# https://github.com/ostreedev/ostree/issues/1562 +rm repo -rf +chmod a+rx . +ostree --repo=repo init --mode=bare +mkdir files +touch files/unreadable +chmod 0 files/unreadable +ostree --repo=repo commit -b testbranch --tree=dir=files +# We should be able to read as root due to CAP_DAC_OVERRIDE +ostree --repo=repo cat testbranch /unreadable >/dev/null +if setpriv --reuid bin --regid bin --clear-groups ostree --repo=repo cat testbranch /unreadable 2>err.txt; then + fatal "Listed unreadable object as non-root" +fi +assert_file_has_content err.txt "Opening content object.*openat: Permission denied"