aboutsummaryrefslogtreecommitdiff
path: root/config/kernel-userns-capabilities.m4
diff options
context:
space:
mode:
Diffstat (limited to 'config/kernel-userns-capabilities.m4')
-rw-r--r--config/kernel-userns-capabilities.m4106
1 files changed, 106 insertions, 0 deletions
diff --git a/config/kernel-userns-capabilities.m4 b/config/kernel-userns-capabilities.m4
new file mode 100644
index 000000000000..026503623a2b
--- /dev/null
+++ b/config/kernel-userns-capabilities.m4
@@ -0,0 +1,106 @@
+dnl #
+dnl # 2.6.38 API change
+dnl # ns_capable() was introduced
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_NS_CAPABLE], [
+ ZFS_LINUX_TEST_SRC([ns_capable], [
+ #include <linux/capability.h>
+ ],[
+ ns_capable((struct user_namespace *)NULL, CAP_SYS_ADMIN);
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_NS_CAPABLE], [
+ AC_MSG_CHECKING([whether ns_capable exists])
+ ZFS_LINUX_TEST_RESULT([ns_capable], [
+ AC_MSG_RESULT(yes)
+ ],[
+ ZFS_LINUX_TEST_ERROR([ns_capable()])
+ ])
+])
+
+dnl #
+dnl # 4.10 API change
+dnl # has_capability() was exported.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_HAS_CAPABILITY], [
+ ZFS_LINUX_TEST_SRC([has_capability], [
+ #include <linux/capability.h>
+ ],[
+ struct task_struct *task = NULL;
+ int cap = 0;
+ bool result __attribute__ ((unused));
+
+ result = has_capability(task, cap);
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_HAS_CAPABILITY], [
+ AC_MSG_CHECKING([whether has_capability() is available])
+ ZFS_LINUX_TEST_RESULT_SYMBOL([has_capability],
+ [has_capability], [kernel/capability.c], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_HAS_CAPABILITY, 1, [has_capability() is available])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # 2.6.39 API change
+dnl # struct user_namespace was added to struct cred_t as cred->user_ns member
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_CRED_USER_NS], [
+ ZFS_LINUX_TEST_SRC([cred_user_ns], [
+ #include <linux/cred.h>
+ ],[
+ struct cred cr;
+ cr.user_ns = (struct user_namespace *)NULL;
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_CRED_USER_NS], [
+ AC_MSG_CHECKING([whether cred_t->user_ns exists])
+ ZFS_LINUX_TEST_RESULT([cred_user_ns], [
+ AC_MSG_RESULT(yes)
+ ],[
+ ZFS_LINUX_TEST_ERROR([cred_t->user_ns()])
+ ])
+])
+
+dnl #
+dnl # 3.4 API change
+dnl # kuid_has_mapping() and kgid_has_mapping() were added to distinguish
+dnl # between internal kernel uids/gids and user namespace uids/gids.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_KUID_HAS_MAPPING], [
+ ZFS_LINUX_TEST_SRC([kuid_has_mapping], [
+ #include <linux/uidgid.h>
+ ],[
+ kuid_has_mapping((struct user_namespace *)NULL, KUIDT_INIT(0));
+ kgid_has_mapping((struct user_namespace *)NULL, KGIDT_INIT(0));
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_KUID_HAS_MAPPING], [
+ AC_MSG_CHECKING([whether kuid_has_mapping/kgid_has_mapping exist])
+ ZFS_LINUX_TEST_RESULT([kuid_has_mapping], [
+ AC_MSG_RESULT(yes)
+ ],[
+ ZFS_LINUX_TEST_ERROR([kuid_has_mapping()])
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_SRC_USERNS_CAPABILITIES], [
+ ZFS_AC_KERNEL_SRC_NS_CAPABLE
+ ZFS_AC_KERNEL_SRC_HAS_CAPABILITY
+ ZFS_AC_KERNEL_SRC_CRED_USER_NS
+ ZFS_AC_KERNEL_SRC_KUID_HAS_MAPPING
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_USERNS_CAPABILITIES], [
+ ZFS_AC_KERNEL_NS_CAPABLE
+ ZFS_AC_KERNEL_HAS_CAPABILITY
+ ZFS_AC_KERNEL_CRED_USER_NS
+ ZFS_AC_KERNEL_KUID_HAS_MAPPING
+])