On 04/20/2014 04:13 PM, Peter Krempa wrote: > Avoid breaking gluster volumes that don't have local representation. Use > the provided name when canonicalization fails. Broken by commit 79f11b35 > > Fixes: > $ virsh pool-start glusterpool > error: Failed to start pool glusterpool > error: unable to resolve 'asdf': No such file or directory > --- > src/util/virstoragefile.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) I'd feel a bit better if we had testsuite coverage for this (since my broken commit still managed to pass 'make check', it shows our testsuite has a hole). > > diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c > index 5fbb6e7..c707200 100644 > --- a/src/util/virstoragefile.c > +++ b/src/util/virstoragefile.c > @@ -1012,10 +1012,12 @@ virStorageFileGetMetadataFromBuf(const char *path, > virStorageFileMetadataPtr ret = NULL; > char *canonPath; > > - if (!(canonPath = canonicalize_file_name(path))) { > + if (!(canonPath = canonicalize_file_name(path)) && > + VIR_STRDUP(canonPath, path) < 0) { > virReportSystemError(errno, _("unable to resolve '%s'"), path); > return NULL; > } I'm not sure if I like this. We are blindly trying to resolve 'path' as if it were a local file name, and then if it failed, use 'path' as-is in case it was a remote name. I think what we should really be doing is: if (virStorageIsFile(path)) { if (!(canonPath = canonicalize_file_name(path))) { error; } } else { if (VIR_STRDUP(canonPath, path) < 0) { error; } } In other words, the bug is that we are trying to canonicalize a non-file name (which has a chance for false positives if the file system contains an odd file name), rather than reserving the canonicalization to happen ONLY when we know it is not a network protocol name. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list