]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: remove smackfs* option when SMACK not enabled
authorKarel Zak <kzak@redhat.com>
Tue, 12 Nov 2013 14:07:12 +0000 (15:07 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 12 Nov 2013 14:07:12 +0000 (15:07 +0100)
If there is no /sys/fs/smackfs then libmount removes smackfs*= mount
options when compiled --with-smack.

Note that we do the same for SELinux.

References: http://www.mail-archive.com/systemd-devel@lists.freedesktop.org/msg13740.html
Signed-off-by: Karel Zak <kzak@redhat.com>
configure.ac
libmount/src/context_mount.c

index 53c0de2f0b219734aa1e4df5268716d07c8a4a5f..8665780f0ec08bfbbe854404fe004ecb36b5e7a9 100644 (file)
@@ -1407,6 +1407,15 @@ AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [
 AM_CONDITIONAL([HAVE_SYSTEMD], [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != "xno" ])
 
 
+AC_ARG_WITH([smack],
+  AS_HELP_STRING([--with-smack], [build with SMACK support]),
+  [], [with_smack=no]
+)
+AS_IF([test "x$with_smack" = xyes], [
+  AC_DEFINE([HAVE_SMACK], [1], [Add SMACK support])
+])
+
+
 AC_ARG_WITH([bashcompletiondir],
   AS_HELP_STRING([--with-bashcompletiondir=DIR], [Bash completions directory]),
   [],
index ffea65354ec838e58d684a37c3e338fa852b81d1..da6ea9b7d6cd616058c0fb3833f5742b0c83e8d3 100644 (file)
@@ -115,6 +115,10 @@ static int fix_optstr(struct libmnt_context *cxt)
 #ifdef HAVE_LIBSELINUX
        int se_fix = 0, se_rem = 0;
 #endif
+#ifdef HAVE_SMACK
+       int sm_rem = 0;
+#endif
+
        assert(cxt);
        assert(cxt->fs);
        assert((cxt->flags & MNT_FL_MOUNTFLAGS_MERGED));
@@ -205,6 +209,10 @@ static int fix_optstr(struct libmnt_context *cxt)
                mnt_optstr_deduplicate_option(&fs->fs_optstr, "rootcontext");
                mnt_optstr_deduplicate_option(&fs->fs_optstr, "seclabel");
        }
+#endif
+#ifdef HAVE_SMACK
+       if (access("sys/fs/smackfs", F_OK) != 0)
+               sm_rem = 1;
 #endif
        while (!mnt_optstr_next_option(&next, &name, &namesz, &val, &valsz)) {
 
@@ -231,6 +239,20 @@ static int fix_optstr(struct libmnt_context *cxt)
                                rc = mnt_optstr_fix_secontext(&fs->fs_optstr,
                                                        val, valsz, &next);
                }
+#endif
+#ifdef HAVE_SMACK
+               else if (sm_rem && namesz >= 10
+                        && (!strncmp(name, "smackfsdef", 10) ||
+                            !strncmp(name, "smackfsfloor", 12) ||
+                            !strncmp(name, "smackfshat", 10) ||
+                            !strncmp(name, "smackfsroot", 11) ||
+                            !strncmp(name, "smackfstransmute", 16))) {
+
+                       next = name;
+                       rc = mnt_optstr_remove_option_at(&fs->fs_optstr,
+                                       name,
+                                       val ? val + valsz : name + namesz);
+               }
 #endif
                if (rc)
                        goto done;