diff --git a/00d3c5a6-remove-dead-code.patch b/00d3c5a6-remove-dead-code.patch new file mode 100644 index 0000000..5a5d1da --- /dev/null +++ b/00d3c5a6-remove-dead-code.patch @@ -0,0 +1,52 @@ +commit 00d3c5a6032e69a3c853380ca2d8b0764d15e306 +Author: Jim Fehlig +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 + +-# if HAVE_POLKIT0 +-# include +-# endif +- + # include + # include + # 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 diff --git a/2c85644b-rpc-3.patch b/2c85644b-rpc-3.patch new file mode 100644 index 0000000..83d4ddb --- /dev/null +++ b/2c85644b-rpc-3.patch @@ -0,0 +1,44 @@ +commit 2c85644b0b51fbe5b6244e6773531af29933a727 +Author: Daniel P. Berrange +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 && diff --git a/3cfdc57b-rpc-5.patch b/3cfdc57b-rpc-5.patch new file mode 100644 index 0000000..c38f379 --- /dev/null +++ b/3cfdc57b-rpc-5.patch @@ -0,0 +1,125 @@ +commit 3cfdc57b8553cae95b8849bbcb7a4b227085cec1 +Author: Daniel P. Berrange +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); diff --git a/3e5d48ef-rpc-1.patch b/3e5d48ef-rpc-1.patch new file mode 100644 index 0000000..57be2c6 --- /dev/null +++ b/3e5d48ef-rpc-1.patch @@ -0,0 +1,48 @@ +commit 3e5d48ef33224a915bb2afd7933fbec3c2b232ba +Author: Daniel P. Berrange +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) { diff --git a/41828514-skip-xen-tests.patch b/41828514-skip-xen-tests.patch new file mode 100644 index 0000000..6832e9b --- /dev/null +++ b/41828514-skip-xen-tests.patch @@ -0,0 +1,141 @@ +commit 41828514bb91953e9a47453d5d4e667ccfd74b71 +Author: Jim Fehlig +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 + + #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 + */ diff --git a/7518ad75-remote-mem-leak.patch b/7518ad75-remote-mem-leak.patch new file mode 100644 index 0000000..6fa7324 --- /dev/null +++ b/7518ad75-remote-mem-leak.patch @@ -0,0 +1,115 @@ +commit 7518ad753fbad5ab0991b7bb189a69db0975c6e8 +Author: Alex Jia +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 + Ruben Kerkhof + Scott Moser ++ Alex Jia + + [....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; diff --git a/927dfcf6-rpc-2.patch b/927dfcf6-rpc-2.patch new file mode 100644 index 0000000..bdbae79 --- /dev/null +++ b/927dfcf6-rpc-2.patch @@ -0,0 +1,51 @@ +commit 927dfcf693165f5b08efba0d031d4cc43e6f9c37 +Author: Daniel P. Berrange +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; + } + diff --git a/a34e193f-statstest.patch b/a34e193f-statstest.patch new file mode 100644 index 0000000..87b190c --- /dev/null +++ b/a34e193f-statstest.patch @@ -0,0 +1,19 @@ +commit a34e193fb7ac887bb25ac47450bae14dbc829cc8 +Author: Jim Fehlig +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; diff --git a/afe8839f-rpc-4.patch b/afe8839f-rpc-4.patch new file mode 100644 index 0000000..0b08e87 --- /dev/null +++ b/afe8839f-rpc-4.patch @@ -0,0 +1,43 @@ +commit afe8839f011c8c54c429f33ca0e6515fceb4e0fd +Author: Daniel P. Berrange +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 diff --git a/b2534529-unused-param.patch b/b2534529-unused-param.patch new file mode 100644 index 0000000..6387db7 --- /dev/null +++ b/b2534529-unused-param.patch @@ -0,0 +1,22 @@ +commit b25345294201031656d4f0059153bc683182b5e4 +Author: Matthias Bolte +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; diff --git a/b8adfcc6-fix-polkit0-build.patch b/b8adfcc6-fix-polkit0-build.patch new file mode 100644 index 0000000..45b6653 --- /dev/null +++ b/b8adfcc6-fix-polkit0-build.patch @@ -0,0 +1,319 @@ +commit b8adfcc60ccf4a2fabcac3692a958d2c063d8336 +Author: Jim Fehlig +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 ++#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 ++# if HAVE_DBUS ++# include ++# 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, diff --git a/c2ddd536-cert-key-order.patch b/c2ddd536-cert-key-order.patch new file mode 100644 index 0000000..1589fa3 --- /dev/null +++ b/c2ddd536-cert-key-order.patch @@ -0,0 +1,43 @@ +commit c2ddd536145f36e400a93a1c77f9f0044bfdf068 +Author: Daniel P. Berrange +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); + } + diff --git a/eb314315-pv-kernel-cmdline.patch b/eb314315-pv-kernel-cmdline.patch new file mode 100644 index 0000000..f0d69c7 --- /dev/null +++ b/eb314315-pv-kernel-cmdline.patch @@ -0,0 +1,168 @@ +commit eb3143154e4ecedf3a97445b3b90bd135a564431 +Author: Jim Fehlig +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 @@ + + + +- +- +- ++ ++ ++ ++ ++ + + + +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 @@ ++ ++ pvtest ++ 596a5d21-71f4-8fb2-e068-e2386a5c413e ++ 430080 ++ 430080 ++ 2 ++ /usr/bin/pygrub ++ -q ++ ++ linux ++ xenfb.video=8,1280,1024 ++ ++ ++ destroy ++ destroy ++ destroy ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +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 @@ ++ ++ pvtest ++ 596a5d2171f48fb2e068e2386a5c413e ++ /usr/bin/pygrub ++ -q ++ ++ linux ++ xenfb.video=8,1280,1024 ++ ++ 430080 ++ 2 ++ destroy ++ destroy ++ destroy ++ ++ ++ ++ ++ ++ ++ ++ +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); diff --git a/libvirt.changes b/libvirt.changes index e6ab91b..686780f 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Wed Jul 13 14:37:42 MDT 2011 - jfehlig@suse.de + +- Add some upstream patches to fix memory leaks and some bugs + in new rpc code + c2ddd536-cert-key-order.patch 3e5d48ef-rpc-1.patch + 927dfcf6-rpc-2.patch 2c85644b-rpc-3.patch afe8839f-rpc-4.patch + 3cfdc57b-rpc-5.patch 7518ad75-remote-mem-leak.patch + a34e193f-statstest.patch 41828514-skip-xen-tests.patch + eb314315-pv-kernel-cmdline.patch 00d3c5a6-remove-dead-code.patch + b8adfcc6-fix-polkit0-build.patch b2534529-unused-param.patch + ------------------------------------------------------------------- Tue Jul 5 14:15:22 MDT 2011 - jfehlig@suse.de diff --git a/libvirt.spec b/libvirt.spec index 9cf6fd2..bf197dd 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -352,6 +352,19 @@ 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 @@ -467,6 +480,19 @@ 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 diff --git a/libvirtd-defaults.patch b/libvirtd-defaults.patch index a982589..76a9e7d 100644 --- a/libvirtd-defaults.patch +++ b/libvirtd-defaults.patch @@ -32,7 +32,7 @@ Index: libvirt-0.9.3/daemon/libvirtd.c =================================================================== --- libvirt-0.9.3.orig/daemon/libvirtd.c +++ libvirt-0.9.3/daemon/libvirtd.c -@@ -897,7 +897,7 @@ daemonConfigNew(bool privileged ATTRIBUT +@@ -877,7 +877,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))) -@@ -934,7 +934,7 @@ daemonConfigNew(bool privileged ATTRIBUT +@@ -914,7 +914,7 @@ daemonConfigNew(bool privileged ATTRIBUT #endif data->auth_tls = REMOTE_AUTH_NONE;