From: Tomáš Golembiovský Date: Mon, 13 Feb 2017 22:53:43 +0000 (+0100) Subject: util: storage: add JSON backing volume parser 'raw' block driver X-Git-Tag: CVE-2017-2635~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e4c6d4ae557a5de3a4b9a7e789df0e8f1d140557;p=thirdparty%2Flibvirt.git util: storage: add JSON backing volume parser 'raw' block driver The 'raw' block driver in Qemu is not directly interesting from libvirt's perspective, but it can be layered above some other block drivers and this may be interesting for the user. The patch adds support for the 'raw' block driver. The driver is treated simply as a pass-through and child driver in JSON is queried to get the necessary information. Signed-off-by: Tomáš Golembiovský --- diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 715c0429d7..c9420fdb79 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -2647,6 +2647,11 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src, } +static int +virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src, + virJSONValuePtr json); + + static int virStorageSourceParseBackingJSONPath(virStorageSourcePtr src, virJSONValuePtr json, @@ -2963,6 +2968,16 @@ virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src, return -1; } +static int +virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src, + virJSONValuePtr json, + int opaque ATTRIBUTE_UNUSED) +{ + /* There are no interesting attributes in raw driver. + * Treat it as pass-through. + */ + return virStorageSourceParseBackingJSONInternal(src, json); +} struct virStorageSourceJSONDriverParser { const char *drvname; @@ -2985,6 +3000,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = { {"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0}, {"ssh", virStorageSourceParseBackingJSONSSH, 0}, {"rbd", virStorageSourceParseBackingJSONRBD, 0}, + {"raw", virStorageSourceParseBackingJSONRaw, 0}, }; diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c index 36567753ba..984994d8e7 100644 --- a/tests/virstoragetest.c +++ b/tests/virstoragetest.c @@ -1496,6 +1496,12 @@ mymain(void) "\n" " \n" "\n"); + TEST_BACKING_PARSE("json:{ \"file\": { " + "\"driver\": \"raw\"," + "\"file\": {" + "\"driver\": \"file\"," + "\"filename\": \"/path/to/file\" } } }", + "\n"); cleanup: /* Final cleanup */