summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--m4/jm-macros.m44
-rw-r--r--src/selinux.c11
-rw-r--r--src/selinux.h14
3 files changed, 25 insertions, 4 deletions
diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4
index 3f95def86..d7ccbab5c 100644
--- a/m4/jm-macros.m4
+++ b/m4/jm-macros.m4
@@ -44,9 +44,11 @@ AC_DEFUN([coreutils_MACROS],
# used by shred
AC_CHECK_FUNCS_ONCE([directio])
- # Used by install.c.
coreutils_saved_libs=$LIBS
LIBS="$LIBS $LIB_SELINUX"
+ # Used by selinux.c.
+ AC_CHECK_FUNCS([mode_to_security_class], [], [])
+ # Used by install.c.
AC_CHECK_FUNCS([matchpathcon_init_prefix], [],
[
case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in
diff --git a/src/selinux.c b/src/selinux.c
index 405f5f61e..c87e89689 100644
--- a/src/selinux.c
+++ b/src/selinux.c
@@ -29,8 +29,11 @@
#include "quote.h"
#include "selinux.h"
+#if HAVE_SELINUX_SELINUX_H
+
+# if ! HAVE_MODE_TO_SECURITY_CLASS
/*
- This function has being added to libselinux-2.1.12-5, but is here
+ This function has been added to libselinux-2.1.12-5, but is here
for support with older versions of SELinux
Translates a mode into an Internal SELinux security_class definition.
@@ -58,6 +61,7 @@ mode_to_security_class (mode_t m)
errno = EINVAL;
return 0;
}
+# endif
/*
This function takes a PATH and a MODE and then asks SELinux what the label
@@ -108,7 +112,7 @@ defaultcon (char const *path, mode_t mode)
{
int rc = -1;
security_context_t scon = NULL, tcon = NULL;
- context_t scontext = NULL, tcontext = NULL;
+ context_t scontext = 0, tcontext = 0;
const char *contype;
char *constr;
char *newpath = NULL;
@@ -179,7 +183,7 @@ restorecon_private (char const *path, bool local)
int rc = -1;
struct stat sb;
security_context_t scon = NULL, tcon = NULL;
- context_t scontext = NULL, tcontext = NULL;
+ context_t scontext = 0, tcontext = 0;
const char *contype;
char *constr;
int fd;
@@ -328,3 +332,4 @@ restorecon (char const *path, bool recurse, bool local)
free (newpath);
return ok;
}
+#endif
diff --git a/src/selinux.h b/src/selinux.h
index f60c083ac..31771632e 100644
--- a/src/selinux.h
+++ b/src/selinux.h
@@ -19,7 +19,21 @@
#ifndef COREUTILS_SELINUX_H
# define COREUTILS_SELINUX_H
+# if HAVE_SELINUX_SELINUX_H
+
extern bool restorecon (char const *path, bool recurse, bool preserve);
extern int defaultcon (char const *path, mode_t mode);
+# else
+
+static inline bool
+restorecon (char const *path, bool recurse, bool preserve)
+{ errno = ENOTSUP; return false; }
+
+static inline int
+defaultcon (char const *path, mode_t mode)
+{ errno = ENOTSUP; return -1; }
+
+# endif
+
#endif