Compare commits
125 Commits
FC-5-split
...
libvirt-0_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a09fc2658a | ||
|
|
a008fcf27e | ||
|
|
511f6cd625 | ||
|
|
48b90fefc1 | ||
|
|
bc4bbabdf6 | ||
|
|
905627c8fd | ||
|
|
a16d752c10 | ||
|
|
29b1292019 | ||
|
|
f3546be64b | ||
|
|
fb9044931e | ||
|
|
03c5fec4d2 | ||
|
|
ce373a25b6 | ||
|
|
996d0e4709 | ||
|
|
8c01426c44 | ||
|
|
e859f7e59e | ||
|
|
25ea2f59bd | ||
|
|
c80b7f0d5a | ||
|
|
958f1c3dff | ||
|
|
4a8ca1017f | ||
|
|
1e122ee5dc | ||
|
|
6a6307bcdc | ||
|
|
6e8332946a | ||
|
|
982683e56f | ||
|
|
7244d1a339 | ||
|
|
2a3935580c | ||
|
|
28f7f11450 | ||
|
|
ca07bc4597 | ||
|
|
8e23194a2b | ||
|
|
fe09090e2d | ||
|
|
b5868cf8cf | ||
|
|
f294b40ba5 | ||
|
|
c0c1a7bb79 | ||
|
|
1b864048bd | ||
|
|
072c9c45ab | ||
|
|
af111679c3 | ||
|
|
dd9f21eaa2 | ||
|
|
f0e356df98 | ||
|
|
140bcf9ffc | ||
|
|
af69660412 | ||
|
|
6dc94c6252 | ||
|
|
eb34165670 | ||
|
|
7ce08f2148 | ||
|
|
049a8c79d9 | ||
|
|
f7a6d90012 | ||
|
|
67a2f29a89 | ||
|
|
82422fa1ff | ||
|
|
a73cf1d010 | ||
|
|
481419ebb6 | ||
|
|
1e65165c3a | ||
|
|
bca27d9111 | ||
|
|
08b9144b41 | ||
|
|
2063007248 | ||
|
|
81e46cb6da | ||
|
|
263e2f2021 | ||
|
|
2b9efc3de2 | ||
|
|
69f6239766 | ||
|
|
bf744f9872 | ||
|
|
45b0b2bfa6 | ||
|
|
f29ea218b7 | ||
|
|
7d193b7810 | ||
|
|
3182a4df5a | ||
|
|
4f667910e9 | ||
|
|
b395a39f7b | ||
|
|
fdd7e87fe3 | ||
|
|
f06c387ab5 | ||
|
|
5ad8bc8190 | ||
|
|
31802de821 | ||
|
|
cc39758e17 | ||
|
|
55fabd69c0 | ||
|
|
b2a1a0e9ba | ||
|
|
cbe377ed29 | ||
|
|
06a21e388f | ||
|
|
d1a886ab31 | ||
|
|
c70baa5133 | ||
|
|
52b4d91272 | ||
|
|
338630edc8 | ||
|
|
a05e64b718 | ||
|
|
c003690dfc | ||
|
|
2cac8ea133 | ||
|
|
deefad73a9 | ||
|
|
f6cef943a9 | ||
|
|
7a6f0752c1 | ||
|
|
36d558635e | ||
|
|
98bceee6b1 | ||
|
|
4e70e5049f | ||
|
|
e66ceb7f97 | ||
|
|
23d5b99123 | ||
|
|
df8a62cdc8 | ||
|
|
8e36286f00 | ||
|
|
cd0f44cfff | ||
|
|
dcd808aefc | ||
|
|
8713d4b7ef | ||
|
|
68efefa919 | ||
|
|
1c5afbb774 | ||
|
|
e61694fd1d | ||
|
|
608f915ea7 | ||
|
|
b28edd6eab | ||
|
|
327fe785ba | ||
|
|
5c1d884231 | ||
|
|
54c7c9997c | ||
|
|
dec47cc4eb | ||
|
|
ecaf0eb615 | ||
|
|
ea6b32b5e4 | ||
|
|
313e00f3ac | ||
|
|
b3a53e18a9 | ||
|
|
24467d1235 | ||
|
|
fdaa69f5e3 | ||
|
|
cf2cd869d9 | ||
|
|
f2572ab2b4 | ||
|
|
90a17a6e65 | ||
|
|
9f2e4f2b21 | ||
|
|
bc485ef21f | ||
|
|
0d3a7da407 | ||
|
|
f68d725fc4 | ||
|
|
044e9b5c7b | ||
|
|
96a9b8bc2e | ||
|
|
66a051f485 | ||
|
|
609ab7cda8 | ||
|
|
0caeb23111 | ||
|
|
7599107322 | ||
|
|
861e11f3e4 | ||
|
|
2ea97c32dc | ||
|
|
cb54686f58 | ||
|
|
bd474aff47 | ||
|
|
d55c7f267b |
11
.cvsignore
11
.cvsignore
@@ -1,4 +1,7 @@
|
|||||||
libvirt-0.0.3.tar.gz
|
.build*.log
|
||||||
libvirt-0.0.4.tar.gz
|
*.rpm
|
||||||
libvirt-0.0.5.tar.gz
|
i686
|
||||||
libvirt-0.0.6.tar.gz
|
x86_64
|
||||||
|
libvirt-*.tar.gz
|
||||||
|
libvirt-0.6.0.tar.gz
|
||||||
|
libvirt-0.6.1.tar.gz
|
||||||
|
|||||||
17
Makefile
17
Makefile
@@ -3,4 +3,19 @@
|
|||||||
NAME := libvirt
|
NAME := libvirt
|
||||||
SPECFILE = $(firstword $(wildcard *.spec))
|
SPECFILE = $(firstword $(wildcard *.spec))
|
||||||
|
|
||||||
include ../common/Makefile.common
|
define find-makefile-common
|
||||||
|
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||||
|
endef
|
||||||
|
|
||||||
|
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||||
|
|
||||||
|
ifeq ($(MAKEFILE_COMMON),)
|
||||||
|
# attempt a checkout
|
||||||
|
define checkout-makefile-common
|
||||||
|
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||||
|
endef
|
||||||
|
|
||||||
|
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(MAKEFILE_COMMON)
|
||||||
|
|||||||
46
libvirt-0.6.1-events-dispatch.patch
Normal file
46
libvirt-0.6.1-events-dispatch.patch
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
From: Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
Date: Mon, 16 Mar 2009 10:35:21 +0000 (+0000)
|
||||||
|
Subject: Fix dispatch of FD events when one or more handles are marked deleted
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=10baf3deb8588f5902b6f2eb362fb408707e3d95
|
||||||
|
|
||||||
|
Fix dispatch of FD events when one or more handles are marked deleted
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/qemud/event.c b/qemud/event.c
|
||||||
|
index c9ea563..0887008 100644
|
||||||
|
--- a/qemud/event.c
|
||||||
|
+++ b/qemud/event.c
|
||||||
|
@@ -409,25 +409,26 @@ static int virEventDispatchTimeouts(void) {
|
||||||
|
* Returns 0 upon success, -1 if an error occurred
|
||||||
|
*/
|
||||||
|
static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
|
||||||
|
- int i;
|
||||||
|
+ int i, n;
|
||||||
|
|
||||||
|
- for (i = 0 ; i < nfds ; i++) {
|
||||||
|
+ for (i = 0, n = 0 ; i < eventLoop.handlesCount && n < nfds ; i++) {
|
||||||
|
if (eventLoop.handles[i].deleted) {
|
||||||
|
EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (fds[i].revents) {
|
||||||
|
+ if (fds[n].revents) {
|
||||||
|
virEventHandleCallback cb = eventLoop.handles[i].cb;
|
||||||
|
void *opaque = eventLoop.handles[i].opaque;
|
||||||
|
- int hEvents = virPollEventToEventHandleType(fds[i].revents);
|
||||||
|
- EVENT_DEBUG("Dispatch %d %d %p", fds[i].fd,
|
||||||
|
- fds[i].revents, eventLoop.handles[i].opaque);
|
||||||
|
+ int hEvents = virPollEventToEventHandleType(fds[n].revents);
|
||||||
|
+ EVENT_DEBUG("Dispatch %d %d %p", fds[n].fd,
|
||||||
|
+ fds[n].revents, eventLoop.handles[i].opaque);
|
||||||
|
virEventUnlock();
|
||||||
|
(cb)(eventLoop.handles[i].watch,
|
||||||
|
- fds[i].fd, hEvents, opaque);
|
||||||
|
+ fds[n].fd, hEvents, opaque);
|
||||||
|
virEventLock();
|
||||||
|
}
|
||||||
|
+ n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
78
libvirt-0.6.1-fd-leaks.patch
Normal file
78
libvirt-0.6.1-fd-leaks.patch
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
From: Daniel Veillard <veillard@redhat.com>
|
||||||
|
Date: Mon, 16 Mar 2009 10:41:37 +0000 (+0000)
|
||||||
|
Subject: Avoid some potential FILE * leaks
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=39429bab2d55807698d9aed0112200ae532799b8
|
||||||
|
|
||||||
|
Avoid some potential FILE * leaks
|
||||||
|
* qemud/qemud.c src/cgroup.c src/uml_driver.c src/util.c: close
|
||||||
|
some potential FILE * leaks
|
||||||
|
Daniel
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/qemud/qemud.c b/qemud/qemud.c
|
||||||
|
index fd315fc..4f04355 100644
|
||||||
|
--- a/qemud/qemud.c
|
||||||
|
+++ b/qemud/qemud.c
|
||||||
|
@@ -488,7 +488,7 @@ static int qemudWritePidFile(const char *pidFile) {
|
||||||
|
if (fprintf(fh, "%lu\n", (unsigned long)getpid()) < 0) {
|
||||||
|
VIR_ERROR(_("Failed to write to pid file '%s' : %s"),
|
||||||
|
pidFile, virStrerror(errno, ebuf, sizeof ebuf));
|
||||||
|
- close(fd);
|
||||||
|
+ fclose(fh);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/cgroup.c b/src/cgroup.c
|
||||||
|
index 5af44bd..d1d44a2 100644
|
||||||
|
--- a/src/cgroup.c
|
||||||
|
+++ b/src/cgroup.c
|
||||||
|
@@ -57,7 +57,7 @@ void virCgroupFree(virCgroupPtr *group)
|
||||||
|
|
||||||
|
static virCgroupPtr virCgroupGetMount(const char *controller)
|
||||||
|
{
|
||||||
|
- FILE *mounts;
|
||||||
|
+ FILE *mounts = NULL;
|
||||||
|
struct mntent entry;
|
||||||
|
char buf[CGROUP_MAX_VAL];
|
||||||
|
virCgroupPtr root = NULL;
|
||||||
|
@@ -90,6 +90,8 @@ static virCgroupPtr virCgroupGetMount(const char *controller)
|
||||||
|
|
||||||
|
return root;
|
||||||
|
err:
|
||||||
|
+ if (mounts != NULL)
|
||||||
|
+ fclose(mounts);
|
||||||
|
virCgroupFree(&root);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
diff --git a/src/uml_driver.c b/src/uml_driver.c
|
||||||
|
index 1dc7ccd..f7400f9 100644
|
||||||
|
--- a/src/uml_driver.c
|
||||||
|
+++ b/src/uml_driver.c
|
||||||
|
@@ -547,6 +547,7 @@ reopen:
|
||||||
|
|
||||||
|
if (fscanf(file, "%d", &vm->pid) != 1) {
|
||||||
|
errno = EINVAL;
|
||||||
|
+ fclose(file);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1040,6 +1041,7 @@ static int umlGetProcessInfo(unsigned long long *cpuTime, int pid) {
|
||||||
|
|
||||||
|
if (fscanf(pidinfo, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %llu %llu", &usertime, &systime) != 2) {
|
||||||
|
umlDebug("not enough arg");
|
||||||
|
+ fclose(pidinfo);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/util.c b/src/util.c
|
||||||
|
index 9b74757..66ad9a4 100644
|
||||||
|
--- a/src/util.c
|
||||||
|
+++ b/src/util.c
|
||||||
|
@@ -1058,6 +1058,7 @@ int virFileReadPid(const char *dir,
|
||||||
|
|
||||||
|
if (fscanf(file, "%d", pid) != 1) {
|
||||||
|
rc = EINVAL;
|
||||||
|
+ fclose(file);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
40
libvirt-0.6.1-fd-leaks2.patch
Normal file
40
libvirt-0.6.1-fd-leaks2.patch
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Index: src/remote_internal.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /data/cvs/libxen/src/remote_internal.c,v
|
||||||
|
retrieving revision 1.141
|
||||||
|
diff -u -u -p -r1.141 remote_internal.c
|
||||||
|
--- src/remote_internal.c 3 Mar 2009 19:33:34 -0000 1.141
|
||||||
|
+++ src/remote_internal.c 16 Mar 2009 16:57:17 -0000
|
||||||
|
@@ -332,7 +332,7 @@ doRemoteOpen (virConnectPtr conn,
|
||||||
|
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
- int wakeupFD[2];
|
||||||
|
+ int wakeupFD[2] = { -1, -1 };
|
||||||
|
char *transport_str = NULL;
|
||||||
|
|
||||||
|
if (conn->uri) {
|
||||||
|
@@ -885,6 +885,11 @@ doRemoteOpen (virConnectPtr conn,
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (wakeupFD[0] >= 0) {
|
||||||
|
+ close(wakeupFD[0]);
|
||||||
|
+ close(wakeupFD[1]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
VIR_FREE(priv->hostname);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
@@ -1350,6 +1355,11 @@ doRemoteClose (virConnectPtr conn, struc
|
||||||
|
} while (reap != -1 && reap != priv->pid);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
+ if (priv->wakeupReadFD >= 0) {
|
||||||
|
+ close(priv->wakeupReadFD);
|
||||||
|
+ close(priv->wakeupSendFD);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
|
||||||
|
/* Free hostname copy */
|
||||||
|
free (priv->hostname);
|
||||||
22
libvirt-0.6.1-getvcpus-remote.patch
Normal file
22
libvirt-0.6.1-getvcpus-remote.patch
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
From: Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
Date: Mon, 16 Mar 2009 10:33:01 +0000 (+0000)
|
||||||
|
Subject: Fix handling of cpumaps arg to virDomainGetVcpus RPC dispatcher
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=2d75d954f52a740470f85ceece4eb995d79968ca
|
||||||
|
|
||||||
|
Fix handling of cpumaps arg to virDomainGetVcpus RPC dispatcher
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/qemud/remote.c b/qemud/remote.c
|
||||||
|
index 8eaa7d6..44a274a 100644
|
||||||
|
--- a/qemud/remote.c
|
||||||
|
+++ b/qemud/remote.c
|
||||||
|
@@ -1475,7 +1475,8 @@ remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||||
|
/* Allocate buffers to take the results. */
|
||||||
|
if (VIR_ALLOC_N(info, args->maxinfo) < 0)
|
||||||
|
goto oom;
|
||||||
|
- if (VIR_ALLOC_N(cpumaps, args->maxinfo) < 0)
|
||||||
|
+ if (args->maplen > 0 &&
|
||||||
|
+ VIR_ALLOC_N(cpumaps, args->maxinfo * args->maplen) < 0)
|
||||||
|
goto oom;
|
||||||
|
|
||||||
|
info_len = virDomainGetVcpus (dom,
|
||||||
188
libvirt-0.6.1-pool-mode-parse.patch
Normal file
188
libvirt-0.6.1-pool-mode-parse.patch
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
From: Daniel Veillard <veillard@redhat.com>
|
||||||
|
Date: Thu, 12 Mar 2009 20:15:32 +0000 (+0000)
|
||||||
|
Subject: * src/storage_conf.c: fix storage pool mode parsing, and refactoring
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=bc962f5d7c6e2c2cfc233ea6deea95dba2b7c6eb
|
||||||
|
|
||||||
|
* src/storage_conf.c: fix storage pool mode parsing, and refactoring
|
||||||
|
patch by Ryota Ozaki
|
||||||
|
Daniel
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/storage_conf.c b/src/storage_conf.c
|
||||||
|
index 9c13e07..1c9a4e5 100644
|
||||||
|
--- a/src/storage_conf.c
|
||||||
|
+++ b/src/storage_conf.c
|
||||||
|
@@ -371,15 +371,33 @@ virStoragePoolDefParseAuthChap(virConnectPtr conn,
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
-virStoragePoolDefParsePerms(virConnectPtr conn,
|
||||||
|
- xmlXPathContextPtr ctxt,
|
||||||
|
- virStoragePermsPtr perms) {
|
||||||
|
+virStorageDefParsePerms(virConnectPtr conn,
|
||||||
|
+ xmlXPathContextPtr ctxt,
|
||||||
|
+ virStoragePermsPtr perms,
|
||||||
|
+ const char *permxpath,
|
||||||
|
+ int defaultmode) {
|
||||||
|
char *mode;
|
||||||
|
long v;
|
||||||
|
+ int ret = -1;
|
||||||
|
+ xmlNodePtr relnode;
|
||||||
|
+ xmlNodePtr node;
|
||||||
|
|
||||||
|
- mode = virXPathString(conn, "string(/pool/permissions/mode)", ctxt);
|
||||||
|
+ node = virXPathNode(conn, permxpath, ctxt);
|
||||||
|
+ if (node == NULL) {
|
||||||
|
+ /* Set default values if there is not <permissions> element */
|
||||||
|
+ perms->mode = defaultmode;
|
||||||
|
+ perms->uid = getuid();
|
||||||
|
+ perms->gid = getgid();
|
||||||
|
+ perms->label = NULL;
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ relnode = ctxt->node;
|
||||||
|
+ ctxt->node = node;
|
||||||
|
+
|
||||||
|
+ mode = virXPathString(conn, "string(./mode)", ctxt);
|
||||||
|
if (!mode) {
|
||||||
|
- perms->mode = 0700;
|
||||||
|
+ perms->mode = defaultmode;
|
||||||
|
} else {
|
||||||
|
char *end = NULL;
|
||||||
|
perms->mode = strtol(mode, &end, 8);
|
||||||
|
@@ -387,36 +405,39 @@ virStoragePoolDefParsePerms(virConnectPtr conn,
|
||||||
|
if (*end || perms->mode < 0 || perms->mode > 0777) {
|
||||||
|
virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
"%s", _("malformed octal mode"));
|
||||||
|
- return -1;
|
||||||
|
+ goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (virXPathNode(conn, "/pool/permissions/owner", ctxt) == NULL) {
|
||||||
|
+ if (virXPathNode(conn, "./owner", ctxt) == NULL) {
|
||||||
|
perms->uid = getuid();
|
||||||
|
} else {
|
||||||
|
- if (virXPathLong(conn, "number(/pool/permissions/owner)", ctxt, &v) < 0) {
|
||||||
|
+ if (virXPathLong(conn, "number(./owner)", ctxt, &v) < 0) {
|
||||||
|
virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
"%s", _("malformed owner element"));
|
||||||
|
- return -1;
|
||||||
|
+ goto error;
|
||||||
|
}
|
||||||
|
perms->uid = (int)v;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (virXPathNode(conn, "/pool/permissions/group", ctxt) == NULL) {
|
||||||
|
+ if (virXPathNode(conn, "./group", ctxt) == NULL) {
|
||||||
|
perms->gid = getgid();
|
||||||
|
} else {
|
||||||
|
- if (virXPathLong(conn, "number(/pool/permissions/group)", ctxt, &v) < 0) {
|
||||||
|
+ if (virXPathLong(conn, "number(./group)", ctxt, &v) < 0) {
|
||||||
|
virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
"%s", _("malformed group element"));
|
||||||
|
- return -1;
|
||||||
|
+ goto error;
|
||||||
|
}
|
||||||
|
perms->gid = (int)v;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NB, we're ignoring missing labels here - they'll simply inherit */
|
||||||
|
- perms->label = virXPathString(conn, "string(/pool/permissions/label)", ctxt);
|
||||||
|
+ perms->label = virXPathString(conn, "string(./label)", ctxt);
|
||||||
|
|
||||||
|
- return 0;
|
||||||
|
+ ret = 0;
|
||||||
|
+error:
|
||||||
|
+ ctxt->node = relnode;
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -579,7 +600,8 @@ virStoragePoolDefParseDoc(virConnectPtr conn,
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (virStoragePoolDefParsePerms(conn, ctxt, &ret->target.perms) < 0)
|
||||||
|
+ if (virStorageDefParsePerms(conn, ctxt, &ret->target.perms,
|
||||||
|
+ "/pool/target/permissions", 0700) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
@@ -801,55 +823,6 @@ virStoragePoolDefFormat(virConnectPtr conn,
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
-virStorageVolDefParsePerms(virConnectPtr conn,
|
||||||
|
- xmlXPathContextPtr ctxt,
|
||||||
|
- virStoragePermsPtr perms) {
|
||||||
|
- char *mode;
|
||||||
|
- long v;
|
||||||
|
-
|
||||||
|
- mode = virXPathString(conn, "string(/volume/permissions/mode)", ctxt);
|
||||||
|
- if (!mode) {
|
||||||
|
- perms->mode = 0600;
|
||||||
|
- } else {
|
||||||
|
- char *end = NULL;
|
||||||
|
- perms->mode = strtol(mode, &end, 8);
|
||||||
|
- VIR_FREE(mode);
|
||||||
|
- if (*end || perms->mode < 0 || perms->mode > 0777) {
|
||||||
|
- virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
- "%s", _("malformed octal mode"));
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (virXPathNode(conn, "/volume/permissions/owner", ctxt) == NULL) {
|
||||||
|
- perms->uid = getuid();
|
||||||
|
- } else {
|
||||||
|
- if (virXPathLong(conn, "number(/volume/permissions/owner)", ctxt, &v) < 0) {
|
||||||
|
- virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
- "%s", _("missing owner element"));
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- perms->uid = (int)v;
|
||||||
|
- }
|
||||||
|
- if (virXPathNode(conn, "/volume/permissions/group", ctxt) == NULL) {
|
||||||
|
- perms->gid = getgid();
|
||||||
|
- } else {
|
||||||
|
- if (virXPathLong(conn, "number(/volume/permissions/group)", ctxt, &v) < 0) {
|
||||||
|
- virStorageReportError(conn, VIR_ERR_XML_ERROR,
|
||||||
|
- "%s", _("missing group element"));
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- perms->gid = (int)v;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* NB, we're ignoring missing labels here - they'll simply inherit */
|
||||||
|
- perms->label = virXPathString(conn, "string(/volume/permissions/label)", ctxt);
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-static int
|
||||||
|
virStorageSize(virConnectPtr conn,
|
||||||
|
const char *unit,
|
||||||
|
const char *val,
|
||||||
|
@@ -997,7 +970,8 @@ virStorageVolDefParseDoc(virConnectPtr conn,
|
||||||
|
VIR_FREE(format);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (virStorageVolDefParsePerms(conn, ctxt, &ret->target.perms) < 0)
|
||||||
|
+ if (virStorageDefParsePerms(conn, ctxt, &ret->target.perms,
|
||||||
|
+ "/volume/target/permissions", 0600) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1019,7 +993,8 @@ virStorageVolDefParseDoc(virConnectPtr conn,
|
||||||
|
VIR_FREE(format);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (virStorageVolDefParsePerms(conn, ctxt, &ret->backingStore.perms) < 0)
|
||||||
|
+ if (virStorageDefParsePerms(conn, ctxt, &ret->backingStore.perms,
|
||||||
|
+ "/volume/backingStore/permissions", 0600) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
return ret;
|
||||||
20
libvirt-0.6.1-storage-free.patch
Normal file
20
libvirt-0.6.1-storage-free.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
From: Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
Date: Mon, 16 Mar 2009 10:31:38 +0000 (+0000)
|
||||||
|
Subject: Don't free storage volume in cleanup path, since it may still be referenced
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=d8f08ca049b6d3bc7a5124a3957e967539ad080d
|
||||||
|
|
||||||
|
Don't free storage volume in cleanup path, since it may still be referenced
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/storage_driver.c b/src/storage_driver.c
|
||||||
|
index f1320c5..b261843 100644
|
||||||
|
--- a/src/storage_driver.c
|
||||||
|
+++ b/src/storage_driver.c
|
||||||
|
@@ -1296,7 +1296,6 @@ storageVolumeDelete(virStorageVolPtr obj,
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
- virStorageVolDefFree(vol);
|
||||||
|
if (pool)
|
||||||
|
virStoragePoolObjUnlock(pool);
|
||||||
|
return ret;
|
||||||
143
libvirt-0.6.1-svirt-shared-readonly.patch
Normal file
143
libvirt-0.6.1-svirt-shared-readonly.patch
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
diff -rup libvirt-0.6.1.orig/src/qemu_driver.c libvirt-0.6.1.new/src/qemu_driver.c
|
||||||
|
--- libvirt-0.6.1.orig/src/qemu_driver.c 2009-03-17 11:57:04.000000000 +0000
|
||||||
|
+++ libvirt-0.6.1.new/src/qemu_driver.c 2009-03-17 11:57:12.000000000 +0000
|
||||||
|
@@ -3765,7 +3765,7 @@ static int qemudDomainAttachDevice(virDo
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (driver->securityDriver)
|
||||||
|
- driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev);
|
||||||
|
+ driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev->data.disk);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
@@ -3901,7 +3901,7 @@ static int qemudDomainDetachDevice(virDo
|
||||||
|
dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)) {
|
||||||
|
ret = qemudDomainDetachPciDiskDevice(dom->conn, vm, dev);
|
||||||
|
if (driver->securityDriver)
|
||||||
|
- driver->securityDriver->domainRestoreSecurityImageLabel(dom->conn, vm, dev);
|
||||||
|
+ driver->securityDriver->domainRestoreSecurityImageLabel(dom->conn, dev->data.disk);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
|
||||||
|
diff -rup libvirt-0.6.1.orig/src/security.h libvirt-0.6.1.new/src/security.h
|
||||||
|
--- libvirt-0.6.1.orig/src/security.h 2009-03-03 16:40:46.000000000 +0000
|
||||||
|
+++ libvirt-0.6.1.new/src/security.h 2009-03-17 11:57:12.000000000 +0000
|
||||||
|
@@ -32,11 +32,10 @@ typedef virSecurityDriverStatus (*virSec
|
||||||
|
typedef int (*virSecurityDriverOpen) (virConnectPtr conn,
|
||||||
|
virSecurityDriverPtr drv);
|
||||||
|
typedef int (*virSecurityDomainRestoreImageLabel) (virConnectPtr conn,
|
||||||
|
- virDomainObjPtr vm,
|
||||||
|
- virDomainDeviceDefPtr dev);
|
||||||
|
+ virDomainDiskDefPtr disk);
|
||||||
|
typedef int (*virSecurityDomainSetImageLabel) (virConnectPtr conn,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
- virDomainDeviceDefPtr dev);
|
||||||
|
+ virDomainDiskDefPtr disk);
|
||||||
|
typedef int (*virSecurityDomainGenLabel) (virConnectPtr conn,
|
||||||
|
virDomainObjPtr sec);
|
||||||
|
typedef int (*virSecurityDomainGetLabel) (virConnectPtr conn,
|
||||||
|
diff -rup libvirt-0.6.1.orig/src/security_selinux.c libvirt-0.6.1.new/src/security_selinux.c
|
||||||
|
--- libvirt-0.6.1.orig/src/security_selinux.c 2009-03-03 16:40:46.000000000 +0000
|
||||||
|
+++ libvirt-0.6.1.new/src/security_selinux.c 2009-03-17 11:57:12.000000000 +0000
|
||||||
|
@@ -269,7 +269,7 @@ SELinuxGetSecurityLabel(virConnectPtr co
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
-SELinuxSetFilecon(virConnectPtr conn, char *path, char *tcon)
|
||||||
|
+SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
|
||||||
|
{
|
||||||
|
char ebuf[1024];
|
||||||
|
|
||||||
|
@@ -288,28 +288,51 @@ SELinuxSetFilecon(virConnectPtr conn, ch
|
||||||
|
|
||||||
|
static int
|
||||||
|
SELinuxRestoreSecurityImageLabel(virConnectPtr conn,
|
||||||
|
- virDomainObjPtr vm,
|
||||||
|
- virDomainDeviceDefPtr dev)
|
||||||
|
+ virDomainDiskDefPtr disk)
|
||||||
|
{
|
||||||
|
- const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
|
||||||
|
+ struct stat buf;
|
||||||
|
+ security_context_t fcon = NULL;
|
||||||
|
+ int rc = -1;
|
||||||
|
+ char *newpath = NULL;
|
||||||
|
+ const char *path = disk->src;
|
||||||
|
|
||||||
|
- if (secdef->imagelabel) {
|
||||||
|
- return SELinuxSetFilecon(conn, dev->data.disk->src, default_image_context);
|
||||||
|
+ if (disk->readonly || disk->shared)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (lstat(path, &buf) != 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (S_ISLNK(buf.st_mode)) {
|
||||||
|
+ if (VIR_ALLOC_N(newpath, buf.st_size + 1) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (readlink(path, newpath, buf.st_size) < 0)
|
||||||
|
+ goto err;
|
||||||
|
+ path = newpath;
|
||||||
|
+ if (stat(path, &buf) != 0)
|
||||||
|
+ goto err;
|
||||||
|
}
|
||||||
|
- return 0;
|
||||||
|
+
|
||||||
|
+ if (matchpathcon(path, buf.st_mode, &fcon) == 0) {
|
||||||
|
+ rc = SELinuxSetFilecon(conn, path, fcon);
|
||||||
|
+ }
|
||||||
|
+err:
|
||||||
|
+ VIR_FREE(fcon);
|
||||||
|
+ VIR_FREE(newpath);
|
||||||
|
+ return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SELinuxSetSecurityImageLabel(virConnectPtr conn,
|
||||||
|
virDomainObjPtr vm,
|
||||||
|
- virDomainDeviceDefPtr dev)
|
||||||
|
+ virDomainDiskDefPtr disk)
|
||||||
|
|
||||||
|
{
|
||||||
|
const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
|
||||||
|
|
||||||
|
- if (secdef->imagelabel) {
|
||||||
|
- return SELinuxSetFilecon(conn, dev->data.disk->src, secdef->imagelabel);
|
||||||
|
- }
|
||||||
|
+ if (secdef->imagelabel)
|
||||||
|
+ return SELinuxSetFilecon(conn, disk->src, secdef->imagelabel);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -322,7 +345,7 @@ SELinuxRestoreSecurityLabel(virConnectPt
|
||||||
|
int rc = 0;
|
||||||
|
if (secdef->imagelabel) {
|
||||||
|
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
||||||
|
- if (SELinuxSetFilecon(conn, vm->def->disks[i]->src, default_image_context) < 0)
|
||||||
|
+ if (SELinuxRestoreSecurityImageLabel(conn, vm->def->disks[i]) < 0)
|
||||||
|
rc = -1;
|
||||||
|
}
|
||||||
|
VIR_FREE(secdef->model);
|
||||||
|
@@ -368,16 +391,11 @@ SELinuxSetSecurityLabel(virConnectPtr co
|
||||||
|
|
||||||
|
if (secdef->imagelabel) {
|
||||||
|
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
||||||
|
- if(setfilecon(vm->def->disks[i]->src, secdef->imagelabel) < 0) {
|
||||||
|
- virSecurityReportError(conn, VIR_ERR_ERROR,
|
||||||
|
- _("%s: unable to set security context "
|
||||||
|
- "'\%s\' on %s: %s."), __func__,
|
||||||
|
- secdef->imagelabel,
|
||||||
|
- vm->def->disks[i]->src,
|
||||||
|
- virStrerror(errno, ebuf, sizeof ebuf));
|
||||||
|
- if (security_getenforce() == 1)
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
+ if (vm->def->disks[i]->readonly ||
|
||||||
|
+ vm->def->disks[i]->shared) continue;
|
||||||
|
+
|
||||||
|
+ if (SELinuxSetSecurityImageLabel(conn, vm, vm->def->disks[i]) < 0)
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
35
libvirt-0.6.1-svirt-sound.patch
Normal file
35
libvirt-0.6.1-svirt-sound.patch
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
diff -rup libvirt-0.6.1.orig/src/qemu_conf.c libvirt-0.6.1.new/src/qemu_conf.c
|
||||||
|
--- libvirt-0.6.1.orig/src/qemu_conf.c 2009-03-17 11:57:04.000000000 +0000
|
||||||
|
+++ libvirt-0.6.1.new/src/qemu_conf.c 2009-03-17 15:50:08.000000000 +0000
|
||||||
|
@@ -757,6 +757,20 @@ int qemudBuildCommandLine(virConnectPtr
|
||||||
|
char uuid[VIR_UUID_STRING_BUFLEN];
|
||||||
|
char domid[50];
|
||||||
|
char *pidfile;
|
||||||
|
+ int skipSound = 0;
|
||||||
|
+
|
||||||
|
+ if (driver->securityDriver &&
|
||||||
|
+ driver->securityDriver->name &&
|
||||||
|
+ STREQ(driver->securityDriver->name, "selinux") &&
|
||||||
|
+ getuid == 0) {
|
||||||
|
+ static int soundWarned = 0;
|
||||||
|
+ skipSound = 1;
|
||||||
|
+ if (vm->def->nsounds &&
|
||||||
|
+ !soundWarned) {
|
||||||
|
+ soundWarned = 1;
|
||||||
|
+ VIR_WARN0("Sound cards for VMs are disabled while SELinux security model is active");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
uname_normalize(&ut);
|
||||||
|
|
||||||
|
@@ -1364,7 +1378,8 @@ int qemudBuildCommandLine(virConnectPtr
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add sound hardware */
|
||||||
|
- if (vm->def->nsounds) {
|
||||||
|
+ if (vm->def->nsounds &&
|
||||||
|
+ !skipSound) {
|
||||||
|
int size = 100;
|
||||||
|
char *modstr;
|
||||||
|
if (VIR_ALLOC_N(modstr, size+1) < 0)
|
||||||
|
Only in libvirt-0.6.1.new/src: qemu_conf.c~
|
||||||
36
libvirt-0.6.1-vcpu-deadlock.patch
Normal file
36
libvirt-0.6.1-vcpu-deadlock.patch
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
From: Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
Date: Mon, 16 Mar 2009 11:44:46 +0000 (+0000)
|
||||||
|
Subject: Avoid deadlock setting vcpus in QEMU driver
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=4d7ecd146ce4de847256ae0887963719f214f62f
|
||||||
|
|
||||||
|
Avoid deadlock setting vcpus in QEMU driver
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||||
|
index dad7098..51442d6 100644
|
||||||
|
--- a/src/qemu_driver.c
|
||||||
|
+++ b/src/qemu_driver.c
|
||||||
|
@@ -2725,6 +2725,7 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
|
||||||
|
virDomainObjPtr vm;
|
||||||
|
int max;
|
||||||
|
int ret = -1;
|
||||||
|
+ const char *type;
|
||||||
|
|
||||||
|
qemuDriverLock(driver);
|
||||||
|
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||||
|
@@ -2745,7 +2746,14 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if ((max = qemudDomainGetMaxVcpus(dom)) < 0) {
|
||||||
|
+ if (!(type = virDomainVirtTypeToString(vm->def->virtType))) {
|
||||||
|
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
+ _("unknown virt type in domain definition '%d'"),
|
||||||
|
+ vm->def->virtType);
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((max = qemudGetMaxVCPUs(dom->conn, type)) < 0) {
|
||||||
|
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
_("could not determine max vcpus for the domain"));
|
||||||
|
goto cleanup;
|
||||||
277
libvirt-0.6.1-vnc-sasl-auth.patch
Normal file
277
libvirt-0.6.1-vnc-sasl-auth.patch
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
diff -r 961d4b1ca1d3 qemud/libvirtd_qemu.aug
|
||||||
|
--- a/qemud/libvirtd_qemu.aug Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/qemud/libvirtd_qemu.aug Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -27,6 +27,8 @@ module Libvirtd_qemu =
|
||||||
|
| str_entry "vnc_tls_x509_cert_dir"
|
||||||
|
| bool_entry "vnc_tls_x509_verify"
|
||||||
|
| str_entry "vnc_password"
|
||||||
|
+ | bool_entry "vnc_sasl"
|
||||||
|
+ | str_entry "vnc_sasl_dir"
|
||||||
|
|
||||||
|
(* Each enty in the config is one of the following three ... *)
|
||||||
|
let entry = vnc_entry
|
||||||
|
diff -r 961d4b1ca1d3 qemud/test_libvirtd_qemu.aug
|
||||||
|
--- a/qemud/test_libvirtd_qemu.aug Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/qemud/test_libvirtd_qemu.aug Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -60,6 +60,25 @@ vnc_tls_x509_verify = 1
|
||||||
|
# example here before you set this
|
||||||
|
#
|
||||||
|
vnc_password = \"XYZ12345\"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Enable use of SASL encryption on the VNC server. This requires
|
||||||
|
+# a VNC client which supports the SASL protocol extension.
|
||||||
|
+# Examples include vinagre, virt-viewer and virt-manager
|
||||||
|
+# itself. UltraVNC, RealVNC, TightVNC do not support this
|
||||||
|
+#
|
||||||
|
+# It is necessary to configure /etc/sasl2/qemu.conf to choose
|
||||||
|
+# the desired SASL plugin (eg, GSSPI for Kerberos)
|
||||||
|
+#
|
||||||
|
+vnc_sasl = 1
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# The default SASL configuration file is located in /etc/sasl2/
|
||||||
|
+# When running libvirtd unprivileged, it may be desirable to
|
||||||
|
+# override the configs in this location. Set this parameter to
|
||||||
|
+# point to the directory, and create a qemu.conf in that location
|
||||||
|
+#
|
||||||
|
+vnc_sasl_dir = \"/some/directory/sasl2\"
|
||||||
|
"
|
||||||
|
|
||||||
|
test Libvirtd_qemu.lns get conf =
|
||||||
|
@@ -123,3 +142,22 @@ vnc_password = \"XYZ12345\"
|
||||||
|
{ "#comment" = "example here before you set this" }
|
||||||
|
{ "#comment" = "" }
|
||||||
|
{ "vnc_password" = "XYZ12345" }
|
||||||
|
+{ "#empty" }
|
||||||
|
+{ "#empty" }
|
||||||
|
+{ "#comment" = "Enable use of SASL encryption on the VNC server. This requires" }
|
||||||
|
+{ "#comment" = "a VNC client which supports the SASL protocol extension." }
|
||||||
|
+{ "#comment" = "Examples include vinagre, virt-viewer and virt-manager" }
|
||||||
|
+{ "#comment" = "itself. UltraVNC, RealVNC, TightVNC do not support this" }
|
||||||
|
+{ "#comment" = "" }
|
||||||
|
+{ "#comment" = "It is necessary to configure /etc/sasl2/qemu.conf to choose" }
|
||||||
|
+{ "#comment" = "the desired SASL plugin (eg, GSSPI for Kerberos)" }
|
||||||
|
+{ "#comment" = "" }
|
||||||
|
+{ "vnc_sasl" = "1" }
|
||||||
|
+{ "#empty" }
|
||||||
|
+{ "#empty" }
|
||||||
|
+{ "#comment" = "The default SASL configuration file is located in /etc/sasl2/" }
|
||||||
|
+{ "#comment" = "When running libvirtd unprivileged, it may be desirable to" }
|
||||||
|
+{ "#comment" = "override the configs in this location. Set this parameter to" }
|
||||||
|
+{ "#comment" = "point to the directory, and create a qemu.conf in that location" }
|
||||||
|
+{ "#comment" = "" }
|
||||||
|
+{ "vnc_sasl_dir" = "/some/directory/sasl2" }
|
||||||
|
diff -r 961d4b1ca1d3 src/qemu.conf
|
||||||
|
--- a/src/qemu.conf Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/src/qemu.conf Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -60,6 +60,27 @@
|
||||||
|
# vnc_password = "XYZ12345"
|
||||||
|
|
||||||
|
|
||||||
|
+# Enable use of SASL encryption on the VNC server. This requires
|
||||||
|
+# a VNC client which supports the SASL protocol extension.
|
||||||
|
+# Examples include vinagre, virt-viewer and virt-manager
|
||||||
|
+# itself. UltraVNC, RealVNC, TightVNC do not support this
|
||||||
|
+#
|
||||||
|
+# It is necessary to configure /etc/sasl2/qemu.conf to choose
|
||||||
|
+# the desired SASL plugin (eg, GSSPI for Kerberos)
|
||||||
|
+#
|
||||||
|
+# vnc_sasl = 1
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# The default SASL configuration file is located in /etc/sasl2/
|
||||||
|
+# When running libvirtd unprivileged, it may be desirable to
|
||||||
|
+# override the configs in this location. Set this parameter to
|
||||||
|
+# point to the directory, and create a qemu.conf in that location
|
||||||
|
+#
|
||||||
|
+# vnc_sasl_dir = "/some/directory/sasl2"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
# The default security driver is SELinux. If SELinux is disabled
|
||||||
|
# on the host, then the security driver will automatically disable
|
||||||
|
# itself. If you wish to disable QEMU SELinux security driver while
|
||||||
|
diff -r 961d4b1ca1d3 src/qemu_conf.c
|
||||||
|
--- a/src/qemu_conf.c Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/src/qemu_conf.c Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -161,6 +161,21 @@ int qemudLoadDriverConfig(struct qemud_d
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ p = virConfGetValue (conf, "vnc_sasl");
|
||||||
|
+ CHECK_TYPE ("vnc_sasl", VIR_CONF_LONG);
|
||||||
|
+ if (p) driver->vncSASL = p->l;
|
||||||
|
+
|
||||||
|
+ p = virConfGetValue (conf, "vnc_sasl_dir");
|
||||||
|
+ CHECK_TYPE ("vnc_sasl_dir", VIR_CONF_STRING);
|
||||||
|
+ if (p && p->str) {
|
||||||
|
+ VIR_FREE(driver->vncSASLdir);
|
||||||
|
+ if (!(driver->vncSASLdir = strdup(p->str))) {
|
||||||
|
+ virReportOOMError(NULL);
|
||||||
|
+ virConfFree(conf);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
virConfFree (conf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -838,15 +853,20 @@ int qemudBuildCommandLine(virConnectPtr
|
||||||
|
goto no_memory; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
+#define ADD_ENV_PAIR(envname, val) \
|
||||||
|
+ do { \
|
||||||
|
+ char *envval; \
|
||||||
|
+ ADD_ENV_SPACE; \
|
||||||
|
+ if (virAsprintf(&envval, "%s=%s", envname, val) < 0) \
|
||||||
|
+ goto no_memory; \
|
||||||
|
+ qenv[qenvc++] = envval; \
|
||||||
|
+ } while (0)
|
||||||
|
+
|
||||||
|
#define ADD_ENV_COPY(envname) \
|
||||||
|
do { \
|
||||||
|
char *val = getenv(envname); \
|
||||||
|
- char *envval; \
|
||||||
|
- ADD_ENV_SPACE; \
|
||||||
|
if (val != NULL) { \
|
||||||
|
- if (virAsprintf(&envval, "%s=%s", envname, val) < 0) \
|
||||||
|
- goto no_memory; \
|
||||||
|
- qenv[qenvc++] = envval; \
|
||||||
|
+ ADD_ENV_PAIR(envname, val); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
@@ -1295,6 +1315,15 @@ int qemudBuildCommandLine(virConnectPtr
|
||||||
|
driver->vncTLSx509certdir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (driver->vncSASL) {
|
||||||
|
+ virBufferAddLit(&opt, ",sasl");
|
||||||
|
+
|
||||||
|
+ if (driver->vncSASLdir)
|
||||||
|
+ ADD_ENV_PAIR("SASL_CONF_DIR", driver->vncSASLdir);
|
||||||
|
+
|
||||||
|
+ /* TODO: Support ACLs later */
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
virBufferVSprintf(&opt, "%d",
|
||||||
|
vm->def->graphics->data.vnc.port - 5900);
|
||||||
|
diff -r 961d4b1ca1d3 src/qemu_conf.h
|
||||||
|
--- a/src/qemu_conf.h Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/src/qemu_conf.h Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -73,9 +73,11 @@ struct qemud_driver {
|
||||||
|
char *stateDir;
|
||||||
|
unsigned int vncTLS : 1;
|
||||||
|
unsigned int vncTLSx509verify : 1;
|
||||||
|
+ unsigned int vncSASL : 1;
|
||||||
|
char *vncTLSx509certdir;
|
||||||
|
char *vncListen;
|
||||||
|
char *vncPassword;
|
||||||
|
+ char *vncSASLdir;
|
||||||
|
|
||||||
|
virCapsPtr caps;
|
||||||
|
|
||||||
|
diff -r 961d4b1ca1d3 src/qemu_driver.c
|
||||||
|
--- a/src/qemu_driver.c Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/src/qemu_driver.c Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -620,6 +620,7 @@ qemudShutdown(void) {
|
||||||
|
VIR_FREE(qemu_driver->vncTLSx509certdir);
|
||||||
|
VIR_FREE(qemu_driver->vncListen);
|
||||||
|
VIR_FREE(qemu_driver->vncPassword);
|
||||||
|
+ VIR_FREE(qemu_driver->vncSASLdir);
|
||||||
|
|
||||||
|
/* Free domain callback list */
|
||||||
|
virDomainEventCallbackListFree(qemu_driver->domainEventCallbacks);
|
||||||
|
diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args
|
||||||
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||||
|
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -0,0 +1,1 @@
|
||||||
|
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test SASL_CONF_DIR=/root/.sasl2 /usr/bin/qemu -S -M pc -m 214 -smp 1 -monitor pty -pidfile /nowhere/QEMUGuest1.pid -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3,sasl
|
||||||
|
diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.xml
|
||||||
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||||
|
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.xml Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -0,0 +1,24 @@
|
||||||
|
+<domain type='qemu'>
|
||||||
|
+ <name>QEMUGuest1</name>
|
||||||
|
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
+ <memory>219200</memory>
|
||||||
|
+ <currentMemory>219200</currentMemory>
|
||||||
|
+ <vcpu>1</vcpu>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch='i686' machine='pc'>hvm</type>
|
||||||
|
+ <boot dev='hd'/>
|
||||||
|
+ </os>
|
||||||
|
+ <clock offset='utc'/>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>destroy</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/bin/qemu</emulator>
|
||||||
|
+ <disk type='block' device='disk'>
|
||||||
|
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
+ <target dev='hda' bus='ide'/>
|
||||||
|
+ </disk>
|
||||||
|
+ <input type='mouse' bus='ps2'/>
|
||||||
|
+ <graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args
|
||||||
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||||
|
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -0,0 +1,1 @@
|
||||||
|
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test SASL_CONF_DIR=/root/.sasl2 /usr/bin/qemu -S -M pc -m 214 -smp 1 -monitor pty -pidfile /nowhere/QEMUGuest1.pid -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3,tls,x509verify=/etc/pki/tls/qemu,sasl
|
||||||
|
diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.xml
|
||||||
|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||||
|
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.xml Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -0,0 +1,24 @@
|
||||||
|
+<domain type='qemu'>
|
||||||
|
+ <name>QEMUGuest1</name>
|
||||||
|
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
+ <memory>219200</memory>
|
||||||
|
+ <currentMemory>219200</currentMemory>
|
||||||
|
+ <vcpu>1</vcpu>
|
||||||
|
+ <os>
|
||||||
|
+ <type arch='i686' machine='pc'>hvm</type>
|
||||||
|
+ <boot dev='hd'/>
|
||||||
|
+ </os>
|
||||||
|
+ <clock offset='utc'/>
|
||||||
|
+ <on_poweroff>destroy</on_poweroff>
|
||||||
|
+ <on_reboot>restart</on_reboot>
|
||||||
|
+ <on_crash>destroy</on_crash>
|
||||||
|
+ <devices>
|
||||||
|
+ <emulator>/usr/bin/qemu</emulator>
|
||||||
|
+ <disk type='block' device='disk'>
|
||||||
|
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
+ <target dev='hda' bus='ide'/>
|
||||||
|
+ </disk>
|
||||||
|
+ <input type='mouse' bus='ps2'/>
|
||||||
|
+ <graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'/>
|
||||||
|
+ </devices>
|
||||||
|
+</domain>
|
||||||
|
diff -r 961d4b1ca1d3 tests/qemuxml2argvtest.c
|
||||||
|
--- a/tests/qemuxml2argvtest.c Wed Mar 04 13:17:44 2009 +0000
|
||||||
|
+++ b/tests/qemuxml2argvtest.c Thu Mar 05 14:22:50 2009 +0000
|
||||||
|
@@ -213,6 +213,19 @@ mymain(int argc, char **argv)
|
||||||
|
QEMUD_CMD_FLAG_DRIVE_CACHE_V2);
|
||||||
|
DO_TEST("disk-usb", 0);
|
||||||
|
DO_TEST("graphics-vnc", 0);
|
||||||
|
+
|
||||||
|
+ driver.vncSASL = 1;
|
||||||
|
+ driver.vncSASLdir = strdup("/root/.sasl2");
|
||||||
|
+ DO_TEST("graphics-vnc-sasl", 0);
|
||||||
|
+ driver.vncTLS = 1;
|
||||||
|
+ driver.vncTLSx509verify = 1;
|
||||||
|
+ driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
|
||||||
|
+ DO_TEST("graphics-vnc-tls", 0);
|
||||||
|
+ driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
|
||||||
|
+ free(driver.vncSASLdir);
|
||||||
|
+ free(driver.vncTLSx509certdir);
|
||||||
|
+ driver.vncSASLdir = driver.vncTLSx509certdir = NULL;
|
||||||
|
+
|
||||||
|
DO_TEST("graphics-sdl", 0);
|
||||||
|
DO_TEST("graphics-sdl-fullscreen", 0);
|
||||||
|
DO_TEST("input-usbmouse", 0);
|
||||||
29
libvirt-0.6.1-xen-events.patch
Normal file
29
libvirt-0.6.1-xen-events.patch
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Index: src/xs_internal.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /data/cvs/libxen/src/xs_internal.c,v
|
||||||
|
retrieving revision 1.88
|
||||||
|
diff -u -u -r1.88 xs_internal.c
|
||||||
|
--- src/xs_internal.c 5 Feb 2009 18:14:00 -0000 1.88
|
||||||
|
+++ src/xs_internal.c 11 Mar 2009 13:23:17 -0000
|
||||||
|
@@ -1215,7 +1215,7 @@
|
||||||
|
static void
|
||||||
|
xenStoreWatchEvent(int watch ATTRIBUTE_UNUSED,
|
||||||
|
int fd ATTRIBUTE_UNUSED,
|
||||||
|
- int events ATTRIBUTE_UNUSED,
|
||||||
|
+ int events,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
char **event;
|
||||||
|
@@ -1226,8 +1226,12 @@
|
||||||
|
|
||||||
|
virConnectPtr conn = data;
|
||||||
|
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
|
||||||
|
+
|
||||||
|
if(!priv) return;
|
||||||
|
|
||||||
|
+ /* only set a watch on read and write events */
|
||||||
|
+ if (events & (VIR_EVENT_HANDLE_ERROR | VIR_EVENT_HANDLE_HANGUP)) return;
|
||||||
|
+
|
||||||
|
xenUnifiedLock(priv);
|
||||||
|
|
||||||
|
if(!priv->xshandle)
|
||||||
26
libvirt-0.6.1-xenblock-detach.patch
Normal file
26
libvirt-0.6.1-xenblock-detach.patch
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
From: Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
Date: Tue, 10 Mar 2009 10:32:24 +0000 (+0000)
|
||||||
|
Subject: Fix Xen block detach with newer Xend (Cole RobinSon / Tomohiro Takahashi)
|
||||||
|
X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=33813a932d58c17441203d0e581eba91369a71e0
|
||||||
|
|
||||||
|
Fix Xen block detach with newer Xend (Cole RobinSon / Tomohiro Takahashi)
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/xend_internal.c b/src/xend_internal.c
|
||||||
|
index f9f2cb3..772f3f4 100644
|
||||||
|
--- a/src/xend_internal.c
|
||||||
|
+++ b/src/xend_internal.c
|
||||||
|
@@ -5566,7 +5566,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||||
|
char *xref;
|
||||||
|
|
||||||
|
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||||
|
- strcpy(class, "vbd");
|
||||||
|
+ if (dev->data.disk->driverName &&
|
||||||
|
+ STREQ(dev->data.disk->driverName, "tap"))
|
||||||
|
+ strcpy(class, "tap");
|
||||||
|
+ else
|
||||||
|
+ strcpy(class, "vbd");
|
||||||
|
+
|
||||||
|
if (dev->data.disk->dst == NULL)
|
||||||
|
return -1;
|
||||||
|
xenUnifiedLock(priv);
|
||||||
24
libvirt-0.6.1-xend-lookup.patch
Normal file
24
libvirt-0.6.1-xend-lookup.patch
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
Index: src/xend_internal.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /data/cvs/libxen/src/xend_internal.c,v
|
||||||
|
retrieving revision 1.251
|
||||||
|
diff -u -r1.251 xend_internal.c
|
||||||
|
--- src/xend_internal.c 13 Feb 2009 18:23:23 -0000 1.251
|
||||||
|
+++ src/xend_internal.c 10 Mar 2009 10:00:28 -0000
|
||||||
|
@@ -904,7 +904,15 @@
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (VIR_ALLOC_N(ptr, count + 1 + extra) < 0)
|
||||||
|
+ /*
|
||||||
|
+ * We can'tuse the normal allocation routines as we are mixing
|
||||||
|
+ * an array of char * at the beginning followed by an array of char
|
||||||
|
+ * ret points to the NULL terminated array of char *
|
||||||
|
+ * ptr points to the current string after that array but in the same
|
||||||
|
+ * allocated block
|
||||||
|
+ */
|
||||||
|
+ if (virAlloc((void *)&ptr,
|
||||||
|
+ (count + 1) * sizeof(char *) + extra * sizeof(char)) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ret = (char **) ptr;
|
||||||
853
libvirt.spec
853
libvirt.spec
@@ -1,61 +1,338 @@
|
|||||||
Summary: Library providing an API to use the Xen virtualization
|
# -*- rpm-spec -*-
|
||||||
|
|
||||||
|
%define with_xen 0%{!?_without_xen:1}
|
||||||
|
%define with_xen_proxy 0%{!?_without_xen_proxy:1}
|
||||||
|
%define with_qemu 0%{!?_without_qemu:1}
|
||||||
|
%define with_openvz 0%{!?_without_openvz:1}
|
||||||
|
%define with_lxc 0%{!?_without_lxc:1}
|
||||||
|
%define with_sasl 0%{!?_without_sasl:1}
|
||||||
|
%define with_avahi 0%{!?_without_avahi:1}
|
||||||
|
%define with_polkit 0%{!?_without_polkit:0}
|
||||||
|
%define with_python 0%{!?_without_python:1}
|
||||||
|
%define with_libvirtd 0%{!?_without_libvirtd:1}
|
||||||
|
%define with_uml 0%{!?_without_uml:1}
|
||||||
|
%define with_network 0%{!?_without_network:1}
|
||||||
|
|
||||||
|
# Xen is available only on i386 x86_64 ia64
|
||||||
|
%ifnarch i386 i586 i686 x86_64 ia64
|
||||||
|
%define with_xen 0
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_xen}
|
||||||
|
%define with_xen_proxy 0
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?fedora}
|
||||||
|
%ifarch ppc64
|
||||||
|
%define with_qemu 0
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if 0%{?fedora} >= 8
|
||||||
|
%define with_polkit 0%{!?_without_polkit:1}
|
||||||
|
%define with_xen_proxy 0
|
||||||
|
%endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# If building on RHEL switch on the specific support
|
||||||
|
# for the specific Xen version
|
||||||
|
#
|
||||||
|
%if 0%{?fedora}
|
||||||
|
%define with_rhel5 0
|
||||||
|
%else
|
||||||
|
%define with_rhel5 1
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
Summary: Library providing a simple API virtualization
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 0.0.6
|
Version: 0.6.1
|
||||||
Release: 1
|
Release: 5%{?dist}%{?extra_release}
|
||||||
License: LGPL
|
License: LGPLv2+
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Source: libvirt-%{version}.tar.gz
|
Source: libvirt-%{version}.tar.gz
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
Patch1: libvirt-0.6.1-xend-lookup.patch
|
||||||
URL: http://libvir.org/
|
Patch2: libvirt-0.6.1-xen-events.patch
|
||||||
BuildRequires: xen python python-devel
|
Patch3: libvirt-0.6.1-events-dispatch.patch
|
||||||
Requires: xen
|
Patch4: libvirt-0.6.1-fd-leaks.patch
|
||||||
Requires: libxml2
|
Patch5: libvirt-0.6.1-getvcpus-remote.patch
|
||||||
|
Patch6: libvirt-0.6.1-pool-mode-parse.patch
|
||||||
|
Patch7: libvirt-0.6.1-storage-free.patch
|
||||||
|
Patch8: libvirt-0.6.1-vcpu-deadlock.patch
|
||||||
|
Patch9: libvirt-0.6.1-xenblock-detach.patch
|
||||||
|
Patch10: libvirt-0.6.1-fd-leaks2.patch
|
||||||
|
Patch11: libvirt-0.6.1-svirt-shared-readonly.patch
|
||||||
|
|
||||||
|
# Not upstream yet - pending QEMU merge
|
||||||
|
Patch100: libvirt-0.6.1-vnc-sasl-auth.patch
|
||||||
|
|
||||||
|
# Not for upstream. Temporary hack till PulseAudio autostart
|
||||||
|
# problems are sorted out when SELinux enforcing
|
||||||
|
Patch200: libvirt-0.6.1-svirt-sound.patch
|
||||||
|
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
|
URL: http://libvirt.org/
|
||||||
|
BuildRequires: python python-devel
|
||||||
|
Requires: readline
|
||||||
|
Requires: ncurses
|
||||||
|
Requires: dnsmasq
|
||||||
|
Requires: bridge-utils
|
||||||
|
Requires: iptables
|
||||||
|
# needed for device enumeration
|
||||||
|
Requires: hal
|
||||||
|
# So remote clients can access libvirt over SSH tunnel
|
||||||
|
# (client invokes 'nc' against the UNIX socket on the server)
|
||||||
|
Requires: nc
|
||||||
|
%if %{with_sasl}
|
||||||
|
Requires: cyrus-sasl
|
||||||
|
# Not technically required, but makes 'out-of-box' config
|
||||||
|
# work correctly & doesn't have onerous dependencies
|
||||||
|
Requires: cyrus-sasl-md5
|
||||||
|
%endif
|
||||||
|
%if %{with_polkit}
|
||||||
|
Requires: PolicyKit >= 0.6
|
||||||
|
%endif
|
||||||
|
# For mount/umount in FS driver
|
||||||
|
BuildRequires: util-linux
|
||||||
|
# For showmount in FS driver (netfs discovery)
|
||||||
|
BuildRequires: nfs-utils
|
||||||
|
Requires: nfs-utils
|
||||||
|
%if %{with_qemu}
|
||||||
|
# From QEMU RPMs
|
||||||
|
Requires: /usr/bin/qemu-img
|
||||||
|
%else
|
||||||
|
%if %{with_xen}
|
||||||
|
# From Xen RPMs
|
||||||
|
Requires: /usr/sbin/qcow-create
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
# For LVM drivers
|
||||||
|
Requires: lvm2
|
||||||
|
# For ISCSI driver
|
||||||
|
Requires: iscsi-initiator-utils
|
||||||
|
# For disk driver
|
||||||
|
Requires: parted
|
||||||
|
# For svirt support
|
||||||
|
Requires: libselinux
|
||||||
|
%if %{with_xen}
|
||||||
|
BuildRequires: xen-devel
|
||||||
|
%endif
|
||||||
BuildRequires: libxml2-devel
|
BuildRequires: libxml2-devel
|
||||||
Obsoletes: libvir
|
BuildRequires: xhtml1-dtds
|
||||||
ExclusiveArch: i386 x86_64
|
BuildRequires: readline-devel
|
||||||
|
BuildRequires: ncurses-devel
|
||||||
|
BuildRequires: gettext
|
||||||
|
BuildRequires: gnutls-devel
|
||||||
|
BuildRequires: hal-devel
|
||||||
|
%if %{with_avahi}
|
||||||
|
BuildRequires: avahi-devel
|
||||||
|
%endif
|
||||||
|
BuildRequires: libselinux-devel
|
||||||
|
BuildRequires: dnsmasq
|
||||||
|
BuildRequires: bridge-utils
|
||||||
|
%if %{with_qemu}
|
||||||
|
BuildRequires: qemu
|
||||||
|
%endif
|
||||||
|
%if %{with_sasl}
|
||||||
|
BuildRequires: cyrus-sasl-devel
|
||||||
|
%endif
|
||||||
|
%if %{with_polkit}
|
||||||
|
BuildRequires: PolicyKit-devel >= 0.6
|
||||||
|
%endif
|
||||||
|
# For mount/umount in FS driver
|
||||||
|
BuildRequires: util-linux
|
||||||
|
%if %{with_qemu}
|
||||||
|
# From QEMU RPMs
|
||||||
|
BuildRequires: /usr/bin/qemu-img
|
||||||
|
%else
|
||||||
|
%if %{with_xen}
|
||||||
|
# From Xen RPMs
|
||||||
|
BuildRequires: /usr/sbin/qcow-create
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
# For LVM drivers
|
||||||
|
BuildRequires: lvm2
|
||||||
|
# For ISCSI driver
|
||||||
|
BuildRequires: iscsi-initiator-utils
|
||||||
|
# For disk driver
|
||||||
|
BuildRequires: parted-devel
|
||||||
|
# For QEMU/LXC numa info
|
||||||
|
BuildRequires: numactl-devel
|
||||||
|
Obsoletes: libvir <= 0.2
|
||||||
|
Provides: libvir = %{version}-%{release}
|
||||||
|
|
||||||
|
# Fedora build root suckage
|
||||||
|
BuildRequires: gawk
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This C library provides an API to use the Xen virtualization framework,
|
Libvirt is a C toolkit to interact with the virtualization capabilities
|
||||||
and the virsh command line tool to control virtual domains.
|
of recent versions of Linux (and other OSes).
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Libraries, includes, etc. to compile with the libvirt library
|
Summary: Libraries, includes, etc. to compile with the libvirt library
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Requires: libvirt = %{version}
|
Requires: libvirt = %{version}-%{release}
|
||||||
Obsoletes: libvir-devel
|
Requires: pkgconfig
|
||||||
|
%if %{with_xen}
|
||||||
|
Requires: xen-devel
|
||||||
|
%endif
|
||||||
|
Obsoletes: libvir-devel <= 0.2
|
||||||
|
Provides: libvir-devel = %{version}-%{release}
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
Includes and documentations for the C library providing an API to use
|
Includes and documentations for the C library providing an API to use
|
||||||
the Xen virtualization framework
|
the virtualization capabilities of recent versions of Linux (and other OSes).
|
||||||
|
|
||||||
|
%if %{with_python}
|
||||||
%package python
|
%package python
|
||||||
Summary: Python bindings for the libvirt library
|
Summary: Python bindings for the libvirt library
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Requires: libvirt = %{version}
|
Requires: libvirt = %{version}-%{release}
|
||||||
Obsoletes: libvir-python
|
Obsoletes: libvir-python <= 0.2
|
||||||
Requires: %{_libdir}/python%(echo `python -c "import sys; print sys.version[0:3]"`)
|
Provides: libvir-python = %{version}-%{release}
|
||||||
|
|
||||||
%description python
|
%description python
|
||||||
The libvirt-python package contains a module that permits applications
|
The libvirt-python package contains a module that permits applications
|
||||||
written in the Python programming language to use the interface
|
written in the Python programming language to use the interface
|
||||||
supplied by the libvirt library to use the Xen virtualization framework.
|
supplied by the libvirt library to use the virtualization capabilities
|
||||||
|
of recent versions of Linux (and other OSes).
|
||||||
|
%endif
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
%patch1 -p0
|
||||||
|
%patch2 -p0
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p0
|
||||||
|
%patch11 -p1
|
||||||
|
|
||||||
|
%patch100 -p1
|
||||||
|
%patch200 -p1
|
||||||
|
|
||||||
|
mv NEWS NEWS.old
|
||||||
|
iconv -f ISO-8859-1 -t UTF-8 < NEWS.old > NEWS
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure
|
%if ! %{with_xen}
|
||||||
make
|
%define _without_xen --without-xen
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_qemu}
|
||||||
|
%define _without_qemu --without-qemu
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_openvz}
|
||||||
|
%define _without_openvz --without-openvz
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_lxc}
|
||||||
|
%define _without_lxc --without-lxc
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_sasl}
|
||||||
|
%define _without_sasl --without-sasl
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_avahi}
|
||||||
|
%define _without_avahi --without-avahi
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_polkit}
|
||||||
|
%define _without_polkit --without-polkit
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_python}
|
||||||
|
%define _without_python --without-python
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_libvirtd}
|
||||||
|
%define _without_libvirtd --without-libvirtd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_uml}
|
||||||
|
%define _without_uml --without-uml
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_rhel5}
|
||||||
|
%define _with_rhel5_api --with-rhel5-api
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_network}
|
||||||
|
%define _without_network --without-network
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%configure %{?_without_xen} \
|
||||||
|
%{?_without_qemu} \
|
||||||
|
%{?_without_openvz} \
|
||||||
|
%{?_without_lxc} \
|
||||||
|
%{?_without_sasl} \
|
||||||
|
%{?_without_avahi} \
|
||||||
|
%{?_without_polkit} \
|
||||||
|
%{?_without_python} \
|
||||||
|
%{?_without_libvirtd} \
|
||||||
|
%{?_without_uml} \
|
||||||
|
%{?_without_network} \
|
||||||
|
%{?_with_rhel5_api} \
|
||||||
|
--with-init-script=redhat \
|
||||||
|
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||||
|
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -fr %{buildroot}
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
%makeinstall
|
%makeinstall
|
||||||
(cd docs/examples ; make clean ; rm -rf .deps)
|
(cd docs/examples ; make clean ; rm -rf .deps Makefile Makefile.in)
|
||||||
|
(cd docs/examples/python ; rm -rf .deps Makefile Makefile.in)
|
||||||
|
(cd examples/hellolibvirt ; make clean ; rm -rf .deps .libs Makefile Makefile.in)
|
||||||
|
(cd examples/domain-events/events-c ; make clean ;rm -rf .deps .libs Makefile Makefile.in)
|
||||||
|
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
|
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
|
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/run/libvirt/
|
||||||
|
# Default dir for disk images defined in SELinux policy
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/libvirt/images/
|
||||||
|
# Default dir for kernel+initrd images defnied in SELinux policy
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/libvirt/boot/
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
# We don't want to install /etc/libvirt/qemu/networks in the main %files list
|
||||||
|
# because if the admin wants to delete the default network completely, we don't
|
||||||
|
# want to end up re-incarnating it on every RPM upgrade.
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/
|
||||||
|
cp $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml \
|
||||||
|
$RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
# Strip auto-generated UUID - we need it generated per-install
|
||||||
|
sed -i -e "/<uuid>/d" $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
|
||||||
|
%else
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_qemu.aug
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
|
||||||
|
%endif
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
|
%if ! %{with_python}
|
||||||
|
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-python-%{version}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if ! %{with_qemu}
|
||||||
|
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_libvirtd}
|
||||||
|
chmod 0644 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/libvirtd
|
||||||
|
%endif
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -fr %{buildroot}
|
rm -fr %{buildroot}
|
||||||
@@ -63,20 +340,146 @@ rm -fr %{buildroot}
|
|||||||
%post
|
%post
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
|
||||||
%postun
|
%if %{with_libvirtd}
|
||||||
/sbin/ldconfig
|
%if %{with_qemu}
|
||||||
|
# We want to install the default network for initial RPM installs
|
||||||
|
# or on the first upgrade from a non-network aware libvirt only.
|
||||||
|
# We check this by looking to see if the daemon is already installed
|
||||||
|
/sbin/chkconfig --list libvirtd 1>/dev/null 2>&1
|
||||||
|
if [ $? != 0 -a ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ]
|
||||||
|
then
|
||||||
|
UUID=`/usr/bin/uuidgen`
|
||||||
|
sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
|
||||||
|
< %{_datadir}/libvirt/networks/default.xml \
|
||||||
|
> %{_sysconfdir}/libvirt/qemu/networks/default.xml
|
||||||
|
ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
%files
|
/sbin/chkconfig --add libvirtd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%if %{with_libvirtd}
|
||||||
|
if [ $1 = 0 ]; then
|
||||||
|
/sbin/service libvirtd stop 1>/dev/null 2>&1
|
||||||
|
/sbin/chkconfig --del libvirtd
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%files -f %{name}.lang
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
%doc AUTHORS ChangeLog NEWS README COPYING.LIB TODO
|
%doc AUTHORS ChangeLog NEWS README COPYING.LIB TODO
|
||||||
|
%doc %{_mandir}/man1/virsh.1*
|
||||||
%{_bindir}/virsh
|
%{_bindir}/virsh
|
||||||
%{_libdir}/lib*.so.*
|
%{_libdir}/lib*.so.*
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_libvirtd}
|
||||||
|
%{_sysconfdir}/rc.d/init.d/libvirtd
|
||||||
|
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
|
||||||
|
%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_sasl}
|
||||||
|
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
%dir %{_datadir}/libvirt/
|
||||||
|
%dir %{_datadir}/libvirt/networks/
|
||||||
|
%{_datadir}/libvirt/networks/default.xml
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%dir %{_datadir}/libvirt/
|
||||||
|
%dir %{_datadir}/libvirt/schemas/
|
||||||
|
|
||||||
|
%{_datadir}/libvirt/schemas/domain.rng
|
||||||
|
%{_datadir}/libvirt/schemas/network.rng
|
||||||
|
%{_datadir}/libvirt/schemas/storagepool.rng
|
||||||
|
%{_datadir}/libvirt/schemas/storagevol.rng
|
||||||
|
%{_datadir}/libvirt/schemas/nodedev.rng
|
||||||
|
%{_datadir}/libvirt/schemas/capability.rng
|
||||||
|
|
||||||
|
%dir %{_localstatedir}/run/libvirt/
|
||||||
|
|
||||||
|
%dir %{_localstatedir}/lib/libvirt/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/images/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/boot/
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
%dir %{_localstatedir}/run/libvirt/qemu/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/qemu/
|
||||||
|
%endif
|
||||||
|
%if %{with_lxc}
|
||||||
|
%dir %{_localstatedir}/run/libvirt/lxc/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/
|
||||||
|
%endif
|
||||||
|
%if %{with_uml}
|
||||||
|
%dir %{_localstatedir}/run/libvirt/uml/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/
|
||||||
|
%endif
|
||||||
|
%if %{with_network}
|
||||||
|
%dir %{_localstatedir}/run/libvirt/network/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/filter/
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/nat/
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_qemu}
|
||||||
|
%{_datadir}/augeas/lenses/libvirtd_qemu.aug
|
||||||
|
%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_libvirtd}
|
||||||
|
%{_datadir}/augeas/lenses/libvirtd.aug
|
||||||
|
%{_datadir}/augeas/lenses/tests/test_libvirtd.aug
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_polkit}
|
||||||
|
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/
|
||||||
|
%if %{with_qemu}
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_xen_proxy}
|
||||||
|
%attr(4755, root, root) %{_libexecdir}/libvirt_proxy
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_lxc}
|
||||||
|
%attr(0755, root, root) %{_libexecdir}/libvirt_lxc
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if %{with_libvirtd}
|
||||||
|
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
|
||||||
|
%attr(0755, root, root) %{_sbindir}/libvirtd
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%doc docs/*.xml
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
%{_libdir}/lib*.so
|
%{_libdir}/lib*.so
|
||||||
|
%dir %{_includedir}/libvirt
|
||||||
%{_includedir}/libvirt/*.h
|
%{_includedir}/libvirt/*.h
|
||||||
%{_libdir}/pkgconfig/libvirt.pc
|
%{_libdir}/pkgconfig/libvirt.pc
|
||||||
%doc %{_datadir}/gtk-doc/html/libvirt/*.devhelp
|
%doc %{_datadir}/gtk-doc/html/libvirt/*.devhelp
|
||||||
@@ -87,7 +490,9 @@ rm -fr %{buildroot}
|
|||||||
%doc docs/*.html docs/html docs/*.gif
|
%doc docs/*.html docs/html docs/*.gif
|
||||||
%doc docs/examples
|
%doc docs/examples
|
||||||
%doc docs/libvirt-api.xml
|
%doc docs/libvirt-api.xml
|
||||||
|
%doc examples
|
||||||
|
|
||||||
|
%if %{with_python}
|
||||||
%files python
|
%files python
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
@@ -97,8 +502,402 @@ rm -fr %{buildroot}
|
|||||||
%doc python/tests/*.py
|
%doc python/tests/*.py
|
||||||
%doc python/TODO
|
%doc python/TODO
|
||||||
%doc python/libvirtclass.txt
|
%doc python/libvirtclass.txt
|
||||||
|
%doc docs/examples/python
|
||||||
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 17 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.1-5.fc11
|
||||||
|
- Don't relabel shared/readonly disks
|
||||||
|
- Disable sound cards when running sVirt
|
||||||
|
|
||||||
|
* Tue Mar 17 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.1-4.fc11
|
||||||
|
- Fix memory allocation for xend lookup
|
||||||
|
- Avoid crash if storage volume deletion fails
|
||||||
|
- Fix multiple FD leaks
|
||||||
|
- Fix bug in dispatch FD events when a callback is marked deleted
|
||||||
|
- Fix parsing of storage volume owner/group/mode
|
||||||
|
- Fix memory allocation for virDomainGetVcpus RPC handler
|
||||||
|
- Avoid deadlock in setting vCPU count
|
||||||
|
- Use correct driver name in Xen block detach
|
||||||
|
|
||||||
|
* Mon Mar 9 2009 Cole Robinson <crobinso@redhat.com> - 0.6.1-3.fc11
|
||||||
|
- Add Requires: libselinux
|
||||||
|
|
||||||
|
* Fri Mar 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.1-2.fc11
|
||||||
|
- Fix crash after storage vol deletion fails
|
||||||
|
- Add patch to enable VNC SASL authentication
|
||||||
|
|
||||||
|
* Wed Mar 4 2009 Daniel Veillard <veillard@redhat.com> - 0.6.1-1.fc11
|
||||||
|
- upstream release 0.6.1
|
||||||
|
- support for node device detach reattach and reset
|
||||||
|
- sVirt mandatory access control support
|
||||||
|
- many bug fixes and small improvements
|
||||||
|
|
||||||
|
* Mon Mar 2 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-6.fc11
|
||||||
|
- make sure Xen is handled in i586 new default 32bits x86 packages
|
||||||
|
|
||||||
|
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.6.0-5.fc11
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Feb 18 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-4.fc11
|
||||||
|
- Fix QEMU startup timeout/race (rhbz #484649)
|
||||||
|
- Setup DBus threading. Don't allow dbus to call _exit / change SIGPIPE (rhbz #484553)
|
||||||
|
- Fix timeout when autostarting session daemon
|
||||||
|
|
||||||
|
* Wed Feb 11 2009 Richard W.M. Jones <rjones@redhat.com> - 0.6.0-3.fc11
|
||||||
|
- Multiple fixes to remove rpmlint warnings/errors (rhbz #226055)
|
||||||
|
|
||||||
|
* Fri Feb 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-2.fc11
|
||||||
|
- Fix libvirtd --timeout usage
|
||||||
|
- Fix RPC call problems and QEMU startup handling (rhbz #484414)
|
||||||
|
- Fix unowned directories (rhbz #483442)
|
||||||
|
|
||||||
|
* Sat Jan 31 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-1.fc11
|
||||||
|
- upstream release 0.6.0
|
||||||
|
- thread safety of API
|
||||||
|
- allow QEmu/KVM domains to survive daemon restart
|
||||||
|
- extended logging capabilities
|
||||||
|
- support copy on write storage volumes for QEmu/KVM
|
||||||
|
- support of storage cache control options for QEmu/KVM
|
||||||
|
- a lot of bug fixes
|
||||||
|
|
||||||
|
* Wed Dec 17 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-2.fc11
|
||||||
|
- fix missing read-only access checks, fixes CVE-2008-5086
|
||||||
|
|
||||||
|
* Fri Dec 5 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-1.fc11
|
||||||
|
- upstream release 0.5.1
|
||||||
|
- mostly bugfixes e.g #473071
|
||||||
|
- some driver improvments
|
||||||
|
|
||||||
|
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.5.0-2
|
||||||
|
- Rebuild for Python 2.6
|
||||||
|
|
||||||
|
* Wed Nov 26 2008 Daniel Veillard <veillard@redhat.com> - 0.5.0-1.fc11
|
||||||
|
- upstream release 0.5.0
|
||||||
|
- domain lifecycle event support
|
||||||
|
- node device enumeration
|
||||||
|
- KVM/QEmu migration support
|
||||||
|
- improved LXC support
|
||||||
|
- SDL display configuration
|
||||||
|
- User Mode Linux driver (Daniel Berrange)
|
||||||
|
|
||||||
|
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-3.fc10
|
||||||
|
- apply the python makefile patch for #463733
|
||||||
|
|
||||||
|
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-2.fc10
|
||||||
|
- upstream release 0.4.6
|
||||||
|
- fixes some problems with 0.4.5
|
||||||
|
|
||||||
|
* Tue Sep 9 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-2.fc10
|
||||||
|
- fix a crash if a QEmu/KVM domain is defined without an emulator path
|
||||||
|
|
||||||
|
* Mon Sep 8 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-1.fc10
|
||||||
|
- upstream release 0.4.5
|
||||||
|
- a lot of bug fixes
|
||||||
|
- major updates to QEmu/KVM and Linux containers drivers
|
||||||
|
- support for OpenVZ if installed
|
||||||
|
|
||||||
|
* Thu Aug 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.4.4-3.fc10
|
||||||
|
- fix license tag
|
||||||
|
|
||||||
|
* Tue Jul 8 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.4-2.fc10
|
||||||
|
- Fix booting of CDROM images with KVM (rhbz #452355)
|
||||||
|
|
||||||
|
* Wed Jun 25 2008 Daniel Veillard <veillard@redhat.com> - 0.4.4-1.fc10
|
||||||
|
- upstream release 0.4.4
|
||||||
|
- fix a few bugs in previous release
|
||||||
|
|
||||||
|
* Thu Jun 12 2008 Daniel Veillard <veillard@redhat.com> - 0.4.3-1.fc10
|
||||||
|
- upstream release 0.4.3
|
||||||
|
- many bug fixes
|
||||||
|
- many small improvements
|
||||||
|
- serious xenner fixes
|
||||||
|
|
||||||
|
* Wed Jun 4 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-6.fc10
|
||||||
|
- Disable lokkit support again (#449996, #447633)
|
||||||
|
- Ensure %-fedora is evaluated correctly
|
||||||
|
|
||||||
|
* Thu May 15 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-5.fc10
|
||||||
|
- Rebuild with policy enabled (rhbz #446616)
|
||||||
|
|
||||||
|
* Fri May 9 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-4.fc10
|
||||||
|
- Added directory for initrd/kernel images for SELinux policy
|
||||||
|
|
||||||
|
* Mon Apr 28 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-3.fc10
|
||||||
|
- Simplify the way arch conditionals are handled
|
||||||
|
|
||||||
|
* Mon Apr 28 2008 Mark McLoughlin <markmc@redhat.com> - 0.4.2-2.fc10
|
||||||
|
- Enable lokkit support (#443796)
|
||||||
|
|
||||||
|
* Tue Apr 8 2008 Daniel Veillard <veillard@redhat.com> - 0.4.2-1.fc9
|
||||||
|
- upstream release 0.4.2
|
||||||
|
- many bug fixes
|
||||||
|
- localization updates
|
||||||
|
|
||||||
|
* Thu Apr 4 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-7.fc9
|
||||||
|
- Don't run polkit-auth as root
|
||||||
|
- Don't request polkit auth if client is root
|
||||||
|
|
||||||
|
* Fri Mar 28 2008 Chris Lalancette <clalance@redhat.com> - 0.4.1-6.fc9
|
||||||
|
- When dumping XML for a storage pool, make the <source> directory tag
|
||||||
|
match the <dir> tag used for specifying the pool in the first place
|
||||||
|
|
||||||
|
* Thu Mar 27 2008 Chris Lalancette <clalance@redhat.com> - 0.4.1-5.fc9
|
||||||
|
- Do iscsiadm sendtarget before trying to do login
|
||||||
|
- Do sysfs scanning for iSCSI LUNs instead of trying to parse them from
|
||||||
|
iscsiadm session output
|
||||||
|
|
||||||
|
* Thu Mar 13 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-4.fc9
|
||||||
|
- Fix QEMU tap device setup
|
||||||
|
- Fix Xen boot device XML processing
|
||||||
|
- Fixed QEMU cdrom media change
|
||||||
|
|
||||||
|
* Mon Mar 10 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-3.fc9
|
||||||
|
- Fixed daemon startup when run with --daemon flag
|
||||||
|
|
||||||
|
* Mon Mar 3 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-2.fc9
|
||||||
|
- 2 patches found just after the release
|
||||||
|
|
||||||
|
* Mon Mar 3 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-1.fc9
|
||||||
|
- Release of 0.4.1
|
||||||
|
- Storage APIs
|
||||||
|
- xenner support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 0.4.0-5
|
||||||
|
- Autorebuild for GCC 4.3
|
||||||
|
|
||||||
|
* Fri Jan 18 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-4.fc9
|
||||||
|
- Fix SSH tunnelling (rhbz #428743)
|
||||||
|
- Fix back-compat for nodeinfo call changes.
|
||||||
|
|
||||||
|
* Sun Jan 13 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-3.fc9
|
||||||
|
- Fix crash when no auth callback
|
||||||
|
|
||||||
|
* Wed Jan 2 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-2.fc9
|
||||||
|
- Fix reading large config files (rhbz #426425)
|
||||||
|
- Fix crash when connecting to a PolicyKit enabled server with not auth callback (rhbz #427107)
|
||||||
|
|
||||||
|
* Tue Dec 18 2007 Daniel Veillard <veillard@redhat.com> - 0.4.0-1.fc8
|
||||||
|
- Release of 0.4.0
|
||||||
|
- SASL based authentication
|
||||||
|
- PolicyKit authentication
|
||||||
|
- improved NUMA and statistics support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Mon Oct 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.3.3-2.fc8
|
||||||
|
- Added QEMU driver config file support
|
||||||
|
- Added example config files
|
||||||
|
|
||||||
|
* Sun Sep 30 2007 Daniel Veillard <veillard@redhat.com> - 0.3.3-1
|
||||||
|
- Release of 0.3.3
|
||||||
|
- Avahi support
|
||||||
|
- NUMA support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Fri Aug 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-2.fc8
|
||||||
|
- also build on arches where Xen is not available
|
||||||
|
|
||||||
|
* Tue Aug 21 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-1.fc8
|
||||||
|
- Release of 0.3.2
|
||||||
|
- API for domains migration
|
||||||
|
- APIs for collecting statistics on disks and interfaces
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Thu Aug 16 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-4.fc8
|
||||||
|
- Fixes missing Requires for libvirt-devel
|
||||||
|
|
||||||
|
* Thu Jul 26 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-3.fc8
|
||||||
|
- adds fix for bug #249594
|
||||||
|
|
||||||
|
* Wed Jul 25 2007 Jesse Keating <jkeating@redhat.com> - 0.3.1-2
|
||||||
|
- Rebuild for RH #249435
|
||||||
|
|
||||||
|
* Tue Jul 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-1.fc8
|
||||||
|
- Release of 0.3.1
|
||||||
|
- localtime clock support
|
||||||
|
- PS/2 and USB input devices
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Mon Jul 9 2007 Daniel Veillard <veillard@redhat.com> - 0.3.0-1.fc8
|
||||||
|
- Release of 0.3.0
|
||||||
|
- Secure remote access support
|
||||||
|
- unification of daemons
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Fri Jun 8 2007 Daniel Veillard <veillard@redhat.com> - 0.2.3-1.fc8
|
||||||
|
- Release of 0.2.3
|
||||||
|
- lot of assorted bugfixes and cleanups
|
||||||
|
- support for Xen-3.1
|
||||||
|
- new scheduler API
|
||||||
|
|
||||||
|
* Tue Apr 17 2007 Daniel Veillard <veillard@redhat.com> - 0.2.2-1
|
||||||
|
- Release of 0.2.2
|
||||||
|
- lot of assorted bugfixes and cleanups
|
||||||
|
- preparing for Xen-3.0.5
|
||||||
|
|
||||||
|
* Thu Mar 22 2007 Jeremy Katz <katzj@redhat.com> - 0.2.1-2.fc7
|
||||||
|
- don't require xen; we don't need the daemon and can control non-xen now
|
||||||
|
- fix scriptlet error (need to own more directories)
|
||||||
|
- update description text
|
||||||
|
|
||||||
|
* Fri Mar 16 2007 Daniel Veillard <veillard@redhat.com> - 0.2.1-1
|
||||||
|
- Release of 0.2.1
|
||||||
|
- lot of bug and portability fixes
|
||||||
|
- Add support for network autostart and init scripts
|
||||||
|
- New API to detect the virtualization capabilities of a host
|
||||||
|
- Documentation updates
|
||||||
|
|
||||||
|
* Fri Feb 23 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-4.fc7
|
||||||
|
- Fix loading of guest & network configs
|
||||||
|
|
||||||
|
* Fri Feb 16 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-3.fc7
|
||||||
|
- Disable kqemu support since its not in Fedora qemu binary
|
||||||
|
- Fix for -vnc arg syntax change in 0.9.0 QEMU
|
||||||
|
|
||||||
|
* Thu Feb 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-2.fc7
|
||||||
|
- Fixed path to qemu daemon for autostart
|
||||||
|
- Fixed generation of <features> block in XML
|
||||||
|
- Pre-create config directory at startup
|
||||||
|
|
||||||
|
* Wed Feb 14 2007 Daniel Veillard <veillard@redhat.com> 0.2.0-1.fc7
|
||||||
|
- support for KVM and QEmu
|
||||||
|
- support for network configuration
|
||||||
|
- assorted fixes
|
||||||
|
|
||||||
|
* Mon Jan 22 2007 Daniel Veillard <veillard@redhat.com> 0.1.11-1.fc7
|
||||||
|
- finish inactive Xen domains support
|
||||||
|
- memory leak fix
|
||||||
|
- RelaxNG schemas for XML configs
|
||||||
|
|
||||||
|
* Wed Dec 20 2006 Daniel Veillard <veillard@redhat.com> 0.1.10-1.fc7
|
||||||
|
- support for inactive Xen domains
|
||||||
|
- improved support for Xen display and vnc
|
||||||
|
- a few bug fixes
|
||||||
|
- localization updates
|
||||||
|
|
||||||
|
* Thu Dec 7 2006 Jeremy Katz <katzj@redhat.com> - 0.1.9-2
|
||||||
|
- rebuild against python 2.5
|
||||||
|
|
||||||
|
* Wed Nov 29 2006 Daniel Veillard <veillard@redhat.com> 0.1.9-1
|
||||||
|
- better error reporting
|
||||||
|
- python bindings fixes and extensions
|
||||||
|
- add support for shareable drives
|
||||||
|
- add support for non-bridge style networking
|
||||||
|
- hot plug device support
|
||||||
|
- added support for inactive domains
|
||||||
|
- API to dump core of domains
|
||||||
|
- various bug fixes, cleanups and improvements
|
||||||
|
- updated the localization
|
||||||
|
|
||||||
|
* Tue Nov 7 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-3
|
||||||
|
- it's pkgconfig not pgkconfig !
|
||||||
|
|
||||||
|
* Mon Nov 6 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-2
|
||||||
|
- fixing spec file, added %-dist, -devel requires pkgconfig and xen-devel
|
||||||
|
- Resolves: rhbz#202320
|
||||||
|
|
||||||
|
* Mon Oct 16 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-1
|
||||||
|
- fix missing page size detection code for ia64
|
||||||
|
- fix mlock size when getting domain info list from hypervisor
|
||||||
|
- vcpu number initialization
|
||||||
|
- don't label crashed domains as shut off
|
||||||
|
- fix virsh man page
|
||||||
|
- blktapdd support for alternate drivers like blktap
|
||||||
|
- memory leak fixes (xend interface and XML parsing)
|
||||||
|
- compile fix
|
||||||
|
- mlock/munlock size fixes
|
||||||
|
|
||||||
|
* Fri Sep 22 2006 Daniel Veillard <veillard@redhat.com> 0.1.7-1
|
||||||
|
- Fix bug when running against xen-3.0.3 hypercalls
|
||||||
|
- Fix memory bug when getting vcpus info from xend
|
||||||
|
|
||||||
|
* Fri Sep 22 2006 Daniel Veillard <veillard@redhat.com> 0.1.6-1
|
||||||
|
- Support for localization
|
||||||
|
- Support for new Xen-3.0.3 cdrom and disk configuration
|
||||||
|
- Support for setting VNC port
|
||||||
|
- Fix bug when running against xen-3.0.2 hypercalls
|
||||||
|
- Fix reconnection problem when talking directly to http xend
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Jeremy Katz <katzj@redhat.com> - 0.1.5-3
|
||||||
|
- patch from danpb to support new-format cd devices for HVM guests
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Daniel Veillard <veillard@redhat.com> 0.1.5-2
|
||||||
|
- reactivating ia64 support
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Daniel Veillard <veillard@redhat.com> 0.1.5-1
|
||||||
|
- new release
|
||||||
|
- bug fixes
|
||||||
|
- support for new hypervisor calls
|
||||||
|
- early code for config files and defined domains
|
||||||
|
|
||||||
|
* Mon Sep 4 2006 Daniel Berrange <berrange@redhat.com> - 0.1.4-5
|
||||||
|
- add patch to address dom0_ops API breakage in Xen 3.0.3 tree
|
||||||
|
|
||||||
|
* Mon Aug 28 2006 Jeremy Katz <katzj@redhat.com> - 0.1.4-4
|
||||||
|
- add patch to support paravirt framebuffer in Xen
|
||||||
|
|
||||||
|
* Mon Aug 21 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-3
|
||||||
|
- another patch to fix network handling in non-HVM guests
|
||||||
|
|
||||||
|
* Thu Aug 17 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-2
|
||||||
|
- patch to fix virParseUUID()
|
||||||
|
|
||||||
|
* Wed Aug 16 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-1
|
||||||
|
- vCPUs and affinity support
|
||||||
|
- more complete XML, console and boot options
|
||||||
|
- specific features support
|
||||||
|
- enforced read-only connections
|
||||||
|
- various improvements, bug fixes
|
||||||
|
|
||||||
|
* Wed Aug 2 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-6
|
||||||
|
- add patch from pvetere to allow getting uuid from libvirt
|
||||||
|
|
||||||
|
* Wed Aug 2 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-5
|
||||||
|
- build on ia64 now
|
||||||
|
|
||||||
|
* Thu Jul 27 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-4
|
||||||
|
- don't BR xen, we just need xen-devel
|
||||||
|
|
||||||
|
* Thu Jul 27 2006 Daniel Veillard <veillard@redhat.com> 0.1.3-3
|
||||||
|
- need rebuild since libxenstore is now versionned
|
||||||
|
|
||||||
|
* Mon Jul 24 2006 Mark McLoughlin <markmc@redhat.com> - 0.1.3-2
|
||||||
|
- Add BuildRequires: xen-devel
|
||||||
|
|
||||||
|
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 0.1.3-1.1
|
||||||
|
- rebuild
|
||||||
|
|
||||||
|
* Tue Jul 11 2006 Daniel Veillard <veillard@redhat.com> 0.1.3-1
|
||||||
|
- support for HVM Xen guests
|
||||||
|
- various bugfixes
|
||||||
|
|
||||||
|
* Mon Jul 3 2006 Daniel Veillard <veillard@redhat.com> 0.1.2-1
|
||||||
|
- added a proxy mechanism for read only access using httpu
|
||||||
|
- fixed header includes paths
|
||||||
|
|
||||||
|
* Wed Jun 21 2006 Daniel Veillard <veillard@redhat.com> 0.1.1-1
|
||||||
|
- extend and cleanup the driver infrastructure and code
|
||||||
|
- python examples
|
||||||
|
- extend uuid support
|
||||||
|
- bug fixes, buffer handling cleanups
|
||||||
|
- support for new Xen hypervisor API
|
||||||
|
- test driver for unit testing
|
||||||
|
- virsh --conect argument
|
||||||
|
|
||||||
|
* Mon Apr 10 2006 Daniel Veillard <veillard@redhat.com> 0.1.0-1
|
||||||
|
- various fixes
|
||||||
|
- new APIs: for Node information and Reboot
|
||||||
|
- virsh improvements and extensions
|
||||||
|
- documentation updates and man page
|
||||||
|
- enhancement and fixes of the XML description format
|
||||||
|
|
||||||
* Tue Feb 28 2006 Daniel Veillard <veillard@redhat.com> 0.0.6-1
|
* Tue Feb 28 2006 Daniel Veillard <veillard@redhat.com> 0.0.6-1
|
||||||
- added error handling APIs
|
- added error handling APIs
|
||||||
- small bug fixes
|
- small bug fixes
|
||||||
|
|||||||
Reference in New Issue
Block a user