[systemd-commits] src/libsystemd-bus

Kay Sievers kay at kemper.freedesktop.org
Fri Dec 6 05:49:24 PST 2013


 src/libsystemd-bus/bus-control.c |   10 +-
 src/libsystemd-bus/bus-kernel.c  |    8 +-
 src/libsystemd-bus/bus-kernel.h  |   10 +-
 src/libsystemd-bus/kdbus.h       |  143 +++++++++++++++++----------------------
 4 files changed, 77 insertions(+), 94 deletions(-)

New commits:
commit a8d4cac55cf9575d19ff5a1747e726387f5a552f
Author: Kay Sievers <kay at vrfy.org>
Date:   Fri Dec 6 14:31:43 2013 +0100

    bus: catch up with latest kdbus changes

diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index 186724e..9663989 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -216,7 +216,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
 
         name_list = (struct kdbus_name_list *) ((uint8_t *) bus->kdbus_buffer + cmd.offset);
 
-        KDBUS_PART_FOREACH(name, name_list, names) {
+        KDBUS_ITEM_FOREACH(name, name_list, names) {
 
                 if (name->size > sizeof(*name)) {
                         r = strv_extend(x, name->name);
@@ -383,7 +383,7 @@ static int bus_get_owner_kdbus(
                 c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
         }
 
-        KDBUS_PART_FOREACH(item, conn_info, items) {
+        KDBUS_ITEM_FOREACH(item, conn_info, items) {
 
                 switch (item->type) {
 
@@ -439,7 +439,7 @@ static int bus_get_owner_kdbus(
 
                 case KDBUS_ITEM_CMDLINE:
                         if (mask & SD_BUS_CREDS_CMDLINE) {
-                                c->cmdline_size = item->size - KDBUS_PART_HEADER_SIZE;
+                                c->cmdline_size = item->size - KDBUS_ITEM_HEADER_SIZE;
                                 c->cmdline = memdup(item->data, c->cmdline_size);
                                 if (!c->cmdline) {
                                         r = -ENOMEM;
@@ -471,7 +471,7 @@ static int bus_get_owner_kdbus(
                              SD_BUS_CREDS_INHERITABLE_CAPS | SD_BUS_CREDS_BOUNDING_CAPS) & mask;
 
                         if (m) {
-                                c->capability_size = item->size - KDBUS_PART_HEADER_SIZE;
+                                c->capability_size = item->size - KDBUS_ITEM_HEADER_SIZE;
                                 c->capability = memdup(item->data, c->capability_size);
                                 if (!c->capability) {
                                         r = -ENOMEM;
@@ -1010,7 +1010,7 @@ static int bus_add_match_internal_kernel(
                 item->type = KDBUS_MATCH_BLOOM;
                 memcpy(item->data64, bloom, BLOOM_SIZE);
 
-                item = KDBUS_PART_NEXT(item);
+                item = KDBUS_ITEM_NEXT(item);
         }
 
         if (sender) {
diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c
index 5ed836e..f234891 100644
--- a/src/libsystemd-bus/bus-kernel.c
+++ b/src/libsystemd-bus/bus-kernel.c
@@ -462,7 +462,7 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
         off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
         ioctl(bus->input_fd, KDBUS_CMD_FREE, &off);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
 
                 if (d->type == KDBUS_ITEM_FDS)
                         close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int));
@@ -589,7 +589,7 @@ static int bus_kernel_translate_message(sd_bus *bus, struct kdbus_msg *k) {
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_KERNEL);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) {
                         if (found)
                                 return -EBADMSG;
@@ -620,7 +620,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
         assert(k);
         assert(k->payload_type == KDBUS_PAYLOAD_DBUS1);
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
@@ -680,7 +680,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
         if (r < 0)
                 return r;
 
-        KDBUS_PART_FOREACH(d, k, items) {
+        KDBUS_ITEM_FOREACH(d, k, items) {
                 size_t l;
 
                 l = d->size - offsetof(struct kdbus_item, data);
diff --git a/src/libsystemd-bus/bus-kernel.h b/src/libsystemd-bus/bus-kernel.h
index a9dddc2..1771020 100644
--- a/src/libsystemd-bus/bus-kernel.h
+++ b/src/libsystemd-bus/bus-kernel.h
@@ -23,16 +23,16 @@
 
 #include "sd-bus.h"
 
-#define KDBUS_PART_NEXT(item) \
+#define KDBUS_ITEM_NEXT(item) \
         (typeof(item))(((uint8_t *)item) + ALIGN8((item)->size))
 
-#define KDBUS_PART_FOREACH(part, head, first)                           \
+#define KDBUS_ITEM_FOREACH(part, head, first)                           \
         for (part = (head)->first;                                      \
              (uint8_t *)(part) < (uint8_t *)(head) + (head)->size;      \
-             part = KDBUS_PART_NEXT(part))
+             part = KDBUS_ITEM_NEXT(part))
 
-#define KDBUS_PART_HEADER_SIZE offsetof(struct kdbus_item, data)
-#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_PART_HEADER_SIZE)
+#define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
+#define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
 
 #define MEMFD_CACHE_MAX 32
 
diff --git a/src/libsystemd-bus/kdbus.h b/src/libsystemd-bus/kdbus.h
index 13fe49a..6775789 100644
--- a/src/libsystemd-bus/kdbus.h
+++ b/src/libsystemd-bus/kdbus.h
@@ -27,25 +27,11 @@
 #define KDBUS_DST_ID_BROADCAST		(~0ULL)
 
 /**
- * struct KDBUS_PART_HEADER - anonymous struct used as header
- * @size:		Size of element, excluding padding bytes
- * @type		Type of element
- *
- * Common first elements in a structure, used to specify the type
- * and size of the data.
- * */
-#define KDBUS_PART_HEADER \
-	struct {							\
-		__u64 size;						\
-		__u64 type;						\
-	}
-
-/**
  * struct kdbus_notify_name_change - name registry change message
- * @old_id		Former owner of a name
- * @new_id		New owner of a name
- * @flags		flags from KDBUS_NAME_*
- * @name		Well-known name
+ * @old_id:		Former owner of a name
+ * @new_id:		New owner of a name
+ * @flags:		flags from KDBUS_NAME_*
+ * @name:		Well-known name
  *
  * Data attached to:
  *   KDBUS_ITEM_NAME_ADD
@@ -64,8 +50,8 @@ struct kdbus_notify_name_change {
 
 /**
  * struct kdbus_notify_id_change - name registry change message
- * @id			New or former owner of the name
- * @flags		flags field from KDBUS_HELLO_*
+ * @id:			New or former owner of the name
+ * @flags:		flags field from KDBUS_HELLO_*
  *
  * Data attached to:
  *   KDBUS_ITEM_ID_ADD
@@ -81,11 +67,11 @@ struct kdbus_notify_id_change {
 
 /**
  * struct kdbus_creds - process credentials
- * @uid			User ID
- * @gid			Group ID
- * @pid			Process ID
- * @tid			Thread ID
- * @starttime		Starttime of the process
+ * @uid:		User ID
+ * @gid:		Group ID
+ * @pid:		Process ID
+ * @tid:		Thread ID
+ * @starttime:		Starttime of the process
  *
  * The starttime of the process PID. This is useful to detect PID overruns
  * from the client side. i.e. if you use the PID to look something up in
@@ -102,8 +88,8 @@ struct kdbus_creds {
 
 /**
  * struct kdbus_audit - audit information
- * @sessionid		The audit session ID
- * @loginuid		The audit login uid
+ * @sessionid:		The audit session ID
+ * @loginuid:		The audit login uid
  */
 struct kdbus_audit {
 	__u64 sessionid;
@@ -123,8 +109,8 @@ struct kdbus_timestamp {
 /**
  * struct kdbus_vec - I/O vector for kdbus payload items
  * @size:		The size of the vector
- * @address		Memory address for memory addresses
- * @offset		Offset in the in-message payload memory
+ * @address:		Memory address for memory addresses
+ * @offset:		Offset in the in-message payload memory
  */
 struct kdbus_vec {
 	__u64 size;
@@ -148,21 +134,50 @@ struct kdbus_memfd {
 
 /**
  * struct kdbus_name - a registered well-known name with its flags
- * @flags		flags from KDBUS_NAME_*
- * @name		well-known name
+ * @flags:		flags from KDBUS_NAME_*
+ * @name:		well-known name
  */
 struct kdbus_name {
 	__u64 flags;
 	char name[0];
 };
 
+/**
+ * struct kdbus_policy_access - policy access item
+ * @type:		One of KDBUS_POLICY_ACCESS_* types
+ * @bits:		Access to grant. One of KDBUS_POLICY_*
+ * @id:			For KDBUS_POLICY_ACCESS_USER, the uid
+ * 			For KDBUS_POLICY_ACCESS_GROUP, the gid
+ */
+struct kdbus_policy_access {
+	__u64 type;	/* USER, GROUP, WORLD */
+	__u64 bits;	/* RECV, SEND, OWN */
+	__u64 id;	/* uid, gid, 0 */
+};
+
+/*
+ * struct kdbus_policy - a policy to upload
+ * @size:		The total size of the structure
+ * @type:		KDBUS_POLICY_NAME or KDBUS_POLICY_ACCESS
+ * @name:		The well-known name to grant access to,
+ * 			if @type is KDBUS_POLICY_NAME
+ * @access:		The policy access details,
+ * 			if @type is KDBUS_POLICY_ACCESS
+ */
+struct kdbus_policy {
+	union {
+		struct kdbus_policy_access access;
+		char name[0];
+	};
+};
+
 /* Message Item Types */
 enum {
 	_KDBUS_ITEM_NULL,
 
 	/* Filled in by userspace */
-	_KDBUS_ITEM_USER_BASE	= 1,
-	KDBUS_ITEM_PAYLOAD_VEC	= 1,	/* .data_vec, reference to memory area */
+	_KDBUS_ITEM_USER_BASE,
+	KDBUS_ITEM_PAYLOAD_VEC	= _KDBUS_ITEM_USER_BASE,
 	KDBUS_ITEM_PAYLOAD_OFF,		/* .data_vec, reference to memory area */
 	KDBUS_ITEM_PAYLOAD_MEMFD,	/* file descriptor of a special data file */
 	KDBUS_ITEM_FDS,			/* .data_fds of file descriptors */
@@ -170,13 +185,15 @@ enum {
 	KDBUS_ITEM_DST_NAME,		/* destination's well-known name, in .str */
 	KDBUS_ITEM_PRIORITY,		/* queue priority for message */
 
+	_KDBUS_ITEM_POLICY_BASE	= 0x400,
+	KDBUS_ITEM_POLICY_NAME = _KDBUS_ITEM_POLICY_BASE,
+	KDBUS_ITEM_POLICY_ACCESS,
+
 	/* Filled in by kernelspace */
-	_KDBUS_ITEM_ATTACH_BASE	= 0x400,
-	KDBUS_ITEM_NAME		= 0x400,/* NUL separated string list with well-known names of source */
+	_KDBUS_ITEM_ATTACH_BASE	= 0x600,
+	KDBUS_ITEM_NAME		= _KDBUS_ITEM_ATTACH_BASE,
 	KDBUS_ITEM_STARTER_NAME,	/* Only used in HELLO for starter connection */
 	KDBUS_ITEM_TIMESTAMP,		/* .timestamp */
-
-	/* when appended to a message, the following items refer to the sender */
 	KDBUS_ITEM_CREDS,		/* .creds */
 	KDBUS_ITEM_PID_COMM,		/* optional, in .str */
 	KDBUS_ITEM_TID_COMM,		/* optional, in .str */
@@ -189,7 +206,7 @@ enum {
 
 	/* Special messages from kernel, consisting of one and only one of these data blocks */
 	_KDBUS_ITEM_KERNEL_BASE	= 0x800,
-	KDBUS_ITEM_NAME_ADD	= 0x800,/* .name_change */
+	KDBUS_ITEM_NAME_ADD	= _KDBUS_ITEM_KERNEL_BASE,
 	KDBUS_ITEM_NAME_REMOVE,		/* .name_change */
 	KDBUS_ITEM_NAME_CHANGE,		/* .name_change */
 	KDBUS_ITEM_ID_ADD,		/* .id_change */
@@ -198,13 +215,14 @@ enum {
 	KDBUS_ITEM_REPLY_DEAD,		/* dito */
 };
 
-/**
+/*
  * struct kdbus_item - chain of data blocks
- * @size	:	overall data record size
+ * @size:	:	overall data record size
  * @type:		kdbus_item type of data
  */
 struct kdbus_item {
-	KDBUS_PART_HEADER;
+	__u64 size;
+	__u64 type;
 	union {
 		/* inline data */
 		__u8 data[0];
@@ -229,6 +247,7 @@ struct kdbus_item {
 		int fds[0];
 		struct kdbus_notify_name_change name_change;
 		struct kdbus_notify_id_change id_change;
+		struct kdbus_policy policy;
 	};
 };
 
@@ -272,12 +291,6 @@ struct kdbus_msg {
 };
 
 enum {
-	_KDBUS_POLICY_NULL,
-	KDBUS_POLICY_NAME,
-	KDBUS_POLICY_ACCESS,
-};
-
-enum {
 	_KDBUS_POLICY_ACCESS_NULL,
 	KDBUS_POLICY_ACCESS_USER,
 	KDBUS_POLICY_ACCESS_GROUP,
@@ -291,36 +304,6 @@ enum {
 };
 
 /**
- * struct kdbus_policy_access - policy access item
- * @type:		One of KDBUS_POLICY_ACCESS_* types
- * @bits:		Access to grant. One of KDBUS_POLICY_*
- * @id:			For KDBUS_POLICY_ACCESS_USER, the uid
- * 			For KDBUS_POLICY_ACCESS_GROUP, the gid
- */
-struct kdbus_policy_access {
-	__u64 type;	/* USER, GROUP, WORLD */
-	__u64 bits;	/* RECV, SEND, OWN */
-	__u64 id;	/* uid, gid, 0 */
-};
-
-/**
- * struct kdbus_policy - a policy to upload
- * @size:		The total size of the structure
- * @type:		KDBUS_POLICY_NAME or KDBUS_POLICY_ACCESS
- * @name:		The well-known name to grant access to,
- * 			if @type is KDBUS_POLICY_NAME
- * @access:		The policy access details,
- * 			if @type is KDBUS_POLICY_ACCESS
- */
-struct kdbus_policy {
-	KDBUS_PART_HEADER;
-	union {
-		char name[0];
-		struct kdbus_policy_access access;
-	};
-};
-
-/**
  * struct kdbus_cmd_policy - a series of policies to upload
  * @size:		The total size of the structure
  * @policies:		The policies to upload
@@ -331,7 +314,7 @@ struct kdbus_policy {
  */
 struct kdbus_cmd_policy {
 	__u64 size;
-	struct kdbus_policy policies[0];
+	struct kdbus_item policies[0];
 };
 
 /* Flags for struct kdbus_cmd_hello */
@@ -370,7 +353,7 @@ enum {
  * 			(kernel → userspace)
  * @pool_size:		Maximum size of the pool buffer (kernel → userspace)
  * @id128:		Unique 128-bit ID of the bus (kernel → userspace)
- * @items;		A list of items
+ * @items:		A list of items
  *
  * This struct is used with the KDBUS_CMD_HELLO ioctl. See the ioctl
  * documentation for more information.
@@ -409,7 +392,7 @@ enum {
  * struct kdbus_cmd_bus_make - struct to make a bus
  * @size:		The total size of the struct
  * @flags:		Properties for the bus to create
- * @bloom_filter:	Size of the bloom filter for this bus
+ * @bloom_size:		Size of the bloom filter for this bus
  * @items:		Items describing details such as the name of the bus
  *
  * This structure is used with the KDBUS_CMD_BUS_MAKE ioctl. Refer to the



More information about the systemd-commits mailing list