lib: add SELinux include and stub functions

ss provides some selinux stub functions, useful when iproute2 is
compiled without selinux support.

Move them to lib/ so we can use them in other iproute2 tools.

Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
This commit is contained in:
Andrea Claudi
2023-08-23 19:30:01 +02:00
committed by David Ahern
parent 61c6882ce2
commit e246ebc3b7
4 changed files with 46 additions and 33 deletions

9
include/selinux.h Normal file
View File

@@ -0,0 +1,9 @@
#if HAVE_SELINUX
#include <selinux/selinux.h>
#else
int is_selinux_enabled(void);
void freecon(char *context);
int getpidcon(pid_t pid, char **context);
int getfilecon(const char *path, char **context);
int security_get_initial_context(const char *name, char **context);
#endif

View File

@@ -13,6 +13,10 @@ UTILOBJ += bpf_libbpf.o
endif
endif
ifneq ($(HAVE_SELINUX),y)
UTILOBJ += selinux.o
endif
NLOBJ=libgenl.o libnetlink.o
ifeq ($(HAVE_MNL),y)
NLOBJ += mnl_utils.o

32
lib/selinux.c Normal file
View File

@@ -0,0 +1,32 @@
#include <stdlib.h>
#include <unistd.h>
#include "selinux.h"
/* Stubs for SELinux functions */
int is_selinux_enabled(void)
{
return 0;
}
void freecon(char *context)
{
free(context);
}
int getpidcon(pid_t pid, char **context)
{
*context = NULL;
return -1;
}
int getfilecon(const char *path, char **context)
{
*context = NULL;
return -1;
}
int security_get_initial_context(const char *name, char **context)
{
*context = NULL;
return -1;
}

View File

@@ -33,6 +33,7 @@
#include "version.h"
#include "rt_names.h"
#include "cg_map.h"
#include "selinux.h"
#include <linux/tcp.h>
#include <linux/unix_diag.h>
@@ -71,39 +72,6 @@
#define BUF_CHUNKS_MAX 5 /* Maximum number of allocated buffer chunks */
#define LEN_ALIGN(x) (((x) + 1) & ~1)
#if HAVE_SELINUX
#include <selinux/selinux.h>
#else
/* Stubs for SELinux functions */
static int is_selinux_enabled(void)
{
return 0;
}
static int getpidcon(pid_t pid, char **context)
{
*context = NULL;
return -1;
}
static int getfilecon(const char *path, char **context)
{
*context = NULL;
return -1;
}
static int security_get_initial_context(const char *name, char **context)
{
*context = NULL;
return -1;
}
static void freecon(char *context)
{
free(context);
}
#endif
int preferred_family = AF_UNSPEC;
static int show_options;
int show_details;