From nobody Thu May 15 12:55:26 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1508511165572519.1585767204696; Fri, 20 Oct 2017 07:52:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2668F34A2; Fri, 20 Oct 2017 14:52:44 +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 04A5660BEC; Fri, 20 Oct 2017 14:52:44 +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 BC927180BACE; Fri, 20 Oct 2017 14:52:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v9KEqapA030287 for ; Fri, 20 Oct 2017 10:52:36 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2F5265C1A3; Fri, 20 Oct 2017 14:52:36 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id ABE035C88D for ; Fri, 20 Oct 2017 14:52:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2668F34A2 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Fri, 20 Oct 2017 16:52:12 +0200 Message-Id: <5701c32b247f34d9e74d2eb6a5f226f3fd80a349.1508511016.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 02/11] conf: Parse user supplied aliases 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 20 Oct 2017 14:52:44 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If driver that is calling the parse supports user supplied aliases, they can be parsed even for inactive XMLs. However, to avoid any clashes with aliases that libvirt generates, the user ones have to have "ua-" prefix. Note, that some drivers don't have notion of device aliases at all. Also, in order to support user supplied aliases some extra checks need to be done (e.g. during hotplug). Therefore we can't just enable this feature for all the drivers. Thus we need a flag that drivers set to tell parsing code that they can handle user supplied device aliases. Signed-off-by: Michal Privoznik --- src/conf/domain_conf.c | 18 +++++++++++++++--- src/conf/domain_conf.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ce9b4ee7f..40fcbc7df 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6454,6 +6454,10 @@ virDomainDeviceAddressParseXML(xmlNodePtr address, } =20 =20 +#define USER_ALIAS_PREFIX "ua-" +#define USER_ALIAS_CHARS \ + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-" + /* Parse the XML definition for a device address * @param node XML nodeset to parse for device address definition */ @@ -6472,6 +6476,7 @@ virDomainDeviceInfoParseXML(virDomainXMLOptionPtr xml= opt ATTRIBUTE_UNUSED, xmlNodePtr rom =3D NULL; char *type =3D NULL; char *rombar =3D NULL; + char *aliasStr =3D NULL; int ret =3D -1; =20 virDomainDeviceInfoClear(info); @@ -6480,7 +6485,6 @@ virDomainDeviceInfoParseXML(virDomainXMLOptionPtr xml= opt ATTRIBUTE_UNUSED, while (cur !=3D NULL) { if (cur->type =3D=3D XML_ELEMENT_NODE) { if (alias =3D=3D NULL && - !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) && virXMLNodeNameEqual(cur, "alias")) { alias =3D cur; } else if (address =3D=3D NULL && @@ -6502,8 +6506,15 @@ virDomainDeviceInfoParseXML(virDomainXMLOptionPtr xm= lopt ATTRIBUTE_UNUSED, cur =3D cur->next; } =20 - if (alias) - info->alias =3D virXMLPropString(alias, "name"); + if (alias) { + aliasStr =3D virXMLPropString(alias, "name"); + + if (!(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) || + (xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_USER_ALIAS && + STRPREFIX(aliasStr, USER_ALIAS_PREFIX) && + strspn(aliasStr, USER_ALIAS_CHARS) =3D=3D strlen(aliasStr))) + VIR_STEAL_PTR(info->alias, aliasStr); + } =20 if (master) { info->mastertype =3D VIR_DOMAIN_CONTROLLER_MASTER_USB; @@ -6537,6 +6548,7 @@ virDomainDeviceInfoParseXML(virDomainXMLOptionPtr xml= opt ATTRIBUTE_UNUSED, virDomainDeviceInfoClear(info); VIR_FREE(type); VIR_FREE(rombar); + VIR_FREE(aliasStr); return ret; } =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f251f390b..1a3574aa7 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2488,6 +2488,7 @@ typedef enum { VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN =3D (1 << 2), VIR_DOMAIN_DEF_FEATURE_NAME_SLASH =3D (1 << 3), VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS =3D (1 << 4), + VIR_DOMAIN_DEF_FEATURE_USER_ALIAS =3D (1 << 5), } virDomainDefFeatures; =20 =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list