Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a5a2a38a5e | |||
| 30f098460c | |||
| 7017c99a1e | |||
| 1c41ce6f30 | |||
| c6db79d97f | |||
| 7b7f8cc27f | |||
| a9cc41b082 | |||
| ce1593f88f |
@@ -0,0 +1,8 @@
|
||||
.build*.log
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
libvirt-0.6.0.tar.gz
|
||||
libvirt-0.6.1.tar.gz
|
||||
libvirt-0.6.2.tar.gz
|
||||
@@ -1,5 +0,0 @@
|
||||
.build*.log
|
||||
*.rpm
|
||||
i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
@@ -1,38 +0,0 @@
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Thu, 17 Dec 2015 13:43:58 +0100
|
||||
Subject: [PATCH] schema: interleave domain name and uuid with other elements
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Allow <name> and <uuid> anywhere under <domain>, not just at the top:
|
||||
|
||||
error:XML document failed to validate against schema: Unable to validate
|
||||
doc against /usr/share/libvirt/schemas/domain.rng
|
||||
Expecting an element name, got nothing
|
||||
Invalid sequence in interleave
|
||||
Element domain failed to validate content
|
||||
|
||||
Introduced with the first RelaxNG schema in commit c642103.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1292131
|
||||
(cherry picked from commit b4e0549febe416ffefc16f389423740d6d65fa74)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
docs/schemas/domaincommon.rng | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index b252a17..48610ce 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -30,8 +30,8 @@
|
||||
<define name="domain">
|
||||
<element name="domain">
|
||||
<ref name="hvs"/>
|
||||
- <ref name="ids"/>
|
||||
<interleave>
|
||||
+ <ref name="ids"/>
|
||||
<optional>
|
||||
<ref name="title"/>
|
||||
</optional>
|
||||
@@ -1,32 +0,0 @@
|
||||
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
||||
Date: Thu, 14 Jan 2016 14:31:17 +0100
|
||||
Subject: [PATCH] leaseshelper: fix crash when no mac is specified
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
If dnsmasq specified DNSMASQ_IAID (so we're dealing with an IPv6
|
||||
lease) but no DNSMASQ_MAC, we skip creation of the new lease object.
|
||||
|
||||
Also skip adding it to the leases array.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1202350
|
||||
(cherry picked from commit df9fe124d650bc438c531673492569da87523d20)
|
||||
Signed-off-by: Ján Tomko <jtomko@redhat.com>
|
||||
---
|
||||
src/network/leaseshelper.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
|
||||
index 2d528f7..6930310 100644
|
||||
--- a/src/network/leaseshelper.c
|
||||
+++ b/src/network/leaseshelper.c
|
||||
@@ -439,7 +439,7 @@ main(int argc, char **argv)
|
||||
|
||||
case VIR_LEASE_ACTION_OLD:
|
||||
case VIR_LEASE_ACTION_ADD:
|
||||
- if (virJSONValueArrayAppend(leases_array_new, lease_new) < 0) {
|
||||
+ if (lease_new && virJSONValueArrayAppend(leases_array_new, lease_new) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("failed to create json"));
|
||||
goto cleanup;
|
||||
@@ -1,63 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 19 Jan 2016 22:19:56 -0500
|
||||
Subject: [PATCH] build: predictably generate systemtap tapsets (bz 1173641)
|
||||
|
||||
The generated output is dependent on perl hashtable ordering, which
|
||||
gives different results for i686 and x86_64. Fix this by sorting
|
||||
the hash keys before iterating over them
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1173641
|
||||
(cherry picked from commit a1edb05c6028470aa24b74aa0f8d5fb5a181128a)
|
||||
---
|
||||
src/rpc/gensystemtap.pl | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/rpc/gensystemtap.pl b/src/rpc/gensystemtap.pl
|
||||
index 2467300..7b80fbf 100755
|
||||
--- a/src/rpc/gensystemtap.pl
|
||||
+++ b/src/rpc/gensystemtap.pl
|
||||
@@ -72,7 +72,7 @@ function libvirt_rpc_auth_name(type, verbose)
|
||||
{
|
||||
EOF
|
||||
my $first = 1;
|
||||
-foreach my $type (keys %auth) {
|
||||
+foreach my $type (sort(keys %auth)) {
|
||||
my $cond = $first ? "if" : "} else if";
|
||||
$first = 0;
|
||||
print " $cond (type == ", $type, ") {\n";
|
||||
@@ -95,7 +95,7 @@ function libvirt_rpc_type_name(type, verbose)
|
||||
{
|
||||
EOF
|
||||
$first = 1;
|
||||
-foreach my $type (keys %type) {
|
||||
+foreach my $type (sort(keys %type)) {
|
||||
my $cond = $first ? "if" : "} else if";
|
||||
$first = 0;
|
||||
print " $cond (type == ", $type, ") {\n";
|
||||
@@ -118,7 +118,7 @@ function libvirt_rpc_status_name(status, verbose)
|
||||
{
|
||||
EOF
|
||||
$first = 1;
|
||||
-foreach my $status (keys %status) {
|
||||
+foreach my $status (sort(keys %status)) {
|
||||
my $cond = $first ? "if" : "} else if";
|
||||
$first = 0;
|
||||
print " $cond (status == ", $status, ") {\n";
|
||||
@@ -141,7 +141,7 @@ function libvirt_rpc_program_name(program, verbose)
|
||||
{
|
||||
EOF
|
||||
$first = 1;
|
||||
-foreach my $prog (keys %funcs) {
|
||||
+foreach my $prog (sort(keys %funcs)) {
|
||||
my $cond = $first ? "if" : "} else if";
|
||||
$first = 0;
|
||||
print " $cond (program == ", $funcs{$prog}->{id}, ") {\n";
|
||||
@@ -165,7 +165,7 @@ function libvirt_rpc_procedure_name(program, version, proc, verbose)
|
||||
{
|
||||
EOF
|
||||
$first = 1;
|
||||
-foreach my $prog (keys %funcs) {
|
||||
+foreach my $prog (sort(keys %funcs)) {
|
||||
my $cond = $first ? "if" : "} else if";
|
||||
$first = 0;
|
||||
print " $cond (program == ", $funcs{$prog}->{id}, " && version == ", $funcs{$prog}->{version}, ") {\n";
|
||||
@@ -1,30 +0,0 @@
|
||||
From: "Daniel P. Berrange" <berrange@redhat.com>
|
||||
Date: Fri, 3 Jul 2015 16:51:56 +0100
|
||||
Subject: [PATCH] rpc: ensure daemon is spawn even if dead socket exists
|
||||
|
||||
The auto-spawn code would originally attempt to spawn the
|
||||
daemon for both ENOENT and ECONNREFUSED errors from connect().
|
||||
The various refactorings eventually lost this so we only
|
||||
spawn the daemon on ENOENT. The result is if the daemon exits
|
||||
uncleanly, so that the socket is left in the filesystem, we
|
||||
will never be able to auto-spawn the daemon again.
|
||||
|
||||
(cherry picked from commit 406ee8c226d2197ba1aaecb9cf3ad2b6df31ae44)
|
||||
---
|
||||
src/rpc/virnetsocket.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 51f94d4..6153e0e 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -610,7 +610,8 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
|
||||
while (retries &&
|
||||
connect(fd, &remoteAddr.data.sa, remoteAddr.len) < 0) {
|
||||
- if (!(spawnDaemon && errno == ENOENT)) {
|
||||
+ if (!(spawnDaemon && (errno == ENOENT ||
|
||||
+ errno == ECONNREFUSED))) {
|
||||
virReportSystemError(errno, _("Failed to connect socket to '%s'"),
|
||||
path);
|
||||
goto cleanup;
|
||||
@@ -1,48 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon, 11 Jan 2016 20:01:24 -0500
|
||||
Subject: [PATCH] rpc: socket: Minor cleanups
|
||||
|
||||
- Add some debugging
|
||||
- Make the loop dependent only on retries
|
||||
- Make it explicit that connect(2) success exits the loop
|
||||
- Invert the error checking logic
|
||||
|
||||
(cherry picked from commit f102c7146ed7f6e04af0ad3bce302476239f2502)
|
||||
---
|
||||
src/rpc/virnetsocket.c | 16 ++++++++++++----
|
||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 6153e0e..dcff69e 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -548,6 +548,9 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
char *rundir = NULL;
|
||||
int ret = -1;
|
||||
|
||||
+ VIR_DEBUG("path=%s spawnDaemon=%d binary=%s", path, spawnDaemon,
|
||||
+ NULLSTR(binary));
|
||||
+
|
||||
memset(&localAddr, 0, sizeof(localAddr));
|
||||
memset(&remoteAddr, 0, sizeof(remoteAddr));
|
||||
|
||||
@@ -608,10 +611,15 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
if (remoteAddr.data.un.sun_path[0] == '@')
|
||||
remoteAddr.data.un.sun_path[0] = '\0';
|
||||
|
||||
- while (retries &&
|
||||
- connect(fd, &remoteAddr.data.sa, remoteAddr.len) < 0) {
|
||||
- if (!(spawnDaemon && (errno == ENOENT ||
|
||||
- errno == ECONNREFUSED))) {
|
||||
+ while (retries) {
|
||||
+ if (connect(fd, &remoteAddr.data.sa, remoteAddr.len) == 0) {
|
||||
+ VIR_DEBUG("connect() succeeded");
|
||||
+ break;
|
||||
+ }
|
||||
+ VIR_DEBUG("connect() failed: retries=%d errno=%d", retries, errno);
|
||||
+
|
||||
+ if (!spawnDaemon ||
|
||||
+ (errno != ENOENT && errno != ECONNREFUSED)) {
|
||||
virReportSystemError(errno, _("Failed to connect socket to '%s'"),
|
||||
path);
|
||||
goto cleanup;
|
||||
@@ -1,40 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon, 11 Jan 2016 20:08:45 -0500
|
||||
Subject: [PATCH] rpc: socket: Explicitly error if we exceed retry count
|
||||
|
||||
When we autolaunch libvirtd for session URIs, we spin in a retry
|
||||
loop waiting for the daemon to start and the connect(2) to succeed.
|
||||
|
||||
However if we exceed the retry count, we don't explicitly raise an
|
||||
error, which can yield a slew of different error messages elsewhere
|
||||
in the code.
|
||||
|
||||
Explicitly raise the last connect(2) failure if we run out of retries.
|
||||
|
||||
(cherry picked from commit 8da02d528068942303923fc4f935e77cccac9c7c)
|
||||
---
|
||||
src/rpc/virnetsocket.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index dcff69e..90951be 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -618,7 +618,9 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
}
|
||||
VIR_DEBUG("connect() failed: retries=%d errno=%d", retries, errno);
|
||||
|
||||
+ retries--;
|
||||
if (!spawnDaemon ||
|
||||
+ retries == 0 ||
|
||||
(errno != ENOENT && errno != ECONNREFUSED)) {
|
||||
virReportSystemError(errno, _("Failed to connect socket to '%s'"),
|
||||
path);
|
||||
@@ -628,7 +630,6 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
if (virNetSocketForkDaemon(binary) < 0)
|
||||
goto cleanup;
|
||||
|
||||
- retries--;
|
||||
usleep(5000);
|
||||
}
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon, 11 Jan 2016 20:13:38 -0500
|
||||
Subject: [PATCH] rpc: socket: Don't repeatedly attempt to launch daemon
|
||||
|
||||
On every socket connect(2) attempt we were re-launching session
|
||||
libvirtd, up to 100 times in 5 seconds.
|
||||
|
||||
This understandably caused some weird load races and intermittent
|
||||
qemu:///session startup failures
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1271183
|
||||
(cherry picked from commit 2eb7a975756d05a5b54ab4acf60083beb6161ac6)
|
||||
---
|
||||
src/rpc/virnetsocket.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 90951be..2ee4b6e 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -547,6 +547,7 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
virSocketAddr remoteAddr;
|
||||
char *rundir = NULL;
|
||||
int ret = -1;
|
||||
+ bool daemonLaunched = false;
|
||||
|
||||
VIR_DEBUG("path=%s spawnDaemon=%d binary=%s", path, spawnDaemon,
|
||||
NULLSTR(binary));
|
||||
@@ -627,8 +628,12 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (virNetSocketForkDaemon(binary) < 0)
|
||||
- goto cleanup;
|
||||
+ if (!daemonLaunched) {
|
||||
+ if (virNetSocketForkDaemon(binary) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ daemonLaunched = true;
|
||||
+ }
|
||||
|
||||
usleep(5000);
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
From: Jiri Denemark <jdenemar@redhat.com>
|
||||
Date: Fri, 15 Jan 2016 10:55:58 +0100
|
||||
Subject: [PATCH] security: Do not restore kernel and initrd labels
|
||||
|
||||
Kernel/initrd files are essentially read-only shareable images and thus
|
||||
should be handled in the same way. We already use the appropriate label
|
||||
for kernel/initrd files when starting a domain, but when a domain gets
|
||||
destroyed we would remove the labels which would make other running
|
||||
domains using the same files very unhappy.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=921135
|
||||
|
||||
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
||||
(cherry picked from commit 68acc701bd449481e3206723c25b18fcd3d261b7)
|
||||
---
|
||||
src/security/security_dac.c | 8 --------
|
||||
src/security/security_selinux.c | 8 --------
|
||||
2 files changed, 16 deletions(-)
|
||||
|
||||
diff --git a/src/security/security_dac.c b/src/security/security_dac.c
|
||||
index deb6980..d01215f 100644
|
||||
--- a/src/security/security_dac.c
|
||||
+++ b/src/security/security_dac.c
|
||||
@@ -971,14 +971,6 @@ virSecurityDACRestoreSecurityAllLabel(virSecurityManagerPtr mgr,
|
||||
virSecurityDACRestoreSecurityFileLabel(def->os.loader->nvram) < 0)
|
||||
rc = -1;
|
||||
|
||||
- if (def->os.kernel &&
|
||||
- virSecurityDACRestoreSecurityFileLabel(def->os.kernel) < 0)
|
||||
- rc = -1;
|
||||
-
|
||||
- if (def->os.initrd &&
|
||||
- virSecurityDACRestoreSecurityFileLabel(def->os.initrd) < 0)
|
||||
- rc = -1;
|
||||
-
|
||||
if (def->os.dtb &&
|
||||
virSecurityDACRestoreSecurityFileLabel(def->os.dtb) < 0)
|
||||
rc = -1;
|
||||
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
|
||||
index 6e67a86..2475a80 100644
|
||||
--- a/src/security/security_selinux.c
|
||||
+++ b/src/security/security_selinux.c
|
||||
@@ -1953,14 +1953,6 @@ virSecuritySELinuxRestoreSecurityAllLabel(virSecurityManagerPtr mgr,
|
||||
virSecuritySELinuxRestoreSecurityFileLabel(mgr, def->os.loader->nvram) < 0)
|
||||
rc = -1;
|
||||
|
||||
- if (def->os.kernel &&
|
||||
- virSecuritySELinuxRestoreSecurityFileLabel(mgr, def->os.kernel) < 0)
|
||||
- rc = -1;
|
||||
-
|
||||
- if (def->os.initrd &&
|
||||
- virSecuritySELinuxRestoreSecurityFileLabel(mgr, def->os.initrd) < 0)
|
||||
- rc = -1;
|
||||
-
|
||||
if (def->os.dtb &&
|
||||
virSecuritySELinuxRestoreSecurityFileLabel(mgr, def->os.dtb) < 0)
|
||||
rc = -1;
|
||||
@@ -1,37 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 15 Mar 2016 17:04:32 -0400
|
||||
Subject: [PATCH] rpc: wait longer for session daemon to start up
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1271183
|
||||
|
||||
We only wait 0.5 seconds for the session daemon to start up and present
|
||||
its socket, which isn't sufficient for many users. Bump up the sleep
|
||||
interval and retry amount so we wait for a total of 5.0 seconds.
|
||||
|
||||
(cherry picked from commit ca0c06f4008154de55e0b3109885facd0bf02d32)
|
||||
---
|
||||
src/rpc/virnetsocket.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
|
||||
index 2ee4b6e..275f1f5 100644
|
||||
--- a/src/rpc/virnetsocket.c
|
||||
+++ b/src/rpc/virnetsocket.c
|
||||
@@ -542,7 +542,7 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
char *lockpath = NULL;
|
||||
int lockfd = -1;
|
||||
int fd = -1;
|
||||
- int retries = 100;
|
||||
+ int retries = 500;
|
||||
virSocketAddr localAddr;
|
||||
virSocketAddr remoteAddr;
|
||||
char *rundir = NULL;
|
||||
@@ -635,7 +635,7 @@ int virNetSocketNewConnectUNIX(const char *path,
|
||||
daemonLaunched = true;
|
||||
}
|
||||
|
||||
- usleep(5000);
|
||||
+ usleep(10000);
|
||||
}
|
||||
|
||||
localAddr.len = sizeof(localAddr.data);
|
||||
@@ -1,27 +0,0 @@
|
||||
From: Jovanka Gulicoska <jovanka.gulicoska@gmail.com>
|
||||
Date: Thu, 17 Mar 2016 20:02:20 +0100
|
||||
Subject: [PATCH] driver: log missing modules as INFO, not WARN
|
||||
|
||||
Missing modules is a common expected scenario for most libvirt usage on
|
||||
RPM distributions like Fedora, so it doesn't really warrant logging at
|
||||
WARN level. Use INFO instead
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1274849
|
||||
(cherry picked from commit 9a0c7f5f834185db9017c34aabc03ad99cf37bed)
|
||||
---
|
||||
src/driver.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/driver.c b/src/driver.c
|
||||
index db03438..f926fe4 100644
|
||||
--- a/src/driver.c
|
||||
+++ b/src/driver.c
|
||||
@@ -62,7 +62,7 @@ virDriverLoadModule(const char *name)
|
||||
return NULL;
|
||||
|
||||
if (access(modfile, R_OK) < 0) {
|
||||
- VIR_WARN("Module %s not accessible", modfile);
|
||||
+ VIR_INFO("Module %s not accessible", modfile);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 28 Apr 2015 17:38:00 -0400
|
||||
Subject: [PATCH] polkit: Allow password-less access for 'libvirt' group
|
||||
|
||||
Many users, who admin their own machines, want to be able to access
|
||||
system libvirtd via tools like virt-manager without having to enter
|
||||
a root password. Just google 'virt-manager without password' and
|
||||
you'll find many hits. I've read at least 5 blog posts over the years
|
||||
describing slightly different ways of achieving this goal.
|
||||
|
||||
Let's finally add official support for this.
|
||||
|
||||
Install a polkit-1 rules file granting password-less auth for any user
|
||||
in the new 'libvirt' group. Create the group on RPM install
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=957300
|
||||
(cherry picked from commit e94979e901517af9fdde358d7b7c92cc055dd50c)
|
||||
---
|
||||
daemon/Makefile.am | 13 +++++++++++++
|
||||
daemon/libvirt.rules | 9 +++++++++
|
||||
libvirt.spec.in | 15 +++++++++++++--
|
||||
3 files changed, 35 insertions(+), 2 deletions(-)
|
||||
create mode 100644 daemon/libvirt.rules
|
||||
|
||||
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
|
||||
index b95a79d..9c5ea37 100644
|
||||
--- a/daemon/Makefile.am
|
||||
+++ b/daemon/Makefile.am
|
||||
@@ -53,6 +53,7 @@ EXTRA_DIST = \
|
||||
libvirtd.init.in \
|
||||
libvirtd.upstart \
|
||||
libvirtd.policy.in \
|
||||
+ libvirt.rules \
|
||||
libvirtd.sasl \
|
||||
libvirtd.service.in \
|
||||
libvirtd.socket.in \
|
||||
@@ -233,6 +234,8 @@ policyauth = auth_admin_keep_session
|
||||
else ! WITH_POLKIT0
|
||||
policydir = $(datadir)/polkit-1/actions
|
||||
policyauth = auth_admin_keep
|
||||
+rulesdir = $(datadir)/polkit-1/rules.d
|
||||
+rulesfile = libvirt.rules
|
||||
endif ! WITH_POLKIT0
|
||||
endif WITH_POLKIT
|
||||
|
||||
@@ -263,9 +266,19 @@ if WITH_POLKIT
|
||||
install-data-polkit::
|
||||
$(MKDIR_P) $(DESTDIR)$(policydir)
|
||||
$(INSTALL_DATA) libvirtd.policy $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
+if ! WITH_POLKIT0
|
||||
+ $(MKDIR_P) $(DESTDIR)$(rulesdir)
|
||||
+ $(INSTALL_DATA) $(srcdir)/$(rulesfile) $(DESTDIR)$(rulesdir)/50-libvirt.rules
|
||||
+endif ! WITH_POLKIT0
|
||||
+
|
||||
uninstall-data-polkit::
|
||||
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||
rmdir $(DESTDIR)$(policydir) || :
|
||||
+if ! WITH_POLKIT0
|
||||
+ rm -f $(DESTDIR)$(rulesdir)/50-libvirt.rules
|
||||
+ rmdir $(DESTDIR)$(rulesdir) || :
|
||||
+endif ! WITH_POLKIT0
|
||||
+
|
||||
else ! WITH_POLKIT
|
||||
install-data-polkit::
|
||||
uninstall-data-polkit::
|
||||
diff --git a/daemon/libvirt.rules b/daemon/libvirt.rules
|
||||
new file mode 100644
|
||||
index 0000000..01a15fa
|
||||
--- /dev/null
|
||||
+++ b/daemon/libvirt.rules
|
||||
@@ -0,0 +1,9 @@
|
||||
+// Allow any user in the 'libvirt' group to connect to system libvirtd
|
||||
+// without entering a password.
|
||||
+
|
||||
+polkit.addRule(function(action, subject) {
|
||||
+ if (action.id == "org.libvirt.unix.manage" &&
|
||||
+ subject.isInGroup("libvirt")) {
|
||||
+ return polkit.Result.YES;
|
||||
+ }
|
||||
+});
|
||||
diff --git a/libvirt.spec.in b/libvirt.spec.in
|
||||
index dc327a2..a23629d 100644
|
||||
--- a/libvirt.spec.in
|
||||
+++ b/libvirt.spec.in
|
||||
@@ -1631,9 +1631,9 @@ then
|
||||
fi
|
||||
|
||||
%if %{with_libvirtd}
|
||||
+%pre daemon
|
||||
%if ! %{with_driver_modules}
|
||||
%if %{with_qemu}
|
||||
-%pre daemon
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
# We want soft static allocation of well-known ids, as disk images
|
||||
# are commonly shared across NFS mounts by id rather than name; see
|
||||
@@ -1647,11 +1647,21 @@ if ! getent passwd qemu >/dev/null; then
|
||||
useradd -r -g qemu -G kvm -d / -s /sbin/nologin -c "qemu user" qemu
|
||||
fi
|
||||
fi
|
||||
-exit 0
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
||||
+ %if %{with_polkit}
|
||||
+ %if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
+# 'libvirt' group is just to allow password-less polkit access to
|
||||
+# libvirtd. The uid number is irrelevant, so we use dynamic allocation
|
||||
+# described at the above link.
|
||||
+getent group libvirt >/dev/null || groupadd -r libvirt
|
||||
+ %endif
|
||||
+ %endif
|
||||
+
|
||||
+exit 0
|
||||
+
|
||||
%post daemon
|
||||
|
||||
%if %{with_systemd}
|
||||
@@ -1925,6 +1935,7 @@ exit 0
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 6
|
||||
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
|
||||
%{_datadir}/polkit-1/actions/org.libvirt.api.policy
|
||||
+%{_datadir}/polkit-1/rules.d/50-libvirt.rules
|
||||
%else
|
||||
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
|
||||
%endif
|
||||
@@ -4,7 +4,7 @@ NAME := libvirt
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
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))
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
From: "Daniel P. Berrange" <berrange@redhat.com>
|
||||
To: libvir-list@redhat.com
|
||||
Date: Thu, 30 Apr 2009 15:09:05 +0100
|
||||
Subject: [libvirt] PATCH: Enable migration with QEMU >= 0.10.0
|
||||
|
||||
The KVM migration code was added to QEMU for the 0.10.0 release, so we
|
||||
should enable this in libvirt now.
|
||||
|
||||
Daniel
|
||||
|
||||
diff -r be7993675e07 src/qemu_conf.c
|
||||
--- a/src/qemu_conf.c Thu Apr 30 14:49:27 2009 +0100
|
||||
+++ b/src/qemu_conf.c Thu Apr 30 15:08:45 2009 +0100
|
||||
@@ -472,16 +472,13 @@ int qemudExtractVersionInfo(const char *
|
||||
|
||||
/*
|
||||
* Handling of -incoming arg with varying features
|
||||
- * -incoming tcp (kvm >= 79)
|
||||
- * -incoming exec (kvm >= 80)
|
||||
+ * -incoming tcp (kvm >= 79, qemu >= 0.10.0)
|
||||
+ * -incoming exec (kvm >= 80, qemu >= 0.10.0)
|
||||
* -incoming stdio (all earlier kvm)
|
||||
*
|
||||
* NB, there was a pre-kvm-79 'tcp' support, but it
|
||||
* was broken, because it blocked the monitor console
|
||||
* while waiting for data, so pretend it doesn't exist
|
||||
- *
|
||||
- * XXX when next QEMU release after 0.9.1 arrives,
|
||||
- * we'll need to add MIGRATE_QEMU_TCP/EXEC here too
|
||||
*/
|
||||
if (kvm_version >= 79) {
|
||||
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
|
||||
@@ -489,6 +486,9 @@ int qemudExtractVersionInfo(const char *
|
||||
flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
|
||||
} else if (kvm_version > 0) {
|
||||
flags |= QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO;
|
||||
+ } else if (version >= 10000) {
|
||||
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP;
|
||||
+ flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC;
|
||||
}
|
||||
|
||||
if (retversion)
|
||||
|
||||
|
||||
--
|
||||
@@ -0,0 +1,13 @@
|
||||
diff -rup libvirt-0.6.2/src/security_selinux.c new/src/security_selinux.c
|
||||
--- libvirt-0.6.2/src/security_selinux.c 2009-05-10 22:04:25.000000000 -0400
|
||||
+++ new/src/security_selinux.c 2009-05-10 22:06:09.000000000 -0400
|
||||
@@ -338,6 +338,9 @@ SELinuxSetSecurityImageLabel(virConnectP
|
||||
{
|
||||
const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
|
||||
|
||||
+ if (!disk->src)
|
||||
+ return 0;
|
||||
+
|
||||
if (disk->shared) {
|
||||
return SELinuxSetFilecon(conn, disk->src, default_image_context);
|
||||
} else if (disk->readonly) {
|
||||
@@ -0,0 +1,26 @@
|
||||
From 0ae4c67ff5f1d24698c5cfc8a9719d333c892644 Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Thu, 16 Apr 2009 11:23:55 +0100
|
||||
Subject: [PATCH 1/3] qemu -drive takes format= not fmt=
|
||||
|
||||
Seems like a simple typo - it has been "format=" since the flag
|
||||
was introduced, but we added it as "fmt=".
|
||||
|
||||
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
|
||||
---
|
||||
src/qemu_conf.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
|
||||
index f36c927..6f9e610 100644
|
||||
--- a/src/qemu_conf.c
|
||||
+++ b/src/qemu_conf.c
|
||||
@@ -1135,7 +1135,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
|
||||
disk->device == VIR_DOMAIN_DISK_DEVICE_DISK)
|
||||
virBufferAddLit(&opt, ",boot=on");
|
||||
if (disk->driverType)
|
||||
- virBufferVSprintf(&opt, ",fmt=%s", disk->driverType);
|
||||
+ virBufferVSprintf(&opt, ",format=%s", disk->driverType);
|
||||
|
||||
if (disk->cachemode) {
|
||||
const char *mode =
|
||||
@@ -0,0 +1,76 @@
|
||||
diff -rup libvirt-0.6.2/src/security_selinux.c libvirt-0.6.2.new/src/security_selinux.c
|
||||
--- libvirt-0.6.2/src/security_selinux.c 2009-04-03 15:36:56.000000000 +0100
|
||||
+++ libvirt-0.6.2.new/src/security_selinux.c 2009-05-05 13:39:42.000000000 +0100
|
||||
@@ -24,11 +24,12 @@
|
||||
#include "virterror_internal.h"
|
||||
#include "util.h"
|
||||
#include "memory.h"
|
||||
-
|
||||
+#include "logging.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_SECURITY
|
||||
|
||||
static char default_domain_context[1024];
|
||||
+static char default_content_context[1024];
|
||||
static char default_image_context[1024];
|
||||
#define SECURITY_SELINUX_VOID_DOI "0"
|
||||
#define SECURITY_SELINUX_NAME "selinux"
|
||||
@@ -148,8 +149,13 @@ SELinuxInitialize(virConnectPtr conn)
|
||||
close(fd);
|
||||
|
||||
ptr = strchrnul(default_image_context, '\n');
|
||||
- *ptr = '\0';
|
||||
-
|
||||
+ if (*ptr == '\n') {
|
||||
+ *ptr = '\0';
|
||||
+ strcpy(default_content_context, ptr+1);
|
||||
+ ptr = strchrnul(default_content_context, '\n');
|
||||
+ if (*ptr == '\n')
|
||||
+ *ptr = '\0';
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -275,6 +281,8 @@ SELinuxSetFilecon(virConnectPtr conn, co
|
||||
{
|
||||
char ebuf[1024];
|
||||
|
||||
+ VIR_INFO("Setting SELinux context on '%s' to '%s'", path, tcon);
|
||||
+
|
||||
if(setfilecon(path, tcon) < 0) {
|
||||
virSecurityReportError(conn, VIR_ERR_ERROR,
|
||||
_("%s: unable to set security context "
|
||||
@@ -299,6 +307,8 @@ SELinuxRestoreSecurityImageLabel(virConn
|
||||
char *newpath = NULL;
|
||||
const char *path = disk->src;
|
||||
|
||||
+ /* Don't restore labels on readoly/shared disks, because
|
||||
+ * other VMs may still be accessing these */
|
||||
if (disk->readonly || disk->shared)
|
||||
return 0;
|
||||
|
||||
@@ -328,8 +338,13 @@ SELinuxSetSecurityImageLabel(virConnectP
|
||||
{
|
||||
const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
|
||||
|
||||
- if (secdef->imagelabel)
|
||||
+ if (disk->shared) {
|
||||
+ return SELinuxSetFilecon(conn, disk->src, default_image_context);
|
||||
+ } else if (disk->readonly) {
|
||||
+ return SELinuxSetFilecon(conn, disk->src, default_content_context);
|
||||
+ } else if (secdef->imagelabel) {
|
||||
return SELinuxSetFilecon(conn, disk->src, secdef->imagelabel);
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -403,9 +418,6 @@ SELinuxSetSecurityLabel(virConnectPtr co
|
||||
|
||||
if (secdef->imagelabel) {
|
||||
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
||||
- if (vm->def->disks[i]->readonly ||
|
||||
- vm->def->disks[i]->shared) continue;
|
||||
-
|
||||
if (SELinuxSetSecurityImageLabel(conn, vm, vm->def->disks[i]) < 0)
|
||||
return -1;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
--- src/qemu_conf.c.orig 2009-04-02 11:50:10.000000000 +0200
|
||||
+++ src/qemu_conf.c 2009-04-03 17:46:59.000000000 +0200
|
||||
@@ -779,6 +779,20 @@ int qemudBuildCommandLine(virConnectPtr
|
||||
char domid[50];
|
||||
char *pidfile;
|
||||
const char *cpu = NULL;
|
||||
+ int skipSound = 0;
|
||||
+
|
||||
+ if (driver->securityDriver &&
|
||||
+ driver->securityDriver->name &&
|
||||
+ STREQ(driver->securityDriver->name, "selinux") &&
|
||||
+ getuid() == 0) {
|
||||
+ static int soundWarned = 0;
|
||||
+ skipSound = 1;
|
||||
+ if (vm->def->nsounds &&
|
||||
+ !soundWarned) {
|
||||
+ soundWarned = 1;
|
||||
+ VIR_WARN0("Sound cards for VMs are disabled while SELinux security model is active");
|
||||
+ }
|
||||
+ }
|
||||
|
||||
uname_normalize(&ut);
|
||||
|
||||
@@ -1425,7 +1439,8 @@ int qemudBuildCommandLine(virConnectPtr
|
||||
}
|
||||
|
||||
/* Add sound hardware */
|
||||
- if (vm->def->nsounds) {
|
||||
+ if (vm->def->nsounds &&
|
||||
+ !skipSound) {
|
||||
int size = 100;
|
||||
char *modstr;
|
||||
if (VIR_ALLOC_N(modstr, size+1) < 0)
|
||||
@@ -0,0 +1,45 @@
|
||||
From 3d7771e0570e09096ad9391a857dad48b150bc0c Mon Sep 17 00:00:00 2001
|
||||
From: Mark McLoughlin <markmc@redhat.com>
|
||||
Date: Wed, 6 May 2009 16:33:28 +0100
|
||||
Subject: [PATCH] Fix qemu driver's interpretation of <hostdev managed='yes'/>
|
||||
|
||||
This change:
|
||||
|
||||
Tue Mar 3 08:55:13 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Don't try to detach & reset PCI devices while running test
|
||||
suite for XML-> ARGV conversion.
|
||||
* src/qemu_driver.c: Add qemuPrepareHostDevices() helper to
|
||||
detach and reset PCI devices.
|
||||
* src/qemu_conf.c: Don't detach & reset PCI devices while
|
||||
building the command line argv
|
||||
|
||||
accidentally did this:
|
||||
|
||||
- if (hostdev->managed) {
|
||||
+ if (!hostdev->managed) {
|
||||
|
||||
Which results in managed='yes' not causing the device to be
|
||||
detached when the guest is starting.
|
||||
|
||||
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
|
||||
---
|
||||
src/qemu_driver.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 5898026..59312c0 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -1215,7 +1215,7 @@ static int qemuPrepareHostDevices(virConnectPtr conn,
|
||||
if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
|
||||
continue;
|
||||
|
||||
- if (!hostdev->managed) {
|
||||
+ if (hostdev->managed) {
|
||||
pciDevice *dev = pciGetDevice(conn,
|
||||
hostdev->source.subsys.u.pci.domain,
|
||||
hostdev->source.subsys.u.pci.bus,
|
||||
--
|
||||
1.6.0.6
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
commit 0e51348cb9aeafe5e2fd6469a4bde0baa1eb8720
|
||||
Author: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Mon May 4 15:06:03 2009 -0400
|
||||
|
||||
Refresh QEMU driver capabilities for each getCapabilities call.
|
||||
|
||||
Also fix up a couple issues where caps are accessed without locking
|
||||
the driver structure.
|
||||
|
||||
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
|
||||
index 23ea961..790dac6 100644
|
||||
--- a/src/qemu_driver.c
|
||||
+++ b/src/qemu_driver.c
|
||||
@@ -1885,10 +1885,12 @@ static int qemudGetNodeInfo(virConnectPtr conn,
|
||||
|
||||
static char *qemudGetCapabilities(virConnectPtr conn) {
|
||||
struct qemud_driver *driver = conn->privateData;
|
||||
- char *xml;
|
||||
+ char *xml = NULL;
|
||||
|
||||
qemuDriverLock(driver);
|
||||
- if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
|
||||
+ virCapabilitiesFree(qemu_driver->caps);
|
||||
+ if ((qemu_driver->caps = qemudCapsInit()) == NULL ||
|
||||
+ (xml = virCapabilitiesFormatXML(driver->caps)) == NULL)
|
||||
virReportOOMError(conn);
|
||||
qemuDriverUnlock(driver);
|
||||
|
||||
@@ -3169,20 +3171,26 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel)
|
||||
+static int qemudNodeGetSecurityModel(virConnectPtr conn,
|
||||
+ virSecurityModelPtr secmodel)
|
||||
{
|
||||
struct qemud_driver *driver = (struct qemud_driver *)conn->privateData;
|
||||
char *p;
|
||||
+ int ret = 0;
|
||||
|
||||
- if (!driver->securityDriver)
|
||||
- return -2;
|
||||
+ qemuDriverLock(driver);
|
||||
+ if (!driver->securityDriver) {
|
||||
+ ret = -2;
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
|
||||
p = driver->caps->host.secModel.model;
|
||||
if (strlen(p) >= VIR_SECURITY_MODEL_BUFLEN-1) {
|
||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||
_("security model string exceeds max %d bytes"),
|
||||
VIR_SECURITY_MODEL_BUFLEN-1);
|
||||
- return -1;
|
||||
+ ret = -1;
|
||||
+ goto cleanup;
|
||||
}
|
||||
strcpy(secmodel->model, p);
|
||||
|
||||
@@ -3191,10 +3199,14 @@ static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr sec
|
||||
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
|
||||
_("security DOI string exceeds max %d bytes"),
|
||||
VIR_SECURITY_DOI_BUFLEN-1);
|
||||
- return -1;
|
||||
+ ret = -1;
|
||||
+ goto cleanup;
|
||||
}
|
||||
strcpy(secmodel->doi, p);
|
||||
- return 0;
|
||||
+
|
||||
+cleanup:
|
||||
+ qemuDriverUnlock(driver);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/* TODO: check seclabel restore */
|
||||
+528
-2923
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user