]>
Commit | Line | Data |
---|---|---|
94a3845f JR |
1 | diff -ur util-vserver-0.30.216-pre2833/lib/issupported.c util-vserver-0.30.216-pre2833-uname/lib/issupported.c |
2 | --- util-vserver-0.30.216-pre2833/lib/issupported.c 2009-04-10 22:24:15.000000000 +0200 | |
3 | +++ util-vserver-0.30.216-pre2833-uname/lib/issupported.c 2009-06-15 17:45:06.335273350 +0200 | |
4 | @@ -20,17 +20,39 @@ | |
5 | # include <config.h> | |
6 | #endif | |
7 | ||
8 | +#include <string.h> | |
9 | +#include <sys/utsname.h> | |
10 | #include "vserver.h" | |
11 | #include "assert.h" | |
12 | ||
13 | bool | |
14 | vc_isSupported(vcFeatureSet feature) | |
15 | { | |
16 | + int kver = 0, i, j = 24, k = 0; | |
17 | + struct utsname uts; | |
18 | int ver = vc_get_version(); | |
19 | vc_vci_t conf = vc_get_vci(); | |
20 | if (ver==-1) return false; | |
21 | if (conf==(vc_vci_t)-1) conf = 0; | |
22 | ||
23 | + if (uname(&uts)==-1) { | |
24 | + return false; | |
25 | + } else { | |
26 | + for (i=0; i<strlen(uts.release); i++) { | |
27 | + if (uts.release[i] >= '0' && uts.release[i] <= '9') { | |
28 | + k <<= 4; | |
29 | + k |= uts.release[i] - '0'; | |
30 | + } else if (uts.release[i] == '.') { | |
31 | + kver |= (k << j); | |
32 | + j -= 8; | |
33 | + k = 0; | |
34 | + } else | |
35 | + break; | |
36 | + } | |
37 | + if (k != 0 && j >= 0) | |
38 | + kver |= (k << j); | |
39 | + } | |
40 | + | |
41 | switch (feature) { | |
42 | case vcFEATURE_COMPAT : return true; | |
43 | case vcFEATURE_VSHELPER0 : return ver >= 0x00010000 && ver < 0x00010010; | |
93b0c878 AM |
44 | @@ -71,7 +71,13 @@ |
45 | case vcFEATURE_VSTAT : return ver >= 0x00020103 && ver < 0x00020306; | |
94a3845f JR |
46 | case vcFEATURE_PPTAG : return conf & VC_VCI_PPTAG; |
47 | case vcFEATURE_SPACES : return conf & VC_VCI_SPACES; | |
48 | - case vcFEATURE_PIVOT_ROOT : return ver >= 0x00020304; | |
93b0c878 AM |
49 | + // Now THIS is really ugly hack, only vs2.3 patches for kernels below |
50 | + // have pivot_root working for vservers, so we assume people use recent | |
51 | + // patches with recent kernels | |
94a3845f | 52 | + case vcFEATURE_PIVOT_ROOT : return (ver >= 0x00020304) && |
93b0c878 AM |
53 | + ((kver >= 0x02062723 && kver < 0x02062800) || |
54 | + (kver >= 0x02062811 && kver < 0x02062900) || | |
55 | + (kver >= 0x02062901)); | |
56 | case vcFEATURE_PIDSPACE : return false; | |
57 | case vcFEATURE_MEMCG : return ver >= 0x00020306 && conf & VC_VCI_MEMCG; | |
58 | case vcFEATURE_DYNAMIC : return ver < 0x00020300 || !(conf & VC_VCI_NO_DYNAMIC); | |
59 |