From: Dwight Engen Date: Tue, 15 Oct 2013 17:51:20 +0000 (-0400) Subject: add lsm op for checking if an lsm is present/enabled X-Git-Tag: lxc-1.0.0.alpha2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e4bf8b12aecd4629cdb3e3c7a856b54f400f8e2;p=thirdparty%2Flxc.git add lsm op for checking if an lsm is present/enabled Signed-off-by: Dwight Engen Signed-off-by: Serge Hallyn --- diff --git a/src/lxc/lsm/apparmor.c b/src/lxc/lsm/apparmor.c index c13613a61..146564fde 100644 --- a/src/lxc/lsm/apparmor.c +++ b/src/lxc/lsm/apparmor.c @@ -167,6 +167,7 @@ static int apparmor_process_label_set(const char *label, int use_default) static struct lsm_drv apparmor_drv = { .name = "AppArmor", + .enabled = apparmor_enabled, .process_label_get = apparmor_process_label_get, .process_label_set = apparmor_process_label_set, }; diff --git a/src/lxc/lsm/lsm.c b/src/lxc/lsm/lsm.c index 3974f11d9..f022de980 100644 --- a/src/lxc/lsm/lsm.c +++ b/src/lxc/lsm/lsm.c @@ -62,6 +62,13 @@ void lsm_init(void) INFO("Initialized LSM security driver %s", drv->name); } +int lsm_enabled() +{ + if (drv) + return drv->enabled(); + return 0; +} + char *lsm_process_label_get(pid_t pid) { if (!drv) { diff --git a/src/lxc/lsm/lsm.h b/src/lxc/lsm/lsm.h index 2a82c66d7..ee093da09 100644 --- a/src/lxc/lsm/lsm.h +++ b/src/lxc/lsm/lsm.h @@ -31,18 +31,21 @@ struct lxc_conf; struct lsm_drv { const char *name; + int (*enabled)(void); char *(*process_label_get)(pid_t pid); int (*process_label_set)(const char *label, int use_default); }; #if HAVE_APPARMOR || HAVE_SELINUX void lsm_init(void); +int lsm_enabled(void); char *lsm_process_label_get(pid_t pid); int lsm_process_label_set(const char *label, int use_default); int lsm_proc_mount(struct lxc_conf *lxc_conf); void lsm_proc_unmount(struct lxc_conf *lxc_conf); #else static inline void lsm_init(void) { } +static inline int lsm_enabled(void) { return 0; } static inline char *lsm_process_label_get(pid_t pid) { return NULL; } static inline int lsm_process_label_set(char *label, int use_default) { return 0; } static inline int lsm_proc_mount(struct lxc_conf *lxc_conf) { return 0; } diff --git a/src/lxc/lsm/nop.c b/src/lxc/lsm/nop.c index 9184e6b18..e39b0f514 100644 --- a/src/lxc/lsm/nop.c +++ b/src/lxc/lsm/nop.c @@ -34,8 +34,14 @@ static int nop_process_label_set(const char *label, int use_default) return 0; } +static int nop_enabled(void) +{ + return 0; +} + static struct lsm_drv nop_drv = { .name = "nop", + .enabled = nop_enabled, .process_label_get = nop_process_label_get, .process_label_set = nop_process_label_set, }; diff --git a/src/lxc/lsm/selinux.c b/src/lxc/lsm/selinux.c index 6e44e8b56..ef5beb0b3 100644 --- a/src/lxc/lsm/selinux.c +++ b/src/lxc/lsm/selinux.c @@ -89,6 +89,7 @@ static int selinux_process_label_set(const char *label, int use_default) static struct lsm_drv selinux_drv = { .name = "SELinux", + .enabled = is_selinux_enabled, .process_label_get = selinux_process_label_get, .process_label_set = selinux_process_label_set, };