]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-blockdev-util: avoid abort when /home is a symlink
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 25 Oct 2023 16:19:35 +0000 (17:19 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 26 Oct 2023 13:46:15 +0000 (14:46 +0100)
On rpm-ostree distributions like Fedora SilverBlue /home (and various
other well known locations) are symlinks to somewhere beneath /var.

The path_is_encrypted() method uses O_NOFOLLOW and as a result will
return ELOOP on /home. This causes test-blockdev-util to abort.
Add ELOOP to the ignorable set of errnos for testing.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/test/test-blockdev-util.c

index b97783b41fbd79f1cd4eb641eda151954c962fa0..134386c3f68f8062eda9a086f67bcfb5b2ae999c 100644 (file)
@@ -8,12 +8,14 @@ static void test_path_is_encrypted_one(const char *p, int expect) {
         int r;
 
         r = path_is_encrypted(p);
-        if (r == -ENOENT || ERRNO_IS_NEG_PRIVILEGE(r))
+        if (IN_SET(r, -ENOENT, -ELOOP) || ERRNO_IS_NEG_PRIVILEGE(r))
                 /* This might fail, if btrfs is used and we run in a container. In that case we cannot
                  * resolve the device node paths that BTRFS_IOC_DEV_INFO returns, because the device nodes
                  * are unlikely to exist in the container. But if we can't stat() them we cannot determine
                  * the dev_t of them, and thus cannot figure out if they are encrypted. Hence let's just
-                 * ignore ENOENT here. Also skip the test if we lack privileges. */
+                 * ignore ENOENT here. Also skip the test if we lack privileges.
+                 * ELOOP might happen if the mount point is a symlink, as seen with under
+                 * some rpm-ostree distros */
                 return;
         assert_se(r >= 0);