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.
---
src/id.c | 19 ++++++-------------
src/ls.c | 15 ++++-----------
src/mkdir.c | 9 ++-------
src/mkfifo.c | 9 ++-------
src/mknod.c | 9 ++-------
5 files changed, 16 insertions(+), 45 deletions(-)
(limited to 'src')
diff --git a/src/id.c b/src/id.c
index b7384a7cb..3e7016f7b 100644
--- a/src/id.c
+++ b/src/id.c
@@ -24,15 +24,13 @@
#include
#include
#include
-#ifdef HAVE_SMACK
-# include
-#endif
#include "system.h"
#include "error.h"
#include "mgetgroups.h"
#include "quote.h"
#include "group-list.h"
+#include "smack.h"
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "id"
@@ -110,9 +108,7 @@ main (int argc, char **argv)
{
int optc;
int selinux_enabled = (is_selinux_enabled () > 0);
-#ifdef HAVE_SMACK
- int smack_enabled = (smack_smackfs_path () != NULL);
-#endif
+ bool smack_enabled = is_smack_enabled ();
/* If true, output the list of all group IDs. -G */
bool just_group_list = false;
@@ -207,14 +203,11 @@ main (int argc, char **argv)
|| (default_format && ! getenv ("POSIXLY_CORRECT"))))
{
/* Report failure only if --context (-Z) was explicitly requested. */
- if (selinux_enabled && getcon (&context) && just_context)
+ if ((selinux_enabled && getcon (&context) && just_context)
+ || (smack_enabled
+ && smack_new_label_from_self ((char **) &context) < 0
+ && 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) < 0
- && just_context)
- error (EXIT_FAILURE, 0, _("can't get process context"));
-#endif
}
if (n_ids == 1)
diff --git a/src/ls.c b/src/ls.c
index 61324c3f4..e341c6799 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -101,6 +101,7 @@
#include "obstack.h"
#include "quote.h"
#include "quotearg.h"
+#include "smack.h"
#include "stat-size.h"
#include "stat-time.h"
#include "strftime.h"
@@ -115,10 +116,6 @@
# include
#endif
-#ifdef HAVE_SMACK
-# include
-#endif
-
#define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \
: (ls_mode == LS_MULTI_COL \
? "dir" : "vdir"))
@@ -2762,11 +2759,9 @@ free_ent (struct fileinfo *f)
free (f->linkname);
if (f->scontext != UNKNOWN_SECURITY_CONTEXT)
{
-#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
free (f->scontext);
else
-#endif
freecon (f->scontext);
}
}
@@ -2825,7 +2820,7 @@ getfilecon_cache (char const *file, struct fileinfo *f, bool deref)
}
int r = 0;
#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
r = smack_new_label_from_path (file, "security.SMACK64", deref,
&f->scontext);
else
@@ -3030,11 +3025,9 @@ gobble_file (char const *name, enum filetype type, ino_t inode,
if (err == 0)
{
-#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
have_scontext = ! STREQ ("_", f->scontext);
else
-#endif
have_scontext = ! STREQ ("unlabeled", f->scontext);
}
else
diff --git a/src/mkdir.c b/src/mkdir.c
index e56b6cbbd..479faca85 100644
--- a/src/mkdir.c
+++ b/src/mkdir.c
@@ -22,10 +22,6 @@
#include
#include
-#ifdef HAVE_SMACK
-# include
-#endif
-
#include "system.h"
#include "error.h"
#include "mkdir-p.h"
@@ -33,6 +29,7 @@
#include "prog-fprintf.h"
#include "quote.h"
#include "savewd.h"
+#include "smack.h"
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "mkdir"
@@ -201,11 +198,9 @@ main (int argc, char **argv)
if (scontext)
{
-#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
ret = smack_set_label_for_self (scontext);
else
-#endif
ret = setfscreatecon (scontext);
}
diff --git a/src/mkfifo.c b/src/mkfifo.c
index a87a393e2..f9fcc0a60 100644
--- a/src/mkfifo.c
+++ b/src/mkfifo.c
@@ -22,14 +22,11 @@
#include
#include
-#ifdef HAVE_SMACK
-# include
-#endif
-
#include "system.h"
#include "error.h"
#include "modechange.h"
#include "quote.h"
+#include "smack.h"
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "mkfifo"
@@ -115,11 +112,9 @@ main (int argc, char **argv)
if (scontext)
{
-#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
ret = smack_set_label_for_self (scontext);
else
-#endif
ret = setfscreatecon (scontext);
}
diff --git a/src/mknod.c b/src/mknod.c
index 9f0afb3ff..4fd6ed0f4 100644
--- a/src/mknod.c
+++ b/src/mknod.c
@@ -22,14 +22,11 @@
#include
#include
-#ifdef HAVE_SMACK
-# include
-#endif
-
#include "system.h"
#include "error.h"
#include "modechange.h"
#include "quote.h"
+#include "smack.h"
#include "xstrtol.h"
/* The official name of this program (e.g., no 'g' prefix). */
@@ -171,11 +168,9 @@ main (int argc, char **argv)
if (scontext)
{
-#ifdef HAVE_SMACK
- if (smack_smackfs_path ())
+ if (is_smack_enabled ())
ret = smack_set_label_for_self (scontext);
else
-#endif
ret = setfscreatecon (scontext);
}
--
cgit v1.2.3-70-g09d2