summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/stat.c4
-rwxr-xr-xtests.sh21
-rw-r--r--tests/test_automount.out1
3 files changed, 26 insertions, 0 deletions
diff --git a/src/stat.c b/src/stat.c
index c3ee1ad..ad57e65 100644
--- a/src/stat.c
+++ b/src/stat.c
@@ -310,6 +310,10 @@ int bfs_stat(int at_fd, const char *at_path, enum bfs_stat_flags flags, struct b
at_flags |= AT_SYMLINK_NOFOLLOW;
}
+#ifdef AT_NO_AUTOMOUNT
+ at_flags |= AT_NO_AUTOMOUNT;
+#endif
+
int x_flags = 0;
#ifdef AT_STATX_DONT_SYNC
if (flags & BFS_STAT_NOSYNC) {
diff --git a/tests.sh b/tests.sh
index 25fda36..f6b7326 100755
--- a/tests.sh
+++ b/tests.sh
@@ -827,6 +827,8 @@ sudo_tests=(
test_inum_bind_mount
test_type_bind_mount
test_xtype_bind_mount
+
+ test_automount
)
case "$UNAME" in
@@ -3019,6 +3021,25 @@ function test_xtype_bind_mount() {
return $ret
}
+function test_automount() {
+ # bfs shouldn't trigger automounts unless it descends into them
+
+ skip_if fail command -v systemd-mount &>/dev/null
+
+ rm -rf scratch/*
+ mkdir scratch/{foo,mnt}
+ quiet sudo systemd-mount -A -o bind basic scratch/mnt
+
+ local before=$(inum scratch/mnt)
+ bfs_diff scratch -inum "$before" -prune
+ local ret=$?
+ local after=$(inum scratch/mnt)
+
+ quiet sudo systemd-umount scratch/mnt
+
+ ((ret == 0 && before == after))
+}
+
function set_acl() {
case "$UNAME" in
Darwin)
diff --git a/tests/test_automount.out b/tests/test_automount.out
new file mode 100644
index 0000000..99c7511
--- /dev/null
+++ b/tests/test_automount.out
@@ -0,0 +1 @@
+scratch/mnt