mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Hook up virDomainGetXMLDesc to driver backends. Added implementation of virDomainGetXMLDesc driver for the setuid proxy
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user