diff options
-rw-r--r-- | configure.ac | 9 | ||||
-rw-r--r-- | libmount/src/context_mount.c | 22 |
2 files changed, 31 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 53c0de2f0..8665780f0 100644 --- a/configure.ac +++ b/configure.ac @@ -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]), [], diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index ffea65354..da6ea9b7d 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -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)); @@ -206,6 +210,10 @@ static int fix_optstr(struct libmnt_context *cxt) 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)) { if (namesz == 3 && !strncmp(name, "uid", 3)) @@ -232,6 +240,20 @@ static int fix_optstr(struct libmnt_context *cxt) 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; } |