id: adjust/restrict smack support to newer versions of libsmack 16/8316/1
authorJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Thu, 20 Jun 2013 18:21:37 +0000 (21:21 +0300)
committerMichael Demeter <michael.demeter@intel.com>
Mon, 12 Aug 2013 22:50:25 +0000 (15:50 -0700)
There was slight change to libsmack such that positive values are
reserved for returning length of the label for smack_new_label_from_*
functions.

* m4/jm-macros.m4: Set HAVE_SMACK when both smack_new_label_from_self()
and recently added smack_new_label_from_path() are present.
The latter's presence indicates the newer API of the former.
* src/id.c (main): Check that smack_new_label_from_self() < 0,
and not just non-zero.

m4/jm-macros.m4
src/id.c

index 2e0476d..649a344 100644 (file)
@@ -146,11 +146,12 @@ AC_DEFUN([coreutils_MACROS],
   AC_ARG_ENABLE([libsmack],
     AC_HELP_STRING([--disable-libsmack], [disable libsmack support]))
   if test "X$enable_libsmack" != "Xno"; then
-    AC_CHECK_LIB([smack], [smack_smackfs_path],
-      [AC_CHECK_HEADER([sys/smack.h],
-        [LIB_SMACK=-lsmack
-         AC_DEFINE([HAVE_SMACK], [1], [libsmack usability])]
-      )])
+    AC_CHECK_LIB([smack], [smack_new_label_from_self],
+      [AC_CHECK_LIB([smack], [smack_new_label_from_path],
+        [AC_CHECK_HEADER([sys/smack.h],
+          [LIB_SMACK=-lsmack
+           AC_DEFINE([HAVE_SMACK], [1], [libsmack usability])]
+        )])])
     if test "X$LIB_SMACK" = "X"; then
       if test "X$enable_libsmack" = "Xyes"; then
         AC_MSG_ERROR([libsmack library was not found or not usable])
index 937b723..c91dbcd 100644 (file)
--- a/src/id.c
+++ b/src/id.c
@@ -210,7 +210,8 @@ main (int argc, char **argv)
       if (selinux_enabled && getcon (&context) && just_context)
         error (EXIT_FAILURE, 0, _("can't get process context"));
 #ifdef HAVE_SMACK
-      else if (smack_enabled && smack_new_label_from_self ((char **) &context))
+      else if (smack_enabled
+               && smack_new_label_from_self ((char **) &context) < 0)
         error (EXIT_FAILURE, 0, _("can't get process context"));
 #endif
     }