chiark / gitweb /
bus: make sure we can match well-known names
authorLennart Poettering <lennart@poettering.net>
Wed, 30 Oct 2013 01:05:38 +0000 (02:05 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 30 Oct 2013 01:08:57 +0000 (02:08 +0100)
src/libsystemd-bus/bus-match.c
src/libsystemd-bus/bus-match.h

index 916682a..49fc633 100644 (file)
@@ -60,7 +60,7 @@
  */
 
 static inline bool BUS_MATCH_IS_COMPARE(enum bus_match_node_type t) {
-        return t >= BUS_MATCH_MESSAGE_TYPE && t <= BUS_MATCH_ARG_NAMESPACE_LAST;
+        return t >= BUS_MATCH_SENDER && t <= BUS_MATCH_ARG_NAMESPACE_LAST;
 }
 
 static inline bool BUS_MATCH_CAN_HASH(enum bus_match_node_type t) {
@@ -142,6 +142,22 @@ static bool value_node_test(
 
         case BUS_MATCH_SENDER:
         case BUS_MATCH_DESTINATION:
+                if (streq_ptr(node->value.str, value_str))
+                        return true;
+
+                /* FIXME: So here's an ugliness: if the match is for a
+                 * well-known name then we cannot actually check this
+                 * correctly here. This doesn't matter much for dbus1
+                 * where no false positives exist, hence we just
+                 * ignore this case here. For kdbus the messages
+                 * should contain all well-known names of the sender,
+                 * hence we can fix things there correctly. */
+
+                if (node->value.str[0] != ':' && value_str[0] == ':')
+                        return true;
+
+                return false;
+
         case BUS_MATCH_INTERFACE:
         case BUS_MATCH_MEMBER:
         case BUS_MATCH_PATH:
index d24aeec..1d38126 100644 (file)
@@ -31,8 +31,8 @@ enum bus_match_node_type {
         BUS_MATCH_LEAF,
 
         /* The following are all different kinds of compare nodes */
-        BUS_MATCH_MESSAGE_TYPE,
         BUS_MATCH_SENDER,
+        BUS_MATCH_MESSAGE_TYPE,
         BUS_MATCH_DESTINATION,
         BUS_MATCH_INTERFACE,
         BUS_MATCH_MEMBER,