From: Lennart Poettering Date: Tue, 22 Nov 2016 19:19:08 +0000 (+0100) Subject: core: hook up MountFlags= to the transient unit logic X-Git-Tag: v233.3~149 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d1fccb5f88df2bdbbbb20033c3f8cff281cec041;ds=sidebyside 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. --- 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);