diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 604fb934cb..4ce1e7a205 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -73,6 +73,7 @@ typedef struct { virDomainDefPtr def; /* VM definition */ virCapsPtr caps; /* VM capabilities */ virDomainXMLOptionPtr xmlopt; /* XML parser data */ + char *virtType; /* type of hypervisor (eg qemu, xen, lxc) */ char *os; /* type of os (eg hvm, xen, exe) */ virArch arch; /* machine architecture */ char *newfile; /* newly added file */ @@ -89,6 +90,7 @@ vahDeinit(vahControl * ctl) virObjectUnref(ctl->caps); virObjectUnref(ctl->xmlopt); VIR_FREE(ctl->files); + VIR_FREE(ctl->virtType); VIR_FREE(ctl->os); VIR_FREE(ctl->newfile); @@ -641,6 +643,7 @@ verify_xpath_context(xmlXPathContextPtr ctxt) /* * Parse the xml we received to fill in the following: + * ctl->virtType * ctl->os * ctl->arch * @@ -668,6 +671,11 @@ caps_mockup(vahControl * ctl, const char *xmlStr) if (verify_xpath_context(ctxt) != 0) goto cleanup; + ctl->virtType = virXPathString("string(./@type)", ctxt); + if (!ctl->virtType) { + vah_error(ctl, 0, _("domain type is not defined")); + goto cleanup; + } ctl->os = virXPathString("string(./os/type[1])", ctxt); if (!ctl->os) { vah_error(ctl, 0, _("os.type is not defined")); @@ -694,7 +702,7 @@ caps_mockup(vahControl * ctl, const char *xmlStr) static int get_definition(vahControl * ctl, const char *xmlStr) { - int rc = -1, ostype; + int rc = -1, ostype, virtType; virCapsGuestPtr guest; /* this is freed when caps is freed */ /* @@ -730,6 +738,21 @@ get_definition(vahControl * ctl, const char *xmlStr) goto exit; } + if ((virtType = virDomainVirtTypeFromString(ctl->virtType)) < 0) { + vah_error(ctl, 0, _("unknown virtualization type")); + goto exit; + } + + if (virCapabilitiesAddGuestDomain(guest, + virtType, + NULL, + NULL, + 0, + NULL) == NULL) { + vah_error(ctl, 0, _("could not allocate memory")); + goto exit; + } + ctl->def = virDomainDefParseString(xmlStr, ctl->caps, ctl->xmlopt, VIR_DOMAIN_DEF_PARSE_INACTIVE); diff --git a/tests/virt-aa-helper-test b/tests/virt-aa-helper-test index 96471ff3fc..caf2f97ba9 100755 --- a/tests/virt-aa-helper-test +++ b/tests/virt-aa-helper-test @@ -194,9 +194,6 @@ testme "1" "-c with malformed xml" "-c -u $valid_uuid" "$test_xml" sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,hvm,,g" "$template_xml" > "$test_xml" testme "1" "-c with no os.type" "-c -u $valid_uuid" "$test_xml" -sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,hvm,hvm,g" "$template_xml" > "$test_xml" -testme "1" "-c with no architecture" "-c -u $valid_uuid" "$test_xml" - sed -e "s,###UUID###,$uuid,g" -e "s,###DISK###,$disk1,g" -e "s,hvm,hvm_invalid,g" "$template_xml" > "$test_xml" testme "1" "-c with invalid hvm" "-c -u $valid_uuid" "$test_xml"