chiark / gitweb /
sd-bus: ignore BLOOM_FILTER kdbus items
[elogind.git] / src / libelogind / sd-bus / bus-kernel.c
index 3aaaabf4edb27f4388a6d5d3d7d08ee5998f5234..e5d8a2cc57951ae22a01ccee7466b5e341a1a38c 100644 (file)
@@ -29,8 +29,8 @@
 #include <sys/prctl.h>
 
 /* When we include libgen.h because we need dirname() we immediately
- * undefine basename() since libgen.h defines it as a macro to the XDG
- * version which is really broken. */
+ * undefine basename() since libgen.h defines it as a macro to the POSIX
+ * version which is really broken. We prefer GNU basename(). */
 #include <libgen.h>
 #undef basename
 
@@ -774,6 +774,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) {
 
                 case KDBUS_ITEM_FDS:
                 case KDBUS_ITEM_SECLABEL:
+                case KDBUS_ITEM_BLOOM_FILTER:
                         break;
 
                 default:
@@ -1332,8 +1333,7 @@ static int bus_kernel_translate_message(sd_bus *bus, struct kdbus_msg *k) {
         KDBUS_ITEM_FOREACH(d, k, items) {
                 if (d->type == KDBUS_ITEM_TIMESTAMP)
                         ts = &d->timestamp;
-
-                if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) {
+                else if (d->type >= _KDBUS_ITEM_KERNEL_BASE && d->type < _KDBUS_ITEM_KERNEL_BASE + ELEMENTSOF(translate)) {
                         if (found)
                                 return -EBADMSG;
                         found = d;
@@ -1385,15 +1385,16 @@ int bus_kernel_read_message(sd_bus *bus, bool hint_priority, int64_t priority) {
                         r = 0;
                 }
 
-        } else if (k->payload_type == KDBUS_PAYLOAD_KERNEL)
+                if (r <= 0)
+                        close_kdbus_msg(bus, k);
+        } else if (k->payload_type == KDBUS_PAYLOAD_KERNEL) {
                 r = bus_kernel_translate_message(bus, k);
-        else {
+                close_kdbus_msg(bus, k);
+        } else {
                 log_debug("Ignoring message with unknown payload type %llu.", (unsigned long long) k->payload_type);
                 r = 0;
-        }
-
-        if (r <= 0)
                 close_kdbus_msg(bus, k);
+        }
 
         return r < 0 ? r : 1;
 }
@@ -1556,6 +1557,8 @@ uint64_t attach_flags_to_kdbus(uint64_t mask) {
         return m;
 }
 
+/// UNNEEDED by elogind
+#if 0
 int bus_kernel_create_bus(const char *name, bool world, char **s) {
         struct kdbus_cmd *make;
         struct kdbus_item *n;
@@ -1631,6 +1634,7 @@ int bus_kernel_create_bus(const char *name, bool world, char **s) {
 
         return fd;
 }
+#endif // 0
 
 int bus_kernel_open_bus_fd(const char *bus, char **path) {
         char *p;
@@ -1664,6 +1668,8 @@ int bus_kernel_open_bus_fd(const char *bus, char **path) {
         return fd;
 }
 
+/// UNNEEDED by elogind
+#if 0
 int bus_kernel_create_endpoint(const char *bus_name, const char *ep_name, char **ep_path) {
         _cleanup_free_ char *path = NULL;
         struct kdbus_cmd *make;
@@ -1707,6 +1713,7 @@ int bus_kernel_create_endpoint(const char *bus_name, const char *ep_name, char *
 
         return fd;
 }
+#endif // 0
 
 int bus_kernel_try_close(sd_bus *bus) {
         struct kdbus_cmd byebye = { .size = sizeof(byebye) };
@@ -1720,6 +1727,8 @@ int bus_kernel_try_close(sd_bus *bus) {
         return 0;
 }
 
+/// UNNEEDED by elogind
+#if 0
 int bus_kernel_drop_one(int fd) {
         struct kdbus_cmd_recv recv = {
                 .size = sizeof(recv),
@@ -1733,6 +1742,7 @@ int bus_kernel_drop_one(int fd) {
 
         return 0;
 }
+#endif // 0
 
 int bus_kernel_realize_attach_flags(sd_bus *bus) {
         struct kdbus_cmd *update;