X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fvserver-info.c;h=0e7f32178928402d488a1595b3f80fd070616d8a;hb=f2b89bbbc83e3b2360e2dc11f6b8a4f5e1e6b395;hp=b64212d0ee97b563c3fd20abc43526891fde7ccb;hpb=cba7be6122383e419da755909d3f6a612fd41918;p=util-vserver.git diff --git a/util-vserver/src/vserver-info.c b/util-vserver/src/vserver-info.c index b64212d..0e7f321 100644 --- a/util-vserver/src/vserver-info.c +++ b/util-vserver/src/vserver-info.c @@ -48,7 +48,7 @@ typedef enum { tgNONE,tgCONTEXT, tgID, tgRUNNING, tgAPIVER, tgPXID, tgINITPID, tgINITPID_PID, tgXID, tgUTS, tgSYSINFO, - tgFEATURE, + tgFEATURE, tgCANONIFY, } VserverTag; static struct { @@ -74,6 +74,7 @@ static struct { { "SYSINFO", tgSYSINFO, "gives out information about the systen" }, { "FEATURE", tgFEATURE, "returns 0 iff the queried feature is supported" }, { "PXID", tgPXID, "returns the xid of the parent context" }, + { "CANONIFY", tgCANONIFY, "canonifies the vserver-name and removes dangerous characters" }, }; int wrapper_exit_code = 1; @@ -387,7 +388,7 @@ static int execQuery(char const *vserver, VserverTag tag, int argc, char *argv[]) { char const * res = 0; - char buf[sizeof(xid_t)*4 + 1024]; + char buf[sizeof(xid_t)*4 + 1024 + strlen(vserver)]; memset(buf, 0, sizeof buf); switch (tag) { @@ -404,6 +405,11 @@ execQuery(char const *vserver, VserverTag tag, int argc, char *argv[]) res = (vc_getVserverCtx(vserver, vcCFG_AUTO, false, 0)==VC_NOCTX) ? 0 : "1"; break; + case tgCANONIFY : + strcpy(buf, vserver); + if (canonifyVserverName(buf)>0) res = buf; + break; + case tgCONTEXT : res = getContext(buf, vserver, argc==0 || str2bool(argv[0])); break; case tgINITPID_PID : res = getInitPidPid(buf, vserver); break; @@ -413,6 +419,7 @@ execQuery(char const *vserver, VserverTag tag, int argc, char *argv[]) case tgSYSINFO : return printSysInfo(buf); break; case tgFEATURE : return testFeature(argc,argv); break; + default : { xid_t xid = *vserver!='\0' ? vc_xidopt2xid(vserver,true,0) : VC_SAMECTX;