From nobody Mon Feb 9 18:18:27 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610613547; cv=none; d=zohomail.com; s=zohoarc; b=b6WJVdVz9C8cTXLCWiuu5k4/bor3vqDgYKxt/778/LOlOgCu2grVvF9CUp9jQ+FtQGfyn7FkGNHDtZ29rmFv2FgUGkEKGFE8eAojrqyFKuwdJLVN2+nkhU66muZ9GFOXld9oQ1FjmSUvy9kCvojOBbigvkaKPpPFkeoJjyong1A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610613547; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LVnIYRSxU6JZbJI/Uk4f/DCRV3zx41JZ6YpxKGc701c=; b=DTfUSKO0ohunUxk8T9AS3ZXNc11o36aXUKEn4apBu50NG2sQB0QNZj1YQutsivIZo11CdX9SvYQTVfHvhXqfiFAWQWloyHzlyKDghng7qa9N/wfEppInQBJeye2+RIjqv4mCW5z5N6NrbmWt+7brHMNcH8YJxKIK+R7jkiwEp4c= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1610613547541741.0045212940662; Thu, 14 Jan 2021 00:39:07 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-101-Z3BNv8YHMKmOY0TEOzMhFA-1; Thu, 14 Jan 2021 03:38:59 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 954F71927805; Thu, 14 Jan 2021 08:38:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 720575C239; Thu, 14 Jan 2021 08:38:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3CCE21809CA2; Thu, 14 Jan 2021 08:38:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 10E8cbVl022253 for ; Thu, 14 Jan 2021 03:38:37 -0500 Received: by smtp.corp.redhat.com (Postfix) id 322AF2166B2F; Thu, 14 Jan 2021 08:38:37 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2CB3A2166B2C for ; Thu, 14 Jan 2021 08:38:33 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CA96B803DCE for ; Thu, 14 Jan 2021 08:38:33 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-511-uoYwzAlDPqO3zxDnWVND7Q-1; Thu, 14 Jan 2021 03:38:30 -0500 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DGccR3YjLzMKFQ for ; Thu, 14 Jan 2021 16:17:27 +0800 (CST) Received: from DESKTOP-F1615D3.china.huawei.com (10.174.186.85) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.498.0; Thu, 14 Jan 2021 16:18:37 +0800 X-MC-Unique: Z3BNv8YHMKmOY0TEOzMhFA-1 X-MC-Unique: uoYwzAlDPqO3zxDnWVND7Q-1 From: Zihao Chang To: Subject: [PATCH 1/6] authz: support parsing authz devices Date: Thu, 14 Jan 2021 16:18:16 +0800 Message-ID: <20210114081821.146-2-changzihao1@huawei.com> In-Reply-To: <20210114081821.146-1-changzihao1@huawei.com> References: <20210114081821.146-1-changzihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.186.85] X-CFilter-Loop: Reflected X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 10E8cbVl022253 X-loop: libvir-list@redhat.com Cc: oscar.zhangbo@huawei.com, changzihao1@huawei.com, xiexiangyou@huawei.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" support parsing authz devices, which is like: Signed-off-by: Zihao Chang --- src/conf/domain_conf.c | 103 +++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 28 +++++++++ src/conf/domain_validate.c | 1 + src/conf/virconftypes.h | 3 + src/libvirt_private.syms | 2 + src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain_address.c | 2 + src/qemu/qemu_driver.c | 5 ++ src/qemu/qemu_hotplug.c | 3 + src/qemu/qemu_validate.c | 1 + 11 files changed, 150 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 349fc28c2a79..d547a93e16cd 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -302,6 +302,7 @@ VIR_ENUM_IMPL(virDomainDevice, "iommu", "vsock", "audio", + "authz", ); =20 VIR_ENUM_IMPL(virDomainDiskDevice, @@ -1331,6 +1332,19 @@ VIR_ENUM_IMPL(virDomainLaunchSecurity, "sev", ); =20 +VIR_ENUM_IMPL(virDomainAuthzType, + VIR_DOMAIN_AUTHZ_TYPE_LAST, + "tls", + "sasl", +); +VIR_ENUM_IMPL(virDomainAuthzMode, + VIR_DOMAIN_AUTHZ_MODE_LAST, + "simple", + "list", + "listfile", + "pam", +); + static virClassPtr virDomainObjClass; static virClassPtr virDomainXMLOptionClass; static void virDomainObjDispose(void *obj); @@ -2859,6 +2873,14 @@ void virDomainAudioDefFree(virDomainAudioDefPtr def) VIR_FREE(def); } =20 +void virDomainAuthzDefFree(virDomainAuthzDefPtr def) +{ + if (!def) + return; + VIR_FREE(def->identity); + VIR_FREE(def); +} + virDomainSoundDefPtr virDomainSoundDefRemove(virDomainDefPtr def, size_t idx) { @@ -3200,6 +3222,9 @@ void virDomainDeviceDefFree(virDomainDeviceDefPtr def) case VIR_DOMAIN_DEVICE_AUDIO: virDomainAudioDefFree(def->data.audio); break; + case VIR_DOMAIN_DEVICE_AUTHZ: + virDomainAuthzDefFree(def->data.authz); + break; case VIR_DOMAIN_DEVICE_LAST: case VIR_DOMAIN_DEVICE_NONE: break; @@ -4051,6 +4076,7 @@ virDomainDeviceGetInfo(virDomainDeviceDefPtr device) case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: case VIR_DOMAIN_DEVICE_NONE: break; @@ -4148,6 +4174,9 @@ virDomainDeviceSetData(virDomainDeviceDefPtr device, case VIR_DOMAIN_DEVICE_AUDIO: device->data.audio =3D devicedata; break; + case VIR_DOMAIN_DEVICE_AUTHZ: + device->data.authz =3D devicedata; + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -4410,6 +4439,7 @@ virDomainDeviceInfoIterateFlags(virDomainDefPtr def, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: break; } #endif @@ -5393,6 +5423,7 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDefP= tr dev, case VIR_DOMAIN_DEVICE_MEMORY: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: ret =3D 0; break; =20 @@ -15669,6 +15700,44 @@ virDomainVsockDefParseXML(virDomainXMLOptionPtr xm= lopt, return g_steal_pointer(&vsock); } =20 +static virDomainAuthzDefPtr +virDomainAuthzDefParseXML(xmlNodePtr node) +{ + g_autofree char *mode =3D NULL; + g_autofree char *identity =3D NULL; + g_autofree char *tmp =3D NULL; + virDomainAuthzDefPtr def; + + def =3D g_new0(virDomainAuthzDef, 1); + + if (!(mode =3D virXMLPropString(node, "mode"))) + def->mode =3D VIR_DOMAIN_AUTHZ_MODE_SIMPLE; + + if ((def->mode =3D virDomainAuthzModeTypeFromString(mode)) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown authz mode: %s"), mode); + goto error; + } + + if ((tmp =3D virXMLPropString(node, "index")) && + virStrToLong_ulp(tmp, NULL, 10, &def->index) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid authz index: %s"), tmp); + goto error; + } + + if (!(def->identity =3D virXMLPropString(node, "identity"))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("authz identity must be set")); + goto error; + } + + return def; + error: + virDomainAuthzDefFree(def); + return NULL; +} + virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr, const virDomainDef *def, @@ -15827,6 +15896,10 @@ virDomainDeviceDefParse(const char *xmlStr, flags))) return NULL; break; + case VIR_DOMAIN_DEVICE_AUTHZ: + if (!(dev->data.authz =3D virDomainAuthzDefParseXML(node))) + return NULL; + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -20704,6 +20777,20 @@ virDomainDefParseXML(xmlDocPtr xml, } VIR_FREE(nodes); =20 + /* analysis of the authz devices */ + if ((n =3D virXPathNodeSet("./devices/authz", ctxt, &nodes)) < 0) + goto error; + if (n) + def->authzs =3D g_new0(virDomainAuthzDefPtr, n); + + for (i =3D 0; i < n; i++) { + virDomainAuthzDefPtr authzs =3D virDomainAuthzDefParseXML(nodes[i]= ); + if (!authzs) + goto error; + def->authzs[def->nauthzs++] =3D authzs; + } + VIR_FREE(nodes); + /* analysis of the graphics devices */ if ((n =3D virXPathNodeSet("./devices/graphics", ctxt, &nodes)) < 0) goto error; @@ -23371,6 +23458,7 @@ virDomainDefCheckABIStabilityFlags(virDomainDefPtr = src, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: break; } #endif @@ -26217,6 +26305,18 @@ virDomainAudioDefFormat(virBufferPtr buf, } =20 =20 +static int +virDomainAuthzDefFormat(virBufferPtr buf, + virDomainAuthzDefPtr def) +{ + virBufferAsprintf(buf, "\n", + virDomainAuthzModeTypeToString(def->mode), + def->index, + def->identity); + return 0; +} + + static int virDomainMemballoonDefFormat(virBufferPtr buf, virDomainMemballoonDefPtr def, @@ -30045,6 +30145,9 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src, case VIR_DOMAIN_DEVICE_AUDIO: rc =3D virDomainAudioDefFormat(&buf, src->data.audio); break; + case VIR_DOMAIN_DEVICE_AUTHZ: + rc =3D virDomainAuthzDefFormat(&buf, src->data.authz); + break; =20 case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_SMARTCARD: diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ec43bbe18668..01e04250c28b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -86,6 +86,7 @@ typedef enum { VIR_DOMAIN_DEVICE_IOMMU, VIR_DOMAIN_DEVICE_VSOCK, VIR_DOMAIN_DEVICE_AUDIO, + VIR_DOMAIN_DEVICE_AUTHZ, =20 VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; @@ -118,6 +119,7 @@ struct _virDomainDeviceDef { virDomainIOMMUDefPtr iommu; virDomainVsockDefPtr vsock; virDomainAudioDefPtr audio; + virDomainAuthzDefPtr authz; } data; }; =20 @@ -1461,6 +1463,26 @@ struct _virDomainAudioDef { } backend; }; =20 +typedef enum { + VIR_DOMAIN_AUTHZ_TYPE_TLS, + VIR_DOMAIN_AUTHZ_TYPE_SASL, + VIR_DOMAIN_AUTHZ_TYPE_LAST +} virDomainAuthzType; + +typedef enum { + VIR_DOMAIN_AUTHZ_MODE_SIMPLE, + VIR_DOMAIN_AUTHZ_MODE_LIST, + VIR_DOMAIN_AUTHZ_MODE_LISTFILE, + VIR_DOMAIN_AUTHZ_MODE_PAM, + VIR_DOMAIN_AUTHZ_MODE_LAST +} virDomainAuthzMode; + +struct _virDomainAuthzDef { + int mode; + unsigned long index; + char *identity; +}; + typedef enum { VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB, VIR_DOMAIN_WATCHDOG_MODEL_IB700, @@ -2627,6 +2649,9 @@ struct _virDomainDef { =20 virDomainClockDef clock; =20 + size_t nauthzs; + virDomainAuthzDefPtr *authzs; + size_t ngraphics; virDomainGraphicsDefPtr *graphics; =20 @@ -3108,6 +3133,7 @@ ssize_t virDomainSoundDefFind(const virDomainDef *def, void virDomainSoundDefFree(virDomainSoundDefPtr def); virDomainSoundDefPtr virDomainSoundDefRemove(virDomainDefPtr def, size_t i= dx); void virDomainAudioDefFree(virDomainAudioDefPtr def); +void virDomainAuthzDefFree(virDomainAuthzDefPtr def); void virDomainMemballoonDefFree(virDomainMemballoonDefPtr def); void virDomainNVRAMDefFree(virDomainNVRAMDefPtr def); void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def); @@ -3674,6 +3700,8 @@ VIR_ENUM_DECL(virDomainChrSpicevmc); VIR_ENUM_DECL(virDomainSoundCodec); VIR_ENUM_DECL(virDomainSoundModel); VIR_ENUM_DECL(virDomainAudioType); +VIR_ENUM_DECL(virDomainAuthzType); +VIR_ENUM_DECL(virDomainAuthzMode); VIR_ENUM_DECL(virDomainKeyWrapCipherName); VIR_ENUM_DECL(virDomainMemballoonModel); VIR_ENUM_DECL(virDomainSmbiosMode); diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 988aff8dd7fe..3b5ddd241b46 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -1542,6 +1542,7 @@ virDomainDeviceDefValidateInternal(const virDomainDev= iceDef *dev, case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 9042a2b34fb1..697bd60a04e2 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -96,6 +96,9 @@ typedef virDomainABIStability *virDomainABIStabilityPtr; typedef struct _virDomainActualNetDef virDomainActualNetDef; typedef virDomainActualNetDef *virDomainActualNetDefPtr; =20 +typedef struct _virDomainAuthzDef virDomainAuthzDef; +typedef virDomainAuthzDef *virDomainAuthzDefPtr; + typedef struct _virDomainBackupDef virDomainBackupDef; typedef virDomainBackupDef *virDomainBackupDefPtr; =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c325040b60bf..e731c12458f7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -228,6 +228,8 @@ virDiskNameToIndex; virDomainActualNetDefFree; virDomainAudioTypeTypeFromString; virDomainAudioTypeTypeToString; +virDomainAuthzModeTypeToString; +virDomainAuthzTypeTypeToString; virDomainBlockedReasonTypeFromString; virDomainBlockedReasonTypeToString; virDomainBlockIoTuneInfoCopy; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6f970a312896..d5f0bcb81877 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -546,6 +546,7 @@ qemuBuildVirtioDevStr(virBufferPtr buf, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_LAST: + case VIR_DOMAIN_DEVICE_AUTHZ: default: return 0; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 0765dc72d2e2..f83407903e27 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5532,6 +5532,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr de= v, case VIR_DOMAIN_DEVICE_RNG: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: ret =3D 0; break; =20 diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index f0ba318cc844..47aa574e67ca 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -532,6 +532,7 @@ qemuDomainDeviceSupportZPCI(virDomainDeviceDefPtr devic= e) case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: break; =20 case VIR_DOMAIN_DEVICE_NONE: @@ -1018,6 +1019,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDev= iceDefPtr dev, case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: case VIR_DOMAIN_DEVICE_NONE: return 0; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 027617deefc7..17ef8451bf34 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7013,6 +7013,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live attach of device '%s' is not supported"), @@ -7148,6 +7149,7 @@ qemuDomainUpdateDeviceLive(virDomainObjPtr vm, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("live update of device '%s' is not supported"), @@ -7365,6 +7367,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent attach of device '%s' is not support= ed"), @@ -7568,6 +7571,7 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent detach of device '%s' is not supporte= d"), @@ -7676,6 +7680,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent update of device '%s' is not supporte= d"), diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index f336a90c8eb5..49cc461970bc 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5048,6 +5048,7 @@ qemuDomainRemoveAuditDevice(virDomainObjPtr vm, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: /* libvirt doesn't yet support detaching these devices */ break; @@ -5147,6 +5148,7 @@ qemuDomainRemoveDevice(virQEMUDriverPtr driver, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("don't know how to remove a %s device"), @@ -5961,6 +5963,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%s' is not supported"), diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index eadf3af8b396..63a7c1789363 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -4788,6 +4788,7 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef = *dev, case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_AUTHZ: case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; --=20 2.28.0