summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca BRUNO <luca.bruno@coreos.com>2021-08-19 13:50:21 +0000
committerLuca BRUNO <luca.bruno@coreos.com>2021-08-19 14:08:36 +0000
commitc6b72f527bd836d810890dfc6c8efd0229157fc3 (patch)
tree2cf8d5a94ee8d46b24d77ceed2fdb5909acb8d79
parentcac4f2133b4f4d14c59c0fe4a2e568d0d938eac4 (diff)
downloadostree-c6b72f527bd836d810890dfc6c8efd0229157fc3.tar.gz
lib/core/checksum: add flag to use canonical permissions
This adds a new `OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS` checksumming flag, which is needed in bare-user-only mode to ignore local IDs.
-rw-r--r--src/libostree/ostree-core.c8
-rw-r--r--src/libostree/ostree-core.h9
2 files changed, 17 insertions, 0 deletions
diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c
index 6a7c2afa..aecaf31a 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -984,6 +984,9 @@ ostree_checksum_file_at (int dfd,
g_autoptr(GFileInfo) file_info = _ostree_stbuf_to_gfileinfo (stbuf);
+ const gboolean canonicalize_perms =
+ ((flags & OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS) != 0);
+
g_autoptr(GInputStream) in = NULL;
if (S_ISREG (stbuf->st_mode))
{
@@ -991,6 +994,11 @@ ostree_checksum_file_at (int dfd,
if (!glnx_openat_rdonly (dfd, path, FALSE, &fd, error))
return FALSE;
in = g_unix_input_stream_new (glnx_steal_fd (&fd), TRUE);
+ if (canonicalize_perms)
+ {
+ g_file_info_set_attribute_uint32 (file_info, "unix::uid", 0);
+ g_file_info_set_attribute_uint32 (file_info, "unix::gid", 0);
+ }
}
else if (S_ISLNK (stbuf->st_mode))
{
diff --git a/src/libostree/ostree-core.h b/src/libostree/ostree-core.h
index 3b903d5c..7dc1ffb7 100644
--- a/src/libostree/ostree-core.h
+++ b/src/libostree/ostree-core.h
@@ -460,12 +460,21 @@ gboolean ostree_break_hardlink (int dfd,
/**
* OstreeChecksumFlags:
+ * @OSTREE_CHECKSUM_FLAGS_NONE: Default checksumming without tweaks.
+ * (Since: 2017.13.)
+ * @OSTREE_CHECKSUM_FLAGS_IGNORE_XATTRS: Ignore xattrs when checksumming.
+ * (Since: 2017.13.)
+ * @OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS: Use canonical uid/gid/mode
+ * values, for bare-user-only mode. (Since: 2021.4.)
+ *
+ * Flags influencing checksumming logic.
*
* Since: 2017.13
*/
typedef enum {
OSTREE_CHECKSUM_FLAGS_NONE = 0,
OSTREE_CHECKSUM_FLAGS_IGNORE_XATTRS = (1 << 0),
+ OSTREE_CHECKSUM_FLAGS_CANONICAL_PERMISSIONS = (1 << 1),
} OstreeChecksumFlags;
_OSTREE_PUBLIC