From: Mike Gorse Date: Thu, 21 Jun 2012 21:56:40 +0000 (-0500) Subject: Use XDG_RUNTIME_DIR to hold sockets, and do not make a world-writable dir X-Git-Tag: AT_SPI2_ATK_2_12_0~106 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git;a=commitdiff_plain;h=e4f3eee2e137cd34cd427875365f458c65458164 Use XDG_RUNTIME_DIR to hold sockets, and do not make a world-writable dir If we use XDG_RUNTIME_DIR, then the directory should be owned by the appropriate user, so it should not need to be world-writable. Hopefully this won't break accessibility for administrative apps on some distro. https://bugzilla.gnome.org/show_bug.cgi?id=678348 --- diff --git a/atk-adaptor/adaptors/application-adaptor.c b/atk-adaptor/adaptors/application-adaptor.c index 1b85969..dc2231d 100644 --- a/atk-adaptor/adaptors/application-adaptor.c +++ b/atk-adaptor/adaptors/application-adaptor.c @@ -110,6 +110,8 @@ if (reply) const char *retval = (g_getenv ("AT_SPI_CLIENT") ? "": spi_global_app_data->app_bus_addr); + if (!retval) + retval = ""; dbus_message_append_args(reply, DBUS_TYPE_STRING, &retval, DBUS_TYPE_INVALID); } diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c index 69527c6..8c9d6bc 100644 --- a/atk-adaptor/bridge.c +++ b/atk-adaptor/bridge.c @@ -270,7 +270,6 @@ register_application (SpiBridge * app) DBusMessageIter iter; DBusError error; DBusPendingCall *pending; - const int max_addr_length = 128; /* should be long enough */ dbus_error_init (&error); @@ -298,16 +297,16 @@ register_application (SpiBridge * app) if (message) dbus_message_unref (message); - /* could this be better, we accept some amount of race in getting the temp name*/ - /* make sure the directory exists */ - mkdir ("/tmp/at-spi2/", S_IRWXU|S_IRWXG|S_IRWXO|S_ISVTX); - chmod ("/tmp/at-spi2/", S_IRWXU|S_IRWXG|S_IRWXO|S_ISVTX); - app->app_bus_addr = g_malloc(max_addr_length * sizeof(char)); #ifndef DISABLE_P2P - sprintf (app->app_bus_addr, "unix:path=/tmp/at-spi2/socket-%d-%d", getpid(), - rand()); -#else - app->app_bus_addr [0] = '\0'; + 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); #endif return TRUE; @@ -338,6 +337,20 @@ deregister_application (SpiBridge * app) dbus_connection_send (app->bus, message, NULL); if (message) dbus_message_unref (message); + + if (app->app_bus_addr) + { + unlink (app->app_bus_addr); + g_free (app->app_bus_addr); + app->app_bus_addr = NULL; + } + + if (app->app_tmp_dir) + { + rmdir (app->app_tmp_dir); + g_free (app->app_tmp_dir); + app->app_tmp_dir = NULL; + } } /*---------------------------------------------------------------------------*/ @@ -525,6 +538,9 @@ setup_bus (void) DBusServer *server; DBusError err; + if (!spi_global_app_data->app_bus_addr) + return -1; + dbus_error_init(&err); server = dbus_server_listen(spi_global_app_data->app_bus_addr, &err); if (server == NULL) diff --git a/atk-adaptor/bridge.h b/atk-adaptor/bridge.h index c24183e..2a79c6d 100644 --- a/atk-adaptor/bridge.h +++ b/atk-adaptor/bridge.h @@ -59,7 +59,8 @@ struct _SpiBridge */ gchar *desktop_name; gchar *desktop_path; -char *app_bus_addr; +gchar *app_tmp_dir; +gchar *app_bus_addr; GList *events; gboolean events_initialized; };