Exemplo n.º 1
0
static void
async_get_connection_response (GVfsDBusDaemon *proxy,
                               GAsyncResult *res,
                               gpointer user_data)
{
    AsyncDBusCall *async_call = user_data;
    GError *error = NULL;
    gchar *address1 = NULL;

    if (! gvfs_dbus_daemon_call_get_connection_finish (proxy,
            &address1, NULL,
            res,
            &error))
    {
        async_call->io_error = g_error_copy (error);
        g_error_free (error);
        g_free (address1);
        async_call_finish (async_call);
        return;
    }

    g_dbus_connection_new_for_address (address1,
                                       G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
                                       NULL, /* GDBusAuthObserver */
                                       async_call->cancellable,
                                       async_got_private_connection_cb,
                                       async_call);
    g_free (address1);
}
Exemplo n.º 2
0
/**
 * Webextension entry point.
 */
G_MODULE_EXPORT
void webkit_web_extension_initialize_with_user_data(WebKitWebExtension *extension, GVariant *data)
{
    char *server_address;
    GDBusAuthObserver *observer;

    g_variant_get(data, "(m&s)", &server_address);
    if (!server_address) {
        g_warning("UI process did not start D-Bus server");
        return;
    }

    g_signal_connect(extension, "page-created", G_CALLBACK(on_page_created), NULL);

    observer = g_dbus_auth_observer_new();
    g_signal_connect(observer, "authorize-authenticated-peer",
            G_CALLBACK(on_authorize_authenticated_peer), extension);

    g_dbus_connection_new_for_address(server_address,
            G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, observer, NULL,
            (GAsyncReadyCallback)on_dbus_connection_created, extension);
    g_object_unref(observer);
}
Exemplo n.º 3
0
static void
dbus_daemon_notify_bus_address_cb (GObject *gobject, GParamSpec *pspec, MainData *data)
{
	GPtrArray/*<string>*/ *test_program_envp;
	gchar *envp_pair;

	g_assert (data->dbus_address == NULL);
	data->dbus_address = g_strdup (dsim_dbus_daemon_get_bus_address (data->dbus_daemon));

	g_message (_("Note: Simulated bus has address: %s"), data->dbus_address);

	/* Set up the test program ready for spawning. */
	test_program_envp = g_ptr_array_new_with_free_func (g_free);

	if (pass_through_environment == FALSE) {
		guint i;

		/* Set up a minimal environment with just the necessary environment variables required for things to function.
		 * Note that this list of necessary environment variables is probably incomplete, and is built on the basis of
		 * trial and error rather than research or standards. */
		const gchar *forward_variables[] = {
			"DISPLAY",
			"XDG_DATA_HOME",
			"XDG_CONFIG_HOME",
			"XDG_DATA_DIRS",
			"XDG_CONFIG_DIRS",
			"XDG_CACHE_HOME",
			"XDG_RUNTIME_DIR",
			"HOME",
			"USER",
			"HOSTNAME",
			"SSH_CLIENT",
			"SSH_TTY",
			"SSH_CONNECTION",
		};

		for (i = 0; i < G_N_ELEMENTS (forward_variables); i++) {
			forward_envp_pair (test_program_envp, forward_variables[i]);
		}
	} else {
		/* Forward everything from the simulator's environment to the test program's environment. This might make the test
		 * results slightly less reliable. */
		gchar **env_variable_names;
		const gchar * const *i;

		env_variable_names = g_listenv ();

		for (i = (const gchar * const *) env_variable_names; *i != NULL; i++) {
			forward_envp_pair (test_program_envp, *i);
		}

		g_strfreev (env_variable_names);
	}

	if (system_bus) {
		envp_pair = g_strdup_printf ("DBUS_SYSTEM_BUS_ADDRESS=%s", data->dbus_address);
	} else {
		envp_pair = g_strdup_printf ("DBUS_SESSION_BUS_ADDRESS=%s", data->dbus_address);
	}
	g_ptr_array_add (test_program_envp, envp_pair);

	/* Copy the environment pairs set on the command line. */
	if (test_program_environment != NULL) {
		guint i;

		for (i = 0; i < test_program_environment->len; i++) {
			envp_pair = g_ptr_array_index (test_program_environment, i);
			g_ptr_array_add (test_program_envp, g_strdup (envp_pair));
		}
	}

	data->test_program = dsim_test_program_new (data->working_directory_file, data->test_program_name, data->test_program_argv, test_program_envp);

	g_ptr_array_unref (test_program_envp);

	/* Start building a D-Bus connection with our new bus address. */
	g_dbus_connection_new_for_address (data->dbus_address,
	                                   G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION, NULL, NULL,
	                                   (GAsyncReadyCallback) connection_created_cb, data);

	/* We don't want this to fire again. */
	g_signal_handlers_disconnect_by_func (gobject, dbus_daemon_notify_bus_address_cb, data);
}
Exemplo n.º 4
0
void
evd_dbus_agent_new_connection (GObject             *object,
                               const gchar         *address,
                               gboolean             reuse,
                               GCancellable        *cancellable,
                               GAsyncReadyCallback  callback,
                               gpointer             user_data)
{
  GSimpleAsyncResult *res;
  ObjectData *data;
  gchar *addr;
  ObjConnData *obj_conn_data;
  ConnData *conn_data;

  g_return_if_fail (G_IS_OBJECT (object));
  g_return_if_fail (address != NULL);

  data = evd_dbus_agent_get_object_data (object);
  if (data == NULL)
    data = evd_dbus_agent_setup_object_data (object);

  obj_conn_data = g_slice_new (ObjConnData);
  obj_conn_data->obj_data = data;

  res = g_simple_async_result_new (object,
                                   callback,
                                   user_data,
                                   evd_dbus_agent_new_connection);

  /* if 'address' is an alias, dereference it */
  if ( (addr = g_hash_table_lookup (data->addr_aliases, address)) == NULL)
    addr = g_strdup (address);
  else
    addr = g_strdup (addr);

  if (reuse)
    {
      /* lookup the connection in global cache */
      conn_data = evd_dbus_agent_search_conn_in_global_cache (addr, reuse);
      if (conn_data != NULL)
        {
          guint *conn_id;

          obj_conn_data->conn_data = conn_data;
          conn_id = evd_dbus_agent_bind_connection_to_object (data,
                                                              obj_conn_data);

          g_simple_async_result_set_op_res_gpointer (res,
                                                     conn_id,
                                                     NULL);
          g_simple_async_result_complete_in_idle (res);
          g_object_unref (res);

          return;
        }
    }

  conn_data = evd_dbus_agent_conn_data_new (addr, reuse);
  obj_conn_data->conn_data = conn_data;

  g_simple_async_result_set_op_res_gpointer (res, obj_conn_data, NULL);

  g_dbus_connection_new_for_address (addr,
                                G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION |
                                G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
                                NULL,
                                cancellable,
                                evd_dbus_agent_on_new_dbus_connection,
                                res);

  g_free (addr);
}