From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871724101222.02630306811272; Mon, 12 Mar 2018 09:22:04 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 52D248051A; Mon, 12 Mar 2018 16:22:02 +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 21EBC17B60; Mon, 12 Mar 2018 16:22:02 +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 60ADE180BAD3; Mon, 12 Mar 2018 16:22:01 +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 w2CGLo83024935 for ; Mon, 12 Mar 2018 12:21:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id 32BDE2166BB2; Mon, 12 Mar 2018 16:21:50 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id B199D215CDA7 for ; Mon, 12 Mar 2018 16:21:49 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:31 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 01/18] util: rename VIR_ATTR_UNUSED 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Mon, 12 Mar 2018 16:22:02 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The correct prefix is VIRT. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.c | 8 +++--- src/domain.c | 78 +++++++++++++++++++++++++++++--------------------------= ---- src/events.c | 12 ++++----- src/main.c | 12 ++++----- src/util.h | 3 ++- 5 files changed, 57 insertions(+), 56 deletions(-) diff --git a/src/connect.c b/src/connect.c index 360f922..b44d247 100644 --- a/src/connect.c +++ b/src/connect.c @@ -17,8 +17,8 @@ static int virtDBusConnectCredType[] =3D { }; =20 static int -virtDBusConnectAuthCallback(virConnectCredentialPtr cred VIR_ATTR_UNUSED, - unsigned int ncred VIR_ATTR_UNUSED, +virtDBusConnectAuthCallback(virConnectCredentialPtr cred VIRT_ATTR_UNUSED, + unsigned int ncred VIRT_ATTR_UNUSED, void *cbdata) { sd_bus_error *error =3D cbdata; @@ -78,8 +78,8 @@ virtDBusConnectOpen(virtDBusConnect *connect, } =20 static int -virtDBusConnectEnumarateDomains(sd_bus *bus VIR_ATTR_UNUSED, - const char *path VIR_ATTR_UNUSED, +virtDBusConnectEnumarateDomains(sd_bus *bus VIRT_ATTR_UNUSED, + const char *path VIRT_ATTR_UNUSED, void *userdata, char ***nodes, sd_bus_error *error) diff --git a/src/domain.c b/src/domain.c index 33ed2b3..ebcd142 100644 --- a/src/domain.c +++ b/src/domain.c @@ -5,13 +5,13 @@ #include =20 static int -virtDBusDomainGetName(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetName(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -30,13 +30,13 @@ virtDBusDomainGetName(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetUUID(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetUUID(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -53,13 +53,13 @@ virtDBusDomainGetUUID(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetId(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetId(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -73,13 +73,13 @@ virtDBusDomainGetId(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetVcpus(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetVcpus(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -93,13 +93,13 @@ virtDBusDomainGetVcpus(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetOsType(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetOsType(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -118,13 +118,13 @@ virtDBusDomainGetOsType(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetActive(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetActive(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -143,13 +143,13 @@ virtDBusDomainGetActive(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetPersistent(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetPersistent(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -168,13 +168,13 @@ virtDBusDomainGetPersistent(sd_bus *bus VIR_ATTR_UNUS= ED, } =20 static int -virtDBusDomainGetState(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetState(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -220,13 +220,13 @@ virtDBusDomainGetState(sd_bus *bus VIR_ATTR_UNUSED, } =20 static int -virtDBusDomainGetAutostart(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainGetAutostart(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, - const char *property VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, + const char *property VIRT_ATTR_UNUSED, sd_bus_message *reply, void *userdata, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; @@ -522,12 +522,12 @@ static const sd_bus_vtable virt_domain_vtable[] =3D { }; =20 static int -virtDBusDomainLookup(sd_bus *bus VIR_ATTR_UNUSED, +virtDBusDomainLookup(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, - const char *interface VIR_ATTR_UNUSED, + const char *interface VIRT_ATTR_UNUSED, void *userdata, void **found, - sd_bus_error *error VIR_ATTR_UNUSED) + sd_bus_error *error VIRT_ATTR_UNUSED) { virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilFreep) char *name =3D NULL; diff --git a/src/events.c b/src/events.c index 05d5940..ca1418b 100644 --- a/src/events.c +++ b/src/events.c @@ -6,10 +6,10 @@ #include =20 static int -virtDBusEventsDomainLifecycle(virConnectPtr connection VIR_ATTR_UNUSED, +virtDBusEventsDomainLifecycle(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, int event, - int detail VIR_ATTR_UNUSED, + int detail VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; @@ -70,7 +70,7 @@ virtDBusEventsDomainLifecycle(virConnectPtr connection VI= R_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainDeviceAdded(virConnectPtr connection VIR_ATTR_UNUSED, +virtDBusEventsDomainDeviceAdded(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, const char *device, void *opaque) @@ -98,7 +98,7 @@ virtDBusEventsDomainDeviceAdded(virConnectPtr connection = VIR_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainDeviceRemoved(virConnectPtr connection VIR_ATTR_UNUSED, +virtDBusEventsDomainDeviceRemoved(virConnectPtr connection VIRT_ATTR_UNUSE= D, virDomainPtr domain, const char *device, void *opaque) @@ -126,7 +126,7 @@ virtDBusEventsDomainDeviceRemoved(virConnectPtr connect= ion VIR_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainDiskChange(virConnectPtr connection VIR_ATTR_UNUSED, +virtDBusEventsDomainDiskChange(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, const char *device, int reason, @@ -168,7 +168,7 @@ virtDBusEventsDomainDiskChange(virConnectPtr connection= VIR_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainTrayChange(virConnectPtr connection VIR_ATTR_UNUSED, +virtDBusEventsDomainTrayChange(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, const char *old_src_path, const char *new_src_path, diff --git a/src/main.c b/src/main.c index d41970a..e0f9434 100644 --- a/src/main.c +++ b/src/main.c @@ -55,18 +55,18 @@ virtDBusVirEventRemoveHandlep(int *watchp) } =20 static void -virtDBusHandleSignal(int watch VIR_ATTR_UNUSED, - int fd VIR_ATTR_UNUSED, - int events VIR_ATTR_UNUSED, - void *opaque VIR_ATTR_UNUSED) +virtDBusHandleSignal(int watch VIRT_ATTR_UNUSED, + int fd VIRT_ATTR_UNUSED, + int events VIRT_ATTR_UNUSED, + void *opaque VIRT_ATTR_UNUSED) { loop_status =3D -ECANCELED; } =20 static void virtDBusHandleBusEvent(int watch, - int fd VIR_ATTR_UNUSED, - int events VIR_ATTR_UNUSED, + int fd VIRT_ATTR_UNUSED, + int events VIRT_ATTR_UNUSED, void *opaque) { sd_bus *bus =3D opaque; diff --git a/src/util.h b/src/util.h index fcbcf8e..9779d29 100644 --- a/src/util.h +++ b/src/util.h @@ -6,7 +6,8 @@ #include =20 #define _cleanup_(_x) __attribute__((__cleanup__(_x))) -#define VIR_ATTR_UNUSED __attribute__((__unused__)) + +#define VIRT_ATTR_UNUSED __attribute__((__unused__)) =20 #define VIRT_N_ELEMENTS(array) (sizeof(array) / sizeof(*(array))) =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871715720522.9789875007199; Mon, 12 Mar 2018 09:21:55 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 992BE28207; Mon, 12 Mar 2018 16:21:53 +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 21D795C88A; Mon, 12 Mar 2018 16:21:53 +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 A98FF181BA00; Mon, 12 Mar 2018 16:21: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 w2CGLoxc024943 for ; Mon, 12 Mar 2018 12:21:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id C5D12215CDAC; Mon, 12 Mar 2018 16:21:50 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6CD27215CDA7 for ; Mon, 12 Mar 2018 16:21:50 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:32 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 02/18] util: there is no need to mark cleanup functions as inline 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 12 Mar 2018 16:21:54 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/util.c | 34 ++++++++++++++++++++++++++++++++++ src/util.h | 38 ++++++++------------------------------ 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/util.c b/src/util.c index d0649fa..962eaab 100644 --- a/src/util.c +++ b/src/util.c @@ -104,6 +104,40 @@ virtDBusUtilVirDomainFromBusPath(virConnectPtr connect= ion, return virDomainLookupByUUIDString(connection, name); } =20 +void +virtDBusUtilFreep(void *p) +{ + free(*(void **)p); +} + +void +virtDBusUtilClosep(int *fdp) +{ + if (*fdp >=3D 0) + close(*fdp); +} + +void +virtDBusUtilStrvFreep(void *p) +{ + char **strv =3D *(char ***)p; + + if (strv =3D=3D NULL) + return; + + for (unsigned i =3D 0; strv[i] !=3D NULL; i++) + free(strv[i]); + + free(strv); +} + +void +virtDBusUtilVirDomainFreep(virDomainPtr *domainp) +{ + if (*domainp) + virDomainFree(*domainp); +} + void virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp) { diff --git a/src/util.h b/src/util.h index 9779d29..a772ffe 100644 --- a/src/util.h +++ b/src/util.h @@ -33,39 +33,17 @@ virtDBusUtilVirDomainFromBusPath(virConnectPtr connecti= on, const char *path, const char *domainPath); =20 -static inline void -virtDBusUtilFreep(void *p) -{ - free(*(void **)p); -} - -static inline void -virtDBusUtilClosep(int *fdp) -{ - if (*fdp >=3D 0) - close(*fdp); -} - -static inline void -virtDBusUtilStrvFreep(void *p) -{ - char **strv =3D *(char ***)p; - - if (strv =3D=3D NULL) - return; +void +virtDBusUtilFreep(void *p); =20 - for (unsigned i =3D 0; strv[i] !=3D NULL; i +=3D 1) - free(strv[i]); +void +virtDBusUtilClosep(int *fdp); =20 - free(strv); -} +void +virtDBusUtilStrvFreep(void *p); =20 -static inline void -virtDBusUtilVirDomainFreep(virDomainPtr *domainp) -{ - if (*domainp) - virDomainFree(*domainp); -} +void +virtDBusUtilVirDomainFreep(virDomainPtr *domainp); =20 void virtDBusUtilVirDomainListFreep(virDomainPtr **domainsp); --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871723975624.9163586176176; Mon, 12 Mar 2018 09:22:03 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 20FB281256; Mon, 12 Mar 2018 16:22:02 +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 C18A64F9E2; Mon, 12 Mar 2018 16:22:01 +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 865A14CA9B; Mon, 12 Mar 2018 16:22:01 +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 w2CGLpK3024950 for ; Mon, 12 Mar 2018 12:21:51 -0400 Received: by smtp.corp.redhat.com (Postfix) id 64236215CDA7; Mon, 12 Mar 2018 16:21:51 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0B0942166BB2 for ; Mon, 12 Mar 2018 16:21:50 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:33 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 03/18] util: introduce VIRT_DBUS_ERROR_INTERFACE 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 12 Mar 2018 16:22:02 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/util.c | 4 ++-- src/util.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/util.c b/src/util.c index 962eaab..3e6be4e 100644 --- a/src/util.c +++ b/src/util.c @@ -66,14 +66,14 @@ virtDBusUtilSetLastVirtError(sd_bus_error *error) if (!vir_error) return 0; =20 - return sd_bus_error_set(error, "org.libvirt.Error", vir_error->message= ); + return sd_bus_error_set(error, VIRT_DBUS_ERROR_INTERFACE, vir_error->m= essage); } =20 int virtDBusUtilSetError(sd_bus_error *error, const char *message) { - return sd_bus_error_set(error, "org.libvirt.Error", message); + return sd_bus_error_set(error, VIRT_DBUS_ERROR_INTERFACE, message); } =20 char * diff --git a/src/util.h b/src/util.h index a772ffe..c92674f 100644 --- a/src/util.h +++ b/src/util.h @@ -5,6 +5,8 @@ #include #include =20 +#define VIRT_DBUS_ERROR_INTERFACE "org.libvirt.Error" + #define _cleanup_(_x) __attribute__((__cleanup__(_x))) =20 #define VIRT_ATTR_UNUSED __attribute__((__unused__)) --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871727490418.48455593669644; Mon, 12 Mar 2018 09:22:07 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 87B3180478; Mon, 12 Mar 2018 16:22:05 +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 1F53617197; Mon, 12 Mar 2018 16:22:05 +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 AA7C14CAA0; Mon, 12 Mar 2018 16:22:04 +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 w2CGLqGP024961 for ; Mon, 12 Mar 2018 12:21:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id 04196215CDA7; Mon, 12 Mar 2018 16:21:52 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9DE1E215CDAC for ; Mon, 12 Mar 2018 16:21:51 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:34 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 04/18] connect: introduce VIRT_DBUS_CONNECT_INTERFACE 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 12 Mar 2018 16:22:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This also fixes the one wrong interface name in events.c. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.c | 2 +- src/connect.h | 2 ++ src/events.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/connect.c b/src/connect.c index b44d247..45fb2ae 100644 --- a/src/connect.c +++ b/src/connect.c @@ -258,7 +258,7 @@ virtDBusConnectNew(virtDBusConnect **connectp, r =3D sd_bus_add_object_vtable(connect->bus, NULL, connect->connectPath, - "org.libvirt.Connect", + VIRT_DBUS_CONNECT_INTERFACE, virt_connect_vtable, connect); if (r < 0) diff --git a/src/connect.h b/src/connect.h index 46e8c9a..9078ae7 100644 --- a/src/connect.h +++ b/src/connect.h @@ -5,6 +5,8 @@ #include #include =20 +#define VIRT_DBUS_CONNECT_INTERFACE "org.libvirt.Connect" + struct virtDBusConnect { sd_bus *bus; const char *uri; diff --git a/src/events.c b/src/events.c index ca1418b..eee068c 100644 --- a/src/events.c +++ b/src/events.c @@ -54,7 +54,7 @@ virtDBusEventsDomainLifecycle(virConnectPtr connection VI= RT_ATTR_UNUSED, r =3D sd_bus_message_new_signal(connect->bus, &message, connect->connectPath, - "org.libvirt.connect", + VIRT_DBUS_CONNECT_INTERFACE, signal); if (r < 0) return r; --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871717562644.3262647009051; Mon, 12 Mar 2018 09:21:57 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 0E9BC61471; Mon, 12 Mar 2018 16:21:56 +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 D64C317C33; Mon, 12 Mar 2018 16:21:55 +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 84909181BA02; Mon, 12 Mar 2018 16:21:55 +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 w2CGLqK5024966 for ; Mon, 12 Mar 2018 12:21:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id 96BDA2166BB2; Mon, 12 Mar 2018 16:21:52 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3DCF5215CDAC for ; Mon, 12 Mar 2018 16:21:52 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:35 +0100 Message-Id: <78206f8f264b2d90e327b41cd900f32b8d474338.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 05/18] domain: introduce VIRT_DBUS_DOMAIN_INTERFACE 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Mon, 12 Mar 2018 16:21:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/domain.c | 2 +- src/domain.h | 2 ++ src/events.c | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/domain.c b/src/domain.c index ebcd142..850ea4a 100644 --- a/src/domain.c +++ b/src/domain.c @@ -573,7 +573,7 @@ virtDBusDomainRegister(virtDBusConnect *connect, return sd_bus_add_fallback_vtable(bus, NULL, connect->domainPath, - "org.libvirt.Domain", + VIRT_DBUS_DOMAIN_INTERFACE, virt_domain_vtable, virtDBusDomainLookup, connect); diff --git a/src/domain.h b/src/domain.h index adadc6a..5ce592c 100644 --- a/src/domain.h +++ b/src/domain.h @@ -5,6 +5,8 @@ #include #include =20 +#define VIRT_DBUS_DOMAIN_INTERFACE "org.libvirt.Domain" + int virtDBusDomainRegister(virtDBusConnect *connect, sd_bus *bus); diff --git a/src/events.c b/src/events.c index eee068c..681441d 100644 --- a/src/events.c +++ b/src/events.c @@ -85,7 +85,7 @@ virtDBusEventsDomainDeviceAdded(virConnectPtr connection = VIRT_ATTR_UNUSED, r =3D sd_bus_message_new_signal(connect->bus, &message, path, - "org.libvirt.Domain", + VIRT_DBUS_DOMAIN_INTERFACE, "DeviceAdded"); if (r < 0) return r; @@ -113,7 +113,7 @@ virtDBusEventsDomainDeviceRemoved(virConnectPtr connect= ion VIRT_ATTR_UNUSED, r =3D sd_bus_message_new_signal(connect->bus, &message, path, - "org.libvirt.Domain", + VIRT_DBUS_DOMAIN_INTERFACE, "DeviceRemoved"); if (r < 0) return r; @@ -143,7 +143,7 @@ virtDBusEventsDomainDiskChange(virConnectPtr connection= VIRT_ATTR_UNUSED, r =3D sd_bus_message_new_signal(connect->bus, &message, path, - "org.libvirt.Domain", + VIRT_DBUS_DOMAIN_INTERFACE, "TrayChange"); if (r < 0) return r; @@ -187,7 +187,7 @@ virtDBusEventsDomainTrayChange(virConnectPtr connection= VIRT_ATTR_UNUSED, r =3D sd_bus_message_new_signal(connect->bus, &message, path, - "org.libvirt.Domain", + VIRT_DBUS_DOMAIN_INTERFACE, "DiskChange"); if (r < 0) return r; --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152087173027943.643558118366514; Mon, 12 Mar 2018 09:22:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8FD69356E6; Mon, 12 Mar 2018 16:22:08 +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 48DAB17AC6; Mon, 12 Mar 2018 16:22:08 +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 DE0634CAA1; Mon, 12 Mar 2018 16:22:07 +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 w2CGLr5k024976 for ; Mon, 12 Mar 2018 12:21:53 -0400 Received: by smtp.corp.redhat.com (Postfix) id 34C0F215CDAC; Mon, 12 Mar 2018 16:21:53 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id D0594215CDA7 for ; Mon, 12 Mar 2018 16:21:52 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:36 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 06/18] events: fix signal message for TrayChange event 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 12 Mar 2018 16:22:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The reply contains only two strings. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/events.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/events.c b/src/events.c index 681441d..420fe63 100644 --- a/src/events.c +++ b/src/events.c @@ -160,7 +160,7 @@ virtDBusEventsDomainDiskChange(virConnectPtr connection= VIRT_ATTR_UNUSED, break; } =20 - r =3D sd_bus_message_append(message, "ssss", device, reasonstr); + r =3D sd_bus_message_append(message, "ss", device, reasonstr); if (r < 0) return r; =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871729003978.9737561681441; Mon, 12 Mar 2018 09:22:09 -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 28D26C0587E2; Mon, 12 Mar 2018 16:22:07 +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 0098B60C80; Mon, 12 Mar 2018 16:22:06 +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 AE2B4180BADB; Mon, 12 Mar 2018 16:22:06 +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 w2CGLrYj024989 for ; Mon, 12 Mar 2018 12:21:53 -0400 Received: by smtp.corp.redhat.com (Postfix) id C7DAC215CDAC; Mon, 12 Mar 2018 16:21:53 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6F08C2166BB2 for ; Mon, 12 Mar 2018 16:21:53 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:37 +0100 Message-Id: <8fff7c3b82711a51d155b54c7fd5e5f74637605e.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 07/18] events: fix function names for TrayChange and DiskChange events 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.32]); Mon, 12 Mar 2018 16:22:07 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/events.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/events.c b/src/events.c index 420fe63..0ece3ab 100644 --- a/src/events.c +++ b/src/events.c @@ -126,7 +126,7 @@ virtDBusEventsDomainDeviceRemoved(virConnectPtr connect= ion VIRT_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainDiskChange(virConnectPtr connection VIRT_ATTR_UNUSED, +virtDBusEventsDomainTrayChange(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, const char *device, int reason, @@ -168,7 +168,7 @@ virtDBusEventsDomainDiskChange(virConnectPtr connection= VIRT_ATTR_UNUSED, } =20 static int -virtDBusEventsDomainTrayChange(virConnectPtr connection VIRT_ATTR_UNUSED, +virtDBusEventsDomainDiskChange(virConnectPtr connection VIRT_ATTR_UNUSED, virDomainPtr domain, const char *old_src_path, const char *new_src_path, @@ -243,10 +243,10 @@ virtDBusEventsRegister(virtDBusConnect *connect) =20 virtDBusEventsRegisterEvent(connect, VIR_DOMAIN_EVENT_ID_DISK_CHANGE, - VIR_DOMAIN_EVENT_CALLBACK(virtDBusEventsDo= mainTrayChange)); + VIR_DOMAIN_EVENT_CALLBACK(virtDBusEventsDo= mainDiskChange)); =20 virtDBusEventsRegisterEvent(connect, VIR_DOMAIN_EVENT_ID_TRAY_CHANGE, - VIR_DOMAIN_EVENT_CALLBACK(virtDBusEventsDo= mainDiskChange)); + VIR_DOMAIN_EVENT_CALLBACK(virtDBusEventsDo= mainTrayChange)); =20 } --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15208717235861002.1821455904662; Mon, 12 Mar 2018 09:22:03 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 25ED880518; Mon, 12 Mar 2018 16:22:02 +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 F107117C4A; Mon, 12 Mar 2018 16:22:01 +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 869374CA9C; Mon, 12 Mar 2018 16:22:01 +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 w2CGLs5x024997 for ; Mon, 12 Mar 2018 12:21:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id 66318215CDAC; Mon, 12 Mar 2018 16:21:54 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0D8FB2166BB2 for ; Mon, 12 Mar 2018 16:21:53 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:38 +0100 Message-Id: <5803f18896ede14763484a607b4f4ce665cf0f77.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 08/18] main: error out if signal handler is not registered 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Mon, 12 Mar 2018 16:22:02 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.c b/src/main.c index e0f9434..c4ad1e3 100644 --- a/src/main.c +++ b/src/main.c @@ -219,6 +219,10 @@ main(int argc, char *argv[]) virtDBusHandleSignal, NULL, NULL); + if (signal_watch < 0) { + fprintf(stderr, "Failed to register signal handler.\n"); + return EXIT_FAILURE; + } =20 while (loop_status >=3D 0) virEventRunDefaultImpl(); --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871732151207.80400411420248; Mon, 12 Mar 2018 09:22:12 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id ED1B461E53; Mon, 12 Mar 2018 16:22:10 +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 C5C9B12A7B; Mon, 12 Mar 2018 16:22:10 +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 91DE74CAA3; Mon, 12 Mar 2018 16:22:10 +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 w2CGLtfN025002 for ; Mon, 12 Mar 2018 12:21:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id 04623215CDAC; Mon, 12 Mar 2018 16:21:55 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9FD21215CDAE for ; Mon, 12 Mar 2018 16:21:54 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:39 +0100 Message-Id: <95dc5b93dd796c75f8303ffcdabcddbc6d730b8d.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 09/18] main: fix error message 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Mon, 12 Mar 2018 16:22:11 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index c4ad1e3..5dca7fb 100644 --- a/src/main.c +++ b/src/main.c @@ -198,7 +198,7 @@ main(int argc, char *argv[]) r =3D virtDBusConnectNew(&connect[i], bus, drivers[i].uri, drivers[i].object); if (r < 0) { - fprintf(stderr, "Failed to register libvirt connection."); + fprintf(stderr, "Failed to register libvirt connection.\n"); return EXIT_FAILURE; } } --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152087173323316.121290687600435; Mon, 12 Mar 2018 09:22:13 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id DEA2D883C4; Mon, 12 Mar 2018 16:22:11 +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 A23B217188; Mon, 12 Mar 2018 16:22:11 +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 5F62A180BAE8; Mon, 12 Mar 2018 16:22:11 +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 w2CGLt9x025009 for ; Mon, 12 Mar 2018 12:21:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id 96E002166BB2; Mon, 12 Mar 2018 16:21:55 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3E730215CDAE for ; Mon, 12 Mar 2018 16:21:55 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:40 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 10/18] spec: don't use hard-coded system_user 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Mon, 12 Mar 2018 16:22:12 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- libvirt-dbus.spec.in | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libvirt-dbus.spec.in b/libvirt-dbus.spec.in index 572300f..87f20d4 100644 --- a/libvirt-dbus.spec.in +++ b/libvirt-dbus.spec.in @@ -2,6 +2,7 @@ =20 %define libvirt_version @LIBVIRT_REQUIRED@ %define systemd_version @SYSTEMD_REQUIRED@ +%define system_user @SYSTEM_USER@ =20 Name: @PACKAGE@ Version: @VERSION@ @@ -39,10 +40,10 @@ rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_ROOT =20 %pre -getent group libvirtdbus >/dev/null || groupadd -r libvirtdbus -getent passwd libvirtdbus >/dev/null || \ - useradd -r -g libvirtdbus -d / -s /sbin/nologin \ - -c "Libvirt DBus bridge" libvirtdbus +getent group %{system_user} >/dev/null || groupadd -r %{system_user} +getent passwd %{system_user} >/dev/null || \ + useradd -r -g %{system_user} -d / -s /sbin/nologin \ + -c "Libvirt DBus bridge" %{system_user} exit 0 =20 %files --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871735847987.8672242362713; Mon, 12 Mar 2018 09:22:15 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 793FC6147B; Mon, 12 Mar 2018 16:22:14 +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 427BB60474; Mon, 12 Mar 2018 16:22:14 +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 D83C64CAAA; Mon, 12 Mar 2018 16:22:13 +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 w2CGLuF9025017 for ; Mon, 12 Mar 2018 12:21:56 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3575D215CDAE; Mon, 12 Mar 2018 16:21:56 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id D0C8E215CDAC for ; Mon, 12 Mar 2018 16:21:55 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:41 +0100 Message-Id: <00068e7583e0bfc048cd834ac93da1c514a0c6e2.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 11/18] maint: fix coding style 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Mon, 12 Mar 2018 16:22:15 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.h | 21 ++++++++++++++------- src/domain.c | 1 + src/util.c | 42 +++++++++++++++++++++--------------------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/connect.h b/src/connect.h index 9078ae7..1086bc6 100644 --- a/src/connect.h +++ b/src/connect.h @@ -20,10 +20,17 @@ struct virtDBusConnect { }; typedef struct virtDBusConnect virtDBusConnect; =20 -int virtDBusConnectNew(virtDBusConnect **connectp, - sd_bus *bus, - const char *uri, - const char *connectPath); -virtDBusConnect *virtDBusConnectFree(virtDBusConnect *connect); -void virtDBusConnectFreep(virtDBusConnect **connectp); -void virtDBusConnectListFree(virtDBusConnect ***connectList); +int +virtDBusConnectNew(virtDBusConnect **connectp, + sd_bus *bus, + const char *uri, + const char *connectPath); + +virtDBusConnect * +virtDBusConnectFree(virtDBusConnect *connect); + +void +virtDBusConnectFreep(virtDBusConnect **connectp); + +void +virtDBusConnectListFree(virtDBusConnect ***connectList); diff --git a/src/domain.c b/src/domain.c index 850ea4a..c9365a4 100644 --- a/src/domain.c +++ b/src/domain.c @@ -1,4 +1,5 @@ #define _GNU_SOURCE + #include "domain.h" #include "util.h" =20 diff --git a/src/util.c b/src/util.c index 3e6be4e..0d4d0e3 100644 --- a/src/util.c +++ b/src/util.c @@ -23,27 +23,27 @@ virtDBusUtilMessageAppendTypedParameters(sd_bus_message= *message, return r; =20 switch (parameters[i].type) { - case VIR_TYPED_PARAM_INT: - r =3D sd_bus_message_append(message, "v", "i", parameters[= i].value.i); - break; - case VIR_TYPED_PARAM_UINT: - r =3D sd_bus_message_append(message, "v", "u", parameters[= i].value.ui); - break; - case VIR_TYPED_PARAM_LLONG: - r =3D sd_bus_message_append(message, "v", "x", parameters[= i].value.l); - break; - case VIR_TYPED_PARAM_ULLONG: - r =3D sd_bus_message_append(message, "v", "t", parameters[= i].value.ul); - break; - case VIR_TYPED_PARAM_DOUBLE: - r =3D sd_bus_message_append(message, "v", "d", parameters[= i].value.d); - break; - case VIR_TYPED_PARAM_BOOLEAN: - r =3D sd_bus_message_append(message, "v", "b", parameters[= i].value.b); - break; - case VIR_TYPED_PARAM_STRING: - r =3D sd_bus_message_append(message, "v", "s", parameters[= i].value.s); - break; + case VIR_TYPED_PARAM_INT: + r =3D sd_bus_message_append(message, "v", "i", parameters[i].v= alue.i); + break; + case VIR_TYPED_PARAM_UINT: + r =3D sd_bus_message_append(message, "v", "u", parameters[i].v= alue.ui); + break; + case VIR_TYPED_PARAM_LLONG: + r =3D sd_bus_message_append(message, "v", "x", parameters[i].v= alue.l); + break; + case VIR_TYPED_PARAM_ULLONG: + r =3D sd_bus_message_append(message, "v", "t", parameters[i].v= alue.ul); + break; + case VIR_TYPED_PARAM_DOUBLE: + r =3D sd_bus_message_append(message, "v", "d", parameters[i].v= alue.d); + break; + case VIR_TYPED_PARAM_BOOLEAN: + r =3D sd_bus_message_append(message, "v", "b", parameters[i].v= alue.b); + break; + case VIR_TYPED_PARAM_STRING: + r =3D sd_bus_message_append(message, "v", "s", parameters[i].v= alue.s); + break; } =20 if (r < 0) --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871727333559.4588964080464; Mon, 12 Mar 2018 09:22:07 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 6AD8CC047B8E; Mon, 12 Mar 2018 16:22:05 +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 3274112A7B; Mon, 12 Mar 2018 16:22:05 +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 C5328180BAD5; Mon, 12 Mar 2018 16:22:04 +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 w2CGLuWg025034 for ; Mon, 12 Mar 2018 12:21:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id C8D70215CDAC; Mon, 12 Mar 2018 16:21:56 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6F5522166BB2 for ; Mon, 12 Mar 2018 16:21:56 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:42 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 12/18] maint: cleanup includes 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 12 Mar 2018 16:22:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.c | 1 - src/domain.c | 1 + src/domain.h | 1 - src/events.c | 1 + src/events.h | 3 --- src/main.c | 2 ++ src/util.c | 2 ++ src/util.h | 2 -- 8 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/connect.c b/src/connect.c index 45fb2ae..e93111f 100644 --- a/src/connect.c +++ b/src/connect.c @@ -3,7 +3,6 @@ #include "connect.h" #include "util.h" =20 -#include #include #include =20 diff --git a/src/domain.c b/src/domain.c index c9365a4..8e6489a 100644 --- a/src/domain.c +++ b/src/domain.c @@ -3,6 +3,7 @@ #include "domain.h" #include "util.h" =20 +#include #include =20 static int diff --git a/src/domain.h b/src/domain.h index 5ce592c..03a29ed 100644 --- a/src/domain.h +++ b/src/domain.h @@ -2,7 +2,6 @@ =20 #include "connect.h" =20 -#include #include =20 #define VIRT_DBUS_DOMAIN_INTERFACE "org.libvirt.Domain" diff --git a/src/events.c b/src/events.c index 0ece3ab..c45acd7 100644 --- a/src/events.c +++ b/src/events.c @@ -3,6 +3,7 @@ #include "util.h" =20 #include +#include #include =20 static int diff --git a/src/events.h b/src/events.h index f588c85..c234c55 100644 --- a/src/events.h +++ b/src/events.h @@ -2,8 +2,5 @@ =20 #include "connect.h" =20 -#include - - void virtDBusEventsRegister(virtDBusConnect *connect); diff --git a/src/main.c b/src/main.c index 5dca7fb..6f11aab 100644 --- a/src/main.c +++ b/src/main.c @@ -8,8 +8,10 @@ #include #include #include +#include #include #include +#include =20 static int loop_status; =20 diff --git a/src/util.c b/src/util.c index 0d4d0e3..9042a0f 100644 --- a/src/util.c +++ b/src/util.c @@ -1,6 +1,8 @@ #include "util.h" =20 #include +#include +#include =20 int virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, diff --git a/src/util.h b/src/util.h index c92674f..2a6f7e2 100644 --- a/src/util.h +++ b/src/util.h @@ -1,9 +1,7 @@ #pragma once =20 #include -#include #include -#include =20 #define VIRT_DBUS_ERROR_INTERFACE "org.libvirt.Error" =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871730783191.17934311408806; Mon, 12 Mar 2018 09:22:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4A376C04B923; Mon, 12 Mar 2018 16:22:09 +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 1642717AD3; Mon, 12 Mar 2018 16:22:09 +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 A7C20180BAE6; Mon, 12 Mar 2018 16:22:08 +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 w2CGLvEi025045 for ; Mon, 12 Mar 2018 12:21:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id 66D0B215CDAC; Mon, 12 Mar 2018 16:21:57 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0DFD3215CDAE for ; Mon, 12 Mar 2018 16:21:56 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:43 +0100 Message-Id: <0978d50626b5fd61458af25b6205109742f07f82.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 13/18] domain: ensure connection to libvirt 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 12 Mar 2018 16:22:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Fixes an bug that was introduced by <8e24f602>. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.c | 2 +- src/connect.h | 4 ++++ src/domain.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/connect.c b/src/connect.c index e93111f..b31f08e 100644 --- a/src/connect.c +++ b/src/connect.c @@ -53,7 +53,7 @@ virtDBusConnectClose(virtDBusConnect *connect, connect->connection =3D NULL; } =20 -static int +int virtDBusConnectOpen(virtDBusConnect *connect, sd_bus_error *error) { diff --git a/src/connect.h b/src/connect.h index 1086bc6..9e5f533 100644 --- a/src/connect.h +++ b/src/connect.h @@ -26,6 +26,10 @@ virtDBusConnectNew(virtDBusConnect **connectp, const char *uri, const char *connectPath); =20 +int +virtDBusConnectOpen(virtDBusConnect *connect, + sd_bus_error *error); + virtDBusConnect * virtDBusConnectFree(virtDBusConnect *connect); =20 diff --git a/src/domain.c b/src/domain.c index 8e6489a..3df9113 100644 --- a/src/domain.c +++ b/src/domain.c @@ -19,6 +19,9 @@ virtDBusDomainGetName(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; const char *name =3D ""; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -44,6 +47,9 @@ virtDBusDomainGetUUID(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; char uuid[VIR_UUID_STRING_BUFLEN] =3D ""; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -66,6 +72,9 @@ virtDBusDomainGetId(sd_bus *bus VIRT_ATTR_UNUSED, virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -86,6 +95,9 @@ virtDBusDomainGetVcpus(sd_bus *bus VIRT_ATTR_UNUSED, virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -107,6 +119,9 @@ virtDBusDomainGetOsType(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *os_type =3D NULL; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -132,6 +147,9 @@ virtDBusDomainGetActive(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int active; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -157,6 +175,9 @@ virtDBusDomainGetPersistent(sd_bus *bus VIRT_ATTR_UNUSE= D, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int persistent; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -183,6 +204,9 @@ virtDBusDomainGetState(sd_bus *bus VIRT_ATTR_UNUSED, int state =3D 0; const char *string; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -234,6 +258,9 @@ virtDBusDomainGetAutostart(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int autostart =3D 0; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); if (domain =3D=3D NULL) @@ -255,6 +282,9 @@ virtDBusDomainGetXMLDesc(sd_bus_message *message, uint32_t flags; int r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -300,6 +330,9 @@ virtDBusDomainGetStats(sd_bus_message *message, if (r < 0) return r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -336,6 +369,9 @@ virtDBusDomainShutdown(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -362,6 +398,9 @@ virtDBusDomainDestroy(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -393,6 +432,9 @@ virtDBusDomainReboot(sd_bus_message *message, if (r < 0) return r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -424,6 +466,9 @@ virtDBusDomainReset(sd_bus_message *message, if (r < 0) return r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -450,6 +495,9 @@ virtDBusDomainCreate(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); @@ -476,6 +524,9 @@ virtDBusDomainUndefine(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 + if (virtDBusConnectOpen(connect, error) < 0) + return -1; + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, sd_bus_message_get_path(mess= age), connect->domainPath); --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871734889495.09191590583873; Mon, 12 Mar 2018 09:22:14 -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 D1FD185543; Mon, 12 Mar 2018 16:22:12 +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 8D6D360C80; Mon, 12 Mar 2018 16:22:12 +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 4E8924CAA6; Mon, 12 Mar 2018 16:22:12 +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 w2CGLwt0025055 for ; Mon, 12 Mar 2018 12:21:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id 062672166BB2; Mon, 12 Mar 2018 16:21:58 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id A10FD215CDAE for ; Mon, 12 Mar 2018 16:21:57 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:44 +0100 Message-Id: <1c0562d95c71bbb4cb300715042397789984171d.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 14/18] connect: parse message arguments as first thing 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.28]); Mon, 12 Mar 2018 16:22:13 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There is no need to open connection if parsing arguments fails. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/connect.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/connect.c b/src/connect.c index b31f08e..695fc0d 100644 --- a/src/connect.c +++ b/src/connect.c @@ -120,11 +120,11 @@ virtDBusConnectListDomains(sd_bus_message *message, uint32_t flags; int r; =20 - r =3D virtDBusConnectOpen(connect, error); + r =3D sd_bus_message_read(message, "u", &flags); if (r < 0) return r; =20 - r =3D sd_bus_message_read(message, "u", &flags); + r =3D virtDBusConnectOpen(connect, error); if (r < 0) return r; =20 @@ -170,11 +170,11 @@ virtDBusConnectCreateXML(sd_bus_message *message, _cleanup_(virtDBusUtilFreep) char *path =3D NULL; int r; =20 - r =3D virtDBusConnectOpen(connect, error); + r =3D sd_bus_message_read(message, "su", &xml, &flags); if (r < 0) return r; =20 - r =3D sd_bus_message_read(message, "su", &xml, &flags); + r =3D virtDBusConnectOpen(connect, error); if (r < 0) return r; =20 @@ -198,11 +198,11 @@ virtDBusConnectDefineXML(sd_bus_message *message, _cleanup_(virtDBusUtilFreep) char *path =3D NULL; int r; =20 - r =3D virtDBusConnectOpen(connect, error); + r =3D sd_bus_message_read(message, "s", &xml); if (r < 0) return r; =20 - r =3D sd_bus_message_read(message, "s", &xml); + r =3D virtDBusConnectOpen(connect, error); if (r < 0) return r; =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871740840643.3585131860028; Mon, 12 Mar 2018 09:22:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 35E093AA10; Mon, 12 Mar 2018 16:22:18 +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 01B1017140; Mon, 12 Mar 2018 16:22:18 +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 BFCA04CAB1; Mon, 12 Mar 2018 16:22:17 +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 w2CGLwEf025063 for ; Mon, 12 Mar 2018 12:21:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id B5BAF215CDAE; Mon, 12 Mar 2018 16:21:58 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3FC2F215CDAC for ; Mon, 12 Mar 2018 16:21:58 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:45 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 15/18] domain: create a helper function to get a domain object 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 12 Mar 2018 16:22:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This is called for every API, create a function for it. Signed-off-by: Pavel Hrdina Reviewed-by: Daniel P. Berrang=C3=A9 --- src/domain.c | 220 ++++++++++++++++++++-----------------------------------= ---- 1 file changed, 75 insertions(+), 145 deletions(-) diff --git a/src/domain.c b/src/domain.c index 3df9113..f68a3a0 100644 --- a/src/domain.c +++ b/src/domain.c @@ -6,6 +6,28 @@ #include #include =20 +static virDomainPtr +virtDBusDomainGetVirDomain(virtDBusConnect *connect, + const char *path, + sd_bus_error *error) +{ + virDomainPtr domain; + + if (virtDBusConnectOpen(connect, error) < 0) + return NULL; + + domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, + connect->domainPath); + if (domain =3D=3D NULL) { + sd_bus_error_setf(error, + SD_BUS_ERROR_UNKNOWN_OBJECT, + "Unknown object '%s'.", path); + return NULL; + } + + return domain; +} + static int virtDBusDomainGetName(sd_bus *bus VIRT_ATTR_UNUSED, const char *path, @@ -19,13 +41,9 @@ virtDBusDomainGetName(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; const char *name =3D ""; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + return -1; =20 name =3D virDomainGetName(domain); if (name =3D=3D NULL) @@ -47,13 +65,9 @@ virtDBusDomainGetUUID(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; char uuid[VIR_UUID_STRING_BUFLEN] =3D ""; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + return -1; =20 virDomainGetUUIDString(domain, uuid); =20 @@ -72,13 +86,9 @@ virtDBusDomainGetId(sd_bus *bus VIRT_ATTR_UNUSED, virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "u", 0); + return -1; =20 return sd_bus_message_append(reply, "u", virDomainGetID(domain)); } @@ -95,13 +105,9 @@ virtDBusDomainGetVcpus(sd_bus *bus VIRT_ATTR_UNUSED, virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "u", 0); + return -1; =20 return sd_bus_message_append(reply, "u", virDomainGetVcpusFlags(domain= , VIR_DOMAIN_VCPU_CURRENT)); } @@ -119,13 +125,9 @@ virtDBusDomainGetOsType(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *os_type =3D NULL; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + return -1; =20 os_type =3D virDomainGetOSType(domain); if (os_type =3D=3D NULL) @@ -147,13 +149,9 @@ virtDBusDomainGetActive(sd_bus *bus VIRT_ATTR_UNUSED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int active; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "b", 0); + return -1; =20 active =3D virDomainIsActive(domain); if (active < 0) @@ -175,13 +173,9 @@ virtDBusDomainGetPersistent(sd_bus *bus VIRT_ATTR_UNUS= ED, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int persistent; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "b", 0); + return -1; =20 persistent =3D virDomainIsPersistent(domain); if (persistent < 0) @@ -204,13 +198,9 @@ virtDBusDomainGetState(sd_bus *bus VIRT_ATTR_UNUSED, int state =3D 0; const char *string; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + return -1; =20 virDomainGetState(domain, &state, NULL, 0); =20 @@ -258,13 +248,9 @@ virtDBusDomainGetAutostart(sd_bus *bus VIRT_ATTR_UNUSE= D, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int autostart =3D 0; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, - connect->domainPath); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (domain =3D=3D NULL) - return sd_bus_message_append(reply, "b", 0); + return -1; =20 virDomainGetAutostart(domain, &autostart); =20 @@ -282,23 +268,16 @@ virtDBusDomainGetXMLDesc(sd_bus_message *message, uint32_t flags; int r; =20 - if (virtDBusConnectOpen(connect, error) < 0) - return -1; - - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D sd_bus_message_read(message, "u", &flags); if (r < 0) return r; =20 + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) + return -1; + description =3D virDomainGetXMLDesc(domain, flags); if (!description) return virtDBusUtilSetLastVirtError(error); @@ -330,19 +309,12 @@ virtDBusDomainGetStats(sd_bus_message *message, if (r < 0) return r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - domains[0] =3D domain; domains[1] =3D NULL; =20 @@ -369,19 +341,12 @@ virtDBusDomainShutdown(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainShutdown(domain); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -398,19 +363,12 @@ virtDBusDomainDestroy(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainDestroy(domain); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -432,19 +390,12 @@ virtDBusDomainReboot(sd_bus_message *message, if (r < 0) return r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainReboot(domain, flags); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -466,19 +417,12 @@ virtDBusDomainReset(sd_bus_message *message, if (r < 0) return r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainReset(domain, flags); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -495,19 +439,12 @@ virtDBusDomainCreate(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainCreate(domain); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -524,19 +461,12 @@ virtDBusDomainUndefine(sd_bus_message *message, _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int r; =20 - if (virtDBusConnectOpen(connect, error) < 0) + domain =3D virtDBusDomainGetVirDomain(connect, + sd_bus_message_get_path(message), + error); + if (domain =3D=3D NULL) return -1; =20 - domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, - sd_bus_message_get_path(mess= age), - connect->domainPath); - if (domain =3D=3D NULL) { - return sd_bus_reply_method_errorf(message, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", - sd_bus_message_get_path(message)= ); - } - r =3D virDomainUndefine(domain); if (r < 0) return virtDBusUtilSetLastVirtError(error); @@ -594,7 +524,7 @@ virtDBusDomainLookup(sd_bus *bus VIRT_ATTR_UNUSED, if (*name =3D=3D '\0') return 0; =20 - domain =3D virDomainLookupByUUIDString(connect->connection, name); + domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (!domain) return 0; =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152087174306367.77102318888785; Mon, 12 Mar 2018 09:22:23 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 785EC8047A; Mon, 12 Mar 2018 16:22:21 +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 2A6B7608EE; Mon, 12 Mar 2018 16:22:21 +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 E764A4CAB4; Mon, 12 Mar 2018 16:22:20 +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 w2CGLx1Y025071 for ; Mon, 12 Mar 2018 12:21:59 -0400 Received: by smtp.corp.redhat.com (Postfix) id 72399215CDAC; Mon, 12 Mar 2018 16:21:59 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id EFAAE2166BB2 for ; Mon, 12 Mar 2018 16:21:58 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:46 +0100 Message-Id: <1b121c3ed4487eb156d6ee23c58d623cd5cb65e6.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 16/18] introduce support for libdbus library 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 12 Mar 2018 16:22:22 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We will switch to libdbus library because the systemd sd-bus implementation is not thread safe. Processing messages in threads is essential since Libvirt API can take some significant amount of time to return and that would block the whole libvirt-dbus daemon. Signed-off-by: Pavel Hrdina --- README | 1 + configure.ac | 13 + data/Makefile.am | 5 + libvirt-dbus.spec.in | 3 + src/Makefile.am | 11 +- src/dbus.c | 1226 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ src/dbus.h | 158 +++++++ src/domain.c | 8 - src/util.c | 131 +++++- src/util.h | 11 + test/Makefile.am | 3 +- test/travis-run | 2 +- 12 files changed, 1554 insertions(+), 18 deletions(-) create mode 100644 src/dbus.c create mode 100644 src/dbus.h diff --git a/README b/README index 754d957..242c9ba 100644 --- a/README +++ b/README @@ -57,6 +57,7 @@ raised in future releases based on this distro build targ= et policy. The packages required to build libvirt-dbus are =20 - systemd-211 + - dbus - libvirt =20 Patches submissions diff --git a/configure.ac b/configure.ac index aef3d37..c8dcf04 100644 --- a/configure.ac +++ b/configure.ac @@ -13,8 +13,10 @@ AM_SILENT_RULES([yes]) =20 LIBVIRT_REQUIRED=3D1.2.8 SYSTEMD_REQUIRED=3D211 +DBUS_REQUIRED=3D1.10.24 AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file AC_SUBST([SYSTEMD_REQUIRED]) dnl used in the .spec file +AC_SUBST([DBUS_REQUIRED]) dnl used in the .spec file =20 LIBVIRT_DBUS_MAJOR_VERSION=3D`echo $VERSION | awk -F. '{print $1}'` LIBVIRT_DBUS_MINOR_VERSION=3D`echo $VERSION | awk -F. '{print $2}'` @@ -35,6 +37,7 @@ AM_PROG_CC_C_O =20 PKG_CHECK_MODULES(LIBVIRT, libvirt >=3D $LIBVIRT_REQUIRED) PKG_CHECK_MODULES(SYSTEMD, libsystemd >=3D $SYSTEMD_REQUIRED) +PKG_CHECK_MODULES(DBUS, dbus-1 >=3D $DBUS_REQUIRED) =20 LIBVIRT_COMPILE_WARNINGS LIBVIRT_LINKER_RELRO @@ -70,6 +73,16 @@ else fi AC_SUBST(DBUS_SYSTEM_POLICIES_DIR) =20 +AC_ARG_WITH(dbus-interfaces, + [AC_HELP_STRING([--with-dbus-interfaces=3D], + [where D-BUS interfaces directory is])]) +if ! test -z "$with_dbus_interfaces" ; then + DBUS_INTERFACES_DIR=3D"with_dbus_interfaces" +else + DBUS_INTERFACES_DIR=3D"$datadir/dbus-1/interfaces" +fi +AC_SUBST(DBUS_INTERFACES_DIR) + LIBVIRT_ARG_WITH([SYSTEM_USER], [username to run system instance as], ['libvirtdbus']) SYSTEM_USER=3D$with_system_user diff --git a/data/Makefile.am b/data/Makefile.am index 9a53305..a886687 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -18,11 +18,16 @@ polkit_files =3D \ polkitdir =3D $(sysconfdir)/polkit-1/rules.d polkit_DATA =3D $(polkit_files:.rules.in=3D.rules) =20 +interfaces_files =3D +interfacesdir =3D $(DBUS_INTERFACES_DIR) +interfaces_DATA =3D $(interfaces_files) + EXTRA_DIST =3D \ $(service_in_files) \ $(system_service_in_files) \ $(system_policy_files) \ $(polkit_files) \ + $(interfaces_files) \ $(NULL) =20 CLEANFILES =3D \ diff --git a/libvirt-dbus.spec.in b/libvirt-dbus.spec.in index 87f20d4..512f4fc 100644 --- a/libvirt-dbus.spec.in +++ b/libvirt-dbus.spec.in @@ -2,6 +2,7 @@ =20 %define libvirt_version @LIBVIRT_REQUIRED@ %define systemd_version @SYSTEMD_REQUIRED@ +%define dbus_version @DBUS_REQUIRED@ %define system_user @SYSTEM_USER@ =20 Name: @PACKAGE@ @@ -16,9 +17,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-roo= t-%(%{__id_u} -n) =20 BuildRequires: libvirt-devel >=3D %{libvirt_version} BuildRequires: systemd-devel >=3D %{systemd_version} +BuildRequires: dbus-devel >=3D %{dbus_version} =20 Requires: libvirt-libs >=3D %{libvirt_version} Requires: systemd-libs >=3D %{systemd_version} +Requires: dbus-libs >=3D %{dbus_version} =20 Requires(pre): shadow-utils =20 diff --git a/src/Makefile.am b/src/Makefile.am index 1a5b50b..1f0d990 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,12 +1,16 @@ AM_CPPFLAGS =3D \ -I$(top_srcdir)/src =20 +AM_CPPFLAGS +=3D \ + -DVIRT_DBUS_INTERFACES_DIR=3D\"$(DBUS_INTERFACES_DIR)\" + DAEMON_SOURCES =3D \ main.c \ connect.c connect.h \ util.c util.h \ domain.c domain.h \ - events.c events.h + events.c events.h \ + dbus.c dbus.h =20 EXTRA_DIST =3D \ $(DAEMON_SOURCES) @@ -19,6 +23,7 @@ libvirt_dbus_SOURCES =3D $(DAEMON_SOURCES) libvirt_dbus_CFLAGS =3D \ $(SYSTEMD_CFLAGS) \ $(LIBVIRT_CFLAGS) \ + $(DBUS_CFLAGS) \ $(WARN_CFLAGS) \ $(PIE_CFLAGS) \ $(NULL) @@ -26,10 +31,12 @@ libvirt_dbus_CFLAGS =3D \ libvirt_dbus_LDFLAGS =3D \ $(SYSTEMD_LDFLAGS) \ $(LIBVIRT_LDFLAGS) \ + $(DBUS_LDFLAGS) \ $(RELRO_LDFLAGS) \ $(PID_LDFLAGS) \ $(NULL) =20 libvirt_dbus_LDADD =3D \ $(SYSTEMD_LIBS) \ - $(LIBVIRT_LIBS) + $(LIBVIRT_LIBS) \ + $(DBUS_LIBS) diff --git a/src/dbus.c b/src/dbus.c new file mode 100644 index 0000000..327ae12 --- /dev/null +++ b/src/dbus.c @@ -0,0 +1,1226 @@ +#define _GNU_SOURCE + +#include "dbus.h" +#include "util.h" + +#include +#include +#include +#include +#include + +struct _virtDBusMessage { + DBusMessage *message; + DBusConnection *bus; + DBusError *error; + DBusMessageIter **stack; + size_t items; + size_t size; +}; + +struct _virtDBusObject { + char *path; + const char **introspectXML; + const char *interface; + virtDBusObjectType type; + virtDBusPropertyHandlers *properties; + virtDBusMethodHandlers *methods; + void *data; +}; + +static int +virtDBusGetLibvirtEvents(DBusWatch *watch) +{ + unsigned int events; + int virt_events =3D 0; + + events =3D dbus_watch_get_flags(watch); + + if (events & DBUS_WATCH_READABLE) + virt_events |=3D VIR_EVENT_HANDLE_READABLE; + + if (events & DBUS_WATCH_WRITABLE) + virt_events |=3D VIR_EVENT_HANDLE_WRITABLE; + + return virt_events; +} + +static unsigned int +virtDBusGetBusEvents(int virt_events) +{ + unsigned int events =3D 0; + + if (virt_events & VIR_EVENT_HANDLE_READABLE) + events |=3D DBUS_WATCH_READABLE; + + if (virt_events & VIR_EVENT_HANDLE_WRITABLE) + events |=3D DBUS_WATCH_WRITABLE; + + return events; +} + +static void +virtDBusHandleBusEvent(int watch VIRT_ATTR_UNUSED, + int fd VIRT_ATTR_UNUSED, + int events, + void *opaque) +{ + dbus_watch_handle(opaque, virtDBusGetBusEvents(events)); +} + +static void +virtDBusHandleBusTimeout(int timer VIRT_ATTR_UNUSED, + void *opaque) +{ + dbus_timeout_handle(opaque); +} + +static dbus_bool_t +virtDBusWatchUpdate(DBusWatch *watch) +{ + _cleanup_(virtDBusUtilFreep) int *busWatch =3D dbus_watch_get_data(wat= ch); + dbus_bool_t enabled =3D dbus_watch_get_enabled(watch); + + if (enabled && !busWatch) { + busWatch =3D calloc(1, sizeof(int)); + if (!busWatch) + return FALSE; + + *busWatch =3D virEventAddHandle(dbus_watch_get_unix_fd(watch), + virtDBusGetLibvirtEvents(watch), + virtDBusHandleBusEvent, + watch, + NULL); + if (*busWatch < 0) + return FALSE; + + dbus_watch_set_data(watch, busWatch, free); + } else if (!enabled && busWatch !=3D NULL) { + virEventRemoveHandle(*busWatch); + dbus_watch_set_data(watch, NULL, NULL); + } else if (busWatch) { + virEventUpdateHandle(*busWatch, virtDBusGetLibvirtEvents(watch)); + } + + busWatch =3D NULL; + return TRUE; +} + +static dbus_bool_t +virtDBusAddWatch(DBusWatch *watch, + void *data VIRT_ATTR_UNUSED) +{ + return virtDBusWatchUpdate(watch); +} + +static void +virtDBusUpdateWatch(DBusWatch *watch, + void *data VIRT_ATTR_UNUSED) +{ + virtDBusWatchUpdate(watch); +} + +static void +virtDBusRemoveWatch(DBusWatch *watch, + void *data VIRT_ATTR_UNUSED) +{ + int *busWatch; + + busWatch =3D dbus_watch_get_data(watch); + if (busWatch) + virEventRemoveHandle(*busWatch); + + dbus_watch_set_data(watch, NULL, NULL); +} + +static dbus_bool_t +virtDBusTimeoutUpdate(DBusTimeout *timeout) +{ + _cleanup_(virtDBusUtilFreep) int *busTimeout =3D dbus_timeout_get_data= (timeout); + dbus_bool_t enabled =3D dbus_timeout_get_enabled(timeout); + + if (enabled && !busTimeout) { + busTimeout =3D calloc(1, sizeof(int)); + if (!busTimeout) + return FALSE; + + *busTimeout =3D virEventAddTimeout(dbus_timeout_get_interval(timeo= ut), + virtDBusHandleBusTimeout, + timeout, + NULL); + if (*busTimeout < 0) + return FALSE; + + dbus_timeout_set_data(timeout, busTimeout, free); + } else if (!enabled && busTimeout !=3D NULL) { + virEventRemoveTimeout(*busTimeout); + dbus_timeout_set_data(timeout, NULL, NULL); + } else if (busTimeout) { + virEventUpdateTimeout(*busTimeout, dbus_timeout_get_interval(timeo= ut)); + } + + busTimeout =3D NULL; + return TRUE; +} + +static dbus_bool_t +virtDBusAddTimeout(DBusTimeout *timeout, + void *data VIRT_ATTR_UNUSED) +{ + return virtDBusTimeoutUpdate(timeout); +} + +static void +virtDBusUpdateTimeout(DBusTimeout *timeout, + void *data VIRT_ATTR_UNUSED) +{ + virtDBusTimeoutUpdate(timeout); +} + +static void +virtDBusRemoveTimeout(DBusTimeout *timeout, + void *data VIRT_ATTR_UNUSED) +{ + int *busTimeout; + + busTimeout =3D dbus_timeout_get_data(timeout); + if (busTimeout) + virEventRemoveTimeout(*busTimeout); + + dbus_timeout_set_data(timeout, NULL, NULL); +} + +/** + * virtDBusConnectionOpen: + * @busType which bus type to use for D-Bus connection + * @name name of the service to register + * + * Opens a D-Bus connection and registers necessary callbacks + * into Libvirt event loop. + * + * Returns D-Bus connection on success, NULL on failure. The returned + * connection needs to be freed and closed using virtDBusConnectionClose(). + */ +DBusConnection * +virtDBusConnectionOpen(DBusBusType busType, + const char *name) +{ + _cleanup_(dbus_error_free) DBusError error =3D DBUS_ERROR_INIT; + _cleanup_(virtDBusConnectionClose) DBusConnection *bus =3D NULL; + DBusConnection *ret; + int r; + + if (!dbus_threads_init(NULL)) { + fprintf(stderr, "Failed to initialize dbus threads.\n"); + return NULL; + } + + bus =3D dbus_bus_get_private(busType, &error); + + if (!bus) { + fprintf(stderr, "Failed to connect to session bus: %s\n", error.me= ssage); + return NULL; + } + + r =3D dbus_bus_request_name(bus, name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &e= rror); + if (r !=3D DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + fprintf(stderr, "Failed to acquire service name: %s\n", error.mess= age); + return NULL; + } + + if (!dbus_connection_set_watch_functions(bus, virtDBusAddWatch, + virtDBusRemoveWatch, + virtDBusUpdateWatch, + dbus_connection_ref(bus), + (DBusFreeFunction)dbus_connec= tion_unref)) { + fprintf(stderr, "Failed to register watch functions.\n"); + return NULL; + } + + if (!dbus_connection_set_timeout_functions(bus, virtDBusAddTimeout, + virtDBusRemoveTimeout, + virtDBusUpdateTimeout, + dbus_connection_ref(bus), + (DBusFreeFunction)dbus_conn= ection_unref)) { + fprintf(stderr, "Failed to register timeout functions.\n"); + return NULL; + } + + VIRT_STEAL_PTR(ret, bus); + return ret; +} + +static int +virtDBusObjectListExpand(virtDBusObjectList *objectList, + size_t len) +{ + virtDBusObject **newList; + + newList =3D reallocarray(objectList->objects, + objectList->len + len, + sizeof(virtDBusObject *)); + if (!newList) + return -1; + + objectList->objects =3D newList; + objectList->len +=3D len; + return 0; +} + +/** + * virtDBusObjectListRegister: + * @objectList a list of objects + * @path object path of object preffix, depends on @type + * @introspectXML where to store object interface XML + * @interface name of the interface + * @type whether the @path is an object or prefix of an object + * @properties pointer to structure that lists all properties, can be NULL + * @methods pointer to structure that lists all methods, can be NULL + * @data user data that are passed to properties or methods handlers + * + * Registers a D-Bus object that we need to handle. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusObjectListRegister(virtDBusObjectList *objectList, + const char *path, + const char **introspectXML, + const char *interface, + virtDBusObjectType type, + virtDBusPropertyHandlers *properties, + virtDBusMethodHandlers *methods, + void *data) +{ + _cleanup_(virtDBusObjectFreep) virtDBusObject *newObject =3D NULL; + + if (!objectList) + return -1; + + newObject =3D calloc(1, sizeof(virtDBusObject)); + if (!newObject) + return -1; + + newObject->path =3D strdup(path); + if (!newObject->path) + return -1; + + newObject->introspectXML =3D introspectXML; + newObject->interface =3D interface; + newObject->type =3D type; + newObject->properties =3D properties; + newObject->methods =3D methods; + newObject->data =3D data; + + if (virtDBusObjectListExpand(objectList, 1) < 0) + return -1; + + objectList->objects[objectList->len -1] =3D newObject; + newObject =3D NULL; + + return 0; +} + +static void +virtDBusMessageUnref(DBusMessage **messagep) +{ + if (*messagep) + dbus_message_unref(*messagep); +} + +static void +virtDBusMessageIterFreep(DBusMessageIter **iterp) +{ + if (*iterp) + free(*iterp); +} + +static DBusMessageIter * +virtDBusMessageIterPop(virtDBusMessage *msg) +{ + DBusMessageIter *iter; + size_t pos; + + if (msg->items =3D=3D 0) + return NULL; + + pos =3D msg->items - 1; + + VIRT_STEAL_PTR(iter, msg->stack[pos]); + + msg->items -=3D 1; + + return iter; +} + +static DBusMessageIter * +virtDBusMessageIterPeek(virtDBusMessage *msg) +{ + if (msg->items =3D=3D 0) + return NULL; + + return msg->stack[msg->items - 1]; +} + +static int +virtDBusMessageIterPush(virtDBusMessage *msg, + DBusMessageIter *iter) +{ + DBusMessageIter **newStack =3D NULL; + + if (msg->items >=3D msg->size) { + newStack =3D reallocarray(msg->stack, msg->items + 1, + sizeof(DBusMessageIter *)); + if (!newStack) + return -1; + + msg->stack =3D newStack; + msg->size +=3D 1; + } + + msg->stack[msg->items] =3D iter; + msg->items +=3D 1; + + return 0; +} + +static virtDBusMessage * +virtDBusMessageNew(DBusMessage *message, + DBusConnection *bus, + DBusError *error) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *new =3D NULL; + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *iter =3D NULL; + virtDBusMessage *ret; + + new =3D calloc(1, sizeof(virtDBusMessage)); + if (!new) + return NULL; + + new->message =3D dbus_message_ref(message); + new->bus =3D bus; + new->error =3D error; + + iter =3D calloc(1, sizeof(DBusMessageIter)); + if (!iter) + return NULL; + + dbus_message_iter_init(new->message, iter); + + if (virtDBusMessageIterPush(new, iter) < 0) + return NULL; + + iter =3D NULL; + + VIRT_STEAL_PTR(ret, new); + return ret; +} + +/** + * virtDBusMessageMethodReturn: + * @msg: D-Bus message that we would like to reply to. + * + * Creates a new D-Bus message that will be send as reply to a method call. + * + * Returns new D-Bus message on success, NULL on failure. The returned + * message needs to be freed using virtDBusMessageFreep(). + */ +virtDBusMessage * +virtDBusMessageMethodReturn(virtDBusMessage *msg) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *new =3D NULL; + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *iter =3D NULL; + virtDBusMessage *ret; + + new =3D calloc(1, sizeof(virtDBusMessage)); + if (!new) + return NULL; + + new->message =3D dbus_message_new_method_return(msg->message); + if (!new->message) + return NULL; + + new->bus =3D msg->bus; + new->error =3D msg->error; + + iter =3D calloc(1, sizeof(DBusMessageIter)); + if (!iter) + return NULL; + + dbus_message_iter_init_append(new->message, iter); + + if (virtDBusMessageIterPush(new, iter) < 0) + return NULL; + + iter =3D NULL; + + VIRT_STEAL_PTR(ret, new); + return ret; +} + +/** + * virtDBusMessageNewSignal: + * @bus: D-Bus connection where we want to send the signal to + * @path: an object path to which this signal is related + * @interface: interface of the object + * @signal: a signal name + * + * Creates a new D-Bus message that will be send to specified D-Bus + * connection as a signal. + * + * Returns new D-Bus message on success, NULL on failure. The returned + * message needs to be freed using virtDBusMessageFreep(). + */ +virtDBusMessage * +virtDBusMessageNewSignal(DBusConnection *bus, + const char *path, + const char *interface, + const char *signal) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *new =3D NULL; + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *iter =3D NULL; + virtDBusMessage *ret; + + new =3D calloc(1, sizeof(virtDBusMessage)); + if (!new) + return NULL; + + new->message =3D dbus_message_new_signal(path, interface, signal); + if (!new->message) + return NULL; + + new->bus =3D bus; + + iter =3D calloc(1, sizeof(DBusMessageIter)); + if (!iter) + return NULL; + + dbus_message_iter_init_append(new->message, iter); + + if (virtDBusMessageIterPush(new, iter) < 0) + return NULL; + + iter =3D NULL; + + VIRT_STEAL_PTR(ret, new); + return ret; +} + +/** + * virtDBusMessageAppendBasic: + * @msg: D-Bus reply message where to append the @value + * @type: type of the appended @value + * @value: pointer to a variable where the value is stored + * + * Appends a basic value into the reply message. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessageAppendBasic(virtDBusMessage *msg, + int type, + const void *value) +{ + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + + if (!iter) + return -1; + + if (!dbus_message_iter_append_basic(iter, type, value)) + return -1; + + return 0; +} + +/** + * virtDBusMessageReadBasic: + * @msg: D-Bus message that we would like to parse + * @type: type of the value the we expect to read + * @value: pointer to a variable where we want to store the @value + * + * Reads a basic value from incoming D-Bus message and stores it + * into provided variable. + * + * Returns 0 on success if there is no value left for reading, + * 1 on success if value was read and -1 on failure. If used + * to read values from array 0 indicates that there are no other + * values left in the array. + */ +int +virtDBusMessageReadBasic(virtDBusMessage *msg, + int type, + void *value) +{ + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + int msgType; + + if (!iter) + return -1; + + msgType =3D dbus_message_iter_get_arg_type(iter); + if (msg->items > 1 && msgType =3D=3D DBUS_TYPE_INVALID) + return 0; + + if (msgType !=3D type) { + return virtDBusMessageSetError(msg, DBUS_ERROR_INVALID_ARGS, + "Expecting argument of type '%c', " + "but is actually of type '%c'.", + type, msgType); + } + + dbus_message_iter_get_basic(iter, value); + + dbus_message_iter_next(iter); + + return 1; +} + +/** + * virtDBusMessageOpenContainer: + * @msg: D-Bus reply message where to create a new container + * @type: type of the container that we are about to create + * @sig: signature of the container's content + * + * Creates a new container in the reply message, this needs to be + * followed by virtDBusMessageCloseContainer() when all values + * were written into it. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessageOpenContainer(virtDBusMessage *msg, + int type, + const char *sig) +{ + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *cont =3D NULL; + + if (!iter) + return -1; + + cont =3D calloc(1, sizeof(DBusMessageIter)); + if (!cont) + return -1; + + if (!dbus_message_iter_open_container(iter, type, sig, cont)) + return -1; + + if (virtDBusMessageIterPush(msg, cont) < 0) + return -1; + + cont =3D NULL; + + return 0; +} + +/** + * virtDBusMessageEnterContainer: + * @msg: D-Bus message that we would like to parse + * @type: type of the container the we expect to read + * @sig: signature of the container's content + * + * Enters into a container from the message that we are parsing. + * When we are done reading the container we need to leave it using + * virtDBusMessageExitContainer(). + * + * Returns 0 on success if there is no container left for reading, + * 1 on success if container was entered and -1 on failure. If used + * to enter into container from array 0 indicates that there are no + * other containers left in the array. + */ +int +virtDBusMessageEnterContainer(virtDBusMessage *msg, + int type, + const char *sig) +{ + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *cont =3D NULL; + _cleanup_(virtDBusUtilFreep) char *msgSig =3D NULL; + int msgType; + + if (!iter) + return -1; + + msgType =3D dbus_message_iter_get_arg_type(iter); + if (msg->items > 1 && msgType =3D=3D DBUS_TYPE_INVALID) + return 0; + + if (msgType !=3D type) { + return virtDBusMessageSetError(msg, DBUS_ERROR_INVALID_ARGS, + "Expecting argument of type '%c', " + "but is actually of type '%c'.", + type, msgType); + } + + + cont =3D calloc(1, sizeof(DBusMessageIter)); + if (!cont) + return -1; + + dbus_message_iter_recurse(iter, cont); + + msgSig =3D dbus_message_iter_get_signature(cont); + + if (strcmp(sig, msgSig) !=3D 0) { + return virtDBusMessageSetError(msg, DBUS_ERROR_INVALID_ARGS, + "Invalid container signature '%s', " + "expected signature '%s'.", + sig, msgSig); + } + + if (virtDBusMessageIterPush(msg, cont) < 0) + return -1; + + cont =3D NULL; + + return 1; +} + +/** + * virtDBusMessageCloseContainer: + * @msg: D-Bus reply message where we are done creating new container + * + * Closes a newly created container in a reply message. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessageCloseContainer(virtDBusMessage *msg) +{ + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *cont =3D virtDBus= MessageIterPop(msg); + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + + if (!cont || !iter) + return -1; + + if (!dbus_message_iter_close_container(iter, cont)) + return -1; + + return 0; +} + +/** + * virtDBusMessageExitContainer: + * @msg: D-Bus message that we are currently parsing + * + * Leaves a container that was opened for parsing. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessageExitContainer(virtDBusMessage *msg) +{ + _cleanup_(virtDBusMessageIterFreep) DBusMessageIter *cont =3D virtDBus= MessageIterPop(msg); + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + + if (!cont || !iter) + return -1; + + dbus_message_iter_next(iter); + + return 0; +} + +/** + * virtDBusMessagePeekType: + * @msg: D-Bus message that we are currently parsing + * @type: pointer to a variable where to store the value type + * + * Gets a @type of a first value stored in a container. This is + * mainly used get a type of a value stored in VARIANT container. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessagePeekType(virtDBusMessage *msg, + int *type) +{ + DBusMessageIter *iter =3D virtDBusMessageIterPeek(msg); + DBusMessageIter cont; + int msgType; + + if (!iter) + return -1; + + msgType =3D dbus_message_iter_get_arg_type(iter); + if (msgType !=3D DBUS_TYPE_ARRAY && + msgType !=3D DBUS_TYPE_VARIANT && + msgType !=3D DBUS_TYPE_STRUCT && + msgType !=3D DBUS_TYPE_DICT_ENTRY) { + return virtDBusMessageSetError(msg, DBUS_ERROR_INVALID_ARGS, + "Expecting container type, " + "but is actually of type '%c'.", + msgType); + } + + dbus_message_iter_recurse(iter, &cont); + *type =3D dbus_message_iter_get_arg_type(&cont); + + return 0; +} + +/** + * virtDBusMessageAppendVariant: + * @msg: D-Bus reply message where to append the variant value + * @type: type of the value stored in variant container + * @sig: signature of the value stored in variant container + * @value: pointer to a variable where the @value is stored + * + * Appends a variant container together with the value into the + * reply message. + * + * Returns 0 on success, -1 on failure. + */ +int +virtDBusMessageAppendVariant(virtDBusMessage *msg, + int type, + const char *sig, + const void *value) +{ + if (virtDBusMessageOpenContainer(msg, DBUS_TYPE_VARIANT, sig) < 0) + return -1; + + if (virtDBusMessageAppendBasic(msg, type, value) < 0) + return -1; + + return virtDBusMessageCloseContainer(msg); +} + +/** + * virtDBusMessageReadVariant: + * @msg: D-Bus message that we are currently parsing + * @type: expected type of the @value stored in variant + * @sig: signature of the expected @value + * @value: pointer to a variable where to store the @value + * + * Reads a variant container together with the value from incoming + * message. It is necessary to know the value stored in the variant, + * virtDBusMessagePeekType() can be used to get the type. + * + * Returns 0 on success if there is no variant left for reading, + * 1 on success if variant was read and -1 on failure. If used + * to read variant value from array 0 indicates that there are no + * other variants left in the array. + */ +int +virtDBusMessageReadVariant(virtDBusMessage *msg, + int type, + const char *sig, + void *value) +{ + int r; + + r =3D virtDBusMessageEnterContainer(msg, DBUS_TYPE_VARIANT, sig); + if (r < 0) + return -1; + if (r =3D=3D 0) + return 0; + + if (virtDBusMessageReadBasic(msg, type, value) < 0) + return -1; + + return virtDBusMessageExitContainer(msg); +} + +const char * +virtDBusMessageGetPath(virtDBusMessage *msg) +{ + if (msg && msg->message) + return dbus_message_get_path(msg->message); + return NULL; +} + +const char * +virtDBusMessageGetInterface(virtDBusMessage *msg) +{ + if (msg && msg->message) + return dbus_message_get_interface(msg->message); + return NULL; +} + +const char * +virtDBusMessageGetMember(virtDBusMessage *msg) +{ + if (msg && msg->message) + return dbus_message_get_member(msg->message); + return NULL; +} + +int +virtDBusMessageGetType(virtDBusMessage *msg) +{ + if (msg && msg->message) + return dbus_message_get_type(msg->message); + return -1; +} + +int +virtDBusMessageSetError(virtDBusMessage *msg, + const char *name, + const char *format, + ...) +{ + _cleanup_(virtDBusUtilFreep) char *error =3D NULL; + va_list ap; + int r; + + if (!msg->error) + return -1; + + va_start(ap, format); + r =3D vasprintf(&error, format, ap); + va_end(ap); + if (r < 0) + return -1; + + dbus_set_error(msg->error, name, "%s", error); + + return -1; +} + +int +virtDBusSendMessage(virtDBusMessage *msg) +{ + dbus_connection_send(msg->bus, msg->message, NULL); + return 0; +} + +int +virtDBusSendEmptyMessage(virtDBusMessage *msg) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + return virtDBusSendMessage(reply); +} + +static int +virtDBusHandleIntrospect(virtDBusMessage *msg, + virtDBusObject *object) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; + + if (!*object->introspectXML) + *object->introspectXML =3D virtDBusUtilLoadIntrospect(object->inte= rface); + + if (!*object->introspectXML) { + return virtDBusMessageSetError(msg, DBUS_ERROR_FILE_NOT_FOUND, + "missing introspect data"); + } + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_STRING, + object->introspectXML) < 0) + return -1; + + virtDBusSendMessage(reply); + return 0; +} + +static int +virtDBusHandlePropertyGet(virtDBusMessage *msg, + virtDBusObject *object) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; + virtDBusPropertyGetHandler callback =3D NULL; + const char *property; + const char *interface; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &interface) < 0) + return -1; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &property) < 0) + return -1; + + for (int i =3D 0; object->properties[i].property !=3D NULL; i++) { + if (strcmp(object->properties[i].property, property) =3D=3D 0) { + callback =3D object->properties[i].get; + break; + } + } + + if (!callback) { + return virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_PROPERTY, + "unknown property '%s'", property); + } + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + if (callback(reply, msg, interface, property, object->data) < 0) + return -1; + + virtDBusSendMessage(reply); + return 0; +} + +static int +virtDBusHandlePropertySet(virtDBusMessage *msg, + virtDBusObject *object) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; + virtDBusPropertySetHandler callback =3D NULL; + const char *property; + const char *interface; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &interface) < 0) + return -1; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &property) < 0) + return -1; + + + for (int i =3D 0; object->properties[i].property !=3D NULL; i++) { + if (strcmp(object->properties[i].property, property) =3D=3D 0) { + callback =3D object->properties[i].set; + break; + } + } + + if (!callback) { + return virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_PROPERTY, + "unknown property '%s'", property); + } + + if (callback(msg, interface, property, object->data) < 0) + return -1; + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + virtDBusSendMessage(reply); + return 0; +} + +static int +virtDBusHandlePropertyGetAll(virtDBusMessage *msg, + virtDBusObject *object) +{ + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; + const char *interface; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &interface) < 0) + return -1; + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + if (virtDBusMessageOpenContainer(reply, DBUS_TYPE_ARRAY, "{sv}") < 0) + return -1; + + for (int i =3D 0; object->properties[i].property !=3D NULL; i++) { + if (virtDBusMessageOpenContainer(reply, DBUS_TYPE_DICT_ENTRY, NULL= ) < 0) + return -1; + + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_STRING, + &object->properties[i].property) < = 0) { + return -1; + } + + if (object->properties[i].get(reply, msg, interface, + object->properties[i].property, + object->data) < 0) { + return -1; + } + + if (virtDBusMessageCloseContainer(reply) < 0) + return -1; + } + + if (virtDBusMessageCloseContainer(reply) < 0) + return -1; + + virtDBusSendMessage(reply); + return 0; +} + +static int +virtDBusHandleProperty(virtDBusMessage *msg, + virtDBusObject *object) +{ + const char *member =3D virtDBusMessageGetMember(msg); + + if (strcmp(member, "Get") =3D=3D 0) { + return virtDBusHandlePropertyGet(msg, object); + } else if (strcmp(member, "Set") =3D=3D 0) { + return virtDBusHandlePropertySet(msg, object); + } else if (strcmp(member, "GetAll") =3D=3D 0) { + return virtDBusHandlePropertyGetAll(msg, object); + } else { + return virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_METHOD, + "unknown method '%s'", member); + } +} + +static int +virtDBusHandleMethod(virtDBusMessage *msg, + virtDBusObject *object) +{ + const char *member =3D virtDBusMessageGetMember(msg); + const char *msgSig =3D dbus_message_get_signature(msg->message); + virtDBusMethodHandlers *handle =3D NULL; + + for (int i =3D 0; object->methods[i].method !=3D NULL; i++) { + if (strcmp(member, object->methods[i].method) =3D=3D 0) { + handle =3D (object->methods) + i; + break; + } + } + + if (!handle) { + return virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_METHOD, + "unknown method '%s'", member); + } + + if (strcmp(handle->signature, msgSig) !=3D 0) + return virtDBusMessageSetError(msg, DBUS_ERROR_INVALID_ARGS, + "Invalid message signature '%s', " + "expected signature '%s'.", + msgSig, handle->signature); + return handle->callback(msg, object->data); +} + +static int +virtDBusHandleError(virtDBusMessage *msg) +{ + _cleanup_(virtDBusMessageUnref) DBusMessage *reply =3D NULL; + + if (!dbus_error_is_set(msg->error)) + return -1; + + reply =3D dbus_message_new_error(msg->message, + msg->error->name, + msg->error->message); + if (!reply) + return -1; + + dbus_connection_send(msg->bus, reply, NULL); + return 1; +} + +int +virtDBusDispatchMessage(DBusConnection *bus, + virtDBusObjectList *objectList) +{ + _cleanup_(virtDBusMessageUnref) DBusMessage *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; + _cleanup_(dbus_error_free) DBusError error =3D DBUS_ERROR_INIT; + virtDBusObject *object =3D NULL; + const char *path; + const char *interface; + int r; + + message =3D dbus_connection_pop_message(bus); + if (!message) + return 0; + + if (dbus_message_get_type(message) !=3D DBUS_MESSAGE_TYPE_METHOD_CALL) + return 1; + + msg =3D virtDBusMessageNew(message, bus, &error); + if (!msg) + return -1; + + path =3D virtDBusMessageGetPath(msg); + + for (int i =3D 0; i < objectList->len; i++) { + virtDBusObject *tmpObject =3D objectList->objects[i]; + if ((tmpObject->type =3D=3D VIRT_DBUS_OBJECT_TYPE_MATCH && + strcmp(path, tmpObject->path) =3D=3D 0) || + (tmpObject->type =3D=3D VIRT_DBUS_OBJECT_TYPE_PREFIX && + strstr(path, tmpObject->path) !=3D NULL)) { + object =3D tmpObject; + break; + } + } + + if (!object) { + virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_OBJECT, + "invalid object '%s'", path); + return virtDBusHandleError(msg); + } + + interface =3D virtDBusMessageGetInterface(msg); + if (!interface) { + virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_INTERFACE, + "missing interface"); + return virtDBusHandleError(msg); + } + + if (strcmp(interface, DBUS_INTERFACE_INTROSPECTABLE) =3D=3D 0) { + r =3D virtDBusHandleIntrospect(msg, object); + } else if (strcmp(interface, DBUS_INTERFACE_PROPERTIES) =3D=3D 0) { + r =3D virtDBusHandleProperty(msg, object); + } else if (strcmp(interface, object->interface) =3D=3D 0) { + r =3D virtDBusHandleMethod(msg, object); + } else { + virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_INTERFACE, + "invalid interface '%s'", interface); + return virtDBusHandleError(msg); + } + + if (r < 0) { + return virtDBusHandleError(msg); + } + + return 1; +} + +void +virtDBusMessageFreep(virtDBusMessage **msgp) +{ + if (*msgp) { + virtDBusMessage *msg =3D *msgp; + + for (int i =3D 0; i < msg->items; i++) { + if (msg->stack[i]) + free(msg->stack[i]); + } + free(msg->stack); + + if (msg->message) + dbus_message_unref(msg->message); + + free(*msgp); + } +} + +void +virtDBusConnectionClose(DBusConnection **bus) +{ + if (*bus) { + dbus_connection_close(*bus); + dbus_connection_unref(*bus); + } +} + +static void +virtDBusObjectFree(virtDBusObject *object) +{ + free(object->path); + free(object); +} + +void +virtDBusObjectFreep(virtDBusObject **objectp) +{ + if (*objectp) + virtDBusObjectFree(*objectp); +} + +void +virtDBusObjectListFree(virtDBusObjectList *list) +{ + for (int i =3D 0; i < list->len; i++) + virtDBusObjectFree(list->objects[i]); + free(list->objects); +} diff --git a/src/dbus.h b/src/dbus.h new file mode 100644 index 0000000..14d15d2 --- /dev/null +++ b/src/dbus.h @@ -0,0 +1,158 @@ +#pragma once + +#define VIR_ENUM_SENTINELS + +#include +#include + +typedef struct _virtDBusMessage virtDBusMessage; + +typedef int +(*virtDBusPropertyGetHandler)(virtDBusMessage *reply, + virtDBusMessage *msg, + const char *interface, + const char *property, + void *data); + +typedef int +(*virtDBusPropertySetHandler)(virtDBusMessage *msg, + const char *interface, + const char *property, + void *data); + +struct _virtDBusPropertyHandlers { + const char *property; + virtDBusPropertyGetHandler get; + virtDBusPropertySetHandler set; +}; +typedef struct _virtDBusPropertyHandlers virtDBusPropertyHandlers; + +typedef int +(*virtDBusMethodHandler)(virtDBusMessage* msg, + void *data); + +struct _virtDBusMethodHandlers { + const char *method; + const char *signature; + virtDBusMethodHandler callback; +}; +typedef struct _virtDBusMethodHandlers virtDBusMethodHandlers; + +typedef struct _virtDBusObject virtDBusObject; + +struct _virtDBusObjectList { + virtDBusObject **objects; + size_t len; +}; +typedef struct _virtDBusObjectList virtDBusObjectList; + +DBusConnection * +virtDBusConnectionOpen(DBusBusType busType, + const char *name); + +typedef enum { + VIRT_DBUS_OBJECT_TYPE_MATCH, + VIRT_DBUS_OBJECT_TYPE_PREFIX, +} virtDBusObjectType; + +int +virtDBusObjectListRegister(virtDBusObjectList *objectList, + const char *path, + const char **introspectXML, + const char *interface, + virtDBusObjectType type, + virtDBusPropertyHandlers *properties, + virtDBusMethodHandlers *methods, + void *data); + +int +virtDBusDispatchMessage(DBusConnection *bus, + virtDBusObjectList *objectList); + +virtDBusMessage * +virtDBusMessageMethodReturn(virtDBusMessage *msg); + +virtDBusMessage * +virtDBusMessageNewSignal(DBusConnection *bus, + const char *path, + const char *interface, + const char *signal); + +int +virtDBusMessageAppendBasic(virtDBusMessage *msg, + int type, + const void *value); + +int +virtDBusMessageReadBasic(virtDBusMessage *msg, + int type, + void *value); + +int +virtDBusMessageOpenContainer(virtDBusMessage *msg, + int type, + const char *sig); + +int +virtDBusMessageCloseContainer(virtDBusMessage *msg); + +int +virtDBusMessageEnterContainer(virtDBusMessage *msg, + int type, + const char *sig); + +int +virtDBusMessageExitContainer(virtDBusMessage *msg); + +int +virtDBusMessagePeekType(virtDBusMessage *msg, + int *type); + +int +virtDBusMessageAppendVariant(virtDBusMessage *msg, + int type, + const char *sig, + const void *value); + +int +virtDBusMessageReadVariant(virtDBusMessage *msg, + int type, + const char *sig, + void *value); + +const char * +virtDBusMessageGetPath(virtDBusMessage *msg); + +const char * +virtDBusMessageGetInterface(virtDBusMessage *msg); + +const char * +virtDBusMessageGetMember(virtDBusMessage *msg); + +int +virtDBusMessageGetType(virtDBusMessage *msg); + +int +virtDBusMessageSetError(virtDBusMessage *msg, + const char *name, + const char *format, + ...) + __attribute__ ((format (printf, 3, 4))); + +int +virtDBusSendMessage(virtDBusMessage *msg); + +int +virtDBusSendEmptyMessage(virtDBusMessage *msg); + +void +virtDBusMessageFreep(virtDBusMessage **msgp); + +void +virtDBusConnectionClose(DBusConnection **bus); + +void +virtDBusObjectFreep(virtDBusObject **objectp); + +void +virtDBusObjectListFree(virtDBusObjectList *list); diff --git a/src/domain.c b/src/domain.c index f68a3a0..daff32d 100644 --- a/src/domain.c +++ b/src/domain.c @@ -515,14 +515,6 @@ virtDBusDomainLookup(sd_bus *bus VIRT_ATTR_UNUSED, virtDBusConnect *connect =3D userdata; _cleanup_(virtDBusUtilFreep) char *name =3D NULL; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - int r; - - r =3D sd_bus_path_decode(path, connect->domainPath, &name); - if (r < 0) - return r; - - if (*name =3D=3D '\0') - return 0; =20 domain =3D virtDBusDomainGetVirDomain(connect, path, error); if (!domain) diff --git a/src/util.c b/src/util.c index 9042a0f..b6919fb 100644 --- a/src/util.c +++ b/src/util.c @@ -1,9 +1,18 @@ +#define _GNU_SOURCE + #include "util.h" =20 +#include #include +#include #include +#include +#include #include =20 +#define VIRT_UTIL_READ_BLOCK_SIZE 1024 +#define VIRT_UTIL_FILE_LIMIT 1024 * 1024 + int virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, virTypedParameterPtr parameters, @@ -78,15 +87,125 @@ virtDBusUtilSetError(sd_bus_error *error, return sd_bus_error_set(error, VIRT_DBUS_ERROR_INTERFACE, message); } =20 +char * +virtDBusUtilReadFile(const char *filename) +{ + _cleanup_(virtDBusUtilFreep) char *data =3D NULL; + _cleanup_(virtDBusUtilClosep) int fd =3D -1; + char buf[VIRT_UTIL_READ_BLOCK_SIZE]; + char *ret; + size_t len =3D 0; + ssize_t readlen; + + fd =3D open(filename, O_RDONLY); + if (fd < 0) + return NULL; + + while ((readlen =3D read(fd, buf, VIRT_UTIL_READ_BLOCK_SIZE)) > 0) { + len +=3D readlen; + + if (len > VIRT_UTIL_FILE_LIMIT) + return NULL; + + data =3D realloc(data, len + 1); + if (!data) + return NULL; + + memcpy(data+len-readlen, buf, readlen); + } + + if (readlen < 0 || !data) + return NULL; + + data[len] =3D 0; + VIRT_STEAL_PTR(ret, data); + return ret; +} + +static const char *dbusInterfacePrefix =3D NULL; + +char * +virtDBusUtilLoadIntrospect(const char *interface) +{ + _cleanup_(virtDBusUtilFreep) char *path =3D NULL; + + if (!dbusInterfacePrefix) { + dbusInterfacePrefix =3D getenv("VIRT_DBUS_INTERFACES_DIR"); + if (!dbusInterfacePrefix) + dbusInterfacePrefix =3D VIRT_DBUS_INTERFACES_DIR; + } + + if (asprintf(&path, "%s/%s.xml", dbusInterfacePrefix, interface) < 0) + return NULL; + + return virtDBusUtilReadFile(path); +} + +static char * +virtDBusUtilEncodeUUID(const char *uuid) +{ + char *newUuid =3D NULL; + size_t uuidLen =3D strlen(uuid); + int i; + + newUuid =3D calloc(uuidLen + 2, sizeof(char)); + if (!newUuid) + return NULL; + + newUuid[0] =3D '_'; + + for (i =3D 0; i < uuidLen; i++) { + if (uuid[i] =3D=3D '-') + newUuid[i + 1] =3D '_'; + else + newUuid[i + 1] =3D uuid[i]; + } + + newUuid[i + 1] =3D 0; + + return newUuid; +} + +static char * +virtDBusUtilDecodeUUID(const char *uuidEsc) +{ + char *uuid =3D NULL; + size_t uuidLen =3D strlen(uuidEsc); + int i; + + if (uuidEsc[0] !=3D '_') + return NULL; + + uuid =3D calloc(uuidLen, sizeof(char)); + if (!uuid) + return NULL; + + for (i =3D 1; i < uuidLen; i++) { + if (uuidEsc[i] =3D=3D '_') + uuid[i - 1] =3D '-'; + else + uuid[i - 1] =3D uuidEsc[i]; + } + + uuid[uuidLen -1] =3D 0; + + return uuid; +} + char * virtDBusUtilBusPathForVirDomain(virDomainPtr domain, const char *domainPath) { char *path =3D NULL; + _cleanup_(virtDBusUtilFreep) char *uuidEsc =3D NULL; char uuid[VIR_UUID_STRING_BUFLEN] =3D ""; =20 virDomainGetUUIDString(domain, uuid); - sd_bus_path_encode(domainPath, uuid, &path); + + uuidEsc =3D virtDBusUtilEncodeUUID(uuid); + + if (asprintf(&path, "%s/%s", domainPath, uuidEsc) < 0) + return NULL; =20 return path; } @@ -96,14 +215,14 @@ virtDBusUtilVirDomainFromBusPath(virConnectPtr connect= ion, const char *path, const char *domainPath) { - _cleanup_(virtDBusUtilFreep) char *name =3D NULL; - int r; + _cleanup_(virtDBusUtilFreep) char *uuid =3D NULL; + size_t prefixLen =3D strlen(domainPath) + 1; =20 - r =3D sd_bus_path_decode(path, domainPath, &name); - if (r < 0) + uuid =3D virtDBusUtilDecodeUUID(path+prefixLen); + if (!uuid) return NULL; =20 - return virDomainLookupByUUIDString(connection, name); + return virDomainLookupByUUIDString(connection, uuid); } =20 void diff --git a/src/util.h b/src/util.h index 2a6f7e2..c42d2cc 100644 --- a/src/util.h +++ b/src/util.h @@ -11,6 +11,11 @@ =20 #define VIRT_N_ELEMENTS(array) (sizeof(array) / sizeof(*(array))) =20 +#define VIRT_STEAL_PTR(dest, src) \ + do { \ + (dest) =3D (src); \ + (src) =3D NULL; \ + } while(0) =20 int virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, @@ -24,6 +29,12 @@ int virtDBusUtilSetError(sd_bus_error *error, const char *message); =20 +char * +virtDBusUtilReadFile(const char *filename); + +char * +virtDBusUtilLoadIntrospect(const char *interface); + char * virtDBusUtilBusPathForVirDomain(virDomainPtr domain, const char *domainPath); diff --git a/test/Makefile.am b/test/Makefile.am index 4651d08..d3997f3 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -13,4 +13,5 @@ EXTRA_DIST =3D \ travis-run =20 TESTS_ENVIRONMENT =3D \ - abs_top_builddir=3D$(abs_top_builddir) + abs_top_builddir=3D$(abs_top_builddir) \ + VIRT_DBUS_INTERFACES_DIR=3D$(abs_top_srcdir)/data diff --git a/test/travis-run b/test/travis-run index 482b286..47fe70c 100755 --- a/test/travis-run +++ b/test/travis-run @@ -22,7 +22,7 @@ sudo chroot "$CHROOT" << EOF set -ex # install build deps apt-get update -apt-get install -y dh-autoreconf pkg-config libvirt-dev libsystemd-dev lib= tool python3-gi python3-dbus dbus +apt-get install -y dh-autoreconf pkg-config libvirt-dev libsystemd-dev lib= dbus-1-dev libtool python3-gi python3-dbus dbus =20 # run build and tests as user chown -R buildd:buildd /build --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1520871738909941.7128840736914; Mon, 12 Mar 2018 09:22:18 -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 73B0C28213; Mon, 12 Mar 2018 16:22:17 +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 4536C60C80; Mon, 12 Mar 2018 16:22:17 +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 0DBF84CAAC; Mon, 12 Mar 2018 16:22:17 +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 w2CGM0m7025079 for ; Mon, 12 Mar 2018 12:22:00 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2F195215CDAC; Mon, 12 Mar 2018 16:22:00 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id AC0D6215CDAE for ; Mon, 12 Mar 2018 16:21:59 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:47 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 17/18] switch from sd-bus to libdbus 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]); Mon, 12 Mar 2018 16:22:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This removes all the systemd sd-bus code. Signed-off-by: Pavel Hrdina --- README | 1 - configure.ac | 3 - data/Makefile.am | 4 +- data/org.libvirt.Connect.xml | 56 +++++ data/org.libvirt.Domain.xml | 51 +++++ libvirt-dbus.spec.in | 4 +- src/Makefile.am | 3 - src/connect.c | 221 ++++++++----------- src/connect.h | 16 +- src/domain.c | 513 +++++++++++++++++++--------------------= ---- src/domain.h | 4 +- src/events.c | 133 +++++------ src/main.c | 100 +++------ src/util.c | 87 ++++---- src/util.h | 15 +- test/travis-run | 2 +- 16 files changed, 586 insertions(+), 627 deletions(-) create mode 100644 data/org.libvirt.Connect.xml create mode 100644 data/org.libvirt.Domain.xml diff --git a/README b/README index 242c9ba..518217f 100644 --- a/README +++ b/README @@ -56,7 +56,6 @@ raised in future releases based on this distro build targ= et policy. =20 The packages required to build libvirt-dbus are =20 - - systemd-211 - dbus - libvirt =20 diff --git a/configure.ac b/configure.ac index c8dcf04..8836c6f 100644 --- a/configure.ac +++ b/configure.ac @@ -12,10 +12,8 @@ AC_USE_SYSTEM_EXTENSIONS AM_SILENT_RULES([yes]) =20 LIBVIRT_REQUIRED=3D1.2.8 -SYSTEMD_REQUIRED=3D211 DBUS_REQUIRED=3D1.10.24 AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file -AC_SUBST([SYSTEMD_REQUIRED]) dnl used in the .spec file AC_SUBST([DBUS_REQUIRED]) dnl used in the .spec file =20 LIBVIRT_DBUS_MAJOR_VERSION=3D`echo $VERSION | awk -F. '{print $1}'` @@ -36,7 +34,6 @@ AC_PROG_MKDIR_P AM_PROG_CC_C_O =20 PKG_CHECK_MODULES(LIBVIRT, libvirt >=3D $LIBVIRT_REQUIRED) -PKG_CHECK_MODULES(SYSTEMD, libsystemd >=3D $SYSTEMD_REQUIRED) PKG_CHECK_MODULES(DBUS, dbus-1 >=3D $DBUS_REQUIRED) =20 LIBVIRT_COMPILE_WARNINGS diff --git a/data/Makefile.am b/data/Makefile.am index a886687..dd60713 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -18,7 +18,9 @@ polkit_files =3D \ polkitdir =3D $(sysconfdir)/polkit-1/rules.d polkit_DATA =3D $(polkit_files:.rules.in=3D.rules) =20 -interfaces_files =3D +interfaces_files =3D \ + org.libvirt.Connect.xml \ + org.libvirt.Domain.xml interfacesdir =3D $(DBUS_INTERFACES_DIR) interfaces_DATA =3D $(interfaces_files) =20 diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml new file mode 100644 index 0000000..a40ce1d --- /dev/null +++ b/data/org.libvirt.Connect.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml new file mode 100644 index 0000000..48bf40f --- /dev/null +++ b/data/org.libvirt.Domain.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libvirt-dbus.spec.in b/libvirt-dbus.spec.in index 512f4fc..d458d71 100644 --- a/libvirt-dbus.spec.in +++ b/libvirt-dbus.spec.in @@ -1,7 +1,6 @@ # -*- rpm-spec -*- =20 %define libvirt_version @LIBVIRT_REQUIRED@ -%define systemd_version @SYSTEMD_REQUIRED@ %define dbus_version @DBUS_REQUIRED@ %define system_user @SYSTEM_USER@ =20 @@ -16,11 +15,9 @@ Source0: ftp://libvirt.org/libvirt/dbus/%{name}-%{versio= n}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) =20 BuildRequires: libvirt-devel >=3D %{libvirt_version} -BuildRequires: systemd-devel >=3D %{systemd_version} BuildRequires: dbus-devel >=3D %{dbus_version} =20 Requires: libvirt-libs >=3D %{libvirt_version} -Requires: systemd-libs >=3D %{systemd_version} Requires: dbus-libs >=3D %{dbus_version} =20 Requires(pre): shadow-utils @@ -57,5 +54,6 @@ exit 0 %{_datadir}/dbus-1/services/org.libvirt.service %{_datadir}/dbus-1/system-services/org.libvirt.service %{_datadir}/dbus-1/system.d/org.libvirt.conf +%{_datadir}/dbus-1/interfaces/org.libvirt.*.xml =20 %changelog diff --git a/src/Makefile.am b/src/Makefile.am index 1f0d990..9e23f1b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -21,7 +21,6 @@ bin_PROGRAMS =3D libvirt-dbus libvirt_dbus_SOURCES =3D $(DAEMON_SOURCES) =20 libvirt_dbus_CFLAGS =3D \ - $(SYSTEMD_CFLAGS) \ $(LIBVIRT_CFLAGS) \ $(DBUS_CFLAGS) \ $(WARN_CFLAGS) \ @@ -29,7 +28,6 @@ libvirt_dbus_CFLAGS =3D \ $(NULL) =20 libvirt_dbus_LDFLAGS =3D \ - $(SYSTEMD_LDFLAGS) \ $(LIBVIRT_LDFLAGS) \ $(DBUS_LDFLAGS) \ $(RELRO_LDFLAGS) \ @@ -37,6 +35,5 @@ libvirt_dbus_LDFLAGS =3D \ $(NULL) =20 libvirt_dbus_LDADD =3D \ - $(SYSTEMD_LIBS) \ $(LIBVIRT_LIBS) \ $(DBUS_LIBS) diff --git a/src/connect.c b/src/connect.c index 695fc0d..2fe305f 100644 --- a/src/connect.c +++ b/src/connect.c @@ -1,9 +1,11 @@ +#include "dbus.h" #include "domain.h" #include "events.h" #include "connect.h" #include "util.h" =20 #include +#include #include =20 static int virtDBusConnectCredType[] =3D { @@ -15,16 +17,18 @@ static int virtDBusConnectCredType[] =3D { VIR_CRED_EXTERNAL, }; =20 +static const char *introspectXML =3D NULL; + static int virtDBusConnectAuthCallback(virConnectCredentialPtr cred VIRT_ATTR_UNUSED, unsigned int ncred VIRT_ATTR_UNUSED, void *cbdata) { - sd_bus_error *error =3D cbdata; + virtDBusMessage *msg =3D cbdata; =20 - return virtDBusUtilSetError(error, - "Interactive authentication is not support= ed. " - "Use client configuration file for libvirt= ."); + return virtDBusMessageSetError(msg, VIRT_DBUS_ERROR_INTERFACE, + "Interactive authentication is not supp= orted. " + "Use client configuration file for libv= irt."); } =20 static virConnectAuth virtDBusConnectAuth =3D { @@ -38,7 +42,6 @@ static void virtDBusConnectClose(virtDBusConnect *connect, bool deregisterEvents) { - for (int i =3D 0; i < VIR_DOMAIN_EVENT_ID_LAST; i +=3D 1) { if (connect->callback_ids[i] >=3D 0) { if (deregisterEvents) { @@ -55,7 +58,7 @@ virtDBusConnectClose(virtDBusConnect *connect, =20 int virtDBusConnectOpen(virtDBusConnect *connect, - sd_bus_error *error) + virtDBusMessage *msg) { if (connect->connection) { if (virConnectIsAlive(connect->connection)) @@ -64,12 +67,12 @@ virtDBusConnectOpen(virtDBusConnect *connect, virtDBusConnectClose(connect, false); } =20 - virtDBusConnectAuth.cbdata =3D error; + virtDBusConnectAuth.cbdata =3D msg; =20 connect->connection =3D virConnectOpenAuth(connect->uri, &virtDBusConnectAuth, 0); if (!connect->connection) - return virtDBusUtilSetLastVirtError(error); + return virtDBusUtilSetLastVirtError(msg); =20 virtDBusEventsRegister(connect); =20 @@ -77,68 +80,29 @@ virtDBusConnectOpen(virtDBusConnect *connect, } =20 static int -virtDBusConnectEnumarateDomains(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path VIRT_ATTR_UNUSED, - void *userdata, - char ***nodes, - sd_bus_error *error) -{ - virtDBusConnect *connect =3D userdata; - _cleanup_(virtDBusUtilVirDomainListFreep) virDomainPtr *domains =3D NU= LL; - _cleanup_(virtDBusUtilStrvFreep) char **paths =3D NULL; - int n_domains; - int r; - - r =3D virtDBusConnectOpen(connect, error); - if (r < 0) - return r; - - n_domains =3D virConnectListAllDomains(connect->connection, &domains, = 0); - if (n_domains < 0) - return virtDBusUtilSetLastVirtError(error); - - paths =3D calloc(n_domains + 1, sizeof(char *)); - - for (int i =3D 0; i < n_domains; i +=3D 1) - paths[i] =3D virtDBusUtilBusPathForVirDomain(domains[i], - connect->domainPath); - - *nodes =3D paths; - paths =3D NULL; - - return 0; -} - -static int -virtDBusConnectListDomains(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusConnectListDomains(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply =3D NULL; + virtDBusConnect *connect =3D data; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; _cleanup_(virtDBusUtilVirDomainListFreep) virDomainPtr *domains =3D NU= LL; uint32_t flags; - int r; =20 - r =3D sd_bus_message_read(message, "u", &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; =20 - r =3D virtDBusConnectOpen(connect, error); - if (r < 0) - return r; + if (virtDBusConnectOpen(connect, msg) < 0) + return -1; =20 - r =3D virConnectListAllDomains(connect->connection, &domains, flags); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virConnectListAllDomains(connect->connection, &domains, flags) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - r =3D sd_bus_message_new_method_return(message, &reply); - if (r < 0) - return r; + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; =20 - r =3D sd_bus_message_open_container(reply, 'a', "o"); - if (r < 0) - return r; + if (virtDBusMessageOpenContainer(reply, DBUS_TYPE_ARRAY, "o") < 0) + return -1; =20 for (int i =3D 0; domains[i] !=3D NULL; i +=3D 1) { _cleanup_(virtDBusUtilFreep) char *path =3D NULL; @@ -146,125 +110,120 @@ virtDBusConnectListDomains(sd_bus_message *message, path =3D virtDBusUtilBusPathForVirDomain(domains[i], connect->domainPath); =20 - r =3D sd_bus_message_append(reply, "o", path); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_OBJECT_PATH, &path= ) < 0) + return -1; } =20 - r =3D sd_bus_message_close_container(reply); - if (r < 0) - return r; + if (virtDBusMessageCloseContainer(reply) < 0) + return -1; =20 - return sd_bus_send(NULL, reply, NULL); + return virtDBusSendMessage(reply); } =20 static int -virtDBusConnectCreateXML(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusConnectCreateXML(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; - const char *xml; - uint32_t flags; + virtDBusConnect *connect =3D data; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; - int r; + const char *xml; + uint32_t flags; =20 - r =3D sd_bus_message_read(message, "su", &xml, &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &xml) < 0) + return -1; =20 - r =3D virtDBusConnectOpen(connect, error); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; + + if (virtDBusConnectOpen(connect, msg) < 0) + return -1; =20 domain =3D virDomainCreateXML(connect->connection, xml, flags); if (!domain) - return virtDBusUtilSetLastVirtError(error); + return virtDBusUtilSetLastVirtError(msg); =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - return sd_bus_reply_method_return(message, "o", path); + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_OBJECT_PATH, &path) < = 0) + return -1; + + return virtDBusSendMessage(reply); } =20 static int -virtDBusConnectDefineXML(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusConnectDefineXML(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; - const char *xml; + virtDBusConnect *connect =3D data; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; - int r; + const char *xml; =20 - r =3D sd_bus_message_read(message, "s", &xml); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_STRING, &xml) < 0) + return -1; =20 - r =3D virtDBusConnectOpen(connect, error); - if (r < 0) - return r; + if (virtDBusConnectOpen(connect, msg) < 0) + return -1; =20 domain =3D virDomainDefineXML(connect->connection, xml); if (!domain) - return virtDBusUtilSetLastVirtError(error); + return virtDBusUtilSetLastVirtError(msg); =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - return sd_bus_reply_method_return(message, "o", path); -} - -static const sd_bus_vtable virt_connect_vtable[] =3D { - SD_BUS_VTABLE_START(0), + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; =20 - SD_BUS_METHOD("ListDomains", "u", "ao", virtDBusConnectListDomains, SD= _BUS_VTABLE_UNPRIVILEGED), - SD_BUS_METHOD("CreateXML", "su", "o", virtDBusConnectCreateXML, SD_BUS= _VTABLE_UNPRIVILEGED), - SD_BUS_METHOD("DefineXML", "s", "o", virtDBusConnectDefineXML, SD_BUS_= VTABLE_UNPRIVILEGED), + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_OBJECT_PATH, &path) < = 0) + return -1; =20 - SD_BUS_SIGNAL("DomainDefined", "so", 0), - SD_BUS_SIGNAL("DomainUndefined", "so", 0), - SD_BUS_SIGNAL("DomainStarted", "so", 0), - SD_BUS_SIGNAL("DomainSuspended", "so", 0), - SD_BUS_SIGNAL("DomainResumed", "so", 0), - SD_BUS_SIGNAL("DomainStopped", "so", 0), - SD_BUS_SIGNAL("DomainShutdown", "so", 0), - SD_BUS_SIGNAL("DomainPMSuspended", "so", 0), - SD_BUS_SIGNAL("DomainCrashed", "so", 0), + return virtDBusSendMessage(reply); +} =20 - SD_BUS_VTABLE_END +static virtDBusMethodHandlers virtDBusConnectMethods[] =3D { + { "CreateXML", "su", virtDBusConnectCreateXML }, + { "DefineXML", "s", virtDBusConnectDefineXML }, + { "ListDomains", "u", virtDBusConnectListDomains }, + { NULL, NULL, NULL }, }; =20 int virtDBusConnectNew(virtDBusConnect **connectp, - sd_bus *bus, + virtDBusObjectList *objectList, + DBusConnection *bus, const char *uri, const char *connectPath) { _cleanup_(virtDBusConnectFreep) virtDBusConnect *connect =3D NULL; - int r; =20 connect =3D calloc(1, sizeof(virtDBusConnect)); for (int i =3D 0; i < VIR_DOMAIN_EVENT_ID_LAST; i +=3D 1) connect->callback_ids[i] =3D -1; =20 - connect->bus =3D sd_bus_ref(bus); + connect->bus =3D dbus_connection_ref(bus); connect->uri =3D uri; connect->connectPath =3D connectPath; =20 - connect->enumerateDomains =3D virtDBusConnectEnumarateDomains; - - r =3D sd_bus_add_object_vtable(connect->bus, - NULL, - connect->connectPath, - VIRT_DBUS_CONNECT_INTERFACE, - virt_connect_vtable, - connect); - if (r < 0) - return r; + if (virtDBusObjectListRegister(objectList, + connect->connectPath, + &introspectXML, + VIRT_DBUS_CONNECT_INTERFACE, + VIRT_DBUS_OBJECT_TYPE_MATCH, + NULL, + virtDBusConnectMethods, + connect) < 0) + return -1; =20 - if ((r =3D virtDBusDomainRegister(connect, bus) < 0)) - return r; + if (virtDBusDomainRegister(connect, objectList) < 0) + return -1; =20 *connectp =3D connect; connect =3D NULL; @@ -276,7 +235,7 @@ virtDBusConnect * virtDBusConnectFree(virtDBusConnect *connect) { if (connect->bus) - sd_bus_unref(connect->bus); + dbus_connection_unref(connect->bus); =20 if (connect->connection) virtDBusConnectClose(connect, true); diff --git a/src/connect.h b/src/connect.h index 9e5f533..e685b41 100644 --- a/src/connect.h +++ b/src/connect.h @@ -2,37 +2,37 @@ =20 #define VIR_ENUM_SENTINELS =20 +#include #include -#include =20 #define VIRT_DBUS_CONNECT_INTERFACE "org.libvirt.Connect" =20 -struct virtDBusConnect { - sd_bus *bus; +struct _virtDBusConnect { + DBusConnection *bus; const char *uri; const char *connectPath; char *domainPath; virConnectPtr connection; =20 - sd_bus_node_enumerator_t enumerateDomains; - int callback_ids[VIR_DOMAIN_EVENT_ID_LAST]; }; -typedef struct virtDBusConnect virtDBusConnect; +typedef struct _virtDBusConnect virtDBusConnect; =20 int virtDBusConnectNew(virtDBusConnect **connectp, - sd_bus *bus, + virtDBusObjectList *objectList, + DBusConnection *bus, const char *uri, const char *connectPath); =20 int virtDBusConnectOpen(virtDBusConnect *connect, - sd_bus_error *error); + virtDBusMessage *msg); =20 virtDBusConnect * virtDBusConnectFree(virtDBusConnect *connect); =20 + void virtDBusConnectFreep(virtDBusConnect **connectp); =20 diff --git a/src/domain.c b/src/domain.c index daff32d..394be33 100644 --- a/src/domain.c +++ b/src/domain.c @@ -1,27 +1,31 @@ #define _GNU_SOURCE =20 +#include "dbus.h" #include "domain.h" #include "util.h" =20 #include #include +#include +#include + +static const char *introspectXML =3D NULL; =20 static virDomainPtr virtDBusDomainGetVirDomain(virtDBusConnect *connect, - const char *path, - sd_bus_error *error) + virtDBusMessage *msg) { virDomainPtr domain; + const char *path =3D virtDBusMessageGetPath(msg); =20 - if (virtDBusConnectOpen(connect, error) < 0) + if (virtDBusConnectOpen(connect, msg) < 0) return NULL; =20 domain =3D virtDBusUtilVirDomainFromBusPath(connect->connection, path, connect->domainPath); - if (domain =3D=3D NULL) { - sd_bus_error_setf(error, - SD_BUS_ERROR_UNKNOWN_OBJECT, - "Unknown object '%s'.", path); + if (!domain) { + virtDBusMessageSetError(msg, DBUS_ERROR_UNKNOWN_OBJECT, + "invalid domain object '%s'", path); return NULL; } =20 @@ -29,177 +33,177 @@ virtDBusDomainGetVirDomain(virtDBusConnect *connect, } =20 static int -virtDBusDomainGetName(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetName(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - const char *name =3D ""; + const char *name =3D NULL; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 name =3D virDomainGetName(domain); - if (name =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + if (!name) + name =3D ""; =20 - return sd_bus_message_append(reply, "s", name); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_STRING, + "s", &name); } =20 static int -virtDBusDomainGetUUID(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetUUID(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; char uuid[VIR_UUID_STRING_BUFLEN] =3D ""; + char *tmp; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 virDomainGetUUIDString(domain, uuid); + tmp =3D uuid; =20 - return sd_bus_message_append(reply, "s", uuid); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_STRING, + "s", &tmp); } =20 static int -virtDBusDomainGetId(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetId(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; + unsigned int id; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - return sd_bus_message_append(reply, "u", virDomainGetID(domain)); + id =3D virDomainGetID(domain); + + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_UINT32, + "u", &id); } =20 static int -virtDBusDomainGetVcpus(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetVcpus(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; + int vcpus; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - return sd_bus_message_append(reply, "u", virDomainGetVcpusFlags(domain= , VIR_DOMAIN_VCPU_CURRENT)); + vcpus =3D virDomainGetVcpusFlags(domain, VIR_DOMAIN_VCPU_CURRENT); + + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_UINT32, + "u", &vcpus); } =20 static int -virtDBusDomainGetOsType(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetOsType(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *os_type =3D NULL; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 os_type =3D virDomainGetOSType(domain); - if (os_type =3D=3D NULL) - return sd_bus_message_append(reply, "s", ""); + if (!os_type) + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_STRING, + "s", &""); =20 - return sd_bus_message_append(reply, "s", os_type); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_STRING, + "s", &os_type); } =20 static int -virtDBusDomainGetActive(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetActive(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int active; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 active =3D virDomainIsActive(domain); if (active < 0) - return sd_bus_message_append(reply, "b", 0); + active =3D 0; =20 - return sd_bus_message_append(reply, "b", active); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_BOOLEAN, + "b", &active); } =20 static int -virtDBusDomainGetPersistent(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetPersistent(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int persistent; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 persistent =3D virDomainIsPersistent(domain); if (persistent < 0) - return sd_bus_message_append(reply, "b", 0); + persistent =3D 0; =20 - return sd_bus_message_append(reply, "b", persistent); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_BOOLEAN, + "b", &persistent); } =20 static int -virtDBusDomainGetState(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetState(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int state =3D 0; const char *string; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 virDomainGetState(domain, &state, NULL, 0); @@ -232,57 +236,60 @@ virtDBusDomainGetState(sd_bus *bus VIRT_ATTR_UNUSED, break; } =20 - return sd_bus_message_append(reply, "s", string); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_STRING, + "s", &string); } =20 static int -virtDBusDomainGetAutostart(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, +virtDBusDomainGetAutostart(virtDBusMessage *reply, + virtDBusMessage *msg, const char *interface VIRT_ATTR_UNUSED, const char *property VIRT_ATTR_UNUSED, - sd_bus_message *reply, - void *userdata, - sd_bus_error *error VIRT_ATTR_UNUSED) + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; int autostart =3D 0; =20 - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 virDomainGetAutostart(domain, &autostart); =20 - return sd_bus_message_append(reply, "b", autostart); + return virtDBusMessageAppendVariant(reply, DBUS_TYPE_BOOLEAN, + "b", &autostart); } =20 static int -virtDBusDomainGetXMLDesc(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainGetXMLDesc(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; _cleanup_(virtDBusUtilFreep) char *description =3D NULL; uint32_t flags; - int r; =20 - r =3D sd_bus_message_read(message, "u", &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 description =3D virDomainGetXMLDesc(domain, flags); if (!description) - return virtDBusUtilSetLastVirtError(error); + return virtDBusUtilSetLastVirtError(msg); + + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; + + if (virtDBusMessageAppendBasic(reply, DBUS_TYPE_STRING, &description) = < 0) + return -1; =20 - return sd_bus_reply_method_return(message, "s", description); + return virtDBusSendMessage(reply); } =20 static void @@ -293,263 +300,195 @@ virtDBusDomainStatsRecordListFreep(virDomainStatsRe= cordPtr **statsp) } =20 static int -virtDBusDomainGetStats(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainGetStats(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *reply =3D NULL; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - virDomainPtr domains[2]; _cleanup_(virtDBusDomainStatsRecordListFreep) virDomainStatsRecordPtr = *records =3D NULL; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply =3D NULL; + virDomainPtr domains[2]; uint32_t flags, stats; - int r; =20 - r =3D sd_bus_message_read(message, "uu", &stats, &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &stats) < 0) + return -1; + + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 domains[0] =3D domain; domains[1] =3D NULL; =20 if (virDomainListGetStats(domains, stats, &records, flags) !=3D 1) - return virtDBusUtilSetLastVirtError(error); + return virtDBusUtilSetLastVirtError(msg); =20 - r =3D sd_bus_message_new_method_return(message, &reply); - if (r < 0) - return r; + reply =3D virtDBusMessageMethodReturn(msg); + if (!reply) + return -1; =20 - r =3D virtDBusUtilMessageAppendTypedParameters(reply, records[0]->para= ms, records[0]->nparams); - if (r < 0) - return r; + if (virtDBusUtilMessageAppendTypedParameters(reply, + records[0]->params, + records[0]->nparams) < 0) + return -1; =20 - return sd_bus_send(NULL, reply, NULL); + return virtDBusSendMessage(reply); } =20 static int -virtDBusDomainShutdown(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainShutdown(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - int r; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainShutdown(domain); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainShutdown(domain) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 static int -virtDBusDomainDestroy(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainDestroy(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - int r; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainDestroy(domain); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainDestroy(domain) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 static int -virtDBusDomainReboot(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainReboot(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; uint32_t flags; - int r; =20 - r =3D sd_bus_message_read(message, "u", &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainReboot(domain, flags); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainReboot(domain, flags) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 static int -virtDBusDomainReset(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainReset(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; uint32_t flags; - int r; =20 - r =3D sd_bus_message_read(message, "u", &flags); - if (r < 0) - return r; + if (virtDBusMessageReadBasic(msg, DBUS_TYPE_UINT32, &flags) < 0) + return -1; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainReset(domain, flags); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainReset(domain, flags) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 static int -virtDBusDomainCreate(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainCreate(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - int r; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainCreate(domain); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainCreate(domain) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 static int -virtDBusDomainUndefine(sd_bus_message *message, - void *userdata, - sd_bus_error *error) +virtDBusDomainUndefine(virtDBusMessage *msg, + void *data) { - virtDBusConnect *connect =3D userdata; + virtDBusConnect *connect =3D data; _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - int r; =20 - domain =3D virtDBusDomainGetVirDomain(connect, - sd_bus_message_get_path(message), - error); - if (domain =3D=3D NULL) + domain =3D virtDBusDomainGetVirDomain(connect, msg); + if (!domain) return -1; =20 - r =3D virDomainUndefine(domain); - if (r < 0) - return virtDBusUtilSetLastVirtError(error); + if (virDomainUndefine(domain) < 0) + return virtDBusUtilSetLastVirtError(msg); =20 - return sd_bus_reply_method_return(message, ""); + return virtDBusSendEmptyMessage(msg); } =20 -static const sd_bus_vtable virt_domain_vtable[] =3D { - SD_BUS_VTABLE_START(0), - - SD_BUS_PROPERTY("Name", "s", virtDBusDomainGetName, 0, 0), - SD_BUS_PROPERTY("UUID", "s", virtDBusDomainGetUUID, 0, 0), - SD_BUS_PROPERTY("Id", "u", virtDBusDomainGetId, 0, 0), - SD_BUS_PROPERTY("Vcpus", "u", virtDBusDomainGetVcpus, 0, 0), - SD_BUS_PROPERTY("OSType", "s", virtDBusDomainGetOsType, 0, 0), - SD_BUS_PROPERTY("Active", "b", virtDBusDomainGetActive, 0, 0), - SD_BUS_PROPERTY("Persistent", "b", virtDBusDomainGetPersistent, 0, 0), - SD_BUS_PROPERTY("State", "s", virtDBusDomainGetState, 0, 0), - SD_BUS_PROPERTY("Autostart", "b", virtDBusDomainGetAutostart, 0, 0), - - SD_BUS_METHOD("GetXMLDesc", "u", "s", virtDBusDomainGetXMLDesc, SD_BUS= _VTABLE_UNPRIVILEGED), - SD_BUS_METHOD("GetStats", "uu", "a{sv}", virtDBusDomainGetStats, SD_BU= S_VTABLE_UNPRIVILEGED), - SD_BUS_METHOD("Shutdown", "", "", virtDBusDomainShutdown, SD_BUS_VTABL= E_UNPRIVILEGED), - SD_BUS_METHOD("Destroy", "", "", virtDBusDomainDestroy, SD_BUS_VTABLE_= UNPRIVILEGED), - SD_BUS_METHOD("Reboot", "u", "", virtDBusDomainReboot, SD_BUS_VTABLE_U= NPRIVILEGED), - SD_BUS_METHOD("Reset", "u", "", virtDBusDomainReset, SD_BUS_VTABLE_UNP= RIVILEGED), - SD_BUS_METHOD("Create", "", "", virtDBusDomainCreate, SD_BUS_VTABLE_UN= PRIVILEGED), - SD_BUS_METHOD("Undefine", "", "", virtDBusDomainUndefine, SD_BUS_VTABL= E_UNPRIVILEGED), - - SD_BUS_SIGNAL("DeviceAdded", "s", 0), - SD_BUS_SIGNAL("DeviceRemoved", "s", 0), - SD_BUS_SIGNAL("DiskChange", "ssss", 0), - SD_BUS_SIGNAL("TrayChange", "ss", 0), - - SD_BUS_VTABLE_END +static virtDBusPropertyHandlers virtDBusDomainProperties[] =3D { + { "Name", virtDBusDomainGetName, NULL }, + { "UUID", virtDBusDomainGetUUID, NULL }, + { "Id", virtDBusDomainGetId, NULL }, + { "Vcpus", virtDBusDomainGetVcpus, NULL }, + { "OSType", virtDBusDomainGetOsType, NULL }, + { "Active", virtDBusDomainGetActive, NULL }, + { "Persistent", virtDBusDomainGetPersistent, NULL }, + { "State", virtDBusDomainGetState, NULL }, + { "Autostart", virtDBusDomainGetAutostart, NULL }, + { NULL, NULL, NULL }, }; =20 -static int -virtDBusDomainLookup(sd_bus *bus VIRT_ATTR_UNUSED, - const char *path, - const char *interface VIRT_ATTR_UNUSED, - void *userdata, - void **found, - sd_bus_error *error VIRT_ATTR_UNUSED) -{ - virtDBusConnect *connect =3D userdata; - _cleanup_(virtDBusUtilFreep) char *name =3D NULL; - _cleanup_(virtDBusUtilVirDomainFreep) virDomainPtr domain =3D NULL; - - domain =3D virtDBusDomainGetVirDomain(connect, path, error); - if (!domain) - return 0; - - /* - * There's no way to unref the pointer we're returning here. So, - * return the connect object and look up the domain again in the - * domain_* callbacks. - */ - *found =3D connect; - - return 1; -} +static virtDBusMethodHandlers virtDBusDomainMethods[] =3D { + { "GetXMLDesc", "u", virtDBusDomainGetXMLDesc }, + { "GetStats", "u", virtDBusDomainGetStats }, + { "Shutdown", "", virtDBusDomainShutdown }, + { "Destroy", "", virtDBusDomainDestroy }, + { "Reboot", "u", virtDBusDomainReboot }, + { "Reset", "u", virtDBusDomainReset }, + { "Create", "", virtDBusDomainCreate }, + { "Undefine", "", virtDBusDomainUndefine }, + { NULL, NULL, NULL }, +}; =20 int virtDBusDomainRegister(virtDBusConnect *connect, - sd_bus *bus) + virtDBusObjectList *objectList) { - int r; - - r =3D asprintf(&connect->domainPath, "%s/domain", connect->connectPath= ); - if (r < 0) - return r; - - r =3D sd_bus_add_node_enumerator(bus, NULL, connect->domainPath, - connect->enumerateDomains, connect); - if (r < 0) - return r; - - return sd_bus_add_fallback_vtable(bus, - NULL, - connect->domainPath, - VIRT_DBUS_DOMAIN_INTERFACE, - virt_domain_vtable, - virtDBusDomainLookup, - connect); + if (asprintf(&connect->domainPath, "%s/domain", connect->connectPath) = < 0) + return -1; + + if (virtDBusObjectListRegister(objectList, + connect->domainPath, + &introspectXML, + VIRT_DBUS_DOMAIN_INTERFACE, + VIRT_DBUS_OBJECT_TYPE_PREFIX, + virtDBusDomainProperties, + virtDBusDomainMethods, + connect) < 0) + return -1; + + return 0; } diff --git a/src/domain.h b/src/domain.h index 03a29ed..45db0f5 100644 --- a/src/domain.h +++ b/src/domain.h @@ -2,10 +2,8 @@ =20 #include "connect.h" =20 -#include - #define VIRT_DBUS_DOMAIN_INTERFACE "org.libvirt.Domain" =20 int virtDBusDomainRegister(virtDBusConnect *connect, - sd_bus *bus); + virtDBusObjectList *objectList); diff --git a/src/events.c b/src/events.c index c45acd7..8368a30 100644 --- a/src/events.c +++ b/src/events.c @@ -1,10 +1,10 @@ +#include "dbus.h" #include "domain.h" #include "events.h" #include "util.h" =20 #include #include -#include =20 static int virtDBusEventsDomainLifecycle(virConnectPtr connection VIRT_ATTR_UNUSED, @@ -14,11 +14,10 @@ virtDBusEventsDomainLifecycle(virConnectPtr connection = VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; const char *signal =3D NULL; const char *name; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; - int r; =20 switch (event) { case VIR_DOMAIN_EVENT_DEFINED: @@ -52,22 +51,23 @@ virtDBusEventsDomainLifecycle(virConnectPtr connection = VIRT_ATTR_UNUSED, return 0; } =20 - r =3D sd_bus_message_new_signal(connect->bus, - &message, - connect->connectPath, - VIRT_DBUS_CONNECT_INTERFACE, - signal); - if (r < 0) - return r; + msg =3D virtDBusMessageNewSignal(connect->bus, + connect->connectPath, + VIRT_DBUS_CONNECT_INTERFACE, + signal); + if (!msg) + return -1; =20 name =3D virDomainGetName(domain); path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - r =3D sd_bus_message_append(message, "so", name ? : "", path); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &name) < 0) + return -1; =20 - return sd_bus_send(connect->bus, message, NULL); + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_OBJECT_PATH, &path) < 0) + return -1; + + return virtDBusSendMessage(msg); } =20 static int @@ -77,25 +77,22 @@ virtDBusEventsDomainDeviceAdded(virConnectPtr connectio= n VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; - int r; =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - r =3D sd_bus_message_new_signal(connect->bus, - &message, - path, - VIRT_DBUS_DOMAIN_INTERFACE, - "DeviceAdded"); - if (r < 0) - return r; + msg =3D virtDBusMessageNewSignal(connect->bus, + path, + VIRT_DBUS_DOMAIN_INTERFACE, + "DeviceAdded"); + if (!msg) + return -1; =20 - r =3D sd_bus_message_append(message, "s", device); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &device) < 0) + return -1; =20 - return sd_bus_send(connect->bus, message, NULL); + return virtDBusSendMessage(msg); } =20 static int @@ -105,25 +102,23 @@ virtDBusEventsDomainDeviceRemoved(virConnectPtr conne= ction VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; - int r; =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - r =3D sd_bus_message_new_signal(connect->bus, - &message, - path, - VIRT_DBUS_DOMAIN_INTERFACE, - "DeviceRemoved"); - if (r < 0) - return r; + msg =3D virtDBusMessageNewSignal(connect->bus, + path, + VIRT_DBUS_DOMAIN_INTERFACE, + "DeviceRemoved"); + + if (!msg) + return -1; =20 - r =3D sd_bus_message_append(message, "s", device); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &device) < 0) + return -1; =20 - return sd_bus_send(connect->bus, message, NULL); + return virtDBusSendMessage(msg); } =20 static int @@ -134,20 +129,18 @@ virtDBusEventsDomainTrayChange(virConnectPtr connecti= on VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; const char *reasonstr; - int r; =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - r =3D sd_bus_message_new_signal(connect->bus, - &message, - path, - VIRT_DBUS_DOMAIN_INTERFACE, - "TrayChange"); - if (r < 0) - return r; + msg =3D virtDBusMessageNewSignal(connect->bus, + path, + VIRT_DBUS_DOMAIN_INTERFACE, + "TrayChange"); + if (!msg) + return -1; =20 switch (reason) { case VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN: @@ -161,11 +154,13 @@ virtDBusEventsDomainTrayChange(virConnectPtr connecti= on VIRT_ATTR_UNUSED, break; } =20 - r =3D sd_bus_message_append(message, "ss", device, reasonstr); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &device) < 0) + return -1; + + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &reasonstr) < 0) + return -1; =20 - return sd_bus_send(connect->bus, message, NULL); + return virtDBusSendMessage(msg); } =20 static int @@ -178,20 +173,18 @@ virtDBusEventsDomainDiskChange(virConnectPtr connecti= on VIRT_ATTR_UNUSED, void *opaque) { virtDBusConnect *connect =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(virtDBusMessageFreep) virtDBusMessage *msg =3D NULL; _cleanup_(virtDBusUtilFreep) char *path =3D NULL; const char *reasonstr; - int r; =20 path =3D virtDBusUtilBusPathForVirDomain(domain, connect->domainPath); =20 - r =3D sd_bus_message_new_signal(connect->bus, - &message, - path, - VIRT_DBUS_DOMAIN_INTERFACE, - "DiskChange"); - if (r < 0) - return r; + msg =3D virtDBusMessageNewSignal(connect->bus, + path, + VIRT_DBUS_DOMAIN_INTERFACE, + "DiskChange"); + if (!msg) + return -1; =20 switch (reason) { case VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START: @@ -205,11 +198,19 @@ virtDBusEventsDomainDiskChange(virConnectPtr connecti= on VIRT_ATTR_UNUSED, break; } =20 - r =3D sd_bus_message_append(message, "ssss", old_src_path, new_src_pat= h, device, reasonstr); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &old_src_path) <= 0) + return -1; + + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &new_src_path) <= 0) + return -1; + + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &device) < 0) + return -1; + + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, &reasonstr) < 0) + return -1; =20 - return sd_bus_send(connect->bus, message, NULL); + return virtDBusSendMessage(msg); } =20 static void diff --git a/src/main.c b/src/main.c index 6f11aab..bef5dcc 100644 --- a/src/main.c +++ b/src/main.c @@ -1,44 +1,31 @@ #include "config.h" =20 +#include "dbus.h" #include "connect.h" +#include "domain.h" #include "util.h" =20 #include #include #include +#include #include #include #include +#include #include -#include #include =20 -static int loop_status; +static int loop_status =3D 0; =20 static int -virtDBusGetLibvirtEvents(sd_bus *bus) -{ - int events; - int virt_events =3D 0; - - events =3D sd_bus_get_events(bus); - - if (events & POLLIN) - virt_events |=3D VIR_EVENT_HANDLE_READABLE; - - if (events & POLLOUT) - virt_events |=3D VIR_EVENT_HANDLE_WRITABLE; - - return virt_events; -} - -static int -virtDBusProcessEvents(sd_bus *bus) +virtDBusProcessEvents(DBusConnection *bus, + virtDBusObjectList *objectList) { for (;;) { int r; =20 - r =3D sd_bus_process(bus, NULL); + r =3D virtDBusDispatchMessage(bus, objectList); if (r < 0) return r; =20 @@ -65,22 +52,6 @@ virtDBusHandleSignal(int watch VIRT_ATTR_UNUSED, loop_status =3D -ECANCELED; } =20 -static void -virtDBusHandleBusEvent(int watch, - int fd VIRT_ATTR_UNUSED, - int events VIRT_ATTR_UNUSED, - void *opaque) -{ - sd_bus *bus =3D opaque; - - loop_status =3D virtDBusProcessEvents(bus); - - if (loop_status < 0) - return; - - virEventUpdateHandle(watch, virtDBusGetLibvirtEvents(bus)); -} - struct virtDBusDriver { const char *uri; const char *object; @@ -123,23 +94,23 @@ main(int argc, char *argv[]) {} }; =20 - bool system_bus; + DBusBusType busType; const struct virtDBusDriver *drivers =3D NULL; int ndrivers =3D 0; =20 - _cleanup_(virtDBusConnectListFree) virtDBusConnect **connect =3D NULL; - _cleanup_(sd_bus_unrefp) sd_bus *bus =3D NULL; + _cleanup_(virtDBusConnectListFree) virtDBusConnect **connectList =3D N= ULL; + _cleanup_(virtDBusObjectListFree) virtDBusObjectList objectList =3D { = 0 }; + _cleanup_(virtDBusConnectionClose) DBusConnection *bus =3D NULL; _cleanup_(virtDBusUtilClosep) int signal_fd =3D -1; - _cleanup_(virtDBusVirEventRemoveHandlep) int bus_watch =3D -1; _cleanup_(virtDBusVirEventRemoveHandlep) int signal_watch =3D -1; sigset_t mask; int c; int r; =20 if (geteuid() =3D=3D 0) { - system_bus =3D true; + busType =3D DBUS_BUS_SYSTEM; } else { - system_bus =3D false; + busType =3D DBUS_BUS_SESSION; } =20 while ((c =3D getopt_long(argc, argv, "hc:", options, NULL)) >=3D 0) { @@ -155,11 +126,11 @@ main(int argc, char *argv[]) return 0; =20 case ARG_SYSTEM: - system_bus =3D true; + busType =3D DBUS_BUS_SYSTEM; break; =20 case ARG_SESSION: - system_bus =3D false; + busType =3D DBUS_BUS_SESSION; break; =20 default: @@ -174,19 +145,11 @@ main(int argc, char *argv[]) =20 virEventRegisterDefaultImpl(); =20 - r =3D system_bus ? sd_bus_open_system(&bus) : sd_bus_open_user(&bus); - if (r < 0) { - fprintf(stderr, "Failed to connect to session bus: %s\n", strerror= (-r)); + bus =3D virtDBusConnectionOpen(busType, "org.libvirt"); + if (!bus) return EXIT_FAILURE; - } - - r =3D sd_bus_request_name(bus, "org.libvirt", 0); - if (r < 0) { - fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-= r)); - return EXIT_FAILURE; - } =20 - if (system_bus) { + if (busType =3D=3D DBUS_BUS_SYSTEM) { drivers =3D systemDrivers; ndrivers =3D VIRT_N_ELEMENTS(systemDrivers); } else { @@ -194,10 +157,10 @@ main(int argc, char *argv[]) ndrivers =3D VIRT_N_ELEMENTS(sessionDrivers); } =20 - connect =3D calloc(ndrivers + 1, sizeof(virtDBusConnect *)); + connectList =3D calloc(ndrivers + 1, sizeof(virtDBusConnect *)); =20 for (int i =3D 0; i < ndrivers; i +=3D 1) { - r =3D virtDBusConnectNew(&connect[i], bus, + r =3D virtDBusConnectNew(&connectList[i], &objectList, bus, drivers[i].uri, drivers[i].object); if (r < 0) { fprintf(stderr, "Failed to register libvirt connection.\n"); @@ -205,16 +168,6 @@ main(int argc, char *argv[]) } } =20 - r =3D virtDBusProcessEvents(bus); - if (r < 0) - return EXIT_FAILURE; - - bus_watch =3D virEventAddHandle(sd_bus_get_fd(bus), - virtDBusGetLibvirtEvents(bus), - virtDBusHandleBusEvent, - bus, - NULL); - signal_fd =3D signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC); signal_watch =3D virEventAddHandle(signal_fd, VIR_EVENT_HANDLE_READABLE, @@ -226,9 +179,18 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } =20 - while (loop_status >=3D 0) + r =3D virtDBusProcessEvents(bus, &objectList); + if (r < 0) + return EXIT_FAILURE; + + while (loop_status >=3D 0) { virEventRunDefaultImpl(); =20 + r =3D virtDBusProcessEvents(bus, &objectList); + if (r < 0) + return EXIT_FAILURE; + } + if (loop_status < 0 && loop_status !=3D -ECANCELED) { fprintf(stderr, "Error: %s\n", strerror(-loop_status)); return EXIT_FAILURE; diff --git a/src/util.c b/src/util.c index b6919fb..6f8b7be 100644 --- a/src/util.c +++ b/src/util.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -14,77 +15,79 @@ #define VIRT_UTIL_FILE_LIMIT 1024 * 1024 =20 int -virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, - virTypedParameterPtr parameters, - int n_parameters) +virtDBusUtilMessageAppendTypedParameters(virtDBusMessage *msg, + virTypedParameterPtr params, + int nparams) { - int r; + if (virtDBusMessageOpenContainer(msg, DBUS_TYPE_ARRAY, "{sv}") < 0) + return -1; =20 - r =3D sd_bus_message_open_container(message, 'a', "{sv}"); - if (r < 0) - return r; + for (int i =3D 0; i < nparams; i +=3D 1) { + if (virtDBusMessageOpenContainer(msg, DBUS_TYPE_DICT_ENTRY, NULL) = < 0) + return -1; =20 - for (int i =3D 0; i < n_parameters; i +=3D 1) { - r =3D sd_bus_message_open_container(message, SD_BUS_TYPE_DICT_ENTR= Y, "sv"); - if (r < 0) - return r; + if (virtDBusMessageAppendBasic(msg, DBUS_TYPE_STRING, ¶ms[i].f= ield) < 0) + return -1; =20 - r =3D sd_bus_message_append(message, "s", parameters[i].field); - if (r < 0) - return r; - - switch (parameters[i].type) { + switch (params[i].type) { case VIR_TYPED_PARAM_INT: - r =3D sd_bus_message_append(message, "v", "i", parameters[i].v= alue.i); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_INT32, + "i", ¶ms[i].value.i) < 0) + return -1; break; case VIR_TYPED_PARAM_UINT: - r =3D sd_bus_message_append(message, "v", "u", parameters[i].v= alue.ui); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_UINT32, + "u", ¶ms[i].value.ui) < 0) + return -1; break; case VIR_TYPED_PARAM_LLONG: - r =3D sd_bus_message_append(message, "v", "x", parameters[i].v= alue.l); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_INT64, + "x", ¶ms[i].value.l) < 0) + return -1; break; case VIR_TYPED_PARAM_ULLONG: - r =3D sd_bus_message_append(message, "v", "t", parameters[i].v= alue.ul); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_UINT64, + "t", ¶ms[i].value.ul) < 0) + return -1; break; case VIR_TYPED_PARAM_DOUBLE: - r =3D sd_bus_message_append(message, "v", "d", parameters[i].v= alue.d); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_DOUBLE, + "d", ¶ms[i].value.d) < 0) + return -1; break; case VIR_TYPED_PARAM_BOOLEAN: - r =3D sd_bus_message_append(message, "v", "b", parameters[i].v= alue.b); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_BOOLEAN, + "b", ¶ms[i].value.b) < 0) + return -1; break; case VIR_TYPED_PARAM_STRING: - r =3D sd_bus_message_append(message, "v", "s", parameters[i].v= alue.s); + if (virtDBusMessageAppendVariant(msg, DBUS_TYPE_STRING, + "s", ¶ms[i].value.s) < 0) + return -1; break; } =20 - if (r < 0) - return r; - - r =3D sd_bus_message_close_container(message); - if (r < 0) - return r; + if (virtDBusMessageCloseContainer(msg) < 0) + return -1; } =20 - return sd_bus_message_close_container(message); + return virtDBusMessageCloseContainer(msg); } =20 int -virtDBusUtilSetLastVirtError(sd_bus_error *error) +virtDBusUtilSetLastVirtError(virtDBusMessage *msg) { - virErrorPtr vir_error; + virErrorPtr virError; =20 - vir_error =3D virGetLastError(); - if (!vir_error) - return 0; + virError =3D virGetLastError(); =20 - return sd_bus_error_set(error, VIRT_DBUS_ERROR_INTERFACE, vir_error->m= essage); -} + if (!virError) { + return virtDBusMessageSetError(msg, VIRT_DBUS_ERROR_INTERFACE, + "unknown error"); + } =20 -int -virtDBusUtilSetError(sd_bus_error *error, - const char *message) -{ - return sd_bus_error_set(error, VIRT_DBUS_ERROR_INTERFACE, message); + return virtDBusMessageSetError(msg, VIRT_DBUS_ERROR_INTERFACE, "%s", + virError->message); } =20 char * diff --git a/src/util.h b/src/util.h index c42d2cc..16c54df 100644 --- a/src/util.h +++ b/src/util.h @@ -1,7 +1,8 @@ #pragma once =20 +#include "dbus.h" + #include -#include =20 #define VIRT_DBUS_ERROR_INTERFACE "org.libvirt.Error" =20 @@ -18,16 +19,12 @@ } while(0) =20 int -virtDBusUtilMessageAppendTypedParameters(sd_bus_message *message, - virTypedParameterPtr parameters, - int n_parameters); - -int -virtDBusUtilSetLastVirtError(sd_bus_error *error); +virtDBusUtilMessageAppendTypedParameters(virtDBusMessage *msg, + virTypedParameterPtr params, + int nparams); =20 int -virtDBusUtilSetError(sd_bus_error *error, - const char *message); +virtDBusUtilSetLastVirtError(virtDBusMessage *msg); =20 char * virtDBusUtilReadFile(const char *filename); diff --git a/test/travis-run b/test/travis-run index 47fe70c..7c96609 100755 --- a/test/travis-run +++ b/test/travis-run @@ -22,7 +22,7 @@ sudo chroot "$CHROOT" << EOF set -ex # install build deps apt-get update -apt-get install -y dh-autoreconf pkg-config libvirt-dev libsystemd-dev lib= dbus-1-dev libtool python3-gi python3-dbus dbus +apt-get install -y dh-autoreconf pkg-config libvirt-dev libdbus-1-dev libt= ool python3-gi python3-dbus dbus =20 # run build and tests as user chown -R buildd:buildd /build --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 18 05:04:51 2024 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152087174010221.59809022340221; Mon, 12 Mar 2018 09:22:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7437613AAE; Mon, 12 Mar 2018 16:22:17 +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 43F7A17140; Mon, 12 Mar 2018 16:22:17 +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 EAE2E180BAED; Mon, 12 Mar 2018 16:22:16 +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 w2CGM0HO025090 for ; Mon, 12 Mar 2018 12:22:00 -0400 Received: by smtp.corp.redhat.com (Postfix) id C1C4D2166BB2; Mon, 12 Mar 2018 16:22:00 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.152]) by smtp.corp.redhat.com (Postfix) with ESMTP id 68FC7215CDAE for ; Mon, 12 Mar 2018 16:22:00 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 12 Mar 2018 17:21:48 +0100 Message-Id: <57091a3e5e81e11e521fd796da3e2e0c63d624b0.1520871530.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 18/18] main: introduce threads to process the dbus messages 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 12 Mar 2018 16:22:17 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This implements very simple thread pool to process dbus messages in separate threads. We don't need to handle queue for messages because dbus does that for us. The default thread count will be currently 4 and it is also configurable via --threads parameter for the libvirt-dbus daemon. Signed-off-by: Pavel Hrdina --- src/Makefile.am | 1 + src/connect.c | 14 +++++++ src/connect.h | 3 ++ src/main.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++---= ---- src/util.c | 28 ++++++++++++++ src/util.h | 9 +++++ 6 files changed, 159 insertions(+), 14 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 9e23f1b..73bbfd9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,6 +32,7 @@ libvirt_dbus_LDFLAGS =3D \ $(DBUS_LDFLAGS) \ $(RELRO_LDFLAGS) \ $(PID_LDFLAGS) \ + -lpthread \ $(NULL) =20 libvirt_dbus_LDADD =3D \ diff --git a/src/connect.c b/src/connect.c index 2fe305f..41aba5f 100644 --- a/src/connect.c +++ b/src/connect.c @@ -56,10 +56,21 @@ virtDBusConnectClose(virtDBusConnect *connect, connect->connection =3D NULL; } =20 +static void +virtDBusConnectUnlock(pthread_mutex_t **lock) +{ + if (lock) + pthread_mutex_unlock(*lock); +} + int virtDBusConnectOpen(virtDBusConnect *connect, virtDBusMessage *msg) { + _cleanup_(virtDBusConnectUnlock) pthread_mutex_t *lock =3D &connect->l= ock; + + pthread_mutex_lock(lock); + if (connect->connection) { if (virConnectIsAlive(connect->connection)) return 0; @@ -212,6 +223,9 @@ virtDBusConnectNew(virtDBusConnect **connectp, connect->uri =3D uri; connect->connectPath =3D connectPath; =20 + if (virtDBusUtilMutexInit(&connect->lock) !=3D 0) + return -1; + if (virtDBusObjectListRegister(objectList, connect->connectPath, &introspectXML, diff --git a/src/connect.h b/src/connect.h index e685b41..c6026c9 100644 --- a/src/connect.h +++ b/src/connect.h @@ -4,10 +4,13 @@ =20 #include #include +#include =20 #define VIRT_DBUS_CONNECT_INTERFACE "org.libvirt.Connect" =20 struct _virtDBusConnect { + pthread_mutex_t lock; + DBusConnection *bus; const char *uri; const char *connectPath; diff --git a/src/main.c b/src/main.c index bef5dcc..1808620 100644 --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -16,21 +17,98 @@ #include #include =20 +#define VIRT_DBUS_THREADS 4 + static int loop_status =3D 0; +static pthread_mutex_t loopStatusLock =3D PTHREAD_MUTEX_INITIALIZER; + +static int +virtDBusLoopStatusGet(void) +{ + int ret; + pthread_mutex_lock(&loopStatusLock); + ret =3D loop_status; + pthread_mutex_unlock(&loopStatusLock); + return ret; +} + +static void +virtDBusLoopStatusSet(int val) +{ + pthread_mutex_lock(&loopStatusLock); + loop_status =3D val; + pthread_mutex_unlock(&loopStatusLock); +} + +struct _virtDBusDispatchData { + DBusConnection *bus; + virtDBusObjectList *objectList; +}; + +static pthread_cond_t threadLoopCond; +static pthread_mutex_t threadLoopLock; =20 static int virtDBusProcessEvents(DBusConnection *bus, virtDBusObjectList *objectList) { for (;;) { - int r; + int r; =20 - r =3D virtDBusDispatchMessage(bus, objectList); - if (r < 0) - return r; + r =3D virtDBusDispatchMessage(bus, objectList); + if (r < 0) + return r; =20 - if (r =3D=3D 0) - break; + if (r =3D=3D 0) + break; + } + + return 0; +} + +static void * +virtDBusDispatchThread(void *opaque) +{ + struct _virtDBusDispatchData *data =3D opaque; + + while(true) { + if (pthread_cond_wait(&threadLoopCond, &threadLoopLock) !=3D 0) { + virtDBusLoopStatusSet(errno); + return NULL; + } + if (virtDBusLoopStatusGet() !=3D 0) + return NULL; + + if (virtDBusProcessEvents(data->bus, data->objectList) < 0) { + virtDBusLoopStatusSet(-ENOMEM); + return NULL; + } + } + + return NULL; +} + +static void +virtDBusDispatch(void) +{ + pthread_cond_broadcast(&threadLoopCond); +} + +static int +virtDBusStartThreads(struct _virtDBusDispatchData *data, + int threads) +{ + if (pthread_cond_init(&threadLoopCond, NULL) !=3D 0) + return -1; + + if (virtDBusUtilMutexInit(&threadLoopLock) !=3D 0) + return -1; + + for (int i =3D 0; i < threads; i++) { + pthread_t thread; + + if (pthread_create(&thread, NULL, virtDBusDispatchThread, data) != =3D 0) + return -1; } =20 return 0; @@ -49,7 +127,7 @@ virtDBusHandleSignal(int watch VIRT_ATTR_UNUSED, int events VIRT_ATTR_UNUSED, void *opaque VIRT_ATTR_UNUSED) { - loop_status =3D -ECANCELED; + virtDBusLoopStatusSet(-ECANCELED); } =20 struct virtDBusDriver { @@ -91,6 +169,7 @@ main(int argc, char *argv[]) { "help", no_argument, NULL, 'h' }, { "system", no_argument, NULL, ARG_SYSTEM }, { "session", no_argument, NULL, ARG_SESSION }, + { "threads", required_argument, NULL, 't' }, {} }; =20 @@ -106,6 +185,7 @@ main(int argc, char *argv[]) sigset_t mask; int c; int r; + int threads =3D VIRT_DBUS_THREADS; =20 if (geteuid() =3D=3D 0) { busType =3D DBUS_BUS_SYSTEM; @@ -113,7 +193,7 @@ main(int argc, char *argv[]) busType =3D DBUS_BUS_SESSION; } =20 - while ((c =3D getopt_long(argc, argv, "hc:", options, NULL)) >=3D 0) { + while ((c =3D getopt_long(argc, argv, "ht:", options, NULL)) >=3D 0) { switch (c) { case 'h': printf("Usage: %s [OPTIONS]\n", program_invocation_short_n= ame); @@ -123,8 +203,16 @@ main(int argc, char *argv[]) printf(" -h, --help Display this help text and exi= t\n"); printf(" --session Connect to the session bus\n"); printf(" --system Connect to the system bus\n"); + printf(" -t, --threads Configure count of worker thre= ads\n"); return 0; =20 + case 't': + if (virtDBusUtilStrToInt(optarg, 10, &threads) < 0) { + fprintf(stderr, "Failed to parse --threads.\n"); + return EXIT_FAILURE; + } + break; + case ARG_SYSTEM: busType =3D DBUS_BUS_SYSTEM; break; @@ -179,11 +267,13 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } =20 - r =3D virtDBusProcessEvents(bus, &objectList); - if (r < 0) - return EXIT_FAILURE; + struct _virtDBusDispatchData data =3D { bus, &objectList }; + + virtDBusStartThreads(&data, threads); + + virtDBusDispatch(); =20 - while (loop_status >=3D 0) { + while ((r =3D virtDBusLoopStatusGet()) >=3D 0) { virEventRunDefaultImpl(); =20 r =3D virtDBusProcessEvents(bus, &objectList); @@ -191,8 +281,8 @@ main(int argc, char *argv[]) return EXIT_FAILURE; } =20 - if (loop_status < 0 && loop_status !=3D -ECANCELED) { - fprintf(stderr, "Error: %s\n", strerror(-loop_status)); + if (r < 0 && r !=3D -ECANCELED) { + fprintf(stderr, "Error: %s\n", strerror(-r)); return EXIT_FAILURE; } =20 diff --git a/src/util.c b/src/util.c index 6f8b7be..fe9e023 100644 --- a/src/util.c +++ b/src/util.c @@ -2,6 +2,7 @@ =20 #include "util.h" =20 +#include #include #include #include @@ -90,6 +91,33 @@ virtDBusUtilSetLastVirtError(virtDBusMessage *msg) virError->message); } =20 +int +virtDBusUtilMutexInit(pthread_mutex_t *mutex) +{ + _cleanup_(pthread_mutexattr_destroy) pthread_mutexattr_t attr; + + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL); + return pthread_mutex_init(mutex, &attr); +} + +int +virtDBusUtilStrToInt(char const *string, + int base, + int *result) +{ + long int val; + char *ptr; + + errno =3D 0; + val =3D strtol(string, &ptr, base); + if (errno !=3D 0 || *ptr !=3D 0 || ptr =3D=3D string || (int) val !=3D= val) + return -1; + + *result =3D val; + return 0; +} + char * virtDBusUtilReadFile(const char *filename) { diff --git a/src/util.h b/src/util.h index 16c54df..afb118c 100644 --- a/src/util.h +++ b/src/util.h @@ -3,6 +3,7 @@ #include "dbus.h" =20 #include +#include =20 #define VIRT_DBUS_ERROR_INTERFACE "org.libvirt.Error" =20 @@ -26,6 +27,14 @@ virtDBusUtilMessageAppendTypedParameters(virtDBusMessage= *msg, int virtDBusUtilSetLastVirtError(virtDBusMessage *msg); =20 +int +virtDBusUtilMutexInit(pthread_mutex_t *mutex); + +int +virtDBusUtilStrToInt(char const *string, + int base, + int *result); + char * virtDBusUtilReadFile(const char *filename); =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list