patches/GConf-03-user-specific-dbus.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 15120 e161b1a5d413
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15120
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     1
diff -up GConf-2.24.0/gconf/gconf-internals.c.orig GConf-2.24.0/gconf/gconf-internals.c
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     2
--- GConf-2.24.0/gconf/gconf-internals.c.orig	2008-06-28 10:58:36.000000000 +0100
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     3
+++ GConf-2.24.0/gconf/gconf-internals.c	2008-10-10 15:33:56.494241754 +0100
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     4
@@ -2428,11 +2428,12 @@ get_ior (gboolean start_if_not_found,
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     5
         DBusConnection *connection;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     6
         DBusError bus_error;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     7
         char *ior;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     8
+        const char *dbus_address = NULL;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
     9
 
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    10
         /* if the bus isn't running and we don't want to start gconfd then
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    11
          * we don't want to autolaunch the bus either, so bail early.
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    12
          */
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    13
-        if (g_getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL &&
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    14
+        if ( (dbus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS")) == NULL &&
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    15
            (!start_if_not_found || g_getenv ("DISPLAY") == NULL)) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    16
                 if (failure_log)
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    17
                     g_string_append_printf (failure_log,
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    18
@@ -2440,6 +2441,32 @@ get_ior (gboolean start_if_not_found,
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    19
                 return NULL;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    20
         }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    21
 
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    22
+        if ( dbus_address != NULL ) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    23
+            DBusAddressEntry    **address_entries;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    24
+            int                   address_entries_len = 0;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    25
+            const char          *method = NULL;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    26
+
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    27
+            if ( dbus_parse_address( dbus_address, &address_entries, &address_entries_len, NULL ) ) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    28
+                for ( int i = 0; i < address_entries_len; i++ ) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    29
+                    method = dbus_address_entry_get_method( address_entries[i] );
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    30
+
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    31
+                    if ( method != NULL && strcmp( method, "unix" ) == 0 ) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    32
+                        struct stat s;
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    33
+
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    34
+                        const char *path =  dbus_address_entry_get_value(address_entries[i], "path");
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    35
+                        if ( path != NULL && stat( path, &s ) == 0 && 
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    36
+                             s.st_uid != geteuid() ) {
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    37
+                            /* The session bus isn't the same as the effective uid so
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    38
+                             * it's highly likely to fail to connect to the server so
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    39
+                             * don't use it, unset the environment variable.
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    40
+                             */
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    41
+                            g_unsetenv("DBUS_SESSION_BUS_ADDRESS");
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    42
+                        }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    43
+                    }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    44
+                }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    45
+            }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    46
+        }
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    47
+
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    48
         dbus_error_init (&bus_error);
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    49
         connection = dbus_bus_get (DBUS_BUS_SESSION, &bus_error);
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    50
 
e161b1a5d413 2009-02-17 Stephen Browne <[email protected]>
stephen
parents:
diff changeset
    51