From d1fccb5f88df2bdbbbb20033c3f8cff281cec041 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 22 Nov 2016 20:19:08 +0100 Subject: [PATCH] core: hook up MountFlags= to the transient unit logic This makes "elogind-run -p MountFlags=shared -t /bin/sh" work, by making MountFlags= to the list of properties that may be accessed transiently. --- src/basic/mount-util.c | 34 +++++++++++++++++++++++++++++++++- src/basic/mount-util.h | 3 +++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/basic/mount-util.c b/src/basic/mount-util.c index 477342e71..61190e40a 100644 --- a/src/basic/mount-util.c +++ b/src/basic/mount-util.c @@ -219,7 +219,7 @@ int path_is_mount_point(const char *t, const char *root, int flags) { * /bin -> /usr/bin/ and /usr is a mount point, then the parent that we * look at needs to be /usr, not /. */ if (flags & AT_SYMLINK_FOLLOW) { - r = chase_symlinks(t, root, &canonical); + r = chase_symlinks(t, root, 0, &canonical); if (r < 0) return r; @@ -691,3 +691,35 @@ int umount_verbose(const char *what) { return 0; } #endif // 0 + +const char *mount_propagation_flags_to_string(unsigned long flags) { + + switch (flags & (MS_SHARED|MS_SLAVE|MS_PRIVATE)) { + + case MS_SHARED: + return "shared"; + + case MS_SLAVE: + return "slave"; + + case MS_PRIVATE: + return "private"; + } + + return NULL; +} + +unsigned long mount_propagation_flags_from_string(const char *name) { + + if (isempty(name)) + return 0; + + if (streq(name, "shared")) + return MS_SHARED; + if (streq(name, "slave")) + return MS_SLAVE; + if (streq(name, "private")) + return MS_PRIVATE; + + return 0; +} diff --git a/src/basic/mount-util.h b/src/basic/mount-util.h index ea887e162..57cfc3628 100644 --- a/src/basic/mount-util.h +++ b/src/basic/mount-util.h @@ -67,3 +67,6 @@ int mount_verbose( const char *options); int umount_verbose(const char *where); #endif // 0 + +const char *mount_propagation_flags_to_string(unsigned long flags); +unsigned long mount_propagation_flags_from_string(const char *name); -- 2.30.2