diff options
Diffstat (limited to 'sys-cluster/util-vserver/files/util-vserver-0.30.215-capget.patch')
-rw-r--r-- | sys-cluster/util-vserver/files/util-vserver-0.30.215-capget.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/sys-cluster/util-vserver/files/util-vserver-0.30.215-capget.patch b/sys-cluster/util-vserver/files/util-vserver-0.30.215-capget.patch new file mode 100644 index 000000000000..df7b483430b7 --- /dev/null +++ b/sys-cluster/util-vserver/files/util-vserver-0.30.215-capget.patch @@ -0,0 +1,103 @@ +Index: /trunk/src/vserver-info.c +=================================================================== +--- /trunk/src/vserver-info.c (revision 2589) ++++ /trunk/src/vserver-info.c (revision 2717) +@@ -186,7 +186,9 @@ + verifyCap() + { ++ int retried = 0; + struct __user_cap_header_struct header; +- struct __user_cap_data_struct user; +- header.version = _LINUX_CAPABILITY_VERSION; ++ struct __user_cap_data_struct user[2]; ++ ++ header.version = _LINUX_CAPABILITY_VERSION_2; + header.pid = 0; + +@@ -200,15 +202,22 @@ + // return false; + // } +- +- if (capget(&header, &user)==-1) { ++ ++retry: ++ if (capget(&header, user)==-1) { ++ if (!retried && ++ header.version != _LINUX_CAPABILITY_VERSION_2) { ++ header.version = _LINUX_CAPABILITY_VERSION_1; ++ retried = 1; ++ goto retry; ++ } + perror("capget()"); + return false; + } + +- user.effective = 0; +- user.permitted = 0; +- user.inheritable = 0; +- +- if (capset(&header, &user)==-1) { ++ user[0].effective = user[1].effective = 0; ++ user[0].permitted = user[1].permitted = 0; ++ user[0].inheritable = user[1].inheritable = 0; ++ ++ if (capset(&header, user)==-1) { + perror("capset()"); + return false; +Index: /trunk/src/rpm-fake.c +=================================================================== +--- /trunk/src/rpm-fake.c (revision 2693) ++++ /trunk/src/rpm-fake.c (revision 2717) +@@ -420,20 +420,28 @@ + reduceCapabilities() + { ++ int retried = 0; + struct __user_cap_header_struct header; +- struct __user_cap_data_struct user; +- +- header.version = _LINUX_CAPABILITY_VERSION; ++ struct __user_cap_data_struct user[2]; ++ ++ header.version = _LINUX_CAPABILITY_VERSION_2; + header.pid = 0; + +- if (capget(&header, &user)==-1) { ++retry: ++ if (capget(&header, user)==-1) { ++ if (!retried && ++ header.version != _LINUX_CAPABILITY_VERSION_2) { ++ header.version = _LINUX_CAPABILITY_VERSION_1; ++ retried = 1; ++ goto retry; ++ } + perror("capget()"); + exit(wrapper_exit_code); + } + +- user.effective &= ~(1<<CAP_MKNOD); +- user.permitted &= ~(1<<CAP_MKNOD); +- user.inheritable &= ~(1<<CAP_MKNOD); +- +- if (capset(&header, &user)==-1) { ++ user[0].effective &= ~(1<<CAP_MKNOD); ++ user[0].permitted &= ~(1<<CAP_MKNOD); ++ user[0].inheritable &= ~(1<<CAP_MKNOD); ++ ++ if (capset(&header, user)==-1) { + perror("capset()"); + exit(wrapper_exit_code); +Index: /trunk/src/capability-compat.h +=================================================================== +--- /trunk/src/capability-compat.h (revision 1822) ++++ /trunk/src/capability-compat.h (revision 2717) +@@ -30,2 +30,10 @@ + + #endif ++ ++#ifndef _LINUX_CAPABILITY_VERSION_1 ++# define _LINUX_CAPABILITY_VERSION_1 _LINUX_CAPABILITY_VERSION ++#endif ++ ++#ifndef _LINUX_CAPABILITY_VERSION_2 ++# define _LINUX_CAPABILITY_VERSION_2 0x20071026 ++#endif |