X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvserver-info.c;h=014489df4e382ffed17df4c0ffa375d00d35df10;hb=4c5e881f765be86bb1da5ce4d3fcc86effc5fdc7;hp=d28bf282889ac141d4de78c1bf79ccac5f044145;hpb=3564d8678a2134185e5e6e83083de027b359ca28;p=util-vserver.git diff --git a/src/vserver-info.c b/src/vserver-info.c index d28bf28..014489d 100644 --- a/src/vserver-info.c +++ b/src/vserver-info.c @@ -185,9 +185,11 @@ verifyProc() static bool 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; if (getuid()!=0) { @@ -199,17 +201,24 @@ verifyCap() // perror( "prctl:" ); // 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; + 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) { + if (capset(&header, user)==-1) { perror("capset()"); return false; }