dbus/bus services.c,1.34,1.35

John Palmieri johnp at kemper.freedesktop.org
Fri Aug 18 08:47:03 PDT 2006


Update of /cvs/dbus/dbus/bus
In directory kemper:/tmp/cvs-serv1752/bus

Modified Files:
	services.c 
Log Message:
Patch provided by Ralf Habacker (ralf dot habacker at freenet dot de) 

* dbus/dbus-sysdeps.c, dbus/dbus-threads.c, dbus/dbus-internals.h:
  Add two more global locks for use on windows platforms.  These are
  unused on non-windows platforms but are not ifdefed out to avoid
  potential bugs (i.e. the few bytes lost does not warrent the extra
  maintanence and complexity that having seperate sets of locks would
  cause)


Index: services.c
===================================================================
RCS file: /cvs/dbus/dbus/bus/services.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- services.c	14 Aug 2006 19:11:35 -0000	1.34
+++ services.c	18 Aug 2006 15:46:59 -0000	1.35
@@ -417,6 +417,18 @@
       goto out;
     }
 
+  if (_dbus_string_equal_c_str (service_name, DBUS_SERVICE_DBUS))
+    {
+      dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
+                      "Connection \"%s\" is not allowed to own the service \"%s\"because "
+                      "it is reserved for D-Bus' use only",
+                      bus_connection_is_active (connection) ?
+                      bus_connection_get_name (connection) :
+                      "(inactive)",
+                      DBUS_SERVICE_DBUS);
+      goto out;
+    }
+
   policy = bus_connection_get_policy (connection);
   _dbus_assert (policy != NULL);
 
@@ -445,7 +457,7 @@
                       _dbus_string_get_const_data (service_name));
       goto out;
     }
-      
+  
   if (!bus_client_policy_check_can_own (policy, connection,
                                         service_name))
     {
@@ -623,6 +635,19 @@
       goto out;
     }
 
+   if (_dbus_string_equal_c_str (service_name, DBUS_SERVICE_DBUS))
+    {
+      /* Not allowed; the base service name cannot be created or released */
+      dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
+                      "Cannot release the %s service because it is owned by the bus",
+                     DBUS_SERVICE_DBUS);
+
+      _dbus_verbose ("Attempt to release service name \"%s\"",
+                     DBUS_SERVICE_DBUS);
+
+      goto out;
+    }
+
   service = bus_registry_lookup (registry, service_name);
 
   if (service == NULL)



More information about the dbus-commit mailing list