From nobody Sat Feb 7 11:05:27 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 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=1594319829; cv=none; d=zohomail.com; s=zohoarc; b=dpWaKXgek0egQ3d77BAXSHEC6Vdhl93AMZwtt+6sH656YTIZdNpX/S0M/KHjnbhnGjI1h4uXsiOYHUUpVXtZtFzVAirHgEtAs10uVYT7jCXMg8eO6G8zZQf0ZPT8nmWDld1yhfezDnQuh+a0xT4l8nKKzhvX/JXQthQOMlDdHR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1594319829; 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=OLSI36oaCchqtUXMLHudMgjVAV6+qEY8QrNpGqDz8q4=; b=hpiRPXwkg3k8L51PUBCljeADDc8/+DlVm+hXScoSGYgbOWimjQ/xTvZUrfZ3BS0TP5yLN2ygTha/oTBzLCSOAT3XU63Qn+B+Uiz6a9LnJkrdQJZO3iWTVL4eS8EbwqID6sH76sbNPsywz0JpxLqBSLRlPwNX3DrcRrUJqT+p/+M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 1594319829285229.6751752136281; Thu, 9 Jul 2020 11:37:09 -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-434-3BDUAILlN5SOU4yA1c_1NA-1; Thu, 09 Jul 2020 14:37:05 -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 BEF7180040A; Thu, 9 Jul 2020 18:36:59 +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 9EF0B6FEE8; Thu, 9 Jul 2020 18:36:59 +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 6F9C984358; Thu, 9 Jul 2020 18:36:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 069IawDO023365 for ; Thu, 9 Jul 2020 14:36:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3C4E061100; Thu, 9 Jul 2020 18:36:58 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.36.110.45]) by smtp.corp.redhat.com (Postfix) with ESMTP id 21D3860E1C; Thu, 9 Jul 2020 18:36:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594319828; 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=OLSI36oaCchqtUXMLHudMgjVAV6+qEY8QrNpGqDz8q4=; b=dkkhh/sjRCVHPJDzy5rIzX6Lh5IFl6RQ8tXth/EFxxGa1qe71rVwyVsUuUsUKENE0LcQ+u xQO+zPlLtW2xIrInWQ3YUse+6r/SFKvyIVxxTmZN9yuwNLj6bkbPZBEpP0QbqYCY5DYipH tHTBAcYDd46EF3/65s0OLlZSCgLWoVs= X-MC-Unique: 3BDUAILlN5SOU4yA1c_1NA-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 4/9] remote: parse the remote transport string earlier Date: Thu, 9 Jul 2020 19:36:41 +0100 Message-Id: <20200709183646.4016586-5-berrange@redhat.com> In-Reply-To: <20200709183646.4016586-1-berrange@redhat.com> References: <20200709183646.4016586-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 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 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) We delay converting the remote transport string to enum form until fairly late. As a result we're doing string comparisons when we could be just doing enum comparisons. Signed-off-by: Daniel P. Berrang=C3=A9 --- po/POTFILES.in | 1 + src/remote/remote_driver.c | 51 ++++++++++--------------------------- src/remote/remote_sockets.c | 35 +++++++++++++++++++++---- src/remote/remote_sockets.h | 2 +- 4 files changed, 45 insertions(+), 44 deletions(-) diff --git a/po/POTFILES.in b/po/POTFILES.in index af52054aa4..8fd391a63a 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -180,6 +180,7 @@ @SRCDIR@/src/remote/remote_daemon_dispatch.c @SRCDIR@/src/remote/remote_daemon_stream.c @SRCDIR@/src/remote/remote_driver.c +@SRCDIR@/src/remote/remote_sockets.c @SRCDIR@/src/rpc/virkeepalive.c @SRCDIR@/src/rpc/virnetclient.c @SRCDIR@/src/rpc/virnetclientprogram.c diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index b84b72522a..c39085951e 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -863,12 +863,11 @@ static int doRemoteOpen(virConnectPtr conn, struct private_data *priv, const char *driver_str, - const char *transport_str, + remoteDriverTransport transport, virConnectAuthPtr auth G_GNUC_UNUSED, virConfPtr conf, unsigned int flags) { - int transport; #ifndef WIN32 g_autofree char *daemonPath =3D NULL; #endif @@ -903,34 +902,6 @@ doRemoteOpen(virConnectPtr conn, /* We handle *ALL* URIs here. The caller has rejected any * URIs we don't care about */ =20 - if (conn->uri) { - if (!transport_str) { - if (conn->uri->server) - transport =3D REMOTE_DRIVER_TRANSPORT_TLS; - else - transport =3D REMOTE_DRIVER_TRANSPORT_UNIX; - } else { - if ((transport =3D remoteDriverTransportTypeFromString(transpo= rt_str)) < 0) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("remote_open: transport in URL not recogn= ised " - "(should be tls|unix|ssh|ext|tcp|libssh2|= libssh)")); - return VIR_DRV_OPEN_ERROR; - } - - if (transport =3D=3D REMOTE_DRIVER_TRANSPORT_UNIX && - conn->uri->server) { - virReportError(VIR_ERR_INVALID_ARG, - _("using unix socket and remote " - "server '%s' is not supported."), - conn->uri->server); - return VIR_DRV_OPEN_ERROR; - } - } - } else { - /* No URI, then must be probing so use UNIX socket */ - transport =3D REMOTE_DRIVER_TRANSPORT_UNIX; - } - /* Remote server defaults to "localhost" if not specified. */ if (conn->uri && conn->uri->port !=3D 0) { port =3D g_strdup_printf("%d", conn->uri->port); @@ -1352,11 +1323,16 @@ remoteConnectOpen(virConnectPtr conn, int rflags =3D 0; const char *autostart =3D getenv("LIBVIRT_AUTOSTART"); char *driver =3D NULL; - char *transport =3D NULL; + remoteDriverTransport transport; + + if (conn->uri) { + if (remoteSplitURIScheme(conn->uri, &driver, &transport) < 0) + goto cleanup; + } else { + /* No URI, then must be probing so use UNIX socket */ + transport =3D REMOTE_DRIVER_TRANSPORT_UNIX; + } =20 - if (conn->uri && - remoteSplitURIScheme(conn->uri, &driver, &transport) < 0) - goto cleanup; =20 if (inside_daemon) { if (!conn->uri) { @@ -1398,12 +1374,12 @@ remoteConnectOpen(virConnectPtr conn, rflags |=3D VIR_DRV_OPEN_REMOTE_USER; =20 /* - * Furthermore if no servername is given, and no +XXX - * transport is listed, or transport is unix, + * Furthermore if no servername is given, + * and the transport is unix, * and uid is unprivileged then auto-spawn a daemon. */ if (!conn->uri->server && - (transport =3D=3D NULL || STREQ(transport, "unix")) && + (transport =3D=3D REMOTE_DRIVER_TRANSPORT_UNIX) && (!autostart || STRNEQ(autostart, "0"))) { VIR_DEBUG("Try daemon autostart"); @@ -1438,7 +1414,6 @@ remoteConnectOpen(virConnectPtr conn, =20 cleanup: VIR_FREE(driver); - VIR_FREE(transport); return ret; } =20 diff --git a/src/remote/remote_sockets.c b/src/remote/remote_sockets.c index 976124d0ed..cdc0a00293 100644 --- a/src/remote/remote_sockets.c +++ b/src/remote/remote_sockets.c @@ -21,6 +21,9 @@ #include =20 #include "remote_sockets.h" +#include "virerror.h" + +#define VIR_FROM_THIS VIR_FROM_REMOTE =20 VIR_ENUM_IMPL(remoteDriverTransport, REMOTE_DRIVER_TRANSPORT_LAST, @@ -42,25 +45,47 @@ VIR_ENUM_IMPL(remoteDriverMode, int remoteSplitURIScheme(virURIPtr uri, char **driver, - char **transport) + remoteDriverTransport *transport) { char *p =3D strchr(uri->scheme, '+'); =20 - *driver =3D *transport =3D NULL; - if (p) *driver =3D g_strndup(uri->scheme, p - uri->scheme); else *driver =3D g_strdup(uri->scheme); =20 if (p) { - *transport =3D g_strdup(p + 1); + g_autofree char *tmp =3D g_strdup(p + 1); + int val; =20 - p =3D *transport; + p =3D tmp; while (*p) { *p =3D g_ascii_tolower(*p); p++; } + + if ((val =3D remoteDriverTransportTypeFromString(tmp)) < 0) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("remote_open: transport in URL not recognised= " + "(should be tls|unix|ssh|ext|tcp|libssh2|libs= sh)")); + return -1; + } + + if (val =3D=3D REMOTE_DRIVER_TRANSPORT_UNIX && + uri->server) { + virReportError(VIR_ERR_INVALID_ARG, + _("using unix socket and remote " + "server '%s' is not supported."), + uri->server); + return -1; + } + + *transport =3D val; + } else { + if (uri->server) + *transport =3D REMOTE_DRIVER_TRANSPORT_TLS; + else + *transport =3D REMOTE_DRIVER_TRANSPORT_UNIX; } =20 return 0; diff --git a/src/remote/remote_sockets.h b/src/remote/remote_sockets.h index bef3cdada9..ade3feab88 100644 --- a/src/remote/remote_sockets.h +++ b/src/remote/remote_sockets.h @@ -53,4 +53,4 @@ VIR_ENUM_DECL(remoteDriverMode); int remoteSplitURIScheme(virURIPtr uri, char **driver, - char **transport); + remoteDriverTransport *transport); --=20 2.26.2