daemon: allow "eavesdrop" match rule
authorDaiki Ueno <ueno@unixuser.org>
Mon, 25 Feb 2013 22:42:14 +0000 (07:42 +0900)
committerDaiki Ueno <ueno@unixuser.org>
Mon, 25 Feb 2013 22:42:14 +0000 (07:42 +0900)
Recent dbus-monitor supplies "eavesdrop" match rule which ibus-daemon
does not accept.  This patch silently ignores the rule so ibus-daemon
behave the same as before.

BUG=none

Review URL: https://codereview.appspot.com/7225062

bus/matchrule.c
bus/test-matchrule.c

index 836e71e..f79f9bf 100644 (file)
@@ -198,30 +198,31 @@ failed:
 static gchar *
 find_value (const gchar **p)
 {
-    GString *text;
-
-    text = g_string_new ("");
-
     SKIP_WHITE (*p);
 
-    if (**p != '\'')
-        goto failed;
-    (*p) ++;
-
-    while (**p != '\'') {
-        if (**p == '\0')
-            goto failed;
-        if (**p == '\\')
+    if (**p == '\'') {
+        GString *text = g_string_new ("");
+        (*p) ++;
+        while (**p != '\'') {
+            if (**p == '\0') {
+                g_string_free (text, TRUE);
+                return NULL;
+            }
+            if (**p == '\\')
+                (*p) ++;
+            g_string_append_c (text, **p);
             (*p) ++;
-        g_string_append_c (text, **p);
+        }
         (*p) ++;
+        return g_string_free (text, FALSE);
+    } else if (strncmp (*p, "true", 4) == 0) {
+        *p += 4;
+        return g_strdup ("true");
+    } else if (strncmp (*p, "false", 5) == 0) {
+        *p += 5;
+        return g_strdup ("false");
     }
-    (*p) ++;
-
-    return g_string_free (text, FALSE);
 
-failed:
-    g_string_free (text, TRUE);
     return NULL;
 }
 
@@ -372,6 +373,11 @@ bus_match_rule_new (const gchar *text)
                 goto failed;
             bus_match_rule_set_arg (rule, i, p->value);
         }
+        else if (g_strcmp0 (p->key, "eavesdrop") == 0) {
+            if (g_strcmp0 (p->value, "true") != 0 &&
+                g_strcmp0 (p->value, "false") != 0)
+                goto failed;
+        }
         else
             goto failed;
     }
index 07df607..d2e2648 100644 (file)
@@ -55,6 +55,10 @@ main(gint argc, gchar **argv)
 
     rule = bus_match_rule_new ("type='method_call',interface='org.freedesktop.IBus ");
     g_assert (rule == NULL);
+
+    rule = bus_match_rule_new ("eavesdrop=true");
+    g_assert (rule != NULL);
+    g_object_unref (rule);
     
     return 0;
 }