From 17206c059dc2e42e7081079b76eafda68cc9a5b8 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 26 Mar 2013 16:05:07 +0100 Subject: [PATCH] libmount: fix user-mount by root for mount. helpers Append options like "exec" "suid" and "dev" to mount. helpers command line if the options are in fstab. This is relevant for root user who calls mount(8) for fstab entries with "user,exec" etc. Signed-off-by: Karel Zak --- libmount/src/context_mount.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index 00738b4..3b280ab 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -275,6 +275,28 @@ static int generate_helper_optstr(struct libmnt_context *cxt, char **optstr) if (!*optstr) return -ENOMEM; + if (cxt->user_mountflags & MNT_MS_USER) { + /* + * This is unnecessary for real user-mounts as mount. + * helpers have to always follow fstab rather than mount + * options on command line. + * + * But if you call mount. as root then the helper follows + * command line. If there is (for example) "user,exec" in fstab + * then we have to manually append the "exec" back to the options + * string, bacause there is nothing like MS_EXEC (we have only + * MS_NOEXEC in mount flags and we don't care about the original + * mount string in libmount for VFS options). + */ + if (!(cxt->mountflags & MS_NOEXEC)) + mnt_optstr_append_option(optstr, "exec", NULL); + if (!(cxt->mountflags & MS_NOSUID)) + mnt_optstr_append_option(optstr, "suid", NULL); + if (!(cxt->mountflags & MS_NODEV)) + mnt_optstr_append_option(optstr, "dev", NULL); + } + + if (cxt->flags & MNT_FL_SAVED_USER) rc = mnt_optstr_set_option(optstr, "user", cxt->orig_user); if (rc) -- 1.8.1.4