From nobody Mon Feb 9 14:10:14 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; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1628177698; cv=none; d=zohomail.com; s=zohoarc; b=CXXVp606ZLGw5VBcMlcydvmzS6qSGifvlohAK3Uyk830bODBJPhtYBoG/Nq8ZAiXjNOQQawsOLzdVg4rff5JDsCW6z4pTL8SOLITWbpPAFJdbrh1rsbVOHh9Mi4Ynk+LF8ejMSbDo8pvV5ROL9eoE/OSRUcOmYDcdiWdwwPw7Y0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1628177698; h=Content-Type:Content-Transfer-Encoding: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=AHnYuzwV3VZF/XmUpOpIGo8LAcODqCP/EUqhLf3e1Uc=; b=GKG0fKCcYjNjsbnnoiOHRIqQJq0Nc3SdBzRisbYkXEv6Gf8B1AOHBvs4ybaVuj/XJ3gITlpd3GTvyb3ysqNKsavPZB9Ea6frknV5xAM0IRWd3X0Qm+AlJx/HUhl4LiI7PM//Szwe3GHjezXF/F0VWOrQ3MDSHRdSySFgc/aUjmE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) 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 1628177698935446.7440417694571; Thu, 5 Aug 2021 08:34:58 -0700 (PDT) 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-329-Rc5Wx77SMFGQgh83xCEWzg-1; Thu, 05 Aug 2021 11:34:56 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 376C71018F75; Thu, 5 Aug 2021 15:34:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 193292C175; Thu, 5 Aug 2021 15:34:45 +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 657654A7C9; Thu, 5 Aug 2021 15:34:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 175FYfeM027637 for ; Thu, 5 Aug 2021 11:34:41 -0400 Received: by smtp.corp.redhat.com (Postfix) id 6A2335D6B1; Thu, 5 Aug 2021 15:34:41 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id BF44A5D6A1 for ; Thu, 5 Aug 2021 15:34:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1628177698; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=AHnYuzwV3VZF/XmUpOpIGo8LAcODqCP/EUqhLf3e1Uc=; b=cxDGUxhc4ezoTaMBiZvyST4r8UUaOwcN1clUL8LpVr59ddD1QCMXqsi0fMnxXDZZ4cEKr9 X1mXI+xaCvAJqXSbaNUnQTV5jGXI1IeWRN+/uKr90iWJnWQybRA8zJDqDvMAgFCu+Jv7M2 xtYyL7EukM7cXYf8QeIkOs/E8RXu2sM= X-MC-Unique: Rc5Wx77SMFGQgh83xCEWzg-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 04/13] qemu: domain: Store passthrough environment variables in a struct Date: Thu, 5 Aug 2021 17:34:20 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.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.11 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 X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1628177701399100001 Content-Type: text/plain; charset="utf-8" Previously they were stored in two separate arrays. This way it's obvious when referencing the same one. Signed-off-by: Peter Krempa --- src/qemu/qemu_command.c | 4 ++-- src/qemu/qemu_domain.c | 45 +++++++++++++++++++++++------------------ src/qemu/qemu_domain.h | 9 +++++++-- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 4381ea7d8b..4bcb5a3146 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10638,8 +10638,8 @@ qemuBuildCommandLine(virQEMUDriver *driver, for (i =3D 0; i < qemuxmlns->num_args; i++) virCommandAddArg(cmd, qemuxmlns->args[i]); for (i =3D 0; i < qemuxmlns->num_env; i++) - virCommandAddEnvPair(cmd, qemuxmlns->env_name[i], - NULLSTR_EMPTY(qemuxmlns->env_value[i])); + virCommandAddEnvPair(cmd, qemuxmlns->env[i].name, + NULLSTR_EMPTY(qemuxmlns->env[i].value)); } if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6f8c93ea0c..21668cae4c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3319,12 +3319,17 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPriva= teDataCallbacks =3D { static void qemuDomainXmlNsDefFree(qemuDomainXmlNsDef *def) { + size_t i; + if (!def) return; + for (i =3D 0; i < def->num_env; i++) { + g_free(def->env[i].name); + g_free(def->env[i].value); + } + virStringListFreeCount(def->args, def->num_args); - virStringListFreeCount(def->env_name, def->num_env); - virStringListFreeCount(def->env_value, def->num_env); virStringListFreeCount(def->capsadd, def->ncapsadd); virStringListFreeCount(def->capsdel, def->ncapsdel); @@ -3372,15 +3377,21 @@ qemuDomainDefNamespaceParseCommandlineArgs(qemuDoma= inXmlNsDef *nsdef, static int -qemuDomainDefNamespaceParseCommandlineEnvNameValidate(const char *envname) +qemuDomainDefNamespaceParseCommandlineEnvValidate(qemuDomainXmlNsEnvTuple = *env) { - if (!g_ascii_isalpha(envname[0]) && envname[0] !=3D '_') { + if (!env->name) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("No qemu environment name specified")); + return -1; + } + + if (!g_ascii_isalpha(env->name[0]) && env->name[0] !=3D '_') { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid environment name, it must begin with a l= etter or underscore")); return -1; } - if (strspn(envname, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw= xyz0123456789_") !=3D strlen(envname)) { + if (strspn(env->name, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu= vwxyz0123456789_") !=3D strlen(env->name)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid environment name, it must contain only a= lphanumerics and underscore")); return -1; @@ -3404,22 +3415,17 @@ qemuDomainDefNamespaceParseCommandlineEnv(qemuDomai= nXmlNsDef *nsdef, if (nnodes =3D=3D 0) return 0; - nsdef->env_name =3D g_new0(char *, nnodes); - nsdef->env_value =3D g_new0(char *, nnodes); + nsdef->env =3D g_new0(qemuDomainXmlNsEnvTuple, nnodes); for (i =3D 0; i < nnodes; i++) { - if (!(nsdef->env_name[nsdef->num_env] =3D virXMLPropString(nodes[i= ], "name"))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("No qemu environment name specified")); - return -1; - } + qemuDomainXmlNsEnvTuple *env =3D nsdef->env + i; - if (qemuDomainDefNamespaceParseCommandlineEnvNameValidate(nsdef->e= nv_name[nsdef->num_env]) < 0) - return -1; - - nsdef->env_value[nsdef->num_env] =3D virXMLPropString(nodes[i], "v= alue"); - /* a NULL value for command is allowed, since it might be empty */ + env->name =3D virXMLPropString(nodes[i], "name"); + env->value =3D virXMLPropString(nodes[i], "value"); nsdef->num_env++; + + if (qemuDomainDefNamespaceParseCommandlineEnvValidate(env) < 0) + return -1; } return 0; @@ -3513,9 +3519,8 @@ qemuDomainDefNamespaceFormatXMLCommandline(virBuffer = *buf, virBufferEscapeString(buf, "\n", cmd->args[i]); for (i =3D 0; i < cmd->num_env; i++) { - virBufferAsprintf(buf, "env_name[i]); - if (cmd->env_value[i]) - virBufferEscapeString(buf, " value=3D'%s'", cmd->env_value[i]); + virBufferAsprintf(buf, "env[i].name); + virBufferEscapeString(buf, " value=3D'%s'", cmd->env[i].value); virBufferAddLit(buf, "/>\n"); } diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index acf6ca5ab6..5f2814271d 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -457,14 +457,19 @@ struct _qemuDomainSaveCookie { G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuDomainSaveCookie, virObjectUnref); +typedef struct _qemuDomainXmlNsEnvTuple qemuDomainXmlNsEnvTuple; +struct _qemuDomainXmlNsEnvTuple { + char *name; + char *value; +}; + typedef struct _qemuDomainXmlNsDef qemuDomainXmlNsDef; struct _qemuDomainXmlNsDef { size_t num_args; char **args; unsigned int num_env; - char **env_name; - char **env_value; + qemuDomainXmlNsEnvTuple *env; size_t ncapsadd; char **capsadd; --=20 2.31.1