SHA256
1
0
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:
James Fehlig 2011-08-04 17:12:20 +00:00 committed by Git OBS Bridge
parent 775756fc1a
commit a4696e813d
21 changed files with 72 additions and 1267 deletions

View File

@ -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

View File

@ -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 &&

View File

@ -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);

View File

@ -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) {

View File

@ -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
*/

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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,

View File

@ -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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d0da7dedb7d36ddb452ec33ed24203fcdb3ca6b7284524190ac0b70c96a505ad
size 11518513

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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");