From 5fb93f635b935ea5632e36600e07a2c5fc5bad5e Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Tue, 2 Jul 2013 03:42:20 +0100 Subject: maint: refactor SMACK interface to a separate module Consolidate all smack routines and checks in a module. We replace and wrap the most commonly used smack routines, which allows removing ifdefs throughout the code. * gl/lib/smack.h: A new header containing the implementation of the wrapped and replacement routines. Note the is_smack_enabled() routine should be optimized out at compile time when compiled on a system without libsmack. * gl/modules/smack: Describe the new module and move the configure time code here from ... * m4/jm-macros.m4: ... here. * bootstrap.conf: Reference the new module. * src/id.c: Use the routines without ifdefs where possible. * src/ls.c: Likewise. * src/mkdir.c: Likewise. * src/mkfifo.c: Likewise. * src/mknod.c: Likewise. --- gl/lib/smack.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ gl/modules/smack | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 gl/lib/smack.h create mode 100644 gl/modules/smack (limited to 'gl') diff --git a/gl/lib/smack.h b/gl/lib/smack.h new file mode 100644 index 000000000..dea729e09 --- /dev/null +++ b/gl/lib/smack.h @@ -0,0 +1,46 @@ +/* Include and determine availability of smack routines + Copyright (C) 2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Here we replace or wrap the most common smack functions used by coreutils. + Others will need to be protected by HAVE_SMACK. */ + +#include + +#ifdef HAVE_SMACK +# include +#else +static inline ssize_t +smack_new_label_from_self (char **label) +{ + return -1; +} + +static inline int +smack_set_label_for_self (const char *label) +{ + return -1; +} +#endif + +static inline bool +is_smack_enabled (void) +{ +#ifdef HAVE_SMACK + return smack_smackfs_path () != NULL; +#else + return false; +#endif +} diff --git a/gl/modules/smack b/gl/modules/smack new file mode 100644 index 000000000..a6dcbaa62 --- /dev/null +++ b/gl/modules/smack @@ -0,0 +1,42 @@ +Description: +Include and determine the availability of smack routines + +Files: +lib/smack.h + +Depends-on: + +configure.ac: +# Check whether libsmack is available +LIB_SMACK= +AC_ARG_ENABLE([libsmack], + AC_HELP_STRING([--disable-libsmack], [disable libsmack support])) +if test "X$enable_libsmack" != "Xno"; then + 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]) + fi + fi +else + AC_MSG_WARN([libsmack support disabled by user]) +fi +AC_SUBST([LIB_SMACK]) + + +Makefile.am: +lib_SOURCES += smack.h + +Include: +"smack.h" + +License: +LGPL + +Maintainer: +Pádraig Brady -- cgit v1.2.3-70-g09d2