Hook up virDomainGetXMLDesc to driver backends. Added implementation of virDomainGetXMLDesc driver for the setuid proxy

This commit is contained in:
Daniel P. Berrange
2006-08-09 15:21:16 +00:00
parent 0342994a8d
commit 098e0a4bdc
14 changed files with 236 additions and 57 deletions

View File

@@ -6,11 +6,11 @@ INCLUDES = -I$(top_builddir)/include -I@top_srcdir@/include \
libexec_PROGRAMS = libvirt_proxy
LIBS=
libvirt_proxy_SOURCES = libvirt_proxy.c @top_srcdir@/src/xend_internal.c \
@top_srcdir@/src/xen_internal.c @top_srcdir@/src/virterror.c \
@top_srcdir@/src/sexpr.c
@top_srcdir@/src/sexpr.c @top_srcdir@/src/xml.c \
@top_srcdir@/src/xs_internal.c
libvirt_proxy_LDFLAGS =
libvirt_proxy_DEPENDENCIES =
libvirt_proxy_LDADD =

View File

@@ -21,6 +21,7 @@
#include "proxy_internal.h"
#include "xen_internal.h"
#include "xend_internal.h"
#include "xs_internal.h"
static int fdServer = -1;
static int debug = 0;
@@ -71,6 +72,11 @@ proxyInitXen(void) {
fprintf(stderr, "Failed to connect to Xen daemon\n");
return(-1);
}
ret = xenStoreOpen(conn, NULL, VIR_DRV_OPEN_QUIET | VIR_DRV_OPEN_RO);
if (ret < 0) {
fprintf(stderr, "Failed to open XenStore connection");
return (-1);
}
ret = xenDaemonGetVersion(conn, &xenVersion2);
if (ret != 0) {
fprintf(stderr, "Failed to get Xen daemon version\n");
@@ -331,6 +337,7 @@ proxyReadClientSocket(int nr) {
virProxyFullPacket request;
virProxyPacketPtr req = (virProxyPacketPtr) &request;
int ret;
char *xml;
retry:
ret = read(pollInfos[nr].fd, req, sizeof(virProxyPacket));
@@ -559,6 +566,27 @@ retry2:
req->len = sizeof(virProxyPacket) + sizeof(virNodeInfo);
}
break;
case VIR_PROXY_DOMAIN_XML:
if (req->len != sizeof(virProxyPacket))
goto comm_error;
xml = xenDaemonDomainDumpXMLByID(conn, request.data.arg);
if (!xml) {
req->data.arg = -1;
req->len = sizeof(virProxyPacket);
} else {
int xmllen = strlen(xml);
if (xmllen > sizeof(request.extra.str)) {
req->data.arg = -2;
req->len = sizeof(virProxyPacket);
} else {
req->data.arg = 0;
memmove(&request.extra.str[0], xml, xmllen);
req->len = sizeof(virProxyPacket) + xmllen;
}
free(xml);
}
break;
default:
goto comm_error;
}