policy: enforce policy on "allow own_prefix"
authorAlban Crequy <alban.crequy@collabora.co.uk>
Sun, 4 Mar 2012 14:56:02 +0000 (14:56 +0000)
committerAlban Crequy <alban.crequy@collabora.co.uk>
Sun, 4 Mar 2012 14:56:02 +0000 (14:56 +0000)
https://bugs.freedesktop.org/show_bug.cgi?id=46886

bus/policy.c

index 34e8446..222b3c5 100644 (file)
@@ -1267,12 +1267,25 @@ bus_client_policy_check_can_own (BusClientPolicy  *policy,
       if (rule->type != BUS_POLICY_RULE_OWN)
         continue;
 
-      if (rule->d.own.service_name != NULL)
+      if (!rule->d.own.prefix && rule->d.own.service_name != NULL)
         {
           if (!_dbus_string_equal_c_str (service_name,
                                          rule->d.own.service_name))
             continue;
         }
+      else if (rule->d.own.prefix)
+        {
+          const char *data;
+          char next_char;
+          if (!_dbus_string_starts_with_c_str (service_name,
+                                               rule->d.own.service_name))
+            continue;
+
+          data = _dbus_string_get_const_data (service_name);
+          next_char = data[strlen (rule->d.own.service_name)];
+          if (next_char != '\0' && next_char != '.')
+            continue;
+        }
 
       /* Use this rule */
       allowed = rule->allow;