forked from pool/libvirt
update to libvirt 0.9.4
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=137
This commit is contained in:
parent
775756fc1a
commit
a4696e813d
@ -1,52 +0,0 @@
|
||||
commit 00d3c5a6032e69a3c853380ca2d8b0764d15e306
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Mon Jul 11 14:38:03 2011 -0600
|
||||
|
||||
Remove code no longer used after commit df0b57a9
|
||||
|
||||
Index: libvirt-0.9.3/daemon/libvirtd.h
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/libvirtd.h
|
||||
+++ libvirt-0.9.3/daemon/libvirtd.h
|
||||
@@ -27,10 +27,6 @@
|
||||
|
||||
# include <config.h>
|
||||
|
||||
-# if HAVE_POLKIT0
|
||||
-# include <dbus/dbus.h>
|
||||
-# endif
|
||||
-
|
||||
# include <rpc/types.h>
|
||||
# include <rpc/xdr.h>
|
||||
# include "remote_protocol.h"
|
||||
@@ -85,30 +81,4 @@ extern virNetSASLContextPtr saslCtxt;
|
||||
extern virNetServerProgramPtr remoteProgram;
|
||||
extern virNetServerProgramPtr qemuProgram;
|
||||
|
||||
-/* Main server state */
|
||||
-struct qemud_server {
|
||||
- int privileged;
|
||||
-
|
||||
- int sigread;
|
||||
- int sigwrite;
|
||||
- char *logDir;
|
||||
- pthread_t eventThread;
|
||||
- unsigned int hasEventThread :1;
|
||||
- unsigned int quitEventThread :1;
|
||||
-# ifdef HAVE_AVAHI
|
||||
- struct libvirtd_mdns *mdns;
|
||||
-# endif
|
||||
-# if HAVE_SASL
|
||||
- char **saslUsernameWhitelist;
|
||||
-# endif
|
||||
-# if HAVE_POLKIT0
|
||||
- DBusConnection *sysbus;
|
||||
-# endif
|
||||
-};
|
||||
-
|
||||
-
|
||||
-# if HAVE_POLKIT
|
||||
-int qemudGetSocketIdentity(int fd, uid_t *uid, pid_t *pid);
|
||||
-# endif
|
||||
-
|
||||
#endif
|
@ -1,44 +0,0 @@
|
||||
commit 2c85644b0b51fbe5b6244e6773531af29933a727
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 12:37:22 2011 +0100
|
||||
|
||||
Fix release of outgoing stream confirmation/abort message
|
||||
|
||||
When sending back the final OK or ERROR message on completion
|
||||
of a stream, we were not decrementing the 'nrequests' tracker
|
||||
on the client. With the default requests limit of '5', this
|
||||
meant once a client had created 5 streams, they are unable to
|
||||
process any further RPC calls. There was also a bug when
|
||||
handling an error from decoding a message length header, which
|
||||
meant a client connection would not immediately be closed.
|
||||
|
||||
* src/rpc/virnetserverclient.c: Fix release of request after
|
||||
stream completion & mark client for close on error
|
||||
|
||||
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
|
||||
index 30d7fcb..6aeb3a4 100644
|
||||
--- a/src/rpc/virnetserverclient.c
|
||||
+++ b/src/rpc/virnetserverclient.c
|
||||
@@ -700,8 +700,10 @@ readmore:
|
||||
|
||||
/* Either done with length word header */
|
||||
if (client->rx->bufferLength == VIR_NET_MESSAGE_LEN_MAX) {
|
||||
- if (virNetMessageDecodeLength(client->rx) < 0)
|
||||
+ if (virNetMessageDecodeLength(client->rx) < 0) {
|
||||
+ client->wantClose = true;
|
||||
return;
|
||||
+ }
|
||||
|
||||
virNetServerClientUpdateEvent(client);
|
||||
|
||||
@@ -831,7 +833,9 @@ virNetServerClientDispatchWrite(virNetServerClientPtr client)
|
||||
/* Get finished msg from head of tx queue */
|
||||
msg = virNetMessageQueueServe(&client->tx);
|
||||
|
||||
- if (msg->header.type == VIR_NET_REPLY) {
|
||||
+ if (msg->header.type == VIR_NET_REPLY ||
|
||||
+ (msg->header.type == VIR_NET_STREAM &&
|
||||
+ msg->header.status != VIR_NET_CONTINUE)) {
|
||||
client->nrequests--;
|
||||
/* See if the recv queue is currently throttled */
|
||||
if (!client->rx &&
|
@ -1,125 +0,0 @@
|
||||
commit 3cfdc57b8553cae95b8849bbcb7a4b227085cec1
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 12:54:29 2011 +0100
|
||||
|
||||
Fix sending of reply to final RPC message
|
||||
|
||||
The dispatch for the CLOSE RPC call was invoking the method
|
||||
virNetServerClientClose(). This caused the client connection
|
||||
to be immediately terminated. This meant the reply to the
|
||||
final RPC message was never sent. Prior to the RPC rewrite
|
||||
we merely flagged the connection for closing, and actually
|
||||
closed it when the next RPC call dispatch had completed.
|
||||
|
||||
* daemon/remote.c: Flag connection for a delayed close
|
||||
* daemon/stream.c: Update to use new API for closing
|
||||
failed connection
|
||||
* src/rpc/virnetserverclient.c, src/rpc/virnetserverclient.h:
|
||||
Add support for a delayed connection close. Rename the
|
||||
virNetServerClientMarkClose method to virNetServerClientImmediateClose
|
||||
to clarify its semantics
|
||||
|
||||
diff --git a/daemon/remote.c b/daemon/remote.c
|
||||
index 2889908..a2e79ef 100644
|
||||
--- a/daemon/remote.c
|
||||
+++ b/daemon/remote.c
|
||||
@@ -483,11 +483,11 @@ cleanup:
|
||||
|
||||
static int
|
||||
remoteDispatchClose(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
- virNetServerClientPtr client,
|
||||
+ virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED)
|
||||
{
|
||||
- virNetServerClientClose(client);
|
||||
+ virNetServerClientDelayedClose(client);
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/daemon/stream.c b/daemon/stream.c
|
||||
index 28f6c32..4a8f1ee 100644
|
||||
--- a/daemon/stream.c
|
||||
+++ b/daemon/stream.c
|
||||
@@ -338,7 +338,7 @@ int daemonFreeClientStream(virNetServerClientPtr client,
|
||||
memset(msg, 0, sizeof(*msg));
|
||||
msg->header.type = VIR_NET_REPLY;
|
||||
if (virNetServerClientSendMessage(client, msg) < 0) {
|
||||
- virNetServerClientMarkClose(client);
|
||||
+ virNetServerClientImmediateClose(client);
|
||||
virNetMessageFree(msg);
|
||||
ret = -1;
|
||||
}
|
||||
@@ -608,7 +608,7 @@ daemonStreamHandleWrite(virNetServerClientPtr client,
|
||||
virNetMessageQueueServe(&stream->rx);
|
||||
if (ret < 0) {
|
||||
virNetMessageFree(msg);
|
||||
- virNetServerClientMarkClose(client);
|
||||
+ virNetServerClientImmediateClose(client);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -623,7 +623,7 @@ daemonStreamHandleWrite(virNetServerClientPtr client,
|
||||
msg->header.type = VIR_NET_REPLY;
|
||||
if (virNetServerClientSendMessage(client, msg) < 0) {
|
||||
virNetMessageFree(msg);
|
||||
- virNetServerClientMarkClose(client);
|
||||
+ virNetServerClientImmediateClose(client);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
|
||||
index 6aeb3a4..742c3a4 100644
|
||||
--- a/src/rpc/virnetserverclient.c
|
||||
+++ b/src/rpc/virnetserverclient.c
|
||||
@@ -61,6 +61,7 @@ struct _virNetServerClient
|
||||
{
|
||||
int refs;
|
||||
bool wantClose;
|
||||
+ bool delayedClose;
|
||||
virMutex lock;
|
||||
virNetSocketPtr sock;
|
||||
int auth;
|
||||
@@ -587,7 +588,14 @@ bool virNetServerClientIsClosed(virNetServerClientPtr client)
|
||||
return closed;
|
||||
}
|
||||
|
||||
-void virNetServerClientMarkClose(virNetServerClientPtr client)
|
||||
+void virNetServerClientDelayedClose(virNetServerClientPtr client)
|
||||
+{
|
||||
+ virNetServerClientLock(client);
|
||||
+ client->delayedClose = true;
|
||||
+ virNetServerClientUnlock(client);
|
||||
+}
|
||||
+
|
||||
+void virNetServerClientImmediateClose(virNetServerClientPtr client)
|
||||
{
|
||||
virNetServerClientLock(client);
|
||||
client->wantClose = true;
|
||||
@@ -852,6 +860,9 @@ virNetServerClientDispatchWrite(virNetServerClientPtr client)
|
||||
virNetMessageFree(msg);
|
||||
|
||||
virNetServerClientUpdateEvent(client);
|
||||
+
|
||||
+ if (client->delayedClose)
|
||||
+ client->wantClose = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/rpc/virnetserverclient.h b/src/rpc/virnetserverclient.h
|
||||
index 66510c3..3d2e1fb 100644
|
||||
--- a/src/rpc/virnetserverclient.h
|
||||
+++ b/src/rpc/virnetserverclient.h
|
||||
@@ -86,9 +86,10 @@ void virNetServerClientSetDispatcher(virNetServerClientPtr client,
|
||||
virNetServerClientDispatchFunc func,
|
||||
void *opaque);
|
||||
void virNetServerClientClose(virNetServerClientPtr client);
|
||||
-
|
||||
bool virNetServerClientIsClosed(virNetServerClientPtr client);
|
||||
-void virNetServerClientMarkClose(virNetServerClientPtr client);
|
||||
+
|
||||
+void virNetServerClientDelayedClose(virNetServerClientPtr client);
|
||||
+void virNetServerClientImmediateClose(virNetServerClientPtr client);
|
||||
bool virNetServerClientWantClose(virNetServerClientPtr client);
|
||||
|
||||
int virNetServerClientInit(virNetServerClientPtr client);
|
@ -1,48 +0,0 @@
|
||||
commit 3e5d48ef33224a915bb2afd7933fbec3c2b232ba
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 12:33:52 2011 +0100
|
||||
|
||||
Fix potential crash in libvirtd with active streams
|
||||
|
||||
If a client disconnects while it has a stream active, there is
|
||||
a race condition which could see libvirtd crash. This is because
|
||||
the client struct may be freed before the last stream event has
|
||||
triggered. This is trivially solved by holding an extra reference
|
||||
on the client for the stream callbak
|
||||
|
||||
* daemon/stream.c: Acquire reference on client when adding the
|
||||
stream callback
|
||||
|
||||
diff --git a/daemon/stream.c b/daemon/stream.c
|
||||
index 56d79c2..28f6c32 100644
|
||||
--- a/daemon/stream.c
|
||||
+++ b/daemon/stream.c
|
||||
@@ -104,6 +104,15 @@ daemonStreamMessageFinished(virNetMessagePtr msg,
|
||||
daemonStreamUpdateEvents(stream);
|
||||
}
|
||||
|
||||
+
|
||||
+static void
|
||||
+daemonStreamEventFreeFunc(void *opaque)
|
||||
+{
|
||||
+ virNetServerClientPtr client = opaque;
|
||||
+
|
||||
+ virNetServerClientFree(client);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Callback that gets invoked when a stream becomes writable/readable
|
||||
*/
|
||||
@@ -361,9 +370,11 @@ int daemonAddClientStream(virNetServerClientPtr client,
|
||||
}
|
||||
|
||||
if (virStreamEventAddCallback(stream->st, 0,
|
||||
- daemonStreamEvent, client, NULL) < 0)
|
||||
+ daemonStreamEvent, client,
|
||||
+ daemonStreamEventFreeFunc) < 0)
|
||||
return -1;
|
||||
|
||||
+ virNetServerClientRef(client);
|
||||
if ((stream->filterID = virNetServerClientAddFilter(client,
|
||||
daemonStreamFilter,
|
||||
stream)) < 0) {
|
@ -1,141 +0,0 @@
|
||||
commit 41828514bb91953e9a47453d5d4e667ccfd74b71
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Thu Jul 7 15:53:41 2011 -0600
|
||||
|
||||
Skip some xen tests if xend is not running
|
||||
|
||||
Currently, the xen statstest and reconnect tests are only compiled
|
||||
if xend is running. Compile them unconditionally if xen headers
|
||||
are present, but skip the tests at runtime if xend is not running.
|
||||
|
||||
This is in response to Eric's suggestion here
|
||||
|
||||
https://www.redhat.com/archives/libvir-list/2011-July/msg00367.html
|
||||
|
||||
Index: libvirt-0.9.3/configure.ac
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/configure.ac
|
||||
+++ libvirt-0.9.3/configure.ac
|
||||
@@ -1982,30 +1982,6 @@ AM_CONDITIONAL([WITH_PYTHON], [test "$wi
|
||||
AC_SUBST([PYTHON_VERSION])
|
||||
AC_SUBST([PYTHON_INCLUDES])
|
||||
|
||||
-
|
||||
-
|
||||
-AC_MSG_CHECKING([whether this host is running a Xen kernel])
|
||||
-RUNNING_XEN=
|
||||
-if test -d /proc/sys/xen
|
||||
-then
|
||||
- RUNNING_XEN=yes
|
||||
-else
|
||||
- RUNNING_XEN=no
|
||||
-fi
|
||||
-AC_MSG_RESULT($RUNNING_XEN)
|
||||
-
|
||||
-AC_MSG_CHECKING([If XenD UNIX socket /var/run/xend/xmlrpc.sock is accessible])
|
||||
-RUNNING_XEND=
|
||||
-if test -S /var/run/xend/xmlrpc.sock
|
||||
-then
|
||||
- RUNNING_XEND=yes
|
||||
-else
|
||||
- RUNNING_XEND=no
|
||||
-fi
|
||||
-AC_MSG_RESULT($RUNNING_XEND)
|
||||
-
|
||||
-AM_CONDITIONAL([ENABLE_XEN_TESTS], [test "$RUNNING_XEN" != "no" && test "$RUNNING_XEND" != "no"])
|
||||
-
|
||||
AC_ARG_ENABLE([test-coverage],
|
||||
AC_HELP_STRING([--enable-test-coverage], [turn on code coverage instrumentation @<:@default=no@:>@]),
|
||||
[case "${enableval}" in
|
||||
Index: libvirt-0.9.3/tests/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/Makefile.am
|
||||
+++ libvirt-0.9.3/tests/Makefile.am
|
||||
@@ -93,10 +93,7 @@ ssh_LDADD = $(COVERAGE_LDFLAGS)
|
||||
|
||||
if WITH_XEN
|
||||
check_PROGRAMS += xml2sexprtest sexpr2xmltest \
|
||||
- xmconfigtest xencapstest
|
||||
-if ENABLE_XEN_TESTS
|
||||
-check_PROGRAMS += statstest reconnect
|
||||
-endif
|
||||
+ xmconfigtest xencapstest statstest reconnect
|
||||
endif
|
||||
if WITH_QEMU
|
||||
check_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
|
||||
@@ -214,10 +211,9 @@ if WITH_XEN
|
||||
TESTS += xml2sexprtest \
|
||||
sexpr2xmltest \
|
||||
xmconfigtest \
|
||||
- xencapstest
|
||||
-if ENABLE_XEN_TESTS
|
||||
-TESTS += reconnect statstest
|
||||
-endif
|
||||
+ xencapstest \
|
||||
+ reconnect \
|
||||
+ statstest
|
||||
endif
|
||||
|
||||
if WITH_QEMU
|
||||
Index: libvirt-0.9.3/tests/reconnect.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/reconnect.c
|
||||
+++ libvirt-0.9.3/tests/reconnect.c
|
||||
@@ -4,6 +4,8 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "internal.h"
|
||||
+#include "testutils.h"
|
||||
+#include "command.h"
|
||||
|
||||
static void errorHandler(void *userData ATTRIBUTE_UNUSED,
|
||||
virErrorPtr error ATTRIBUTE_UNUSED) {
|
||||
@@ -14,6 +16,16 @@ int main(void) {
|
||||
int ro = 0;
|
||||
virConnectPtr conn;
|
||||
virDomainPtr dom;
|
||||
+ int status;
|
||||
+ virCommandPtr cmd;
|
||||
+
|
||||
+ /* skip test if xend is not running */
|
||||
+ cmd = virCommandNewArgList("/usr/sbin/xend", "status", NULL);
|
||||
+ if (virCommandRun(cmd, &status) != 0 || status != 0) {
|
||||
+ virCommandFree(cmd);
|
||||
+ return EXIT_AM_SKIP;
|
||||
+ }
|
||||
+ virCommandFree(cmd);
|
||||
|
||||
virSetErrorFunc(NULL, errorHandler);
|
||||
|
||||
Index: libvirt-0.9.3/tests/statstest.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/statstest.c
|
||||
+++ libvirt-0.9.3/tests/statstest.c
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "internal.h"
|
||||
#include "xen/block_stats.h"
|
||||
#include "testutils.h"
|
||||
+#include "command.h"
|
||||
|
||||
static void testQuietError(void *userData ATTRIBUTE_UNUSED,
|
||||
virErrorPtr error ATTRIBUTE_UNUSED)
|
||||
@@ -44,7 +45,18 @@ static int
|
||||
mymain(void)
|
||||
{
|
||||
int ret = 0;
|
||||
- /* Some of our tests delibrately test failure cases, so
|
||||
+ int status;
|
||||
+ virCommandPtr cmd;
|
||||
+
|
||||
+ /* skip test if xend is not running */
|
||||
+ cmd = virCommandNewArgList("/usr/sbin/xend", "status", NULL);
|
||||
+ if (virCommandRun(cmd, &status) != 0 || status != 0) {
|
||||
+ virCommandFree(cmd);
|
||||
+ return EXIT_AM_SKIP;
|
||||
+ }
|
||||
+ virCommandFree(cmd);
|
||||
+
|
||||
+ /* Some of our tests deliberately test failure cases, so
|
||||
* register a handler to stop error messages cluttering
|
||||
* up display
|
||||
*/
|
@ -1,115 +0,0 @@
|
||||
commit 7518ad753fbad5ab0991b7bb189a69db0975c6e8
|
||||
Author: Alex Jia <ajia@redhat.com>
|
||||
Date: Mon Jul 11 13:14:45 2011 +0800
|
||||
|
||||
remote: Fix memory leak
|
||||
|
||||
Detected in valgrind run:
|
||||
|
||||
==9184== 1 bytes in 1 blocks are definitely lost in loss record 1 of 19
|
||||
==9184== at 0x4A04A28: calloc (vg_replace_malloc.c:467)
|
||||
==9184== by 0x3073715F78: xdr_array (xdr_array.c:97)
|
||||
==9184== by 0x4CF97C9: xdr_remote_domain_get_security_label_ret (remote_protocol.c:1696)
|
||||
==9184== by 0x4D08741: virNetMessageDecodePayload (virnetmessage.c:286)
|
||||
==9184== by 0x4D00F78: virNetClientProgramCall (virnetclientprogram.c:318)
|
||||
==9184== by 0x4CE3887: call (remote_driver.c:3933)
|
||||
==9184== by 0x4CF71C6: remoteDomainGetSecurityLabel (remote_driver.c:1580)
|
||||
==9184== by 0x4CCA480: virDomainGetSecurityLabel (libvirt.c:7340)
|
||||
==9184== by 0x41993A: cmdDominfo (virsh.c:2414)
|
||||
==9184== by 0x411E92: vshCommandRun (virsh.c:12730)
|
||||
==9184== by 0x4211ED: main (virsh.c:14076)
|
||||
==9184==
|
||||
==9184== 2 bytes in 1 blocks are definitely lost in loss record 2 of 19
|
||||
==9184== at 0x4A04A28: calloc (vg_replace_malloc.c:467)
|
||||
==9184== by 0x3073715F78: xdr_array (xdr_array.c:97)
|
||||
==9184== by 0x4CF974F: xdr_remote_node_get_security_model_ret (remote_protocol.c:1713)
|
||||
==9184== by 0x4D08741: virNetMessageDecodePayload (virnetmessage.c:286)
|
||||
==9184== by 0x4D00F78: virNetClientProgramCall (virnetclientprogram.c:318)
|
||||
==9184== by 0x4CE3887: call (remote_driver.c:3933)
|
||||
==9184== by 0x4CF6F96: remoteNodeGetSecurityModel (remote_driver.c:1648)
|
||||
==9184== by 0x4CBF799: virNodeGetSecurityModel (libvirt.c:7382)
|
||||
==9184== by 0x4197D7: cmdDominfo (virsh.c:2394)
|
||||
==9184== by 0x411E92: vshCommandRun (virsh.c:12730)
|
||||
==9184== by 0x4211ED: main (virsh.c:14076)
|
||||
==9184==
|
||||
==9184== 8 bytes in 1 blocks are definitely lost in loss record 3 of 19
|
||||
==9184== at 0x4A04A28: calloc (vg_replace_malloc.c:467)
|
||||
==9184== by 0x3073715F78: xdr_array (xdr_array.c:97)
|
||||
==9184== by 0x4CF9729: xdr_remote_node_get_security_model_ret (remote_protocol.c:1710)
|
||||
==9184== by 0x4D08741: virNetMessageDecodePayload (virnetmessage.c:286)
|
||||
==9184== by 0x4D00F78: virNetClientProgramCall (virnetclientprogram.c:318)
|
||||
==9184== by 0x4CE3887: call (remote_driver.c:3933)
|
||||
==9184== by 0x4CF6F96: remoteNodeGetSecurityModel (remote_driver.c:1648)
|
||||
==9184== by 0x4CBF799: virNodeGetSecurityModel (libvirt.c:7382)
|
||||
==9184== by 0x4197D7: cmdDominfo (virsh.c:2394)
|
||||
==9184== by 0x411E92: vshCommandRun (virsh.c:12730)
|
||||
==9184== by 0x4211ED: main (virsh.c:14076)
|
||||
==9184==
|
||||
==9184== LEAK SUMMARY:
|
||||
==9184== definitely lost: 11 bytes in 3 blocks
|
||||
|
||||
* src/remote/remote_driver.c: Avoid leak on remoteDomainGetSecurityLabel
|
||||
and remoteNodeGetSecurityModel.
|
||||
|
||||
Index: libvirt-0.9.3/AUTHORS
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/AUTHORS
|
||||
+++ libvirt-0.9.3/AUTHORS
|
||||
@@ -180,6 +180,7 @@ Patches have also been contributed by:
|
||||
David S. Wang <dwang2@cisco.com>
|
||||
Ruben Kerkhof <ruben@rubenkerkhof.com>
|
||||
Scott Moser <smoser@ubuntu.com>
|
||||
+ Alex Jia <ajia@redhat.com>
|
||||
|
||||
[....send patches to get your name here....]
|
||||
|
||||
Index: libvirt-0.9.3/src/remote/remote_driver.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/src/remote/remote_driver.c
|
||||
+++ libvirt-0.9.3/src/remote/remote_driver.c
|
||||
@@ -1587,7 +1587,7 @@ remoteDomainGetSecurityLabel (virDomainP
|
||||
if (strlen (ret.label.label_val) >= sizeof seclabel->label) {
|
||||
remoteError(VIR_ERR_RPC, _("security label exceeds maximum: %zd"),
|
||||
sizeof seclabel->label - 1);
|
||||
- goto done;
|
||||
+ goto cleanup;
|
||||
}
|
||||
strcpy (seclabel->label, ret.label.label_val);
|
||||
seclabel->enforcing = ret.enforcing;
|
||||
@@ -1595,6 +1595,9 @@ remoteDomainGetSecurityLabel (virDomainP
|
||||
|
||||
rv = 0;
|
||||
|
||||
+cleanup:
|
||||
+ xdr_free((xdrproc_t) xdr_remote_domain_get_security_label_ret, (char *)&ret);
|
||||
+
|
||||
done:
|
||||
remoteDriverUnlock(priv);
|
||||
return rv;
|
||||
@@ -1655,7 +1658,7 @@ remoteNodeGetSecurityModel (virConnectPt
|
||||
if (strlen (ret.model.model_val) >= sizeof secmodel->model) {
|
||||
remoteError(VIR_ERR_RPC, _("security model exceeds maximum: %zd"),
|
||||
sizeof secmodel->model - 1);
|
||||
- goto done;
|
||||
+ goto cleanup;
|
||||
}
|
||||
strcpy (secmodel->model, ret.model.model_val);
|
||||
}
|
||||
@@ -1664,13 +1667,16 @@ remoteNodeGetSecurityModel (virConnectPt
|
||||
if (strlen (ret.doi.doi_val) >= sizeof secmodel->doi) {
|
||||
remoteError(VIR_ERR_RPC, _("security doi exceeds maximum: %zd"),
|
||||
sizeof secmodel->doi - 1);
|
||||
- goto done;
|
||||
+ goto cleanup;
|
||||
}
|
||||
strcpy (secmodel->doi, ret.doi.doi_val);
|
||||
}
|
||||
|
||||
rv = 0;
|
||||
|
||||
+cleanup:
|
||||
+ xdr_free((xdrproc_t) xdr_remote_node_get_security_model_ret, (char *)&ret);
|
||||
+
|
||||
done:
|
||||
remoteDriverUnlock(priv);
|
||||
return rv;
|
@ -1,51 +0,0 @@
|
||||
commit 927dfcf693165f5b08efba0d031d4cc43e6f9c37
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 12:35:36 2011 +0100
|
||||
|
||||
Fix leak of 'msg' object in client stream code
|
||||
|
||||
In one exit path we forgot to free the virNetMessage object causing
|
||||
a large memory leak for streams which send a lot of data. Some other
|
||||
paths were calling VIR_FREE directly instead of virNetMessageFree
|
||||
although this was (currently) harmless.
|
||||
|
||||
* src/rpc/virnetclientstream.c: Fix leak of msg object
|
||||
* src/rpc/virnetclientprogram.c: Call virNetMessageFree instead
|
||||
of VIR_FREE
|
||||
|
||||
diff --git a/src/rpc/virnetclientprogram.c b/src/rpc/virnetclientprogram.c
|
||||
index 8414ad8..c39520a 100644
|
||||
--- a/src/rpc/virnetclientprogram.c
|
||||
+++ b/src/rpc/virnetclientprogram.c
|
||||
@@ -329,11 +329,11 @@ int virNetClientProgramCall(virNetClientProgramPtr prog,
|
||||
goto error;
|
||||
}
|
||||
|
||||
- VIR_FREE(msg);
|
||||
+ virNetMessageFree(msg);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
- VIR_FREE(msg);
|
||||
+ virNetMessageFree(msg);
|
||||
return -1;
|
||||
}
|
||||
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
|
||||
index d5efab1..fe15acd 100644
|
||||
--- a/src/rpc/virnetclientstream.c
|
||||
+++ b/src/rpc/virnetclientstream.c
|
||||
@@ -361,11 +361,12 @@ int virNetClientStreamSendPacket(virNetClientStreamPtr st,
|
||||
if (virNetClientSend(client, msg, wantReply) < 0)
|
||||
goto error;
|
||||
|
||||
+ virNetMessageFree(msg);
|
||||
|
||||
return nbytes;
|
||||
|
||||
error:
|
||||
- VIR_FREE(msg);
|
||||
+ virNetMessageFree(msg);
|
||||
return -1;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
commit a34e193fb7ac887bb25ac47450bae14dbc829cc8
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Thu Jul 7 10:15:05 2011 -0600
|
||||
|
||||
Fix compilation of statstest.c during make check
|
||||
|
||||
diff --git a/tests/statstest.c b/tests/statstest.c
|
||||
index d18bb0c..c989992 100644
|
||||
--- a/tests/statstest.c
|
||||
+++ b/tests/statstest.c
|
||||
@@ -17,7 +17,7 @@ static void testQuietError(void *userData ATTRIBUTE_UNUSED,
|
||||
|
||||
static int testDevice(const char *path, int expect)
|
||||
{
|
||||
- int actual = xenLinuxDomainDeviceID(NULL, 1, path);
|
||||
+ int actual = xenLinuxDomainDeviceID(1, path);
|
||||
|
||||
if (actual == expect) {
|
||||
return 0;
|
@ -1,43 +0,0 @@
|
||||
commit afe8839f011c8c54c429f33ca0e6515fceb4e0fd
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 12:41:06 2011 +0100
|
||||
|
||||
Fix leak of remote driver if final 'CLOSE' RPC call fails
|
||||
|
||||
When closing a remote connection we issue a (fairly pointless)
|
||||
'CLOSE' RPC call to the daemon. If this fails we skip all the
|
||||
cleanup of private data, but the virConnectPtr object still
|
||||
gets released as normal. This causes a memory leak. Since the
|
||||
CLOSE RPC call is pretty pointless, just carry on freeing the
|
||||
remote driver if it fails.
|
||||
|
||||
* src/remote/remote_driver.c: Ignore failure to issue CLOSE
|
||||
RPC call
|
||||
|
||||
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
||||
index 199d8f8..8dff6a8 100644
|
||||
--- a/src/remote/remote_driver.c
|
||||
+++ b/src/remote/remote_driver.c
|
||||
@@ -824,10 +824,12 @@ get_transport_from_scheme (char *scheme)
|
||||
static int
|
||||
doRemoteClose (virConnectPtr conn, struct private_data *priv)
|
||||
{
|
||||
+ int ret = 0;
|
||||
+
|
||||
if (call (conn, priv, 0, REMOTE_PROC_CLOSE,
|
||||
(xdrproc_t) xdr_void, (char *) NULL,
|
||||
(xdrproc_t) xdr_void, (char *) NULL) == -1)
|
||||
- return -1;
|
||||
+ ret = -1;
|
||||
|
||||
virNetTLSContextFree(priv->tls);
|
||||
priv->tls = NULL;
|
||||
@@ -846,7 +848,7 @@ doRemoteClose (virConnectPtr conn, struct private_data *priv)
|
||||
virDomainEventStateFree(priv->domainEventState);
|
||||
priv->domainEventState = NULL;
|
||||
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int
|
@ -1,22 +0,0 @@
|
||||
commit b25345294201031656d4f0059153bc683182b5e4
|
||||
Author: Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
Date: Tue Jul 12 17:06:16 2011 +0200
|
||||
|
||||
rpc: Fix compile error due to potentially unused parameter
|
||||
|
||||
connectDBus is only used if HAVE_DBUS is set. Therefore mark
|
||||
it as potentially unused.
|
||||
|
||||
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
|
||||
index 94d46f6..66edd11 100644
|
||||
--- a/src/rpc/virnetserver.c
|
||||
+++ b/src/rpc/virnetserver.c
|
||||
@@ -277,7 +277,7 @@ virNetServerPtr virNetServerNew(size_t min_workers,
|
||||
size_t max_workers,
|
||||
size_t max_clients,
|
||||
const char *mdnsGroupName,
|
||||
- bool connectDBus,
|
||||
+ bool connectDBus ATTRIBUTE_UNUSED,
|
||||
virNetServerClientInitHook clientInitHook)
|
||||
{
|
||||
virNetServerPtr srv;
|
@ -1,319 +0,0 @@
|
||||
commit b8adfcc60ccf4a2fabcac3692a958d2c063d8336
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Thu Jul 7 15:12:26 2011 -0600
|
||||
|
||||
Fix build when using polkit0
|
||||
|
||||
V2: Remove policy kit references from virNetServer and use DBus APIs
|
||||
directly, if available.
|
||||
|
||||
Index: libvirt-0.9.3/configure.ac
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/configure.ac
|
||||
+++ libvirt-0.9.3/configure.ac
|
||||
@@ -1010,6 +1010,7 @@ AC_ARG_WITH([polkit],
|
||||
[with_polkit=check])
|
||||
|
||||
with_polkit0=no
|
||||
+with_dbus=no
|
||||
with_polkit1=no
|
||||
if test "x$with_polkit" = "xyes" || test "x$with_polkit" = "xcheck"; then
|
||||
dnl Check for new polkit first - just a binary
|
||||
@@ -1038,6 +1039,8 @@ if test "x$with_polkit" = "xyes" || test
|
||||
[use PolicyKit for UNIX socket access checks])
|
||||
AC_DEFINE_UNQUOTED([HAVE_POLKIT0], 1,
|
||||
[use PolicyKit for UNIX socket access checks])
|
||||
+ AC_DEFINE_UNQUOTED([HAVE_DBUS], 1,
|
||||
+ [use DBus for PolicyKit])
|
||||
|
||||
old_CFLAGS=$CFLAGS
|
||||
old_LIBS=$LIBS
|
||||
@@ -1052,11 +1055,13 @@ if test "x$with_polkit" = "xyes" || test
|
||||
AC_DEFINE_UNQUOTED([POLKIT_AUTH],["$POLKIT_AUTH"],[Location of polkit-auth program])
|
||||
fi
|
||||
with_polkit0="yes"
|
||||
+ with_dbus="yes"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL([HAVE_POLKIT], [test "x$with_polkit" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_POLKIT0], [test "x$with_polkit0" = "xyes"])
|
||||
+AM_CONDITIONAL([HAVE_DBUS], [test "x$with_dbus" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_POLKIT1], [test "x$with_polkit1" = "xyes"])
|
||||
AC_SUBST([POLKIT_CFLAGS])
|
||||
AC_SUBST([POLKIT_LIBS])
|
||||
Index: libvirt-0.9.3/daemon/libvirtd.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/libvirtd.c
|
||||
+++ libvirt-0.9.3/daemon/libvirtd.c
|
||||
@@ -576,26 +576,6 @@ static int daemonSetupNetworking(virNetS
|
||||
}
|
||||
#endif
|
||||
|
||||
-#if HAVE_POLKIT0
|
||||
- if (auth_unix_rw == REMOTE_AUTH_POLKIT ||
|
||||
- auth_unix_ro == REMOTE_AUTH_POLKIT) {
|
||||
- DBusError derr;
|
||||
-
|
||||
- dbus_connection_set_change_sigpipe(FALSE);
|
||||
- dbus_threads_init_default();
|
||||
-
|
||||
- dbus_error_init(&derr);
|
||||
- server->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
|
||||
- if (!(server->sysbus)) {
|
||||
- VIR_ERROR(_("Failed to connect to system bus for PolicyKit auth: %s"),
|
||||
- derr.message);
|
||||
- dbus_error_free(&derr);
|
||||
- goto error;
|
||||
- }
|
||||
- dbus_connection_set_exit_on_disconnect(server->sysbus, FALSE);
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
return 0;
|
||||
|
||||
error:
|
||||
@@ -1278,6 +1258,7 @@ int main(int argc, char **argv) {
|
||||
int ipsock = 0;
|
||||
struct daemonConfig *config;
|
||||
bool privileged = geteuid() == 0 ? true : false;
|
||||
+ bool use_polkit_dbus;
|
||||
|
||||
struct option opts[] = {
|
||||
{ "verbose", no_argument, &verbose, 1},
|
||||
@@ -1436,10 +1417,13 @@ int main(int argc, char **argv) {
|
||||
umask(old_umask);
|
||||
}
|
||||
|
||||
+ use_polkit_dbus = config->auth_unix_rw == REMOTE_AUTH_POLKIT ||
|
||||
+ config->auth_unix_ro == REMOTE_AUTH_POLKIT;
|
||||
if (!(srv = virNetServerNew(config->min_workers,
|
||||
config->max_workers,
|
||||
config->max_clients,
|
||||
config->mdns_adv ? config->mdns_name : NULL,
|
||||
+ use_polkit_dbus,
|
||||
remoteClientInitHook))) {
|
||||
ret = VIR_DAEMON_ERR_INIT;
|
||||
goto cleanup;
|
||||
Index: libvirt-0.9.3/daemon/remote.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/remote.c
|
||||
+++ libvirt-0.9.3/daemon/remote.c
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "command.h"
|
||||
#include "intprops.h"
|
||||
#include "virnetserverservice.h"
|
||||
+#include "virnetserver.h"
|
||||
|
||||
#include "remote_protocol.h"
|
||||
#include "qemu_protocol.h"
|
||||
@@ -2115,7 +2116,7 @@ authdeny:
|
||||
}
|
||||
#elif HAVE_POLKIT0
|
||||
static int
|
||||
-remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
+remoteDispatchAuthPolkit(virNetServerPtr server,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
@@ -2137,21 +2138,19 @@ remoteDispatchAuthPolkit(virNetServerPtr
|
||||
|
||||
memset(ident, 0, sizeof ident);
|
||||
|
||||
- virMutexLock(&server->lock);
|
||||
- virMutexLock(&client->lock);
|
||||
- virMutexUnlock(&server->lock);
|
||||
+ virMutexLock(&priv->lock);
|
||||
|
||||
- action = client->readonly ?
|
||||
+ action = virNetServerClientGetReadonly(client) ?
|
||||
"org.libvirt.unix.monitor" :
|
||||
"org.libvirt.unix.manage";
|
||||
|
||||
VIR_DEBUG("Start PolicyKit auth %d", virNetServerClientGetFD(client));
|
||||
- if (client->auth != REMOTE_AUTH_POLKIT) {
|
||||
+ if (virNetServerClientGetAuth(client) != VIR_NET_SERVER_SERVICE_AUTH_POLKIT) {
|
||||
VIR_ERROR(_("client tried invalid PolicyKit init request"));
|
||||
goto authfail;
|
||||
}
|
||||
|
||||
- if (qemudGetSocketIdentity(virNetServerClientGetFD(client), &callerUid, &callerPid) < 0) {
|
||||
+ if (virNetServerClientGetLocalIdentity(client, &callerUid, &callerPid) < 0) {
|
||||
VIR_ERROR(_("cannot get peer socket identity"));
|
||||
goto authfail;
|
||||
}
|
||||
@@ -2164,7 +2163,7 @@ remoteDispatchAuthPolkit(virNetServerPtr
|
||||
|
||||
VIR_INFO("Checking PID %d running as %d", callerPid, callerUid);
|
||||
dbus_error_init(&err);
|
||||
- if (!(pkcaller = polkit_caller_new_from_pid(server->sysbus,
|
||||
+ if (!(pkcaller = polkit_caller_new_from_pid(virNetServerGetDBusConn(server),
|
||||
callerPid, &err))) {
|
||||
VIR_ERROR(_("Failed to lookup policy kit caller: %s"), err.message);
|
||||
dbus_error_free(&err);
|
||||
@@ -2226,9 +2225,9 @@ remoteDispatchAuthPolkit(virNetServerPtr
|
||||
action, callerPid, callerUid,
|
||||
polkit_result_to_string_representation(pkresult));
|
||||
ret->complete = 1;
|
||||
- client->auth = REMOTE_AUTH_NONE;
|
||||
+ virNetServerClientSetIdentity(client, ident);
|
||||
|
||||
- virMutexUnlock(&client->lock);
|
||||
+ virMutexUnlock(&priv->lock);
|
||||
return 0;
|
||||
|
||||
error:
|
||||
@@ -2236,7 +2235,7 @@ error:
|
||||
virNetError(VIR_ERR_AUTH_FAILED, "%s",
|
||||
_("authentication failed"));
|
||||
virNetMessageSaveError(rerr);
|
||||
- virMutexUnlock(&client->lock);
|
||||
+ virMutexUnlock(&priv->lock);
|
||||
return -1;
|
||||
|
||||
authfail:
|
||||
Index: libvirt-0.9.3/src/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/src/Makefile.am
|
||||
+++ libvirt-0.9.3/src/Makefile.am
|
||||
@@ -1268,10 +1268,12 @@ EXTRA_DIST += \
|
||||
endif
|
||||
libvirt_net_rpc_server_la_CFLAGS = \
|
||||
$(AVAHI_CFLAGS) \
|
||||
- $(AM_CFLAGS)
|
||||
+ $(AM_CFLAGS) \
|
||||
+ $(POLKIT_CFLAGS)
|
||||
libvirt_net_rpc_server_la_LDFLAGS = \
|
||||
$(AM_LDFLAGS) \
|
||||
$(AVAHI_LIBS) \
|
||||
+ $(POLKIT_LIBS) \
|
||||
$(CYGWIN_EXTRA_LDFLAGS) \
|
||||
$(MINGW_EXTRA_LDFLAGS)
|
||||
libvirt_net_rpc_server_la_LIBADD = \
|
||||
Index: libvirt-0.9.3/src/rpc/virnetserver.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/src/rpc/virnetserver.c
|
||||
+++ libvirt-0.9.3/src/rpc/virnetserver.c
|
||||
@@ -39,6 +39,9 @@
|
||||
#if HAVE_AVAHI
|
||||
# include "virnetservermdns.h"
|
||||
#endif
|
||||
+#if HAVE_DBUS
|
||||
+# include <dbus/dbus.h>
|
||||
+#endif
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_RPC
|
||||
#define virNetError(code, ...) \
|
||||
@@ -84,6 +87,10 @@ struct _virNetServer {
|
||||
virNetServerMDNSGroupPtr mdnsGroup;
|
||||
#endif
|
||||
|
||||
+#if HAVE_DBUS
|
||||
+ DBusConnection *sysbus;
|
||||
+#endif
|
||||
+
|
||||
size_t nservices;
|
||||
virNetServerServicePtr *services;
|
||||
|
||||
@@ -270,6 +277,7 @@ virNetServerPtr virNetServerNew(size_t m
|
||||
size_t max_workers,
|
||||
size_t max_clients,
|
||||
const char *mdnsGroupName,
|
||||
+ bool connectDBus,
|
||||
virNetServerClientInitHook clientInitHook)
|
||||
{
|
||||
virNetServerPtr srv;
|
||||
@@ -306,6 +314,25 @@ virNetServerPtr virNetServerNew(size_t m
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if HAVE_DBUS
|
||||
+ if (connectDBus) {
|
||||
+ DBusError derr;
|
||||
+
|
||||
+ dbus_connection_set_change_sigpipe(FALSE);
|
||||
+ dbus_threads_init_default();
|
||||
+
|
||||
+ dbus_error_init(&derr);
|
||||
+ srv->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
|
||||
+ if (!(srv->sysbus)) {
|
||||
+ VIR_ERROR(_("Failed to connect to system bus for PolicyKit auth: %s"),
|
||||
+ derr.message);
|
||||
+ dbus_error_free(&derr);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ dbus_connection_set_exit_on_disconnect(srv->sysbus, FALSE);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (virMutexInit(&srv->lock) < 0) {
|
||||
virNetError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("cannot initialize mutex"));
|
||||
@@ -363,6 +390,14 @@ bool virNetServerIsPrivileged(virNetServ
|
||||
}
|
||||
|
||||
|
||||
+#if HAVE_DBUS
|
||||
+DBusConnection* virNetServerGetDBusConn(virNetServerPtr srv)
|
||||
+{
|
||||
+ return srv->sysbus;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
void virNetServerAutoShutdown(virNetServerPtr srv,
|
||||
unsigned int timeout,
|
||||
virNetServerAutoShutdownFunc func,
|
||||
@@ -377,7 +412,6 @@ void virNetServerAutoShutdown(virNetServ
|
||||
virNetServerUnlock(srv);
|
||||
}
|
||||
|
||||
-
|
||||
static sig_atomic_t sigErrors = 0;
|
||||
static int sigLastErrno = 0;
|
||||
static int sigWrite = -1;
|
||||
@@ -747,6 +781,11 @@ void virNetServerFree(virNetServerPtr sr
|
||||
|
||||
VIR_FREE(srv->mdnsGroupName);
|
||||
|
||||
+#if HAVE_DBUS
|
||||
+ if (srv->sysbus)
|
||||
+ dbus_connection_unref(srv->sysbus);
|
||||
+#endif
|
||||
+
|
||||
virNetServerUnlock(srv);
|
||||
virMutexDestroy(&srv->lock);
|
||||
VIR_FREE(srv);
|
||||
Index: libvirt-0.9.3/src/rpc/virnetserver.h
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/src/rpc/virnetserver.h
|
||||
+++ libvirt-0.9.3/src/rpc/virnetserver.h
|
||||
@@ -25,6 +25,9 @@
|
||||
# define __VIR_NET_SERVER_H__
|
||||
|
||||
# include <signal.h>
|
||||
+# if HAVE_DBUS
|
||||
+# include <dbus/dbus.h>
|
||||
+# endif
|
||||
|
||||
# include "virnettlscontext.h"
|
||||
# include "virnetserverprogram.h"
|
||||
@@ -38,6 +41,7 @@ virNetServerPtr virNetServerNew(size_t m
|
||||
size_t max_workers,
|
||||
size_t max_clients,
|
||||
const char *mdnsGroupName,
|
||||
+ bool connectDBus,
|
||||
virNetServerClientInitHook clientInitHook);
|
||||
|
||||
typedef int (*virNetServerAutoShutdownFunc)(virNetServerPtr srv, void *opaque);
|
||||
@@ -46,6 +50,10 @@ void virNetServerRef(virNetServerPtr srv
|
||||
|
||||
bool virNetServerIsPrivileged(virNetServerPtr srv);
|
||||
|
||||
+# if HAVE_DBUS
|
||||
+DBusConnection* virNetServerGetDBusConn(virNetServerPtr srv);
|
||||
+# endif
|
||||
+
|
||||
void virNetServerAutoShutdown(virNetServerPtr srv,
|
||||
unsigned int timeout,
|
||||
virNetServerAutoShutdownFunc func,
|
@ -1,43 +0,0 @@
|
||||
commit c2ddd536145f36e400a93a1c77f9f0044bfdf068
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri Jul 8 11:14:20 2011 +0100
|
||||
|
||||
Fix mistaken order of server cert/key parameters in constructor
|
||||
|
||||
The virNetTLSContextNew was being passed key/cert parameters in
|
||||
the wrong order. This wasn't immediately visible because if
|
||||
virNetTLSContextNewPath was used, a second bug reversed the order
|
||||
of those parameters again.
|
||||
|
||||
Only if the paths were manually specified in /etc/libvirt/libvirtd.conf
|
||||
did the bug appear
|
||||
|
||||
* src/rpc/virnettlscontext.c: Fix order of params passed to
|
||||
virNetTLSContextNew
|
||||
|
||||
diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c
|
||||
index ad8e2dc..1120e1e 100644
|
||||
--- a/src/rpc/virnettlscontext.c
|
||||
+++ b/src/rpc/virnettlscontext.c
|
||||
@@ -396,10 +396,10 @@ static virNetTLSContextPtr virNetTLSContextNewPath(const char *pkipath,
|
||||
virNetTLSContextPtr ctxt = NULL;
|
||||
|
||||
if (virNetTLSContextLocateCredentials(pkipath, tryUserPkiPath, isServer,
|
||||
- &cacert, &cacrl, &key, &cert) < 0)
|
||||
+ &cacert, &cacrl, &cert, &key) < 0)
|
||||
return NULL;
|
||||
|
||||
- ctxt = virNetTLSContextNew(cacert, cacrl, key, cert,
|
||||
+ ctxt = virNetTLSContextNew(cacert, cacrl, cert, key,
|
||||
x509dnWhitelist, requireValidCert, isServer);
|
||||
|
||||
VIR_FREE(cacert);
|
||||
@@ -435,7 +435,7 @@ virNetTLSContextPtr virNetTLSContextNewServer(const char *cacert,
|
||||
const char *const*x509dnWhitelist,
|
||||
bool requireValidCert)
|
||||
{
|
||||
- return virNetTLSContextNew(cacert, cacrl, key, cert,
|
||||
+ return virNetTLSContextNew(cacert, cacrl, cert, key,
|
||||
x509dnWhitelist, requireValidCert, true);
|
||||
}
|
||||
|
14
clone.patch
14
clone.patch
@ -2,7 +2,7 @@ Index: src/lxc/lxc_container.c
|
||||
===================================================================
|
||||
--- src/lxc/lxc_container.c.orig
|
||||
+++ src/lxc/lxc_container.c
|
||||
@@ -896,6 +896,9 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
@@ -991,6 +991,9 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
handshakefd};
|
||||
|
||||
/* allocate a stack for the container */
|
||||
@ -12,19 +12,19 @@ Index: src/lxc/lxc_container.c
|
||||
if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
@@ -914,7 +917,11 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
flags |= CLONE_NEWNET;
|
||||
@@ -1009,7 +1012,11 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
cflags |= CLONE_NEWNET;
|
||||
}
|
||||
|
||||
+#ifdef __ia64__
|
||||
+ pid = __clone2(lxcContainerChild, stack, stacksize, flags, &args);
|
||||
+ pid = __clone2(lxcContainerChild, stack, stacksize, cflags, &args);
|
||||
+#else
|
||||
pid = clone(lxcContainerChild, stacktop, flags, &args);
|
||||
pid = clone(lxcContainerChild, stacktop, cflags, &args);
|
||||
+#endif
|
||||
VIR_FREE(stack);
|
||||
VIR_DEBUG("clone() completed, new container PID is %d", pid);
|
||||
|
||||
@@ -941,6 +948,7 @@ int lxcContainerAvailable(int features)
|
||||
@@ -1036,6 +1043,7 @@ int lxcContainerAvailable(int features)
|
||||
char *childStack;
|
||||
char *stack;
|
||||
int childStatus;
|
||||
@ -32,7 +32,7 @@ Index: src/lxc/lxc_container.c
|
||||
|
||||
if (features & LXC_CONTAINER_FEATURE_USER)
|
||||
flags |= CLONE_NEWUSER;
|
||||
@@ -948,14 +956,21 @@ int lxcContainerAvailable(int features)
|
||||
@@ -1043,14 +1051,21 @@ int lxcContainerAvailable(int features)
|
||||
if (features & LXC_CONTAINER_FEATURE_NET)
|
||||
flags |= CLONE_NEWNET;
|
||||
|
||||
|
@ -1,168 +0,0 @@
|
||||
commit eb3143154e4ecedf3a97445b3b90bd135a564431
|
||||
Author: Jim Fehlig <jfehlig@novell.com>
|
||||
Date: Wed Jul 6 19:17:16 2011 -0600
|
||||
|
||||
Do not drop kernel cmdline for xen pv domains
|
||||
|
||||
Kernel cmdline args can be passed to xen pv domains even when a
|
||||
bootloader is specified. The current config-to-sxpr mapping
|
||||
ignores cmdline when bootloader is present.
|
||||
|
||||
Since the xend sub-driver is used with many xen toolstack versions,
|
||||
this patch takes conservative approach of adding an else block to
|
||||
existing !def->os.bootloader, and only appends sxpr if def->os.cmdline
|
||||
is non-NULL.
|
||||
|
||||
V2: Fix existing testcase broken by this patch and add new testcases
|
||||
|
||||
Index: libvirt-0.9.3/docs/schemas/domain.rng
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/docs/schemas/domain.rng
|
||||
+++ libvirt-0.9.3/docs/schemas/domain.rng
|
||||
@@ -543,9 +543,11 @@
|
||||
</define>
|
||||
<define name="osbootkernel">
|
||||
<interleave>
|
||||
- <element name="kernel">
|
||||
- <ref name="absFilePath"/>
|
||||
- </element>
|
||||
+ <optional>
|
||||
+ <element name="kernel">
|
||||
+ <ref name="absFilePath"/>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
<optional>
|
||||
<element name="initrd">
|
||||
<ref name="absFilePath"/>
|
||||
Index: libvirt-0.9.3/src/xenxs/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/src/xenxs/xen_sxpr.c
|
||||
+++ libvirt-0.9.3/src/xenxs/xen_sxpr.c
|
||||
@@ -2261,6 +2261,12 @@ xenFormatSxpr(virConnectPtr conn,
|
||||
}
|
||||
|
||||
virBufferAddLit(&buf, "))");
|
||||
+ } else {
|
||||
+ /* PV domains accept kernel cmdline args */
|
||||
+ if (def->os.cmdline) {
|
||||
+ virBufferEscapeSexpr(&buf, "(image (linux (args '%s')))",
|
||||
+ def->os.cmdline);
|
||||
+ }
|
||||
}
|
||||
|
||||
for (i = 0 ; i < def->ndisks ; i++)
|
||||
Index: libvirt-0.9.3/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.sexpr
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-0.9.3/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.sexpr
|
||||
@@ -0,0 +1,5 @@
|
||||
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)\
|
||||
+(uuid '596a5d2171f48fb2e068e2386a5c413e')(bootloader '/usr/bin/pygrub')\
|
||||
+(bootloader_args '-q')(image (linux (args 'xenfb.video=8,1280,1024')))\
|
||||
+(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')\
|
||||
+(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
|
||||
Index: libvirt-0.9.3/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-0.9.3/tests/sexpr2xmldata/sexpr2xml-pv-bootloader-cmdline.xml
|
||||
@@ -0,0 +1,27 @@
|
||||
+<domain type='xen' id='6'>
|
||||
+ <name>pvtest</name>
|
||||
+ <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
|
||||
+ <memory>430080</memory>
|
||||
+ <currentMemory>430080</currentMemory>
|
||||
+ <vcpu>2</vcpu>
|
||||
+ <bootloader>/usr/bin/pygrub</bootloader>
|
||||
+ <bootloader_args>-q</bootloader_args>
|
||||
+ <os>
|
||||
+ <type>linux</type>
|
||||
+ <cmdline>xenfb.video=8,1280,1024</cmdline>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>destroy</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <driver name='file'/>
|
||||
+ <source file='/root/some.img'/>
|
||||
+ <target dev='xvda' bus='xen'/>
|
||||
+ </disk>
|
||||
+ <console type='pty'>
|
||||
+ <target type='xen' port='0'/>
|
||||
+ </console>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
Index: libvirt-0.9.3/tests/sexpr2xmltest.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/sexpr2xmltest.c
|
||||
+++ libvirt-0.9.3/tests/sexpr2xmltest.c
|
||||
@@ -134,6 +134,7 @@ mymain(void)
|
||||
DO_TEST("pv-vfb-type-crash", "pv-vfb-type-crash", 3);
|
||||
DO_TEST("fv-autoport", "fv-autoport", 3);
|
||||
DO_TEST("pv-bootloader", "pv-bootloader", 1);
|
||||
+ DO_TEST("pv-bootloader-cmdline", "pv-bootloader-cmdline", 1);
|
||||
DO_TEST("pv-vcpus", "pv-vcpus", 1);
|
||||
|
||||
DO_TEST("disk-file", "disk-file", 2);
|
||||
Index: libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-disk-block-shareable.sexpr
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/xml2sexprdata/xml2sexpr-disk-block-shareable.sexpr
|
||||
+++ libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-disk-block-shareable.sexpr
|
||||
@@ -1,6 +1,7 @@
|
||||
(vm (name 'pvtest')(memory 384)(maxmem 512)(vcpus 1)\
|
||||
(uuid '49a0c6ff-c066-5392-6498-3632d093c2e7')(bootloader '/usr/bin/pygrub')\
|
||||
(on_poweroff 'destroy')(on_reboot 'restart')(on_crash 'restart')\
|
||||
+(image (linux (args 'ro root=/dev/VolGroup00/LogVol00')))\
|
||||
(device (tap (dev 'xvda')(uname 'tap:aio:/var/lib/xen/images/rhel5pv.img')\
|
||||
(mode 'w!')))(device (vif (mac '00:16:3e:23:9e:eb')(bridge 'xenbr0')\
|
||||
(script 'vif-bridge'))))\
|
||||
Index: libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.sexpr
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.sexpr
|
||||
@@ -0,0 +1,5 @@
|
||||
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)\
|
||||
+(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(bootloader '/usr/bin/pygrub')\
|
||||
+(bootloader_args '-q')(on_poweroff 'destroy')(on_reboot 'destroy')\
|
||||
+(on_crash 'destroy')(image (linux (args 'xenfb.video=8,1280,1024')))\
|
||||
+(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))\
|
||||
Index: libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-0.9.3/tests/xml2sexprdata/xml2sexpr-pv-bootloader-cmdline.xml
|
||||
@@ -0,0 +1,22 @@
|
||||
+<domain type='xen' id='15'>
|
||||
+ <name>pvtest</name>
|
||||
+ <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
|
||||
+ <bootloader>/usr/bin/pygrub</bootloader>
|
||||
+ <bootloader_args>-q</bootloader_args>
|
||||
+ <os>
|
||||
+ <type>linux</type>
|
||||
+ <cmdline>xenfb.video=8,1280,1024</cmdline>
|
||||
+ </os>
|
||||
+ <memory>430080</memory>
|
||||
+ <vcpu>2</vcpu>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>destroy</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <source file='/root/some.img'/>
|
||||
+ <target dev='xvda'/>
|
||||
+ </disk>
|
||||
+ <console tty='/dev/pts/4'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
Index: libvirt-0.9.3/tests/xml2sexprtest.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tests/xml2sexprtest.c
|
||||
+++ libvirt-0.9.3/tests/xml2sexprtest.c
|
||||
@@ -116,6 +116,7 @@ mymain(void)
|
||||
DO_TEST("pv-vfb-new", "pv-vfb-new", "pvtest", 3);
|
||||
DO_TEST("pv-vfb-new-auto", "pv-vfb-new-auto", "pvtest", 3);
|
||||
DO_TEST("pv-bootloader", "pv-bootloader", "pvtest", 1);
|
||||
+ DO_TEST("pv-bootloader-cmdline", "pv-bootloader-cmdline", "pvtest", 1);
|
||||
DO_TEST("pv-vcpus", "pv-vcpus", "pvtest", 1);
|
||||
|
||||
DO_TEST("disk-file", "disk-file", "pvtest", 2);
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7b83113a581b4e256245e49b6aa7bc99c0d85219ab5917cb1036301dcb810dcd
|
||||
size 10948358
|
3
libvirt-0.9.4.tar.bz2
Normal file
3
libvirt-0.9.4.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d0da7dedb7d36ddb452ec33ed24203fcdb3ca6b7284524190ac0b70c96a505ad
|
||||
size 11518513
|
@ -1,3 +1,18 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Aug 4 11:07:32 MDT 2011 - jfehlig@suse.com
|
||||
|
||||
- Update to libvirt 0.9.4
|
||||
- bandwidth QoS control
|
||||
- Add new API virDomainBlockPull*
|
||||
- save: new API to manipulate save file images
|
||||
- CPU bandwidth limits support
|
||||
- allow to send NMI and key event to guests
|
||||
- new API virDomainUndefineFlags
|
||||
- Implement code to attach to external QEMU instances
|
||||
- various missing python binding
|
||||
- bios: Add support for SGA
|
||||
- Numerous improvements and documentation / bug fixes
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jul 13 14:37:42 MDT 2011 - jfehlig@suse.de
|
||||
|
||||
|
28
libvirt.spec
28
libvirt.spec
@ -286,7 +286,7 @@ Url: http://libvirt.org/
|
||||
License: LGPLv2.1+
|
||||
Group: Development/Libraries/C and C++
|
||||
AutoReqProv: yes
|
||||
Version: 0.9.3
|
||||
Version: 0.9.4
|
||||
Release: 1
|
||||
Summary: A C toolkit to interract with the virtualization capabilities of Linux
|
||||
|
||||
@ -352,19 +352,6 @@ Source0: %{name}-%{version}.tar.bz2
|
||||
Source1: libvirtd.init
|
||||
Source2: libvirtd-relocation-server.fw
|
||||
# Upstream patches
|
||||
Patch0: c2ddd536-cert-key-order.patch
|
||||
Patch1: 3e5d48ef-rpc-1.patch
|
||||
Patch2: 927dfcf6-rpc-2.patch
|
||||
Patch3: 2c85644b-rpc-3.patch
|
||||
Patch4: afe8839f-rpc-4.patch
|
||||
Patch5: 3cfdc57b-rpc-5.patch
|
||||
Patch6: 7518ad75-remote-mem-leak.patch
|
||||
Patch7: a34e193f-statstest.patch
|
||||
Patch8: 41828514-skip-xen-tests.patch
|
||||
Patch9: eb314315-pv-kernel-cmdline.patch
|
||||
Patch10: 00d3c5a6-remove-dead-code.patch
|
||||
Patch11: b8adfcc6-fix-polkit0-build.patch
|
||||
Patch12: b2534529-unused-param.patch
|
||||
# Need to go upstream
|
||||
Patch100: xen-name-for-devid.patch
|
||||
Patch101: clone.patch
|
||||
@ -480,19 +467,6 @@ Authors:
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch100 -p1
|
||||
%patch101
|
||||
%patch102 -p1
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-0.9.3/daemon/libvirtd.conf
|
||||
Index: libvirt-0.9.4/daemon/libvirtd.conf
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-0.9.3/daemon/libvirtd.conf
|
||||
--- libvirt-0.9.4.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-0.9.4/daemon/libvirtd.conf
|
||||
@@ -18,8 +18,8 @@
|
||||
# It is necessary to setup a CA and issue server certificates before
|
||||
# using this capability.
|
||||
@ -28,11 +28,11 @@ Index: libvirt-0.9.3/daemon/libvirtd.conf
|
||||
|
||||
# Override the default mDNS advertizement name. This must be
|
||||
# unique on the immediate broadcast network.
|
||||
Index: libvirt-0.9.3/daemon/libvirtd.c
|
||||
Index: libvirt-0.9.4/daemon/libvirtd.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/libvirtd.c
|
||||
+++ libvirt-0.9.3/daemon/libvirtd.c
|
||||
@@ -877,7 +877,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
--- libvirt-0.9.4.orig/daemon/libvirtd.c
|
||||
+++ libvirt-0.9.4/daemon/libvirtd.c
|
||||
@@ -880,7 +880,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ Index: libvirt-0.9.3/daemon/libvirtd.c
|
||||
data->listen_tcp = 0;
|
||||
|
||||
if (!(data->tls_port = strdup(LIBVIRTD_TLS_PORT)))
|
||||
@@ -914,7 +914,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
@@ -917,7 +917,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
#endif
|
||||
data->auth_tls = REMOTE_AUTH_NONE;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: libvirt-0.9.3/tools/Makefile.am
|
||||
Index: libvirt-0.9.4/tools/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tools/Makefile.am
|
||||
+++ libvirt-0.9.3/tools/Makefile.am
|
||||
@@ -147,16 +147,17 @@ uninstall-local: uninstall-init
|
||||
--- libvirt-0.9.4.orig/tools/Makefile.am
|
||||
+++ libvirt-0.9.4/tools/Makefile.am
|
||||
@@ -152,16 +152,17 @@ uninstall-local: uninstall-init
|
||||
|
||||
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
install-init: libvirt-guests.init
|
||||
@ -26,10 +26,10 @@ Index: libvirt-0.9.3/tools/Makefile.am
|
||||
|
||||
BUILT_SOURCES += libvirt-guests.init
|
||||
|
||||
Index: libvirt-0.9.3/tools/libvirt-guests.sysconf
|
||||
Index: libvirt-0.9.4/tools/libvirt-guests.sysconf
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-0.9.3/tools/libvirt-guests.sysconf
|
||||
--- libvirt-0.9.4.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-0.9.4/tools/libvirt-guests.sysconf
|
||||
@@ -1,18 +1,28 @@
|
||||
+## Path: System/Virtualization/libvirt
|
||||
+
|
||||
@ -62,7 +62,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.sysconf
|
||||
# action taken on host shutdown
|
||||
# - suspend all running guests are suspended using virsh managedsave
|
||||
# - shutdown all running guests are asked to shutdown. Please be careful with
|
||||
@@ -21,7 +31,9 @@
|
||||
@@ -21,11 +31,15 @@
|
||||
# which just needs a long time to shutdown. When setting
|
||||
# ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a
|
||||
# value suitable for your guests.
|
||||
@ -74,10 +74,16 @@ Index: libvirt-0.9.3/tools/libvirt-guests.sysconf
|
||||
# number of seconds we're willing to wait for a guest to shut down
|
||||
-#SHUTDOWN_TIMEOUT=0
|
||||
+SHUTDOWN_TIMEOUT=120
|
||||
Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
|
||||
+## Type: integer
|
||||
+## Default: 0
|
||||
# If non-zero, try to bypass the file system cache when saving and
|
||||
# restoring guests, even though this may give slower operation for
|
||||
# some file systems.
|
||||
Index: libvirt-0.9.4/tools/libvirt-guests.init.sh
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/tools/libvirt-guests.init.sh
|
||||
+++ libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
--- libvirt-0.9.4.orig/tools/libvirt-guests.init.sh
|
||||
+++ libvirt-0.9.4/tools/libvirt-guests.init.sh
|
||||
@@ -4,10 +4,10 @@
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
@ -111,7 +117,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
# Source gettext library.
|
||||
# Make sure this file is recognized as having translations: _("dummy")
|
||||
. "@bindir@"/gettext.sh
|
||||
@@ -50,12 +49,10 @@ test -f "$sysconfdir"/sysconfig/libvirt-
|
||||
@@ -51,12 +50,10 @@ test -f "$sysconfdir"/sysconfig/libvirt-
|
||||
LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
|
||||
VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/subsys/libvirt-guests
|
||||
|
||||
@ -125,7 +131,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -77,12 +74,31 @@ run_virsh_c() {
|
||||
@@ -78,12 +75,31 @@ run_virsh_c() {
|
||||
( export LC_ALL=C; run_virsh "$@" )
|
||||
}
|
||||
|
||||
@ -158,7 +164,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -90,7 +106,7 @@ list_guests() {
|
||||
@@ -91,7 +107,7 @@ list_guests() {
|
||||
for id in $(echo "$list" | awk 'NR > 2 {print $1}'); do
|
||||
uuid=$(run_virsh_c "$uri" dominfo "$id" | awk '/^UUID:/{print $2}')
|
||||
if [ -z "$uuid" ]; then
|
||||
@ -167,7 +173,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
return 1
|
||||
fi
|
||||
uuids="$uuids $uuid"
|
||||
@@ -117,7 +133,7 @@ guest_is_on() {
|
||||
@@ -118,7 +134,7 @@ guest_is_on() {
|
||||
guest_running=false
|
||||
info=$(run_virsh_c "$uri" dominfo "$uuid")
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -176,7 +182,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -159,6 +175,12 @@ start() {
|
||||
@@ -162,6 +178,12 @@ start() {
|
||||
continue
|
||||
fi
|
||||
|
||||
@ -189,7 +195,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
eval_gettext "Resuming guests on \$uri URI..."; echo
|
||||
for guest in $list; do
|
||||
name=$(guest_name "$uri" "$guest")
|
||||
@@ -245,7 +267,7 @@ stop() {
|
||||
@@ -251,7 +273,7 @@ stop() {
|
||||
if [ $SHUTDOWN_TIMEOUT -le 0 ]; then
|
||||
gettext "Shutdown action requested but SHUTDOWN_TIMEOUT was not set"
|
||||
echo
|
||||
@ -198,7 +204,7 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
return
|
||||
fi
|
||||
fi
|
||||
@@ -315,14 +337,13 @@ gueststatus() {
|
||||
@@ -321,14 +343,13 @@ gueststatus() {
|
||||
rh_status() {
|
||||
if [ -f "$LISTFILE" ]; then
|
||||
gettext "stopped, with saved guests"; echo
|
||||
@ -214,17 +220,17 @@ Index: libvirt-0.9.3/tools/libvirt-guests.init.sh
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -366,4 +387,4 @@ case "$1" in
|
||||
@@ -372,4 +393,4 @@ case "$1" in
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
-exit $RETVAL
|
||||
+rc_exit
|
||||
Index: libvirt-0.9.3/daemon/Makefile.am
|
||||
Index: libvirt-0.9.4/daemon/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-0.9.3.orig/daemon/Makefile.am
|
||||
+++ libvirt-0.9.3/daemon/Makefile.am
|
||||
@@ -246,16 +246,12 @@ install-logrotate: $(LOGROTATE_CONFS)
|
||||
--- libvirt-0.9.4.orig/daemon/Makefile.am
|
||||
+++ libvirt-0.9.4/daemon/Makefile.am
|
||||
@@ -252,16 +252,12 @@ install-logrotate: $(LOGROTATE_CONFS)
|
||||
|
||||
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||
install-init: libvirtd.init
|
||||
|
@ -13,10 +13,10 @@ Date: Wed Jan 27 16:11:41 2010 -0700
|
||||
This approach allows removing a disk when domain is inactive. We
|
||||
obviously can't search xenstore when the domain is inactive.
|
||||
|
||||
Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
Index: libvirt-0.9.4/src/xen/xend_internal.c
|
||||
===================================================================
|
||||
--- libvirt-0.9.2.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-0.9.2/src/xen/xend_internal.c
|
||||
--- libvirt-0.9.4.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-0.9.4/src/xen/xend_internal.c
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
static int
|
||||
@ -25,7 +25,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
virDomainDeviceDefPtr dev,
|
||||
char *class,
|
||||
char *ref,
|
||||
@@ -2780,7 +2781,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
@@ -2807,7 +2808,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
@ -34,7 +34,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
/* device doesn't exist, define it */
|
||||
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
||||
"config", sexpr, NULL);
|
||||
@@ -2903,7 +2904,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||
@@ -2928,7 +2929,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
@ -43,7 +43,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("requested device does not exist"));
|
||||
goto cleanup;
|
||||
@@ -2996,7 +2997,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||
@@ -3023,7 +3024,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||
def, xml, VIR_DOMAIN_XML_INACTIVE)))
|
||||
goto cleanup;
|
||||
|
||||
@ -52,7 +52,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
goto cleanup;
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
@@ -3961,6 +3962,7 @@ struct xenUnifiedDriver xenDaemonDriver
|
||||
@@ -3979,6 +3980,7 @@ struct xenUnifiedDriver xenDaemonDriver
|
||||
*/
|
||||
static int
|
||||
virDomainXMLDevID(virDomainPtr domain,
|
||||
@ -60,7 +60,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
virDomainDeviceDefPtr dev,
|
||||
char *class,
|
||||
char *ref,
|
||||
@@ -3969,8 +3971,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -3987,8 +3989,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||
char *xref;
|
||||
char *tmp;
|
||||
@ -73,7 +73,7 @@ Index: libvirt-0.9.2/src/xen/xend_internal.c
|
||||
if (dev->data.disk->driverName &&
|
||||
STREQ(dev->data.disk->driverName, "tap"))
|
||||
strcpy(class, "tap");
|
||||
@@ -3980,19 +3986,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -3998,19 +4004,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
else
|
||||
strcpy(class, "vbd");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user