On Wednesday 03 December 2008 17:21:47 Cole Robinson wrote: > Andreas Schneider wrote: > > On Monday 01 December 2008 16:07:45 Cole Robinson wrote: > >> Hmm, so your pool xml lists the target directory with a trailing slash? > >> I'm not seeing that. What version of libvirt are you using, and can you > >> provide the pools xml? > > > > Hi, > > > > I'm using virt-manager to connect to a remote host, so if I create a pool > > I have to specify the path to the pool manually. > > > > This means you can enter as many trailing slashes as you want. So the > > questions is, should the slashes be stripped during the creation of the > > pool too? > > > > <pool type='dir'> > > <name>tmp</name> > > <uuid>17e0c17a-3cd3-bc20-f1bc-7c9ffaceb255</uuid> > > <capacity>0</capacity> > > <allocation>0</allocation> > > <available>0</available> > > <source> > > </source> > > <target> > > <path>/var/lib/libvirt/images/tmp/////</path> > > <permissions> > > <mode>0700</mode> > > <owner>0</owner> > > <group>0</group> > > </permissions> > > </target> > > </pool> > > Hmm, yes, seems like libvirt should be sanitizing the target path when > the pool is defined (though virtinst could certainly do this too). > > Looks like there could be arbitrary '/' in the middle of the path > though, so if you use something like os.path.abspath in your patch it > should sanitize everything appropriately. Thanks, this was the function I was looking for. I've attached an updated patch. I think it should be fixed in libvirt and virt-manager. Just to be sure that you can't run into the problem again. > > Thank, > Cole Cheers, -- andreas -- Andreas Schneider, SUSE Labs, http://www.suse.de/ SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nuernberg)
Index: virtinst-0.400.0/virtinst/util.py =================================================================== --- virtinst-0.400.0.orig/virtinst/util.py +++ virtinst-0.400.0/virtinst/util.py @@ -455,7 +455,8 @@ def lookup_pool_by_path(conn, path): pool_list = conn.listStoragePools() + conn.listDefinedStoragePools() for name in pool_list: pool = conn.storagePoolLookupByName(name) - if get_xml_path(pool.XMLDesc(0), "/pool/target/path") == path: + xml_path = get_xml_path(pool.XMLDesc(0), "/pool/target/path") + if os.path.abspath(xml_path) == path: return pool return None
Description: This is a digitally signed message part.