util: storage: Fix parsing of 'exportname' from legacy NBD strings

If the nbd export name contains a colon, our parser would not parse it
properly as we split the string by colons. Modify the code to look up
the exportname and copy any trailing characters as the export name is
supposed to be at the end of the string.

https://bugzilla.redhat.com/show_bug.cgi?id=1733044

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Peter Krempa 2019-07-31 17:17:30 +02:00
parent 5726e47234
commit 96f0a17ead
2 changed files with 12 additions and 2 deletions

View File

@ -2928,6 +2928,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr,
virStorageSourcePtr src)
{
VIR_AUTOSTRINGLIST backing = NULL;
const char *exportname;
if (!(backing = virStringSplit(nbdstr, ":", 0)))
return -1;
@ -2975,8 +2976,9 @@ virStorageSourceParseNBDColonString(const char *nbdstr,
return -1;
}
if (backing[3] && STRPREFIX(backing[3], "exportname=")) {
if (VIR_STRDUP(src->path, backing[3] + strlen("exportname=")) < 0)
if ((exportname = strstr(nbdstr, "exportname="))) {
exportname += strlen("exportname=");
if (VIR_STRDUP(src->path, exportname) < 0)
return -1;
}

View File

@ -1262,6 +1262,14 @@ mymain(void)
"<source protocol='nbd' name='blah'>\n"
" <host name='example.org' port='6000'/>\n"
"</source>\n");
TEST_BACKING_PARSE("nbd:example.org:6000:exportname=:",
"<source protocol='nbd' name=':'>\n"
" <host name='example.org' port='6000'/>\n"
"</source>\n");
TEST_BACKING_PARSE("nbd:example.org:6000:exportname=:test",
"<source protocol='nbd' name=':test'>\n"
" <host name='example.org' port='6000'/>\n"
"</source>\n");
TEST_BACKING_PARSE("nbd://example.org:1234",
"<source protocol='nbd'>\n"
" <host name='example.org' port='1234'/>\n"