Implement a new type of zfs receive: corrective receive (-c)
[zfs.git] / config / kernel-userns-capabilities.m4
blob026503623a2b958c1135fb9001852125a8d2567b
1 dnl #
2 dnl # 2.6.38 API change
3 dnl # ns_capable() was introduced
4 dnl #
5 AC_DEFUN([ZFS_AC_KERNEL_SRC_NS_CAPABLE], [
6         ZFS_LINUX_TEST_SRC([ns_capable], [
7                 #include <linux/capability.h>
8         ],[
9                 ns_capable((struct user_namespace *)NULL, CAP_SYS_ADMIN);
10         ])
13 AC_DEFUN([ZFS_AC_KERNEL_NS_CAPABLE], [
14         AC_MSG_CHECKING([whether ns_capable exists])
15         ZFS_LINUX_TEST_RESULT([ns_capable], [
16                 AC_MSG_RESULT(yes)
17         ],[
18                 ZFS_LINUX_TEST_ERROR([ns_capable()])
19         ])
22 dnl #
23 dnl # 4.10 API change
24 dnl # has_capability() was exported.
25 dnl #
26 AC_DEFUN([ZFS_AC_KERNEL_SRC_HAS_CAPABILITY], [
27         ZFS_LINUX_TEST_SRC([has_capability], [
28                 #include <linux/capability.h>
29         ],[
30                 struct task_struct *task = NULL;
31                 int cap = 0;
32                 bool result __attribute__ ((unused));
34                 result = has_capability(task, cap);
35         ])
38 AC_DEFUN([ZFS_AC_KERNEL_HAS_CAPABILITY], [
39         AC_MSG_CHECKING([whether has_capability() is available])
40         ZFS_LINUX_TEST_RESULT_SYMBOL([has_capability],
41             [has_capability], [kernel/capability.c], [
42                 AC_MSG_RESULT(yes)
43                 AC_DEFINE(HAVE_HAS_CAPABILITY, 1, [has_capability() is available])
44         ],[
45                 AC_MSG_RESULT(no)
46         ])
49 dnl #
50 dnl # 2.6.39 API change
51 dnl # struct user_namespace was added to struct cred_t as cred->user_ns member
52 dnl #
53 AC_DEFUN([ZFS_AC_KERNEL_SRC_CRED_USER_NS], [
54         ZFS_LINUX_TEST_SRC([cred_user_ns], [
55                 #include <linux/cred.h>
56         ],[
57                 struct cred cr;
58                 cr.user_ns = (struct user_namespace *)NULL;
59         ])
62 AC_DEFUN([ZFS_AC_KERNEL_CRED_USER_NS], [
63         AC_MSG_CHECKING([whether cred_t->user_ns exists])
64         ZFS_LINUX_TEST_RESULT([cred_user_ns], [
65                 AC_MSG_RESULT(yes)
66         ],[
67                 ZFS_LINUX_TEST_ERROR([cred_t->user_ns()])
68         ])
71 dnl #
72 dnl # 3.4 API change
73 dnl # kuid_has_mapping() and kgid_has_mapping() were added to distinguish
74 dnl # between internal kernel uids/gids and user namespace uids/gids.
75 dnl #
76 AC_DEFUN([ZFS_AC_KERNEL_SRC_KUID_HAS_MAPPING], [
77         ZFS_LINUX_TEST_SRC([kuid_has_mapping], [
78                 #include <linux/uidgid.h>
79         ],[
80                 kuid_has_mapping((struct user_namespace *)NULL, KUIDT_INIT(0));
81                 kgid_has_mapping((struct user_namespace *)NULL, KGIDT_INIT(0));
82         ])
85 AC_DEFUN([ZFS_AC_KERNEL_KUID_HAS_MAPPING], [
86         AC_MSG_CHECKING([whether kuid_has_mapping/kgid_has_mapping exist])
87         ZFS_LINUX_TEST_RESULT([kuid_has_mapping], [
88                 AC_MSG_RESULT(yes)
89         ],[
90                 ZFS_LINUX_TEST_ERROR([kuid_has_mapping()])
91         ])
94 AC_DEFUN([ZFS_AC_KERNEL_SRC_USERNS_CAPABILITIES], [
95         ZFS_AC_KERNEL_SRC_NS_CAPABLE
96         ZFS_AC_KERNEL_SRC_HAS_CAPABILITY
97         ZFS_AC_KERNEL_SRC_CRED_USER_NS
98         ZFS_AC_KERNEL_SRC_KUID_HAS_MAPPING
101 AC_DEFUN([ZFS_AC_KERNEL_USERNS_CAPABILITIES], [
102         ZFS_AC_KERNEL_NS_CAPABLE
103         ZFS_AC_KERNEL_HAS_CAPABILITY
104         ZFS_AC_KERNEL_CRED_USER_NS
105         ZFS_AC_KERNEL_KUID_HAS_MAPPING