From nobody Tue Feb 10 00:22:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1517859872119766.0851375509759; Mon, 5 Feb 2018 11:44:32 -0800 (PST) Received: from localhost ([::1]:54846 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eimgp-0001mv-7q for importer@patchew.org; Mon, 05 Feb 2018 14:44:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44714) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eimSI-0004TO-PR for qemu-devel@nongnu.org; Mon, 05 Feb 2018 14:29:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eimSE-0004zL-Pu for qemu-devel@nongnu.org; Mon, 05 Feb 2018 14:29:30 -0500 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:50515) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eimSE-0004yu-Hl for qemu-devel@nongnu.org; Mon, 05 Feb 2018 14:29:26 -0500 Received: by mail-wm0-x244.google.com with SMTP id f71so28283658wmf.0 for ; Mon, 05 Feb 2018 11:29:26 -0800 (PST) Received: from 640k.lan ([82.84.122.246]) by smtp.gmail.com with ESMTPSA id g8sm20029891wra.18.2018.02.05.11.29.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 05 Feb 2018 11:29:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=BOfiUSjtQJ+osNkiyYn4ZtfYbb0n7gBqVviymGZ5lc0=; b=UsKjxI0eED2iavQcQmYRT+vcJiAYcXeY28wqsMcobvvrV+upRtU+Alc+UJzbr7m805 JixL8SflkcoBHJxH3wSBXO0iLRnbKGrf1nxYA0JDskfXeHDxVNTtQG7ncFrkwViYsJEi JgGji6tnKzsNJ7pfYh/SqQSiOU/9tSIRYBLUmUPMmXSdaUQsr8BGB7VFgDTMJyKxHJy8 jyCGvocgdlaYeeYXz1RUtaiziix763vz5nvpemzWOGwyp3VnhtF26B2IDR1zIb4yjbEo m2i4SdX5iY9kN2kV89LJFd0gY70NOhVcCcFDNeDNQ4ASTICy4Aln8UFkAsOq1z+qShC/ 8NXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=BOfiUSjtQJ+osNkiyYn4ZtfYbb0n7gBqVviymGZ5lc0=; b=B7ml+n0M2RTZUHlmteRJ/TTPuyZOJVAiQSWhzJjXe+7cLuak0RQ5pl1IjEYN0GOkeP IMwia79UIgO3wtS5dUYyLZIgakWwi0/KIVyOKFan5uinEZLsPdtYg00m11fAKAS8gx7x Wah5uOGjbLTLO+sHHKtoNKn11WMYStDiXj8016RMu+AAdRaInkP5zCZJaGGLvNVMa7Mc hPPe0I5adwzrKrtBMQZ+0jZrL34kJvFZoP1ZjyLvNHTCRJHi+xlqCqSoF2JQe+IQ1viU SqCCwVv2yuiBic1RrEuUx1BWqb0m2xxlWtccWOVdR+3U9pCVtM+r2mwGZRBY6YLchYSc Sl9w== X-Gm-Message-State: APf1xPD/mlccPORy1JRrPyIp+JkTl78Jv3qB/kjYxCdPbTBVQJcvkZ+9 4eefXET0J/uFwr61l4r8uoRDuPUq X-Google-Smtp-Source: AH8x226mSb+q3E0/reVpSAlsJHEAMm9K/3l6UdeIXd2KDYeOv9PbNjPcr/YLQuZVokga3xmtStEwIw== X-Received: by 10.28.29.81 with SMTP id d78mr327112wmd.65.1517858965198; Mon, 05 Feb 2018 11:29:25 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Mon, 5 Feb 2018 20:28:31 +0100 Message-Id: <1517858941-5538-18-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1517858941-5538-1-git-send-email-pbonzini@redhat.com> References: <1517858941-5538-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::244 Subject: [Qemu-devel] [PULL 17/47] sockets: fix parsing of ipv4/ipv6 opts in parse_socket_addr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Daniel P. Berrange" The inet_parse() function looks for 'ipv4' and 'ipv6' flags, but only treats them as bare bool flags. The normal QemuOpts parsing would allow on/off values to be set too. This updates inet_parse() so that its handling of the 'ipv4' and 'ipv6' flags matches that done by QemuOpts. This impacts the NBD block driver parsing the legacy filename syntax and the migration code parsing the socket scheme. Signed-off-by: Daniel P. Berrange Message-Id: <20180125171412.21627-1-berrange@redhat.com> Reviewed-by: Eric Blake Signed-off-by: Paolo Bonzini --- util/qemu-sockets.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index d6a1e17..fbbef69 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -554,6 +554,33 @@ err: } =20 /* compatibility wrapper */ +static int inet_parse_flag(const char *flagname, const char *optstr, bool = *val, + Error **errp) +{ + char *end; + size_t len; + + end =3D strstr(optstr, ","); + if (end) { + if (end[1] =3D=3D ',') { /* Reject 'ipv6=3Don,,foo' */ + error_setg(errp, "error parsing '%s' flag '%s'", flagname, opt= str); + return -1; + } + len =3D end - optstr; + } else { + len =3D strlen(optstr); + } + if (len =3D=3D 0 || (len =3D=3D 3 && strncmp(optstr, "=3Don", len) =3D= =3D 0)) { + *val =3D true; + } else if (len =3D=3D 4 && strncmp(optstr, "=3Doff", len) =3D=3D 0) { + *val =3D false; + } else { + error_setg(errp, "error parsing '%s' flag '%s'", flagname, optstr); + return -1; + } + return 0; +} + int inet_parse(InetSocketAddress *addr, const char *str, Error **errp) { const char *optstr, *h; @@ -561,6 +588,7 @@ int inet_parse(InetSocketAddress *addr, const char *str= , Error **errp) char port[33]; int to; int pos; + char *begin; =20 memset(addr, 0, sizeof(*addr)); =20 @@ -602,11 +630,19 @@ int inet_parse(InetSocketAddress *addr, const char *s= tr, Error **errp) addr->has_to =3D true; addr->to =3D to; } - if (strstr(optstr, ",ipv4")) { - addr->ipv4 =3D addr->has_ipv4 =3D true; + begin =3D strstr(optstr, ",ipv4"); + if (begin) { + if (inet_parse_flag("ipv4", begin + 5, &addr->ipv4, errp) < 0) { + return -1; + } + addr->has_ipv4 =3D true; } - if (strstr(optstr, ",ipv6")) { - addr->ipv6 =3D addr->has_ipv6 =3D true; + begin =3D strstr(optstr, ",ipv6"); + if (begin) { + if (inet_parse_flag("ipv6", begin + 5, &addr->ipv6, errp) < 0) { + return -1; + } + addr->has_ipv6 =3D true; } return 0; } --=20 1.8.3.1