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
9 +#include <sys/utsname.h>
14 vc_isSupported(vcFeatureSet feature)
16 + int kver = 0, i, j = 24, k = 0;
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;
23 + if (uname(&uts)==-1) {
26 + for (i=0; i<strlen(uts.release); i++) {
27 + if (uts.release[i] >= '0' && uts.release[i] <= '9') {
29 + k |= uts.release[i] - '0';
30 + } else if (uts.release[i] == '.') {
37 + if (k != 0 && j >= 0)
42 case vcFEATURE_COMPAT : return true;
43 case vcFEATURE_VSHELPER0 : return ver >= 0x00010000 && ver < 0x00010010;
45 case vcFEATURE_VSTAT : return ver >= 0x00020103 && ver < 0x00020306;
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;
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
52 + case vcFEATURE_PIVOT_ROOT : return (ver >= 0x00020304) &&
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);