Hi,
attached patch drops the assumption that a non-root user has read access
to the guest OSes partition - he doesn't need to since all interaction
is handled via libvirt and giving the user read access for a simple MBR
block read test seems like overkill. Please apply if appropriate, patch
is against current hg.
Cheers,
 -- Guido

# HG changeset patch
# User [EMAIL PROTECTED]
# Date 1201618288 -3600
# Node ID 96a103cd78dc7616a2e1e54f2e100fe156bebafd
# Parent  5109856f3bedf3b8eff7f78ce881b39bf8d30029
Don't fail if a non root user can't read from the block device due to 
insufficient permissions

diff -r 5109856f3bed -r 96a103cd78dc virtinst/DistroManager.py
--- a/virtinst/DistroManager.py Thu Jan 10 20:34:27 2008 -0500
+++ b/virtinst/DistroManager.py Tue Jan 29 15:51:28 2008 +0100
@@ -22,6 +22,7 @@
 
 import logging
 import os
+import errno
 import gzip
 import re
 import struct
@@ -239,7 +240,14 @@ class DistroInstaller(Guest.Installer):
 
     def post_install_check(self, guest):
         # Check for the 0xaa55 signature at the end of the MBR
-        fd = os.open(guest._install_disks[0].path, os.O_RDONLY)
+        try:
+            fd = os.open(guest._install_disks[0].path, os.O_RDONLY)
+        except OSError, (err, msg):
+            logging.debug("Failed to open guest disk: %s" % msg)
+            if err == errno.EACCES and os.geteuid() != 0:
+                return True # non root might not have access to block devices
+            else:
+                raise
         buf = os.read(fd, 512)
         os.close(fd)
         return len(buf) == 512 and struct.unpack("H", buf[0x1fe: 0x200]) == 
(0xaa55,)
@@ -284,7 +292,14 @@ class PXEInstaller(Guest.Installer):
 
     def post_install_check(self, guest):
         # Check for the 0xaa55 signature at the end of the MBR
-        fd = os.open(guest._install_disks[0].path, os.O_RDONLY)
+        try:
+            fd = os.open(guest._install_disks[0].path, os.O_RDONLY)
+        except OSError, (err, msg):
+            logging.debug("Failed to open guest disk: %s" % msg)
+            if err == errno.EACCES and os.geteuid() != 0:
+                return True # non root might not have access to block devices
+            else:
+                raise
         buf = os.read(fd, 512)
         os.close(fd)
         return len(buf) == 512 and struct.unpack("H", buf[0x1fe: 0x200]) == 
(0xaa55,)

--
Libvir-list mailing list
Libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to