From 481419ebb6db14771912ba459b98f9fc58685cb3 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Apr 08 2008 16:38:36 +0000 Subject: upstream release of 0.4.2, remove old patches, daniel --- diff --git a/.cvsignore b/.cvsignore index 55e6af8..7b87813 100644 --- a/.cvsignore +++ b/.cvsignore @@ -3,3 +3,4 @@ i686 x86_64 libvirt-*.tar.gz +libvirt-0.4.2.tar.gz diff --git a/libvirt-0.4.1-daemon-startup.patch b/libvirt-0.4.1-daemon-startup.patch deleted file mode 100644 index ccf19bb..0000000 --- a/libvirt-0.4.1-daemon-startup.patch +++ /dev/null @@ -1,48 +0,0 @@ -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: diff --git a/libvirt-0.4.1-polkit.patch b/libvirt-0.4.1-polkit.patch deleted file mode 100644 index 4c71c70..0000000 --- a/libvirt-0.4.1-polkit.patch +++ /dev/null @@ -1,400 +0,0 @@ -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 - #include - #include -+#ifdef HAVE_SYS_WAIT_H -+#include -+#endif - - #include - #include -@@ -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 = { diff --git a/libvirt-0.4.1-qemu-media-change.patch b/libvirt-0.4.1-qemu-media-change.patch deleted file mode 100644 index f0845ab..0000000 --- a/libvirt-0.4.1-qemu-media-change.patch +++ /dev/null @@ -1,128 +0,0 @@ -commit 570fd656d1b67e5d02f52e107946930257e811a7 -Author: Daniel Veillard -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, " \n", typeAttrs[disk->type], disk->src) < 0) -- goto no_memory; -+ if (disk->src[0]) -+ if (virBufferVSprintf(buf, " \n", -+ typeAttrs[disk->type], disk->src) < 0) -+ goto no_memory; - - if (virBufferVSprintf(buf, " \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; - } diff --git a/libvirt-0.4.1-qemud1.patch b/libvirt-0.4.1-qemud1.patch deleted file mode 100644 index d8d8fa8..0000000 --- a/libvirt-0.4.1-qemud1.patch +++ /dev/null @@ -1,38 +0,0 @@ - - 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 ---- - 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; - } - diff --git a/libvirt-0.4.1-qemud2.patch b/libvirt-0.4.1-qemud2.patch deleted file mode 100644 index 51dbd3b..0000000 --- a/libvirt-0.4.1-qemud2.patch +++ /dev/null @@ -1,23 +0,0 @@ - - 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 ---- - 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); - } diff --git a/libvirt-0.4.1-tap-ifname.patch b/libvirt-0.4.1-tap-ifname.patch deleted file mode 100644 index c456ade..0000000 --- a/libvirt-0.4.1-tap-ifname.patch +++ /dev/null @@ -1,63 +0,0 @@ -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; diff --git a/libvirt-0.4.1-xen-boot-device.patch b/libvirt-0.4.1-xen-boot-device.patch deleted file mode 100644 index 2523601..0000000 --- a/libvirt-0.4.1-xen-boot-device.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit 2bcf35336cd649e58c08d7cf3452a8d4353bcf85 -Author: Daniel Veillard -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, " %s\n", loader); - -- if (kernel) { -+ if ((kernel) && ((!loader) || (STRNEQ(kernel, loader)))) { - virBufferVSprintf(buf, " %s\n", kernel); - if (initrd && initrd[0]) - virBufferVSprintf(buf, " %s\n", initrd); diff --git a/libvirt-iscsi-sysfs4.patch b/libvirt-iscsi-sysfs4.patch deleted file mode 100644 index 4ebb0e5..0000000 --- a/libvirt-iscsi-sysfs4.patch +++ /dev/null @@ -1,146 +0,0 @@ ---- 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); - } - - diff --git a/libvirt-source-dir-fix.patch b/libvirt-source-dir-fix.patch deleted file mode 100644 index db02625..0000000 --- a/libvirt-source-dir-fix.patch +++ /dev/null @@ -1,17 +0,0 @@ -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," \n", def->source.dir) < 0) -+ virBufferVSprintf(buf," \n", def->source.dir) < 0) - goto no_memory; - if ((options->flags & VIR_STORAGE_BACKEND_POOL_SOURCE_ADAPTER) && - def->source.adapter && diff --git a/libvirt-storage-api-iscsi-sendtarget.patch b/libvirt-storage-api-iscsi-sendtarget.patch deleted file mode 100644 index 31e6a9d..0000000 --- a/libvirt-storage-api-iscsi-sendtarget.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- /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; - diff --git a/libvirt.spec b/libvirt.spec index 632ca35..439f0c1 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -20,21 +20,11 @@ Summary: Library providing a simple API virtualization Name: libvirt -Version: 0.4.1 -Release: 7%{?dist}%{?extra_release} +Version: 0.4.2 +Release: 1%{?dist}%{?extra_release} License: LGPL Group: Development/Libraries 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 URL: http://libvirt.org/ BuildRequires: python python-devel @@ -146,16 +136,6 @@ of recent versions of Linux (and other OSes). %prep %setup -q -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 %build # Xen is available only on i386 x86_64 ia64 @@ -299,6 +279,11 @@ fi %doc docs/examples/python %changelog +* Tue Apr 8 2008 Daniel Veillard ,veillard@redhat.com> 0.4.2-1.fc9 +- upstream release 0.4.2 +- many bug fixes +- localization updates + * Thu Apr 4 2008 Daniel P. Berrange - 0.4.1-7.fc9 - Don't run polkit-auth as root - Don't request polkit auth if client is root diff --git a/sources b/sources index 36771e7..8f8ccc8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4dfe45869f082393cfd09f4690454c12 libvirt-0.4.1.tar.gz +c87e3d91eaa9445bb3cb1ba191573c83 libvirt-0.4.2.tar.gz