
On Fri, May 27, 2016 at 02:21:51PM +0200, Peter Krempa wrote:
Until now we weren't able to add checks would reject configuration once
s/checks would/check that would
accepted by the parser. This patch adds a new callback and infrastructure to add such checks. In this patch all the places where rejecting a now-invalid configuration wouldn't be a good idea are marked with a new parser flag. --- src/conf/domain_conf.c | 48 ++++++++++++++++++++++++++++++++++++++++++- src/conf/domain_conf.h | 16 +++++++++++++++ src/conf/snapshot_conf.c | 3 ++- src/conf/virdomainobjlist.c | 6 ++++-- src/libvirt_private.syms | 1 + src/libxl/libxl_domain.c | 3 ++- src/libxl/libxl_migration.c | 6 ++++-- src/openvz/openvz_driver.c | 3 ++- src/qemu/qemu_domain.c | 3 ++- src/qemu/qemu_driver.c | 9 +++++--- src/qemu/qemu_migration.c | 12 +++++++---- src/security/virt-aa-helper.c | 3 ++- 12 files changed, 96 insertions(+), 17 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e2e247a..d6bd737 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4540,6 +4540,47 @@ virDomainDefPostParse(virDomainDefPtr def, }
+static int +virDomainDefValidateInternal(const virDomainDef *def ATTRIBUTE_UNUSED) +{ + return 0; +} + + +/** + * virDomainDefValidate: + * @def: domain definition
You're missing the rest o the parameters.
+ * + * This validation function is designed to take checks of globally invalid + * configurations that the parser needs to accept so that VMs don't vanish upon + * daemon restart. Such definition can be rejected upon startup or define, where + * this function shall be called. + * + * Returns 0 if domain definition is valid, -1 on error and reports an + * appropriate message. + */ +int +virDomainDefValidate(const virDomainDef *def, + virCapsPtr caps, + unsigned int parseFlags, + virDomainXMLOptionPtr xmlopt) +{ + /* validate configuration only in certain places */ + if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) + return 0; + + /* call the domain config callback */ + if (xmlopt->config.domainValidateCallback && + xmlopt->config.domainValidateCallback(def, caps, xmlopt->config.priv) < 0) + return -1; + + if (virDomainDefValidateInternal(def) < 0) + return -1; + + return 0; +}
ACK with the defects fixed.