If an application is running as root but within a user's runtime directory,
then creating a temporary directory will result in the directory being owned
by root, and the user will not have permission to search the directory to
access the socket, so an AT running as the normal user will not be able to
connect to the application running as root.
Fixes regression introduced by the fix for BGO#678348.
dbus_message_unref (message);
#ifndef DISABLE_P2P
dbus_message_unref (message);
#ifndef DISABLE_P2P
- app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
- "at-spi2-XXXXXX", NULL);
- if (!g_mkdtemp (app->app_tmp_dir))
- g_free (app->app_tmp_dir);
- app->app_tmp_dir = NULL;
- return FALSE;
+ app->app_tmp_dir = g_build_filename (g_get_user_runtime_dir (),
+ "at-spi2-XXXXXX", NULL);
+ if (!g_mkdtemp (app->app_tmp_dir))
+ {
+ g_free (app->app_tmp_dir);
+ app->app_tmp_dir = NULL;
+ return FALSE;
+ }
- app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
+
+ if (app->app_tmp_dir)
+ app->app_bus_addr = g_strdup_printf ("unix:path=%s/socket", app->app_tmp_dir);
+ else
+ app->app_bus_addr = g_strdup_printf ("unix:path=%s/at-spi2-socket-%d",
+ g_get_user_runtime_dir (), getpid ());