Compare commits
72 Commits
libvirt-0_
...
libvirt-0_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
576c952d6c | ||
|
|
6cba2d7c9e | ||
|
|
824ac1932d | ||
|
|
2457ff7037 | ||
|
|
d8ce9b00e6 | ||
|
|
5238691972 | ||
|
|
49bd0fe0f6 | ||
|
|
f57c13f43b | ||
|
|
b4531a6202 | ||
|
|
0685aa3535 | ||
|
|
b395a39f7b | ||
|
|
fdd7e87fe3 | ||
|
|
f06c387ab5 | ||
|
|
5ad8bc8190 | ||
|
|
31802de821 | ||
|
|
cc39758e17 | ||
|
|
55fabd69c0 | ||
|
|
b2a1a0e9ba | ||
|
|
cbe377ed29 | ||
|
|
06a21e388f | ||
|
|
d1a886ab31 | ||
|
|
c70baa5133 | ||
|
|
52b4d91272 | ||
|
|
338630edc8 | ||
|
|
a05e64b718 | ||
|
|
c003690dfc | ||
|
|
2cac8ea133 | ||
|
|
deefad73a9 | ||
|
|
f6cef943a9 | ||
|
|
7a6f0752c1 | ||
|
|
36d558635e | ||
|
|
98bceee6b1 | ||
|
|
4e70e5049f | ||
|
|
e66ceb7f97 | ||
|
|
23d5b99123 | ||
|
|
df8a62cdc8 | ||
|
|
8e36286f00 | ||
|
|
cd0f44cfff | ||
|
|
dcd808aefc | ||
|
|
8713d4b7ef | ||
|
|
68efefa919 | ||
|
|
1c5afbb774 | ||
|
|
e61694fd1d | ||
|
|
608f915ea7 | ||
|
|
b28edd6eab | ||
|
|
327fe785ba | ||
|
|
5c1d884231 | ||
|
|
54c7c9997c | ||
|
|
dec47cc4eb | ||
|
|
ecaf0eb615 | ||
|
|
ea6b32b5e4 | ||
|
|
313e00f3ac | ||
|
|
b3a53e18a9 | ||
|
|
24467d1235 | ||
|
|
fdaa69f5e3 | ||
|
|
cf2cd869d9 | ||
|
|
f2572ab2b4 | ||
|
|
90a17a6e65 | ||
|
|
9f2e4f2b21 | ||
|
|
bc485ef21f | ||
|
|
0d3a7da407 | ||
|
|
f68d725fc4 | ||
|
|
044e9b5c7b | ||
|
|
96a9b8bc2e | ||
|
|
66a051f485 | ||
|
|
609ab7cda8 | ||
|
|
0caeb23111 | ||
|
|
7599107322 | ||
|
|
861e11f3e4 | ||
|
|
2ea97c32dc | ||
|
|
cb54686f58 | ||
|
|
bd474aff47 |
19
.cvsignore
19
.cvsignore
@@ -3,3 +3,22 @@ libvirt-0.0.4.tar.gz
|
|||||||
libvirt-0.0.5.tar.gz
|
libvirt-0.0.5.tar.gz
|
||||||
libvirt-0.0.6.tar.gz
|
libvirt-0.0.6.tar.gz
|
||||||
libvirt-0.1.0.tar.gz
|
libvirt-0.1.0.tar.gz
|
||||||
|
libvirt-0.1.2.tar.gz
|
||||||
|
libvirt-0.1.1.tar.gz
|
||||||
|
libvirt-0.1.3.tar.gz
|
||||||
|
libvirt-0.1.4.tar.gz
|
||||||
|
libvirt-0.1.5.tar.gz
|
||||||
|
libvirt-0.1.6.tar.gz
|
||||||
|
libvirt-0.1.7.tar.gz
|
||||||
|
libvirt-0.1.8.tar.gz
|
||||||
|
libvirt-0.1.9.tar.gz
|
||||||
|
libvirt-0.1.10.tar.gz
|
||||||
|
libvirt-0.1.11.tar.gz
|
||||||
|
libvirt-0.2.0.tar.gz
|
||||||
|
libvirt-0.2.1.tar.gz
|
||||||
|
libvirt-0.2.2.tar.gz
|
||||||
|
libvirt-0.2.3.tar.gz
|
||||||
|
libvirt-0.3.0.tar.gz
|
||||||
|
libvirt-0.3.1.tar.gz
|
||||||
|
libvirt-0.3.2.tar.gz
|
||||||
|
libvirt-0.3.3.tar.gz
|
||||||
|
|||||||
17
Makefile
17
Makefile
@@ -3,4 +3,19 @@
|
|||||||
NAME := libvirt
|
NAME := libvirt
|
||||||
SPECFILE = $(firstword $(wildcard *.spec))
|
SPECFILE = $(firstword $(wildcard *.spec))
|
||||||
|
|
||||||
include ../common/Makefile.common
|
define find-makefile-common
|
||||||
|
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||||
|
endef
|
||||||
|
|
||||||
|
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||||
|
|
||||||
|
ifeq ($(MAKEFILE_COMMON),)
|
||||||
|
# attempt a checkout
|
||||||
|
define checkout-makefile-common
|
||||||
|
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||||
|
endef
|
||||||
|
|
||||||
|
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(MAKEFILE_COMMON)
|
||||||
|
|||||||
48
libvirt-0.4.1-daemon-startup.patch
Normal file
48
libvirt-0.4.1-daemon-startup.patch
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
diff -rup libvirt-0.4.1.orig/qemud/qemud.c libvirt-0.4.1.new/qemud/qemud.c
|
||||||
|
--- libvirt-0.4.1.orig/qemud/qemud.c 2008-03-10 17:31:09.000000000 -0400
|
||||||
|
+++ libvirt-0.4.1.new/qemud/qemud.c 2008-03-10 17:31:36.000000000 -0400
|
||||||
|
@@ -393,7 +393,7 @@ static int qemudGoDaemon(void) {
|
||||||
|
case -1:
|
||||||
|
return -1;
|
||||||
|
default:
|
||||||
|
- return nextpid;
|
||||||
|
+ _exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
@@ -418,8 +418,7 @@ static int qemudGoDaemon(void) {
|
||||||
|
status != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- return pid;
|
||||||
|
+ _exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2116,16 +2115,12 @@ int main(int argc, char **argv) {
|
||||||
|
goto error1;
|
||||||
|
|
||||||
|
if (godaemon) {
|
||||||
|
- int pid;
|
||||||
|
openlog("libvirtd", 0, 0);
|
||||||
|
- pid = qemudGoDaemon();
|
||||||
|
- if (pid < 0) {
|
||||||
|
+ if (qemudGoDaemon() < 0) {
|
||||||
|
qemudLog(QEMUD_ERR, _("Failed to fork as daemon: %s"),
|
||||||
|
strerror(errno));
|
||||||
|
goto error1;
|
||||||
|
}
|
||||||
|
- if (pid > 0)
|
||||||
|
- goto out;
|
||||||
|
|
||||||
|
/* Choose the name of the PID file. */
|
||||||
|
if (!pid_file) {
|
||||||
|
@@ -2172,7 +2167,6 @@ int main(int argc, char **argv) {
|
||||||
|
if (godaemon)
|
||||||
|
closelog();
|
||||||
|
|
||||||
|
- out:
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
error2:
|
||||||
400
libvirt-0.4.1-polkit.patch
Normal file
400
libvirt-0.4.1-polkit.patch
Normal file
@@ -0,0 +1,400 @@
|
|||||||
|
diff -rup libvirt-0.4.1.orig/configure.in libvirt-0.4.1.new/configure.in
|
||||||
|
--- libvirt-0.4.1.orig/configure.in 2008-03-03 09:14:19.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/configure.in 2008-04-03 15:37:49.000000000 -0400
|
||||||
|
@@ -450,10 +450,6 @@ if test "x$with_polkit" = "xyes" -o "x$w
|
||||||
|
CFLAGS="$old_CFLAGS"
|
||||||
|
LDFLAGS="$old_LDFLAGS"
|
||||||
|
|
||||||
|
- AC_PATH_PROG(POLKIT_GRANT, polkit-grant)
|
||||||
|
- if test "x$POLKIT_GRANT" != "x"; then
|
||||||
|
- AC_DEFINE_UNQUOTED([POLKIT_GRANT],["$POLKIT_GRANT"],[Location of polkit-grant program])
|
||||||
|
- fi
|
||||||
|
AC_PATH_PROG(POLKIT_AUTH, polkit-auth)
|
||||||
|
if test "x$POLKIT_AUTH" != "x"; then
|
||||||
|
AC_DEFINE_UNQUOTED([POLKIT_AUTH],["$POLKIT_AUTH"],[Location of polkit-auth program])
|
||||||
|
diff -rup libvirt-0.4.1.orig/qemud/internal.h libvirt-0.4.1.new/qemud/internal.h
|
||||||
|
--- libvirt-0.4.1.orig/qemud/internal.h 2008-01-24 12:07:43.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/qemud/internal.h 2008-04-03 15:38:03.000000000 -0400
|
||||||
|
@@ -179,6 +179,9 @@ void qemudLog(int priority, const char *
|
||||||
|
void remoteDispatchClientRequest (struct qemud_server *server,
|
||||||
|
struct qemud_client *client);
|
||||||
|
|
||||||
|
+#if HAVE_POLKIT
|
||||||
|
+int qemudGetSocketIdentity(int fd, uid_t *uid, pid_t *pid);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff -rup libvirt-0.4.1.orig/qemud/qemud.c libvirt-0.4.1.new/qemud/qemud.c
|
||||||
|
--- libvirt-0.4.1.orig/qemud/qemud.c 2008-04-03 15:39:15.000000000 -0400
|
||||||
|
+++ libvirt-0.4.1.new/qemud/qemud.c 2008-04-03 15:38:03.000000000 -0400
|
||||||
|
@@ -1040,6 +1040,28 @@ remoteCheckAccess (struct qemud_client *
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if HAVE_POLKIT
|
||||||
|
+int qemudGetSocketIdentity(int fd, uid_t *uid, pid_t *pid) {
|
||||||
|
+#ifdef SO_PEERCRED
|
||||||
|
+ struct ucred cr;
|
||||||
|
+ unsigned int cr_len = sizeof (cr);
|
||||||
|
+
|
||||||
|
+ if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) < 0) {
|
||||||
|
+ qemudLog(QEMUD_ERR, _("Failed to verify client credentials: %s"),
|
||||||
|
+ strerror(errno));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *pid = cr.pid;
|
||||||
|
+ *uid = cr.uid;
|
||||||
|
+#else
|
||||||
|
+ /* XXX Many more OS support UNIX socket credentials we could port to. See dbus ....*/
|
||||||
|
+#error "UNIX socket credentials not supported/implemented on this platform yet..."
|
||||||
|
+#endif
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket *sock) {
|
||||||
|
int fd;
|
||||||
|
struct sockaddr_storage addr;
|
||||||
|
@@ -1075,6 +1097,26 @@ static int qemudDispatchServer(struct qe
|
||||||
|
memcpy (&client->addr, &addr, sizeof addr);
|
||||||
|
client->addrlen = addrlen;
|
||||||
|
|
||||||
|
+#if HAVE_POLKIT
|
||||||
|
+ /* Only do policy checks for non-root - allow root user
|
||||||
|
+ through with no checks, as a fail-safe - root can easily
|
||||||
|
+ change policykit policy anyway, so its pointless trying
|
||||||
|
+ to restrict root */
|
||||||
|
+ if (client->auth == REMOTE_AUTH_POLKIT) {
|
||||||
|
+ uid_t uid;
|
||||||
|
+ pid_t pid;
|
||||||
|
+
|
||||||
|
+ if (qemudGetSocketIdentity(client->fd, &uid, &pid) < 0)
|
||||||
|
+ goto cleanup;
|
||||||
|
+
|
||||||
|
+ /* Cient is running as root, so disable auth */
|
||||||
|
+ if (uid == 0) {
|
||||||
|
+ qemudLog(QEMUD_INFO, _("Turn off polkit auth for privileged client %d"), pid);
|
||||||
|
+ client->auth = REMOTE_AUTH_NONE;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
if (client->type != QEMUD_SOCK_TYPE_TLS) {
|
||||||
|
client->mode = QEMUD_MODE_RX_HEADER;
|
||||||
|
client->bufferLength = REMOTE_MESSAGE_HEADER_XDR_LEN;
|
||||||
|
diff -rup libvirt-0.4.1.orig/qemud/remote.c libvirt-0.4.1.new/qemud/remote.c
|
||||||
|
--- libvirt-0.4.1.orig/qemud/remote.c 2008-02-29 11:23:17.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/qemud/remote.c 2008-04-03 15:38:03.000000000 -0400
|
||||||
|
@@ -2564,27 +2564,6 @@ remoteDispatchAuthSaslStep (struct qemud
|
||||||
|
|
||||||
|
|
||||||
|
#if HAVE_POLKIT
|
||||||
|
-static int qemudGetSocketIdentity(int fd, uid_t *uid, pid_t *pid) {
|
||||||
|
-#ifdef SO_PEERCRED
|
||||||
|
- struct ucred cr;
|
||||||
|
- unsigned int cr_len = sizeof (cr);
|
||||||
|
-
|
||||||
|
- if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) < 0) {
|
||||||
|
- qemudLog(QEMUD_ERR, _("Failed to verify client credentials: %s"),
|
||||||
|
- strerror(errno));
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- *pid = cr.pid;
|
||||||
|
- *uid = cr.uid;
|
||||||
|
-#else
|
||||||
|
- /* XXX Many more OS support UNIX socket credentials we could port to. See dbus ....*/
|
||||||
|
-#error "UNIX socket credentials not supported/implemented on this platform yet..."
|
||||||
|
-#endif
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
static int
|
||||||
|
remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||||
|
struct qemud_client *client,
|
||||||
|
@@ -2594,6 +2573,15 @@ remoteDispatchAuthPolkit (struct qemud_s
|
||||||
|
{
|
||||||
|
pid_t callerPid;
|
||||||
|
uid_t callerUid;
|
||||||
|
+ PolKitCaller *pkcaller = NULL;
|
||||||
|
+ PolKitAction *pkaction = NULL;
|
||||||
|
+ PolKitContext *pkcontext = NULL;
|
||||||
|
+ PolKitError *pkerr = NULL;
|
||||||
|
+ PolKitResult pkresult;
|
||||||
|
+ DBusError err;
|
||||||
|
+ const char *action = client->readonly ?
|
||||||
|
+ "org.libvirt.unix.monitor" :
|
||||||
|
+ "org.libvirt.unix.manage";
|
||||||
|
|
||||||
|
REMOTE_DEBUG("Start PolicyKit auth %d", client->fd);
|
||||||
|
if (client->auth != REMOTE_AUTH_POLKIT) {
|
||||||
|
@@ -2609,98 +2597,78 @@ remoteDispatchAuthPolkit (struct qemud_s
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Only do policy checks for non-root - allow root user
|
||||||
|
- through with no checks, as a fail-safe - root can easily
|
||||||
|
- change policykit policy anyway, so its pointless trying
|
||||||
|
- to restrict root */
|
||||||
|
- if (callerUid == 0) {
|
||||||
|
- qemudLog(QEMUD_INFO, _("Allowing PID %d running as root"), callerPid);
|
||||||
|
- ret->complete = 1;
|
||||||
|
- client->auth = REMOTE_AUTH_NONE;
|
||||||
|
- } else {
|
||||||
|
- PolKitCaller *pkcaller = NULL;
|
||||||
|
- PolKitAction *pkaction = NULL;
|
||||||
|
- PolKitContext *pkcontext = NULL;
|
||||||
|
- PolKitError *pkerr = NULL;
|
||||||
|
- PolKitResult pkresult;
|
||||||
|
- DBusError err;
|
||||||
|
- const char *action = client->readonly ?
|
||||||
|
- "org.libvirt.unix.monitor" :
|
||||||
|
- "org.libvirt.unix.manage";
|
||||||
|
-
|
||||||
|
- qemudLog(QEMUD_INFO, _("Checking PID %d running as %d"),
|
||||||
|
- callerPid, callerUid);
|
||||||
|
- dbus_error_init(&err);
|
||||||
|
- if (!(pkcaller = polkit_caller_new_from_pid(server->sysbus,
|
||||||
|
- callerPid, &err))) {
|
||||||
|
- qemudLog(QEMUD_ERR, _("Failed to lookup policy kit caller: %s"),
|
||||||
|
- err.message);
|
||||||
|
- dbus_error_free(&err);
|
||||||
|
- remoteDispatchFailAuth(client, req);
|
||||||
|
- return -2;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (!(pkaction = polkit_action_new())) {
|
||||||
|
- qemudLog(QEMUD_ERR, _("Failed to create polkit action %s\n"),
|
||||||
|
- strerror(errno));
|
||||||
|
- polkit_caller_unref(pkcaller);
|
||||||
|
- remoteDispatchFailAuth(client, req);
|
||||||
|
- return -2;
|
||||||
|
- }
|
||||||
|
- polkit_action_set_action_id(pkaction, action);
|
||||||
|
-
|
||||||
|
- if (!(pkcontext = polkit_context_new()) ||
|
||||||
|
- !polkit_context_init(pkcontext, &pkerr)) {
|
||||||
|
- qemudLog(QEMUD_ERR, _("Failed to create polkit context %s\n"),
|
||||||
|
- (pkerr ? polkit_error_get_error_message(pkerr)
|
||||||
|
- : strerror(errno)));
|
||||||
|
- if (pkerr)
|
||||||
|
- polkit_error_free(pkerr);
|
||||||
|
- polkit_caller_unref(pkcaller);
|
||||||
|
- polkit_action_unref(pkaction);
|
||||||
|
- dbus_error_free(&err);
|
||||||
|
- remoteDispatchFailAuth(client, req);
|
||||||
|
- return -2;
|
||||||
|
- }
|
||||||
|
+ qemudLog(QEMUD_INFO, _("Checking PID %d running as %d"),
|
||||||
|
+ callerPid, callerUid);
|
||||||
|
+ dbus_error_init(&err);
|
||||||
|
+ if (!(pkcaller = polkit_caller_new_from_pid(server->sysbus,
|
||||||
|
+ callerPid, &err))) {
|
||||||
|
+ qemudLog(QEMUD_ERR, _("Failed to lookup policy kit caller: %s"),
|
||||||
|
+ err.message);
|
||||||
|
+ dbus_error_free(&err);
|
||||||
|
+ remoteDispatchFailAuth(client, req);
|
||||||
|
+ return -2;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!(pkaction = polkit_action_new())) {
|
||||||
|
+ qemudLog(QEMUD_ERR, _("Failed to create polkit action %s\n"),
|
||||||
|
+ strerror(errno));
|
||||||
|
+ polkit_caller_unref(pkcaller);
|
||||||
|
+ remoteDispatchFailAuth(client, req);
|
||||||
|
+ return -2;
|
||||||
|
+ }
|
||||||
|
+ polkit_action_set_action_id(pkaction, action);
|
||||||
|
+
|
||||||
|
+ if (!(pkcontext = polkit_context_new()) ||
|
||||||
|
+ !polkit_context_init(pkcontext, &pkerr)) {
|
||||||
|
+ qemudLog(QEMUD_ERR, _("Failed to create polkit context %s\n"),
|
||||||
|
+ (pkerr ? polkit_error_get_error_message(pkerr)
|
||||||
|
+ : strerror(errno)));
|
||||||
|
+ if (pkerr)
|
||||||
|
+ polkit_error_free(pkerr);
|
||||||
|
+ polkit_caller_unref(pkcaller);
|
||||||
|
+ polkit_action_unref(pkaction);
|
||||||
|
+ dbus_error_free(&err);
|
||||||
|
+ remoteDispatchFailAuth(client, req);
|
||||||
|
+ return -2;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
#if HAVE_POLKIT_CONTEXT_IS_CALLER_AUTHORIZED
|
||||||
|
- pkresult = polkit_context_is_caller_authorized(pkcontext,
|
||||||
|
- pkaction,
|
||||||
|
- pkcaller,
|
||||||
|
- 0,
|
||||||
|
- &pkerr);
|
||||||
|
- if (pkerr && polkit_error_is_set(pkerr)) {
|
||||||
|
- qemudLog(QEMUD_ERR,
|
||||||
|
- _("Policy kit failed to check authorization %d %s"),
|
||||||
|
- polkit_error_get_error_code(pkerr),
|
||||||
|
- polkit_error_get_error_message(pkerr));
|
||||||
|
- remoteDispatchFailAuth(client, req);
|
||||||
|
- return -2;
|
||||||
|
- }
|
||||||
|
+ pkresult = polkit_context_is_caller_authorized(pkcontext,
|
||||||
|
+ pkaction,
|
||||||
|
+ pkcaller,
|
||||||
|
+ 0,
|
||||||
|
+ &pkerr);
|
||||||
|
+ if (pkerr && polkit_error_is_set(pkerr)) {
|
||||||
|
+ qemudLog(QEMUD_ERR,
|
||||||
|
+ _("Policy kit failed to check authorization %d %s"),
|
||||||
|
+ polkit_error_get_error_code(pkerr),
|
||||||
|
+ polkit_error_get_error_message(pkerr));
|
||||||
|
+ remoteDispatchFailAuth(client, req);
|
||||||
|
+ return -2;
|
||||||
|
+ }
|
||||||
|
#else
|
||||||
|
- pkresult = polkit_context_can_caller_do_action(pkcontext,
|
||||||
|
- pkaction,
|
||||||
|
- pkcaller);
|
||||||
|
+ pkresult = polkit_context_can_caller_do_action(pkcontext,
|
||||||
|
+ pkaction,
|
||||||
|
+ pkcaller);
|
||||||
|
#endif
|
||||||
|
- polkit_context_unref(pkcontext);
|
||||||
|
- polkit_caller_unref(pkcaller);
|
||||||
|
- polkit_action_unref(pkaction);
|
||||||
|
- if (pkresult != POLKIT_RESULT_YES) {
|
||||||
|
- qemudLog(QEMUD_ERR,
|
||||||
|
- _("Policy kit denied action %s from pid %d, uid %d,"
|
||||||
|
- " result: %s\n"),
|
||||||
|
- action, callerPid, callerUid,
|
||||||
|
- polkit_result_to_string_representation(pkresult));
|
||||||
|
- remoteDispatchFailAuth(client, req);
|
||||||
|
- return -2;
|
||||||
|
- }
|
||||||
|
- qemudLog(QEMUD_INFO,
|
||||||
|
- _("Policy allowed action %s from pid %d, uid %d, result %s"),
|
||||||
|
+ polkit_context_unref(pkcontext);
|
||||||
|
+ polkit_caller_unref(pkcaller);
|
||||||
|
+ polkit_action_unref(pkaction);
|
||||||
|
+ if (pkresult != POLKIT_RESULT_YES) {
|
||||||
|
+ qemudLog(QEMUD_ERR,
|
||||||
|
+ _("Policy kit denied action %s from pid %d, uid %d,"
|
||||||
|
+ " result: %s\n"),
|
||||||
|
action, callerPid, callerUid,
|
||||||
|
polkit_result_to_string_representation(pkresult));
|
||||||
|
- ret->complete = 1;
|
||||||
|
- client->auth = REMOTE_AUTH_NONE;
|
||||||
|
+ remoteDispatchFailAuth(client, req);
|
||||||
|
+ return -2;
|
||||||
|
}
|
||||||
|
+ qemudLog(QEMUD_INFO,
|
||||||
|
+ _("Policy allowed action %s from pid %d, uid %d, result %s"),
|
||||||
|
+ action, callerPid, callerUid,
|
||||||
|
+ polkit_result_to_string_representation(pkresult));
|
||||||
|
+ ret->complete = 1;
|
||||||
|
+ client->auth = REMOTE_AUTH_NONE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
diff -rup libvirt-0.4.1.orig/src/libvirt.c libvirt-0.4.1.new/src/libvirt.c
|
||||||
|
--- libvirt-0.4.1.orig/src/libvirt.c 2008-02-26 10:37:43.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/src/libvirt.c 2008-04-03 15:38:47.000000000 -0400
|
||||||
|
@@ -19,6 +19,9 @@
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <assert.h>
|
||||||
|
+#ifdef HAVE_SYS_WAIT_H
|
||||||
|
+#include <sys/wait.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include <libxml/parser.h>
|
||||||
|
#include <libxml/xpath.h>
|
||||||
|
@@ -66,6 +69,39 @@ static int initialized = 0;
|
||||||
|
int debugFlag = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if defined(POLKIT_AUTH)
|
||||||
|
+static int virConnectAuthGainPolkit(const char *privilege) {
|
||||||
|
+ const char *const args[] = {
|
||||||
|
+ POLKIT_AUTH, "--obtain", privilege, NULL
|
||||||
|
+ };
|
||||||
|
+ int childpid, status, ret;
|
||||||
|
+
|
||||||
|
+ /* Root has all rights */
|
||||||
|
+ if (getuid() == 0)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if ((childpid = fork()) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (!childpid) {
|
||||||
|
+ execvp(args[0], (char **)args);
|
||||||
|
+ _exit(-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ while ((ret = waitpid(childpid, &status, 0) == -1) && errno == EINTR);
|
||||||
|
+ if (ret == -1) {
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!WIFEXITED(status) ||
|
||||||
|
+ (WEXITSTATUS(status) != 0 && WEXITSTATUS(status) != 1)) {
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
static int virConnectAuthCallbackDefault(virConnectCredentialPtr cred,
|
||||||
|
unsigned int ncred,
|
||||||
|
void *cbdata ATTRIBUTE_UNUSED) {
|
||||||
|
@@ -77,28 +113,25 @@ static int virConnectAuthCallbackDefault
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
switch (cred[i].type) {
|
||||||
|
-#if defined(POLKIT_GRANT) || defined(POLKIT_AUTH)
|
||||||
|
case VIR_CRED_EXTERNAL: {
|
||||||
|
int ret;
|
||||||
|
- const char *const args[] = {
|
||||||
|
-#if defined(POLKIT_GRANT)
|
||||||
|
- POLKIT_GRANT, "--gain", cred[i].prompt, NULL
|
||||||
|
-#else
|
||||||
|
- POLKIT_AUTH, "--obtain", cred[i].prompt, NULL
|
||||||
|
-#endif
|
||||||
|
- };
|
||||||
|
-
|
||||||
|
if (STRNEQ(cred[i].challenge, "PolicyKit"))
|
||||||
|
return -1;
|
||||||
|
- if (virRun(NULL, (char **) args, &ret) < 0)
|
||||||
|
- return -1;
|
||||||
|
|
||||||
|
- if (!WIFEXITED(ret) ||
|
||||||
|
- (WEXITSTATUS(ret) != 0 && WEXITSTATUS(ret) != 1))
|
||||||
|
+#if defined(POLKIT_AUTH)
|
||||||
|
+ if (virConnectAuthGainPolkit(cred[i].prompt) < 0)
|
||||||
|
return -1;
|
||||||
|
+#else
|
||||||
|
+ /*
|
||||||
|
+ * Ignore & carry on. Although we can't auth
|
||||||
|
+ * directly, the user may have authenticated
|
||||||
|
+ * themselves already outside context of libvirt
|
||||||
|
+ */
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
-#endif
|
||||||
|
+
|
||||||
|
case VIR_CRED_USERNAME:
|
||||||
|
case VIR_CRED_AUTHNAME:
|
||||||
|
case VIR_CRED_ECHOPROMPT:
|
||||||
|
@@ -158,9 +191,7 @@ static int virConnectCredTypeDefault[] =
|
||||||
|
VIR_CRED_REALM,
|
||||||
|
VIR_CRED_PASSPHRASE,
|
||||||
|
VIR_CRED_NOECHOPROMPT,
|
||||||
|
-#if defined(POLKIT_AUTH) || defined(POLKIT_GRANT)
|
||||||
|
VIR_CRED_EXTERNAL,
|
||||||
|
-#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
static virConnectAuth virConnectAuthDefault = {
|
||||||
128
libvirt-0.4.1-qemu-media-change.patch
Normal file
128
libvirt-0.4.1-qemu-media-change.patch
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
commit 570fd656d1b67e5d02f52e107946930257e811a7
|
||||||
|
Author: Daniel Veillard <veillard@redhat.com>
|
||||||
|
Date: Thu Mar 13 09:17:45 2008 +0000
|
||||||
|
|
||||||
|
* src/qemu_conf.c src/qemu_driver.c: patch from Cole Robinson
|
||||||
|
fixing CD Rom change on live QEmu/KVM domains.
|
||||||
|
Daniel
|
||||||
|
|
||||||
|
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||||
|
index e54da5b..ebbd251 100644
|
||||||
|
--- a/src/qemu_conf.c
|
||||||
|
+++ b/src/qemu_conf.c
|
||||||
|
@@ -594,9 +594,16 @@ static int qemudParseDiskXML(virConnectPtr conn,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (source == NULL) {
|
||||||
|
- qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SOURCE, target ? "%s" : NULL, target);
|
||||||
|
- goto error;
|
||||||
|
+ /* There is a case without the source
|
||||||
|
+ * to the CD-ROM device
|
||||||
|
+ */
|
||||||
|
+ if (!device || STRNEQ((const char *) device, "cdrom")) {
|
||||||
|
+ qemudReportError(conn, NULL, NULL, VIR_ERR_NO_SOURCE,
|
||||||
|
+ target ? "%s" : NULL, target);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+
|
||||||
|
if (target == NULL) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_NO_TARGET, source ? "%s" : NULL, source);
|
||||||
|
goto error;
|
||||||
|
@@ -630,7 +637,7 @@ static int qemudParseDiskXML(virConnectPtr conn,
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
- strncpy(disk->src, (const char *)source, NAME_MAX-1);
|
||||||
|
+ strncpy(disk->src, (source ? (const char *) source : "\0"), NAME_MAX-1);
|
||||||
|
disk->src[NAME_MAX-1] = '\0';
|
||||||
|
|
||||||
|
strncpy(disk->dst, (const char *)target, NAME_MAX-1);
|
||||||
|
@@ -1747,9 +1754,15 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||||
|
char dev[NAME_MAX];
|
||||||
|
char file[PATH_MAX];
|
||||||
|
if (!strcmp(disk->dst, "hdc") &&
|
||||||
|
- disk->device == QEMUD_DISK_CDROM)
|
||||||
|
- snprintf(dev, NAME_MAX, "-%s", "cdrom");
|
||||||
|
- else
|
||||||
|
+ disk->device == QEMUD_DISK_CDROM) {
|
||||||
|
+ if (disk->src[0])
|
||||||
|
+ snprintf(dev, NAME_MAX, "-%s", "cdrom");
|
||||||
|
+ else {
|
||||||
|
+ /* Don't put anything on the cmdline for an empty cdrom*/
|
||||||
|
+ disk = disk->next;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ } else
|
||||||
|
snprintf(dev, NAME_MAX, "-%s", disk->dst);
|
||||||
|
snprintf(file, PATH_MAX, "%s", disk->src);
|
||||||
|
|
||||||
|
@@ -2906,8 +2919,10 @@ char *qemudGenerateXML(virConnectPtr conn,
|
||||||
|
types[disk->type], devices[disk->device]) < 0)
|
||||||
|
goto no_memory;
|
||||||
|
|
||||||
|
- if (virBufferVSprintf(buf, " <source %s='%s'/>\n", typeAttrs[disk->type], disk->src) < 0)
|
||||||
|
- goto no_memory;
|
||||||
|
+ if (disk->src[0])
|
||||||
|
+ if (virBufferVSprintf(buf, " <source %s='%s'/>\n",
|
||||||
|
+ typeAttrs[disk->type], disk->src) < 0)
|
||||||
|
+ goto no_memory;
|
||||||
|
|
||||||
|
if (virBufferVSprintf(buf, " <target dev='%s'/>\n", disk->dst) < 0)
|
||||||
|
goto no_memory;
|
||||||
|
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||||
|
index 21f0fed..2b4c2a6 100644
|
||||||
|
--- a/src/qemu_driver.c
|
||||||
|
+++ b/src/qemu_driver.c
|
||||||
|
@@ -2223,23 +2223,29 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
|
||||||
|
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||||
|
char *cmd, *reply, *safe_path;
|
||||||
|
|
||||||
|
- /* Migrate to file */
|
||||||
|
- safe_path = qemudEscapeMonitorArg(newdisk->src);
|
||||||
|
- if (!safe_path) {
|
||||||
|
- qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||||
|
- "out of memory");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- if (asprintf (&cmd, "change %s \"%s\"",
|
||||||
|
- /* XXX qemu may support multiple CDROM in future */
|
||||||
|
- /* olddisk->dst */ "cdrom",
|
||||||
|
- safe_path) == -1) {
|
||||||
|
+ if (newdisk->src[0]) {
|
||||||
|
+ safe_path = qemudEscapeMonitorArg(newdisk->src);
|
||||||
|
+ if (!safe_path) {
|
||||||
|
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||||
|
+ "out of memory");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ if (asprintf (&cmd, "change %s \"%s\"",
|
||||||
|
+ /* XXX qemu may support multiple CDROM in future */
|
||||||
|
+ /* olddisk->dst */ "cdrom",
|
||||||
|
+ safe_path) == -1) {
|
||||||
|
+ qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||||
|
+ "out of memory");
|
||||||
|
+ free(safe_path);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ free(safe_path);
|
||||||
|
+
|
||||||
|
+ } else if (asprintf(&cmd, "eject cdrom") == -1) {
|
||||||
|
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
|
||||||
|
"out of memory");
|
||||||
|
- free(safe_path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- free(safe_path);
|
||||||
|
|
||||||
|
if (qemudMonitorCommand(driver, vm, cmd, &reply) < 0) {
|
||||||
|
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, "cannot change cdrom media");
|
||||||
|
@@ -2248,7 +2254,7 @@ static int qemudDomainChangeCDROM(virDomainPtr dom,
|
||||||
|
}
|
||||||
|
free(reply);
|
||||||
|
free(cmd);
|
||||||
|
- strcpy(olddisk->dst, newdisk->dst);
|
||||||
|
+ strcpy(olddisk->src, newdisk->src);
|
||||||
|
olddisk->type = newdisk->type;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
38
libvirt-0.4.1-qemud1.patch
Normal file
38
libvirt-0.4.1-qemud1.patch
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
Avoid segfault upon early libvirtd failure.
|
||||||
|
* qemud/qemud.c (main): Don't call qemudCleanup on an
|
||||||
|
uninitialized pointer.
|
||||||
|
|
||||||
|
By the way, even though this evoked a warning from gcc,
|
||||||
|
"make distcheck" passes. Obviously, that means the distcheck
|
||||||
|
rule is inadequate. I'll fix it so that it turns on -Werror
|
||||||
|
for the final build.
|
||||||
|
|
||||||
|
Signed-off-by: Jim Meyering <meyering@redhat.com>
|
||||||
|
---
|
||||||
|
qemud/qemud.c | 5 +++--
|
||||||
|
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qemud/qemud.c b/qemud/qemud.c
|
||||||
|
index 96fdf32..b6b82ed 100644
|
||||||
|
--- a/qemud/qemud.c
|
||||||
|
+++ b/qemud/qemud.c
|
||||||
|
@@ -2025,7 +2025,7 @@ libvirt management daemon:\n\
|
||||||
|
|
||||||
|
#define MAX_LISTEN 5
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
- struct qemud_server *server;
|
||||||
|
+ struct qemud_server *server = NULL;
|
||||||
|
struct sigaction sig_action;
|
||||||
|
int sigpipe[2];
|
||||||
|
const char *pid_file = NULL;
|
||||||
|
@@ -2180,7 +2180,8 @@ int main(int argc, char **argv) {
|
||||||
|
unlink (pid_file);
|
||||||
|
|
||||||
|
error1:
|
||||||
|
- qemudCleanup(server);
|
||||||
|
+ if (server)
|
||||||
|
+ qemudCleanup(server);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
23
libvirt-0.4.1-qemud2.patch
Normal file
23
libvirt-0.4.1-qemud2.patch
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
Don't use first byte of string as a pointer.
|
||||||
|
* src/qemu_conf.c (qemudReportError): Use the pointer, errorMessage,
|
||||||
|
not its first byte, errorMessage[0].
|
||||||
|
|
||||||
|
Signed-off-by: Jim Meyering <meyering@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu_conf.c | 2 +-
|
||||||
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||||
|
index eead0bc..e54da5b 100644
|
||||||
|
--- a/src/qemu_conf.c
|
||||||
|
+++ b/src/qemu_conf.c
|
||||||
|
@@ -68,7 +68,7 @@ void qemudReportError(virConnectPtr conn,
|
||||||
|
errorMessage[0] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
- virerr = __virErrorMsg(code, (errorMessage[0] ? errorMessage[0] : NULL));
|
||||||
|
+ virerr = __virErrorMsg(code, (errorMessage[0] ? errorMessage : NULL));
|
||||||
|
__virRaiseError(conn, dom, net, VIR_FROM_QEMU, code, VIR_ERR_ERROR,
|
||||||
|
virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
|
||||||
|
}
|
||||||
63
libvirt-0.4.1-tap-ifname.patch
Normal file
63
libvirt-0.4.1-tap-ifname.patch
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
diff -rupN libvirt-0.4.1.orig/src/bridge.c libvirt-0.4.1.new/src/bridge.c
|
||||||
|
--- libvirt-0.4.1.orig/src/bridge.c 2008-02-28 06:16:21.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/src/bridge.c 2008-03-13 11:25:12.000000000 -0400
|
||||||
|
@@ -313,7 +313,6 @@ brDeleteInterface(brControl *ctl ATTRIBU
|
||||||
|
int
|
||||||
|
brAddTap(brControl *ctl,
|
||||||
|
const char *bridge,
|
||||||
|
- unsigned char *macaddr,
|
||||||
|
char *ifname,
|
||||||
|
int maxlen,
|
||||||
|
int *tapfd)
|
||||||
|
@@ -357,18 +356,6 @@ brAddTap(brControl *ctl,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioctl(fd, TUNSETIFF, &try) == 0) {
|
||||||
|
- struct ifreq addr;
|
||||||
|
- memset(&addr, 0, sizeof(addr));
|
||||||
|
- memcpy(addr.ifr_hwaddr.sa_data, macaddr, 6);
|
||||||
|
- addr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
|
||||||
|
-
|
||||||
|
- /* Device actually starts in 'UP' state, but it
|
||||||
|
- * needs to be down to set the MAC addr
|
||||||
|
- */
|
||||||
|
- if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 0)))
|
||||||
|
- goto error;
|
||||||
|
- if (ioctl(fd, SIOCSIFHWADDR, &addr) != 0)
|
||||||
|
- goto error;
|
||||||
|
if ((errno = brAddInterface(ctl, bridge, try.ifr_name)))
|
||||||
|
goto error;
|
||||||
|
if ((errno = brSetInterfaceUp(ctl, try.ifr_name, 1)))
|
||||||
|
diff -rupN libvirt-0.4.1.orig/src/bridge.h libvirt-0.4.1.new/src/bridge.h
|
||||||
|
--- libvirt-0.4.1.orig/src/bridge.h 2008-02-28 06:16:21.000000000 -0500
|
||||||
|
+++ libvirt-0.4.1.new/src/bridge.h 2008-03-13 11:25:12.000000000 -0400
|
||||||
|
@@ -62,7 +62,6 @@ int brDeleteInterface (brContr
|
||||||
|
|
||||||
|
int brAddTap (brControl *ctl,
|
||||||
|
const char *bridge,
|
||||||
|
- unsigned char *mac,
|
||||||
|
char *ifname,
|
||||||
|
int maxlen,
|
||||||
|
int *tapfd);
|
||||||
|
diff -rupN libvirt-0.4.1.orig/src/qemu_conf.c libvirt-0.4.1.new/src/qemu_conf.c
|
||||||
|
--- libvirt-0.4.1.orig/src/qemu_conf.c 2008-03-13 11:24:39.000000000 -0400
|
||||||
|
+++ libvirt-0.4.1.new/src/qemu_conf.c 2008-03-13 11:25:12.000000000 -0400
|
||||||
|
@@ -1540,7 +1540,6 @@ qemudNetworkIfaceConnect(virConnectPtr c
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((err = brAddTap(driver->brctl, brname,
|
||||||
|
- net->mac,
|
||||||
|
ifname, BR_IFNAME_MAXLEN, &tapfd))) {
|
||||||
|
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
"Failed to add tap interface '%s' to bridge '%s' : %s",
|
||||||
|
@@ -1548,7 +1547,9 @@ qemudNetworkIfaceConnect(virConnectPtr c
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
- snprintf(tapfdstr, sizeof(tapfdstr), "tap,fd=%d,script=,vlan=%d", tapfd, vlan);
|
||||||
|
+ snprintf(tapfdstr, sizeof(tapfdstr),
|
||||||
|
+ "tap,fd=%d,script=,vlan=%d,ifname=%s",
|
||||||
|
+ tapfd, vlan, ifname);
|
||||||
|
|
||||||
|
if (!(retval = strdup(tapfdstr)))
|
||||||
|
goto no_memory;
|
||||||
21
libvirt-0.4.1-xen-boot-device.patch
Normal file
21
libvirt-0.4.1-xen-boot-device.patch
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
commit 2bcf35336cd649e58c08d7cf3452a8d4353bcf85
|
||||||
|
Author: Daniel Veillard <veillard@redhat.com>
|
||||||
|
Date: Fri Mar 7 09:23:30 2008 +0000
|
||||||
|
|
||||||
|
* src/xend_internal.c: applied patch from Cole Robinson to not
|
||||||
|
loose the boot tag when defining a fully virtualized xen domain
|
||||||
|
Daniel
|
||||||
|
|
||||||
|
diff --git a/src/xend_internal.c b/src/xend_internal.c
|
||||||
|
index 8bbc28f..fef54f8 100644
|
||||||
|
--- a/src/xend_internal.c
|
||||||
|
+++ b/src/xend_internal.c
|
||||||
|
@@ -1323,7 +1323,7 @@ xend_parse_sexp_desc_os(virConnectPtr xend, struct sexpr *node, virBufferPtr buf
|
||||||
|
if (hvm)
|
||||||
|
virBufferVSprintf(buf, " <loader>%s</loader>\n", loader);
|
||||||
|
|
||||||
|
- if (kernel) {
|
||||||
|
+ if ((kernel) && ((!loader) || (STRNEQ(kernel, loader)))) {
|
||||||
|
virBufferVSprintf(buf, " <kernel>%s</kernel>\n", kernel);
|
||||||
|
if (initrd && initrd[0])
|
||||||
|
virBufferVSprintf(buf, " <initrd>%s</initrd>\n", initrd);
|
||||||
146
libvirt-iscsi-sysfs4.patch
Normal file
146
libvirt-iscsi-sysfs4.patch
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
--- a/src/storage_backend_iscsi.c 4 Mar 2008 20:02:34 -0000 1.3
|
||||||
|
+++ b/src/storage_backend_iscsi.c 26 Mar 2008 22:07:05 -0000
|
||||||
|
@@ -170,20 +170,91 @@
|
||||||
|
virStorageBackendISCSIMakeLUN(virConnectPtr conn,
|
||||||
|
virStoragePoolObjPtr pool,
|
||||||
|
char **const groups,
|
||||||
|
- void *data ATTRIBUTE_UNUSED)
|
||||||
|
+ void *data)
|
||||||
|
{
|
||||||
|
virStorageVolDefPtr vol;
|
||||||
|
int fd = -1;
|
||||||
|
+ unsigned int target, channel, id, lun;
|
||||||
|
char lunid[100];
|
||||||
|
- char *dev = groups[4];
|
||||||
|
int opentries = 0;
|
||||||
|
char *devpath = NULL;
|
||||||
|
+ char *session = data;
|
||||||
|
+ char sysfs_path[PATH_MAX];
|
||||||
|
+ char *dev = NULL;
|
||||||
|
+ DIR *sysdir;
|
||||||
|
+ struct dirent *block_dirent;
|
||||||
|
+ struct stat sbuf;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ if ((virStrToLong_ui(groups[0], NULL, 10, &target) < 0) ||
|
||||||
|
+ (virStrToLong_ui(groups[1], NULL, 10, &channel) < 0) ||
|
||||||
|
+ (virStrToLong_ui(groups[2], NULL, 10, &id) < 0) ||
|
||||||
|
+ (virStrToLong_ui(groups[3], NULL, 10, &lun) < 0)) {
|
||||||
|
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
+ _("Failed parsing iscsiadm commands"));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (lun == 0) {
|
||||||
|
+ /* the 0'th LUN isn't a real LUN, it's just a control LUN; skip it */
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ snprintf(sysfs_path, PATH_MAX,
|
||||||
|
+ "/sys/class/iscsi_session/session%s/device/"
|
||||||
|
+ "target%d:%d:%d/%d:%d:%d:%d/block",
|
||||||
|
+ session, target, channel, id, target, channel, id, lun);
|
||||||
|
+
|
||||||
|
+ if (stat(sysfs_path, &sbuf) < 0) {
|
||||||
|
+ /* block path in subdir didn't exist; this is unexpected, so fail */
|
||||||
|
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
+ _("Failed to find the sysfs path for %d:%d:%d:%d: %s"),
|
||||||
|
+ target, channel, id, lun, strerror(errno));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ sysdir = opendir(sysfs_path);
|
||||||
|
+ if (sysdir == NULL) {
|
||||||
|
+ /* we failed for some reason; return an error */
|
||||||
|
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
+ _("Failed to opendir sysfs path %s: %s"),
|
||||||
|
+ sysfs_path, strerror(errno));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ while ((block_dirent = readdir(sysdir)) != NULL) {
|
||||||
|
+ len = strlen(block_dirent->d_name);
|
||||||
|
+ if ((len == 1 && block_dirent->d_name[0] == '.') ||
|
||||||
|
+ (len == 2 && block_dirent->d_name[0] == '.' && block_dirent->d_name[1] == '.')) {
|
||||||
|
+ /* the . and .. directories; just skip them */
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* OK, not . or ..; let's see if it is a SCSI device */
|
||||||
|
+ if (len > 2 &&
|
||||||
|
+ block_dirent->d_name[0] == 's' &&
|
||||||
|
+ block_dirent->d_name[1] == 'd') {
|
||||||
|
+ /* looks like a scsi device, smells like scsi device; it must be
|
||||||
|
+ a scsi device */
|
||||||
|
+ dev = strdup(block_dirent->d_name);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ closedir(sysdir);
|
||||||
|
+
|
||||||
|
+ if (dev == NULL) {
|
||||||
|
+ /* we didn't find the sd? device we were looking for; fail */
|
||||||
|
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
+ _("Failed to find SCSI device for %d:%d:%d:%d: %s"),
|
||||||
|
+ target, channel, id, lun, strerror(errno));
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
snprintf(lunid, sizeof(lunid)-1, "lun-%s", groups[3]);
|
||||||
|
|
||||||
|
if ((vol = calloc(1, sizeof(virStorageVolDef))) == NULL) {
|
||||||
|
virStorageReportError(conn, VIR_ERR_NO_MEMORY, "%s", _("volume"));
|
||||||
|
- return -1;
|
||||||
|
+ goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((vol->name = strdup(lunid)) == NULL) {
|
||||||
|
@@ -197,6 +268,8 @@
|
||||||
|
}
|
||||||
|
strcpy(devpath, "/dev/");
|
||||||
|
strcat(devpath, dev);
|
||||||
|
+ free(dev);
|
||||||
|
+ dev = NULL;
|
||||||
|
/* It can take a little while between logging into the ISCSI
|
||||||
|
* server and udev creating the /dev nodes, so if we get ENOENT
|
||||||
|
* we must retry a few times - they should eventually appear.
|
||||||
|
@@ -258,6 +331,7 @@
|
||||||
|
if (fd != -1) close(fd);
|
||||||
|
free(devpath);
|
||||||
|
virStorageVolDefFree(vol);
|
||||||
|
+ free(dev);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -281,14 +355,13 @@
|
||||||
|
* scsi1 Channel 00 Id 0 Lun: 5
|
||||||
|
* Attached scsi disk sdg State: running
|
||||||
|
*
|
||||||
|
- * Need 2 regex to match alternating lines
|
||||||
|
+ * Need a regex to match the Channel:Id:Lun lines
|
||||||
|
*/
|
||||||
|
const char *regexes[] = {
|
||||||
|
- "^\\s*scsi(\\S+)\\s+Channel\\s+(\\S+)\\s+Id\\s+(\\S+)\\s+Lun:\\s+(\\S+)\\s*$",
|
||||||
|
- "^\\s*Attached\\s+scsi\\s+disk\\s+(\\S+)\\s+State:\\s+running\\s*$"
|
||||||
|
+ "^\\s*scsi(\\S+)\\s+Channel\\s+(\\S+)\\s+Id\\s+(\\S+)\\s+Lun:\\s+(\\S+)\\s*$"
|
||||||
|
};
|
||||||
|
int vars[] = {
|
||||||
|
- 4, 1
|
||||||
|
+ 4
|
||||||
|
};
|
||||||
|
const char *prog[] = {
|
||||||
|
ISCSIADM, "--mode", "session", "-r", session, "-P", "3", NULL,
|
||||||
|
@@ -296,11 +369,11 @@
|
||||||
|
|
||||||
|
return virStorageBackendRunProgRegex(conn, pool,
|
||||||
|
prog,
|
||||||
|
- 2,
|
||||||
|
+ 1,
|
||||||
|
regexes,
|
||||||
|
vars,
|
||||||
|
virStorageBackendISCSIMakeLUN,
|
||||||
|
- NULL);
|
||||||
|
+ (void *)session);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
17
libvirt-source-dir-fix.patch
Normal file
17
libvirt-source-dir-fix.patch
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
Index: src/storage_conf.c
|
||||||
|
===================================================================
|
||||||
|
RCS file: /data/cvs/libvirt/src/storage_conf.c,v
|
||||||
|
retrieving revision 1.3
|
||||||
|
retrieving revision 1.4
|
||||||
|
diff -u -r1.3 -r1.4
|
||||||
|
--- a/src/storage_conf.c 27 Feb 2008 10:37:19 -0000 1.3
|
||||||
|
+++ b/src/storage_conf.c 28 Mar 2008 17:56:44 -0000 1.4
|
||||||
|
@@ -479,7 +479,7 @@
|
||||||
|
}
|
||||||
|
if ((options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_DIR) &&
|
||||||
|
def->source.dir &&
|
||||||
|
- virBufferVSprintf(buf," <directory path='%s'/>\n", def->source.dir) < 0)
|
||||||
|
+ virBufferVSprintf(buf," <dir path='%s'/>\n", def->source.dir) < 0)
|
||||||
|
goto no_memory;
|
||||||
|
if ((options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_ADAPTER) &&
|
||||||
|
def->source.adapter &&
|
||||||
17
libvirt-storage-api-iscsi-sendtarget.patch
Normal file
17
libvirt-storage-api-iscsi-sendtarget.patch
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
--- /home/boston/clalance/devel/libvirt--devel/src/storage_backend_iscsi.c 2008-02-13 13:48:32.497466000 -0500
|
||||||
|
+++ libvirt-0.4.0/src/storage_backend_iscsi.c 2008-02-11 17:19:35.000000000 -0500
|
||||||
|
@@ -143,6 +143,14 @@ static int virStorageBackendISCSIConnect
|
||||||
|
"--targetname", pool->def->source.devices[0].path, action, NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
+ const char *cmdsendtarget[] = {
|
||||||
|
+ ISCSIADM, "--mode", "discovery", "--type", "sendtargets",
|
||||||
|
+ "--portal", portal, NULL
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ if (virRun(conn, (char **)cmdsendtarget, NULL) < 0)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
if (virRun(conn, (char **)cmdargv, NULL) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
468
libvirt.spec
468
libvirt.spec
@@ -1,63 +1,209 @@
|
|||||||
Summary: Library providing an API to use the Xen virtualization
|
# -*- rpm-spec -*-
|
||||||
|
|
||||||
|
%if "%{fedora}" >= "8"
|
||||||
|
%define with_polkit 1
|
||||||
|
%define with_proxy no
|
||||||
|
%else
|
||||||
|
%define with_polkit 0
|
||||||
|
%define with_proxy yes
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%if "%{fedora}"
|
||||||
|
%ifarch ppc64
|
||||||
|
%define with_qemu 0
|
||||||
|
%else
|
||||||
|
%define with_qemu 1
|
||||||
|
%endif
|
||||||
|
%else
|
||||||
|
%define with_qemu 0
|
||||||
|
%endif
|
||||||
|
|
||||||
|
Summary: Library providing a simple API virtualization
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 0.1.0
|
Version: 0.4.1
|
||||||
Release: 1
|
Release: 3%{?dist}%{?extra_release}
|
||||||
License: LGPL
|
License: LGPL
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Source: libvirt-%{version}.tar.gz
|
Source: libvirt-%{version}.tar.gz
|
||||||
|
Patch0: libvirt-0.4.1-qemud1.patch
|
||||||
|
Patch1: libvirt-0.4.1-qemud2.patch
|
||||||
|
Patch2: %{name}-%{version}-daemon-startup.patch
|
||||||
|
Patch3: %{name}-%{version}-qemu-media-change.patch
|
||||||
|
Patch4: %{name}-%{version}-xen-boot-device.patch
|
||||||
|
Patch5: %{name}-%{version}-tap-ifname.patch
|
||||||
|
Patch6: libvirt-storage-api-iscsi-sendtarget.patch
|
||||||
|
Patch7: libvirt-iscsi-sysfs4.patch
|
||||||
|
Patch8: libvirt-source-dir-fix.patch
|
||||||
|
Patch9: %{name}-%{version}-polkit.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
||||||
URL: http://libvir.org/
|
URL: http://libvirt.org/
|
||||||
BuildRequires: xen python python-devel
|
BuildRequires: python python-devel
|
||||||
Requires: xen
|
|
||||||
Requires: libxml2
|
Requires: libxml2
|
||||||
Requires: readline
|
Requires: readline
|
||||||
|
Requires: ncurses
|
||||||
|
Requires: dnsmasq
|
||||||
|
Requires: bridge-utils
|
||||||
|
Requires: iptables
|
||||||
|
# So remote clients can access libvirt over SSH tunnel
|
||||||
|
# (client invokes 'nc' against the UNIX socket on the server)
|
||||||
|
Requires: nc
|
||||||
|
Requires: cyrus-sasl
|
||||||
|
# Not technically required, but makes 'out-of-box' config
|
||||||
|
# work correctly & doesn't have onerous dependencies
|
||||||
|
Requires: cyrus-sasl-md5
|
||||||
|
%if %{with_polkit}
|
||||||
|
Requires: PolicyKit >= 0.6
|
||||||
|
%endif
|
||||||
|
# For mount/umount in FS driver
|
||||||
|
BuildRequires: util-linux
|
||||||
|
# PPC64 has no Xen nor QEmu, try to build anyway
|
||||||
|
%ifnarch ppc64
|
||||||
|
%if %{with_qemu}
|
||||||
|
# From QEMU RPMs
|
||||||
|
Requires: /usr/bin/qemu-img
|
||||||
|
%else
|
||||||
|
# From Xen RPMs
|
||||||
|
Requires: /usr/sbin/qcow-create
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
# For LVM drivers
|
||||||
|
Requires: lvm2
|
||||||
|
# For ISCSI driver
|
||||||
|
Requires: iscsi-initiator-utils
|
||||||
|
# For disk driver
|
||||||
|
Requires: parted
|
||||||
|
%ifarch i386 x86_64 ia64
|
||||||
|
BuildRequires: xen-devel
|
||||||
|
%endif
|
||||||
BuildRequires: libxml2-devel
|
BuildRequires: libxml2-devel
|
||||||
BuildRequires: readline-devel
|
BuildRequires: readline-devel
|
||||||
|
BuildRequires: ncurses-devel
|
||||||
|
BuildRequires: gettext
|
||||||
|
BuildRequires: gnutls-devel
|
||||||
|
BuildRequires: avahi-devel
|
||||||
|
BuildRequires: libselinux-devel
|
||||||
|
BuildRequires: dnsmasq
|
||||||
|
BuildRequires: bridge-utils
|
||||||
|
%if %{with_qemu}
|
||||||
|
BuildRequires: qemu
|
||||||
|
%endif
|
||||||
|
BuildRequires: cyrus-sasl-devel
|
||||||
|
%if %{with_polkit}
|
||||||
|
BuildRequires: PolicyKit-devel >= 0.6
|
||||||
|
%endif
|
||||||
|
# For mount/umount in FS driver
|
||||||
|
BuildRequires: util-linux
|
||||||
|
# PPC64 has no Xen nor QEmu, try to build anyway
|
||||||
|
%ifnarch ppc64
|
||||||
|
%if %{with_qemu}
|
||||||
|
# From QEMU RPMs
|
||||||
|
BuildRequires: /usr/bin/qemu-img
|
||||||
|
%else
|
||||||
|
# From Xen RPMs
|
||||||
|
BuildRequires: /usr/sbin/qcow-create
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
# For LVM drivers
|
||||||
|
BuildRequires: lvm2
|
||||||
|
# For ISCSI driver
|
||||||
|
BuildRequires: iscsi-initiator-utils
|
||||||
|
# For disk driver
|
||||||
|
BuildRequires: parted-devel
|
||||||
Obsoletes: libvir
|
Obsoletes: libvir
|
||||||
ExclusiveArch: i386 x86_64
|
|
||||||
|
# Fedora build root suckage
|
||||||
|
BuildRequires: gawk
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This C library provides an API to use the Xen virtualization framework,
|
Libvirt is a C toolkit to interact with the virtualization capabilities
|
||||||
and the virsh command line tool to control virtual domains.
|
of recent versions of Linux (and other OSes).
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Libraries, includes, etc. to compile with the libvirt library
|
Summary: Libraries, includes, etc. to compile with the libvirt library
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Requires: libvirt = %{version}
|
Requires: libvirt = %{version}
|
||||||
|
Requires: pkgconfig
|
||||||
|
%ifarch i386 x86_64 ia64
|
||||||
|
Requires: xen-devel
|
||||||
|
%endif
|
||||||
Obsoletes: libvir-devel
|
Obsoletes: libvir-devel
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
Includes and documentations for the C library providing an API to use
|
Includes and documentations for the C library providing an API to use
|
||||||
the Xen virtualization framework
|
the virtualization capabilities of recent versions of Linux (and other OSes).
|
||||||
|
|
||||||
%package python
|
%package python
|
||||||
Summary: Python bindings for the libvirt library
|
Summary: Python bindings for the libvirt library
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Requires: libvirt = %{version}
|
Requires: libvirt = %{version}
|
||||||
Obsoletes: libvir-python
|
Obsoletes: libvir-python
|
||||||
Requires: %{_libdir}/python%(echo `python -c "import sys; print sys.version[0:3]"`)
|
|
||||||
|
|
||||||
%description python
|
%description python
|
||||||
The libvirt-python package contains a module that permits applications
|
The libvirt-python package contains a module that permits applications
|
||||||
written in the Python programming language to use the interface
|
written in the Python programming language to use the interface
|
||||||
supplied by the libvirt library to use the Xen virtualization framework.
|
supplied by the libvirt library to use the virtualization capabilities
|
||||||
|
of recent versions of Linux (and other OSes).
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure
|
# Xen is available only on i386 x86_64 ia64
|
||||||
|
%ifarch i386 i686 x86_64 ia64
|
||||||
|
%configure --with-init-script=redhat \
|
||||||
|
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||||
|
--with-remote-file=%{_localstatedir}/run/libvirtd.pid \
|
||||||
|
--with-xen-proxy=%{with_proxy}
|
||||||
|
%else
|
||||||
|
%ifnarch ppc64
|
||||||
|
%configure --without-xen \
|
||||||
|
--with-init-script=redhat \
|
||||||
|
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||||
|
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||||
|
%else
|
||||||
|
%configure --without-xen \
|
||||||
|
--without-qemu \
|
||||||
|
--with-init-script=redhat \
|
||||||
|
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||||
|
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
make
|
make
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -fr %{buildroot}
|
rm -fr %{buildroot}
|
||||||
|
|
||||||
%makeinstall
|
%makeinstall
|
||||||
(cd docs/examples ; make clean ; rm -rf .deps)
|
(cd docs/examples ; make clean ; rm -rf .deps Makefile Makefile.in)
|
||||||
|
(cd docs/examples/python ; rm -f Makefile Makefile.in)
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
|
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
|
||||||
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
|
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/run/libvirt/
|
||||||
|
|
||||||
|
# We don't want to install /etc/libvirt/qemu/networks in the main %files list
|
||||||
|
# because if the admin wants to delete the default network completely, we don't
|
||||||
|
# want to end up re-incarnating it on every RPM upgrade.
|
||||||
|
install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/
|
||||||
|
cp $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml \
|
||||||
|
$RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
|
||||||
|
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
# Strip auto-generated UUID - we need it generated per-install
|
||||||
|
sed -i -e "/<uuid>/d" $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
|
||||||
|
%find_lang %{name}
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -fr %{buildroot}
|
rm -fr %{buildroot}
|
||||||
@@ -65,21 +211,68 @@ rm -fr %{buildroot}
|
|||||||
%post
|
%post
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
# We want to install the default network for initial RPM installs
|
||||||
|
# or on the first upgrade from a non-network aware libvirt only.
|
||||||
|
# We check this by looking to see if the daemon is already installed
|
||||||
|
/sbin/chkconfig --list libvirtd 1>/dev/null 2>&1
|
||||||
|
if [ $? != 0 ]
|
||||||
|
then
|
||||||
|
UUID=`/usr/bin/uuidgen`
|
||||||
|
sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
|
||||||
|
< %{_datadir}/libvirt/networks/default.xml \
|
||||||
|
> %{_sysconfdir}/libvirt/qemu/networks/default.xml
|
||||||
|
ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
fi
|
||||||
|
|
||||||
|
/sbin/chkconfig --add libvirtd
|
||||||
|
|
||||||
|
%preun
|
||||||
|
if [ $1 = 0 ]; then
|
||||||
|
/sbin/service libvirtd stop 1>/dev/null 2>&1
|
||||||
|
/sbin/chkconfig --del libvirtd
|
||||||
|
fi
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
|
||||||
%files
|
%files -f %{name}.lang
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
%doc AUTHORS ChangeLog NEWS README COPYING.LIB TODO
|
%doc AUTHORS ChangeLog NEWS README COPYING.LIB TODO
|
||||||
%doc %{_mandir}/man1/virsh.1*
|
%doc %{_mandir}/man1/virsh.1*
|
||||||
%{_bindir}/virsh
|
%{_bindir}/virsh
|
||||||
%{_libdir}/lib*.so.*
|
%{_libdir}/lib*.so.*
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
|
||||||
|
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
|
||||||
|
%{_sysconfdir}/rc.d/init.d/libvirtd
|
||||||
|
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
|
||||||
|
%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
|
||||||
|
%dir %{_datadir}/libvirt/
|
||||||
|
%dir %{_datadir}/libvirt/networks/
|
||||||
|
%{_datadir}/libvirt/networks/default.xml
|
||||||
|
%dir %{_localstatedir}/run/libvirt/
|
||||||
|
%dir %{_localstatedir}/lib/libvirt/
|
||||||
|
%if %{with_polkit}
|
||||||
|
%{_datadir}/PolicyKit/policy/libvirtd.policy
|
||||||
|
%endif
|
||||||
|
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
|
||||||
|
%if %{with_proxy} == "yes"
|
||||||
|
%attr(4755, root, root) %{_libexecdir}/libvirt_proxy
|
||||||
|
%endif
|
||||||
|
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
|
||||||
|
%attr(0755, root, root) %{_sbindir}/libvirtd
|
||||||
|
%doc docs/*.rng
|
||||||
|
%doc docs/*.xml
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
|
|
||||||
%{_libdir}/lib*.so
|
%{_libdir}/lib*.so
|
||||||
|
%dir %{_includedir}/libvirt
|
||||||
%{_includedir}/libvirt/*.h
|
%{_includedir}/libvirt/*.h
|
||||||
%{_libdir}/pkgconfig/libvirt.pc
|
%{_libdir}/pkgconfig/libvirt.pc
|
||||||
%doc %{_datadir}/gtk-doc/html/libvirt/*.devhelp
|
%doc %{_datadir}/gtk-doc/html/libvirt/*.devhelp
|
||||||
@@ -100,8 +293,253 @@ rm -fr %{buildroot}
|
|||||||
%doc python/tests/*.py
|
%doc python/tests/*.py
|
||||||
%doc python/TODO
|
%doc python/TODO
|
||||||
%doc python/libvirtclass.txt
|
%doc python/libvirtclass.txt
|
||||||
|
%doc docs/examples/python
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Apr 4 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-3.fc8
|
||||||
|
- Don't run polkit-auth as root
|
||||||
|
- Don't request polkit auth if client is root
|
||||||
|
- When dumping XML for a storage pool, make the <source> directory tag
|
||||||
|
match the <dir> tag used for specifying the pool in the first place
|
||||||
|
- Do iscsiadm sendtarget before trying to do login
|
||||||
|
- Do sysfs scanning for iSCSI LUNs instead of trying to parse them from
|
||||||
|
iscsiadm session output
|
||||||
|
- Fix QEMU tap device setup
|
||||||
|
- Fix Xen boot device XML processing
|
||||||
|
- Fixed QEMU cdrom media change
|
||||||
|
|
||||||
|
* Tue Mar 11 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-2.fc8
|
||||||
|
- Fixed daemon startup when run with --daemon flag
|
||||||
|
|
||||||
|
* Thu Mar 6 2008 Daniel Veillard <veillard@redhat.com> - 0.4.1-1.fc8
|
||||||
|
- Update to 0.4.1
|
||||||
|
- Storage APIs
|
||||||
|
- xenner support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Thu Jan 17 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-4.fc8
|
||||||
|
- Fix SSH tunnelling (rhbz #428743)
|
||||||
|
|
||||||
|
* Sun Jan 13 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-3.fc8
|
||||||
|
- Fix crash when no auth callback
|
||||||
|
|
||||||
|
* Wed Jan 2 2008 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-2.fc8
|
||||||
|
- Fix reading large config files (rhbz #426425)
|
||||||
|
- Fix crash when connecting to a PolicyKit enabled server with not auth callback (rhbz #427107)
|
||||||
|
|
||||||
|
* Tue Dec 18 2007 Daniel Veillard <veillard@redhat.com> - 0.4.0-1.fc8
|
||||||
|
- Release of 0.4.0
|
||||||
|
- SASL based authentication
|
||||||
|
- PolicyKit authentication
|
||||||
|
- improved NUMA and statistics support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Mon Oct 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.3.3-2.fc8
|
||||||
|
- Added QEMU driver config file support
|
||||||
|
- Added example config files
|
||||||
|
|
||||||
|
* Sun Sep 30 2007 Daniel Veillard <veillard@redhat.com> - 0.3.3-1
|
||||||
|
- Release of 0.3.3
|
||||||
|
- Avahi support
|
||||||
|
- NUMA support
|
||||||
|
- lots of assorted improvements, bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Fri Aug 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-2.fc8
|
||||||
|
- also build on arches where Xen is not available
|
||||||
|
|
||||||
|
* Tue Aug 21 2007 Daniel Veillard <veillard@redhat.com> - 0.3.2-1.fc8
|
||||||
|
- Release of 0.3.2
|
||||||
|
- API for domains migration
|
||||||
|
- APIs for collecting statistics on disks and interfaces
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Thu Aug 16 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-4.fc8
|
||||||
|
- Fixes missing Requires for libvirt-devel
|
||||||
|
|
||||||
|
* Thu Jul 26 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-3.fc8
|
||||||
|
- adds fix for bug #249594
|
||||||
|
|
||||||
|
* Wed Jul 25 2007 Jesse Keating <jkeating@redhat.com> - 0.3.1-2
|
||||||
|
- Rebuild for RH #249435
|
||||||
|
|
||||||
|
* Tue Jul 24 2007 Daniel Veillard <veillard@redhat.com> - 0.3.1-1.fc8
|
||||||
|
- Release of 0.3.1
|
||||||
|
- localtime clock support
|
||||||
|
- PS/2 and USB input devices
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Mon Jul 9 2007 Daniel Veillard <veillard@redhat.com> - 0.3.0-1.fc8
|
||||||
|
- Release of 0.3.0
|
||||||
|
- Secure remote access support
|
||||||
|
- unification of daemons
|
||||||
|
- lots of assorted bugfixes and cleanups
|
||||||
|
- documentation and localization improvements
|
||||||
|
|
||||||
|
* Fri Jun 8 2007 Daniel Veillard <veillard@redhat.com> - 0.2.3-1.fc8
|
||||||
|
- Release of 0.2.3
|
||||||
|
- lot of assorted bugfixes and cleanups
|
||||||
|
- support for Xen-3.1
|
||||||
|
- new scheduler API
|
||||||
|
|
||||||
|
* Tue Apr 17 2007 Daniel Veillard <veillard@redhat.com> - 0.2.2-1
|
||||||
|
- Release of 0.2.2
|
||||||
|
- lot of assorted bugfixes and cleanups
|
||||||
|
- preparing for Xen-3.0.5
|
||||||
|
|
||||||
|
* Thu Mar 22 2007 Jeremy Katz <katzj@redhat.com> - 0.2.1-2.fc7
|
||||||
|
- don't require xen; we don't need the daemon and can control non-xen now
|
||||||
|
- fix scriptlet error (need to own more directories)
|
||||||
|
- update description text
|
||||||
|
|
||||||
|
* Fri Mar 16 2007 Daniel Veillard <veillard@redhat.com> - 0.2.1-1
|
||||||
|
- Release of 0.2.1
|
||||||
|
- lot of bug and portability fixes
|
||||||
|
- Add support for network autostart and init scripts
|
||||||
|
- New API to detect the virtualization capabilities of a host
|
||||||
|
- Documentation updates
|
||||||
|
|
||||||
|
* Fri Feb 23 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-4.fc7
|
||||||
|
- Fix loading of guest & network configs
|
||||||
|
|
||||||
|
* Fri Feb 16 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-3.fc7
|
||||||
|
- Disable kqemu support since its not in Fedora qemu binary
|
||||||
|
- Fix for -vnc arg syntax change in 0.9.0 QEMU
|
||||||
|
|
||||||
|
* Thu Feb 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-2.fc7
|
||||||
|
- Fixed path to qemu daemon for autostart
|
||||||
|
- Fixed generation of <features> block in XML
|
||||||
|
- Pre-create config directory at startup
|
||||||
|
|
||||||
|
* Wed Feb 14 2007 Daniel Veillard <veillard@redhat.com> 0.2.0-1.fc7
|
||||||
|
- support for KVM and QEmu
|
||||||
|
- support for network configuration
|
||||||
|
- assorted fixes
|
||||||
|
|
||||||
|
* Mon Jan 22 2007 Daniel Veillard <veillard@redhat.com> 0.1.11-1.fc7
|
||||||
|
- finish inactive Xen domains support
|
||||||
|
- memory leak fix
|
||||||
|
- RelaxNG schemas for XML configs
|
||||||
|
|
||||||
|
* Wed Dec 20 2006 Daniel Veillard <veillard@redhat.com> 0.1.10-1.fc7
|
||||||
|
- support for inactive Xen domains
|
||||||
|
- improved support for Xen display and vnc
|
||||||
|
- a few bug fixes
|
||||||
|
- localization updates
|
||||||
|
|
||||||
|
* Thu Dec 7 2006 Jeremy Katz <katzj@redhat.com> - 0.1.9-2
|
||||||
|
- rebuild against python 2.5
|
||||||
|
|
||||||
|
* Wed Nov 29 2006 Daniel Veillard <veillard@redhat.com> 0.1.9-1
|
||||||
|
- better error reporting
|
||||||
|
- python bindings fixes and extensions
|
||||||
|
- add support for shareable drives
|
||||||
|
- add support for non-bridge style networking
|
||||||
|
- hot plug device support
|
||||||
|
- added support for inactive domains
|
||||||
|
- API to dump core of domains
|
||||||
|
- various bug fixes, cleanups and improvements
|
||||||
|
- updated the localization
|
||||||
|
|
||||||
|
* Tue Nov 7 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-3
|
||||||
|
- it's pkgconfig not pgkconfig !
|
||||||
|
|
||||||
|
* Mon Nov 6 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-2
|
||||||
|
- fixing spec file, added %dist, -devel requires pkgconfig and xen-devel
|
||||||
|
- Resolves: rhbz#202320
|
||||||
|
|
||||||
|
* Mon Oct 16 2006 Daniel Veillard <veillard@redhat.com> 0.1.8-1
|
||||||
|
- fix missing page size detection code for ia64
|
||||||
|
- fix mlock size when getting domain info list from hypervisor
|
||||||
|
- vcpu number initialization
|
||||||
|
- don't label crashed domains as shut off
|
||||||
|
- fix virsh man page
|
||||||
|
- blktapdd support for alternate drivers like blktap
|
||||||
|
- memory leak fixes (xend interface and XML parsing)
|
||||||
|
- compile fix
|
||||||
|
- mlock/munlock size fixes
|
||||||
|
|
||||||
|
* Fri Sep 22 2006 Daniel Veillard <veillard@redhat.com> 0.1.7-1
|
||||||
|
- Fix bug when running against xen-3.0.3 hypercalls
|
||||||
|
- Fix memory bug when getting vcpus info from xend
|
||||||
|
|
||||||
|
* Fri Sep 22 2006 Daniel Veillard <veillard@redhat.com> 0.1.6-1
|
||||||
|
- Support for localization
|
||||||
|
- Support for new Xen-3.0.3 cdrom and disk configuration
|
||||||
|
- Support for setting VNC port
|
||||||
|
- Fix bug when running against xen-3.0.2 hypercalls
|
||||||
|
- Fix reconnection problem when talking directly to http xend
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Jeremy Katz <katzj@redhat.com> - 0.1.5-3
|
||||||
|
- patch from danpb to support new-format cd devices for HVM guests
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Daniel Veillard <veillard@redhat.com> 0.1.5-2
|
||||||
|
- reactivating ia64 support
|
||||||
|
|
||||||
|
* Tue Sep 5 2006 Daniel Veillard <veillard@redhat.com> 0.1.5-1
|
||||||
|
- new release
|
||||||
|
- bug fixes
|
||||||
|
- support for new hypervisor calls
|
||||||
|
- early code for config files and defined domains
|
||||||
|
|
||||||
|
* Mon Sep 4 2006 Daniel Berrange <berrange@redhat.com> - 0.1.4-5
|
||||||
|
- add patch to address dom0_ops API breakage in Xen 3.0.3 tree
|
||||||
|
|
||||||
|
* Mon Aug 28 2006 Jeremy Katz <katzj@redhat.com> - 0.1.4-4
|
||||||
|
- add patch to support paravirt framebuffer in Xen
|
||||||
|
|
||||||
|
* Mon Aug 21 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-3
|
||||||
|
- another patch to fix network handling in non-HVM guests
|
||||||
|
|
||||||
|
* Thu Aug 17 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-2
|
||||||
|
- patch to fix virParseUUID()
|
||||||
|
|
||||||
|
* Wed Aug 16 2006 Daniel Veillard <veillard@redhat.com> 0.1.4-1
|
||||||
|
- vCPUs and affinity support
|
||||||
|
- more complete XML, console and boot options
|
||||||
|
- specific features support
|
||||||
|
- enforced read-only connections
|
||||||
|
- various improvements, bug fixes
|
||||||
|
|
||||||
|
* Wed Aug 2 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-6
|
||||||
|
- add patch from pvetere to allow getting uuid from libvirt
|
||||||
|
|
||||||
|
* Wed Aug 2 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-5
|
||||||
|
- build on ia64 now
|
||||||
|
|
||||||
|
* Thu Jul 27 2006 Jeremy Katz <katzj@redhat.com> - 0.1.3-4
|
||||||
|
- don't BR xen, we just need xen-devel
|
||||||
|
|
||||||
|
* Thu Jul 27 2006 Daniel Veillard <veillard@redhat.com> 0.1.3-3
|
||||||
|
- need rebuild since libxenstore is now versionned
|
||||||
|
|
||||||
|
* Mon Jul 24 2006 Mark McLoughlin <markmc@redhat.com> - 0.1.3-2
|
||||||
|
- Add BuildRequires: xen-devel
|
||||||
|
|
||||||
|
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 0.1.3-1.1
|
||||||
|
- rebuild
|
||||||
|
|
||||||
|
* Tue Jul 11 2006 Daniel Veillard <veillard@redhat.com> 0.1.3-1
|
||||||
|
- support for HVM Xen guests
|
||||||
|
- various bugfixes
|
||||||
|
|
||||||
|
* Mon Jul 3 2006 Daniel Veillard <veillard@redhat.com> 0.1.2-1
|
||||||
|
- added a proxy mechanism for read only access using httpu
|
||||||
|
- fixed header includes paths
|
||||||
|
|
||||||
|
* Wed Jun 21 2006 Daniel Veillard <veillard@redhat.com> 0.1.1-1
|
||||||
|
- extend and cleanup the driver infrastructure and code
|
||||||
|
- python examples
|
||||||
|
- extend uuid support
|
||||||
|
- bug fixes, buffer handling cleanups
|
||||||
|
- support for new Xen hypervisor API
|
||||||
|
- test driver for unit testing
|
||||||
|
- virsh --conect argument
|
||||||
|
|
||||||
* Mon Apr 10 2006 Daniel Veillard <veillard@redhat.com> 0.1.0-1
|
* Mon Apr 10 2006 Daniel Veillard <veillard@redhat.com> 0.1.0-1
|
||||||
- various fixes
|
- various fixes
|
||||||
- new APIs: for Node information and Reboot
|
- new APIs: for Node information and Reboot
|
||||||
|
|||||||
Reference in New Issue
Block a user