diff options
Diffstat (limited to 'openbsd-compat')
-rw-r--r-- | openbsd-compat/port-linux.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c index 77cb8213a..4ca8c2b71 100644 --- a/openbsd-compat/port-linux.c +++ b/openbsd-compat/port-linux.c @@ -34,6 +34,7 @@ #ifdef WITH_SELINUX #include <selinux/selinux.h> +#include <selinux/label.h> #include <selinux/get_context_list.h> #ifndef SSH_SELINUX_UNCONFINED_TYPE @@ -222,6 +223,7 @@ void ssh_selinux_setfscreatecon(const char *path) { char *context; + struct selabel_handle *shandle = NULL; if (!ssh_selinux_enabled()) return; @@ -229,8 +231,13 @@ ssh_selinux_setfscreatecon(const char *path) setfscreatecon(NULL); return; } - if (matchpathcon(path, 0700, &context) == 0) + if ((shandle = selabel_open(SELABEL_CTX_FILE, NULL, 0)) == NULL) { + debug_f("selabel_open failed"); + return; + } + if (selabel_lookup(shandle, &context, path, 0700) == 0) setfscreatecon(context); + selabel_close(shandle); } #endif /* WITH_SELINUX */ |