1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

Split out storage format 'compat' attribute sanity check

For future reuse in the snapshot XML.
This commit is contained in:
Ján Tomko 2015-04-09 10:48:49 +02:00
parent b77ce18a28
commit 9b90899915
3 changed files with 32 additions and 14 deletions

View File

@ -1374,20 +1374,8 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
}
ret->target.compat = virXPathString("string(./target/compat)", ctxt);
if (ret->target.compat) {
char **version = virStringSplit(ret->target.compat, ".", 2);
unsigned int result;
if (!version || !version[1] ||
virStrToLong_ui(version[0], NULL, 10, &result) < 0 ||
virStrToLong_ui(version[1], NULL, 10, &result) < 0) {
virStringFreeList(version);
virReportError(VIR_ERR_XML_ERROR, "%s",
_("forbidden characters in 'compat' attribute"));
goto error;
}
virStringFreeList(version);
}
if (virStorageFileCheckCompat(ret->target.compat) < 0)
goto error;
if (virXPathNode("./target/nocow", ctxt))
ret->target.nocow = true;

View File

@ -2873,3 +2873,32 @@ virStorageFileGetRelativeBackingPath(virStorageSourcePtr top,
VIR_FREE(tmp);
return ret;
}
/*
* virStorageFileCheckCompat
*/
int
virStorageFileCheckCompat(const char *compat)
{
char **version;
unsigned int result;
int ret = -1;
if (!compat)
return 0;
version = virStringSplit(compat, ".", 2);
if (!version || !version[1] ||
virStrToLong_ui(version[0], NULL, 10, &result) < 0 ||
virStrToLong_ui(version[1], NULL, 10, &result) < 0) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("forbidden characters in 'compat' attribute"));
goto cleanup;
}
ret = 0;
cleanup:
virStringFreeList(version);
return ret;
}

View File

@ -384,4 +384,5 @@ int virStorageFileGetRelativeBackingPath(virStorageSourcePtr from,
char **relpath)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int virStorageFileCheckCompat(const char *compat);
#endif /* __VIR_STORAGE_FILE_H__ */