From: Peter Krempa Date: Wed, 31 Jul 2019 15:17:30 +0000 (+0200) Subject: util: storage: Fix parsing of 'exportname' from legacy NBD strings X-Git-Tag: v5.7.0-rc1~218 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96f0a17ead829b9b8ae185660b412635642edf85;p=thirdparty%2Flibvirt.git 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 Reviewed-by: Jiri Denemark --- diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index ba56f452e9..88bfa8f160 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -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; } diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c index ef16b3c6e0..f558eea622 100644 --- a/tests/virstoragetest.c +++ b/tests/virstoragetest.c @@ -1262,6 +1262,14 @@ mymain(void) "\n" " \n" "\n"); + TEST_BACKING_PARSE("nbd:example.org:6000:exportname=:", + "\n" + " \n" + "\n"); + TEST_BACKING_PARSE("nbd:example.org:6000:exportname=:test", + "\n" + " \n" + "\n"); TEST_BACKING_PARSE("nbd://example.org:1234", "\n" " \n"