diff options
author | Giovanni Campagna <gcampagna@src.gnome.org> | 2012-05-16 18:30:01 +0200 |
---|---|---|
committer | Giovanni Campagna <gcampagna@src.gnome.org> | 2012-05-18 16:13:57 +0200 |
commit | 2d99bfbde3348cc6eb6bdd214627259de76005e4 (patch) | |
tree | 57fd4ab6bcd2712a9360442ee559390c282f3126 | |
parent | 9bd405d69948a1ed92419138f1f9ceb9b5243cd7 (diff) | |
download | gdm-2d99bfbde3348cc6eb6bdd214627259de76005e4.tar.gz |
Finish porting the daemon to GDBus
The daemon, all the slaves, and the session worker now all use
GDBus exclusively. Dependency on dbus-glib has been removed (but
it still remains for the GUI parts)
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | daemon/Makefile.am | 2 | ||||
-rw-r--r-- | daemon/gdm-chooser-server.c | 348 | ||||
-rw-r--r-- | daemon/gdm-session-worker-job.c | 3 | ||||
-rw-r--r-- | daemon/gdm-slave.c | 26 | ||||
-rw-r--r-- | daemon/gdm-slave.h | 4 | ||||
-rw-r--r-- | daemon/gdm-welcome-session.c | 3 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-chooser-slave.c | 29 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-display.h | 1 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-greeter-display.c | 27 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-greeter-display.h | 1 | ||||
-rw-r--r-- | daemon/session-worker-main.c | 4 | ||||
-rw-r--r-- | daemon/xdmcp-chooser-slave-main.c | 20 |
13 files changed, 163 insertions, 307 deletions
diff --git a/configure.ac b/configure.ac index e8127709..74180fa7 100644 --- a/configure.ac +++ b/configure.ac @@ -80,7 +80,6 @@ AC_SUBST(GTHREAD_CFLAGS) AC_SUBST(GTHREAD_LIBS) PKG_CHECK_MODULES(COMMON, - dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION gobject-2.0 >= $GLIB_REQUIRED_VERSION gio-2.0 >= $GLIB_REQUIRED_VERSION gio-unix-2.0 >= $GLIB_REQUIRED_VERSION @@ -89,7 +88,6 @@ AC_SUBST(COMMON_CFLAGS) AC_SUBST(COMMON_LIBS) PKG_CHECK_MODULES(DAEMON, - dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION gobject-2.0 >= $GLIB_REQUIRED_VERSION gio-2.0 >= $GLIB_REQUIRED_VERSION gio-unix-2.0 >= $GLIB_REQUIRED_VERSION diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 9f8012cd..90ef5f7a 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -345,6 +345,8 @@ nodist_gdm_xdmcp_chooser_slave_SOURCES = \ gdm-display-glue.h \ gdm-slave-glue.c \ gdm-slave-glue.h \ + gdm-xdmcp-chooser-slave-glue.c \ + gdm-xdmcp-chooser-slave-glue.h \ $(NULL) gdm_xdmcp_chooser_slave_LDADD = \ diff --git a/daemon/gdm-chooser-server.c b/daemon/gdm-chooser-server.c index 2bd664c4..e85a8202 100644 --- a/daemon/gdm-chooser-server.c +++ b/daemon/gdm-chooser-server.c @@ -39,27 +39,36 @@ #include <glib.h> #include <glib/gi18n.h> #include <glib-object.h> -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> +#include <gio/gio.h> #include "gdm-common.h" #include "gdm-chooser-server.h" +#include "gdm-dbus-util.h" #define GDM_CHOOSER_SERVER_DBUS_PATH "/org/gnome/DisplayManager/ChooserServer" #define GDM_CHOOSER_SERVER_DBUS_INTERFACE "org.gnome.DisplayManager.ChooserServer" #define GDM_CHOOSER_SERVER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_CHOOSER_SERVER, GdmChooserServerPrivate)) +static const char* chooser_server_introspection = + "<node>" + " <interface name=\"org.gnome.DisplayManager.ChooserServer\">" + " <method name=\"SelectHostname\">" + " <arg name=\"text\" direction=\"in\" type=\"s\"/>" + " </method>" + " <method name=\"Disconnect\">" + " </method>" + " </interface>" + "</node>"; + struct GdmChooserServerPrivate { char *user_name; char *group_name; char *display_id; - DBusServer *server; - char *server_address; - DBusConnection *chooser_connection; + GDBusServer *server; + GDBusConnection *chooser_connection; }; enum { @@ -83,240 +92,64 @@ static void gdm_chooser_server_init (GdmChooserServer *chooser_ G_DEFINE_TYPE (GdmChooserServer, gdm_chooser_server, G_TYPE_OBJECT) -/* Note: Use abstract sockets like dbus does by default on Linux. Abstract - * sockets are only available on Linux. - */ -static char * -generate_address (void) -{ - char *path; -#if defined (__linux__) - int i; - char tmp[9]; - - for (i = 0; i < 8; i++) { - if (g_random_int_range (0, 2) == 0) { - tmp[i] = g_random_int_range ('a', 'z' + 1); - } else { - tmp[i] = g_random_int_range ('A', 'Z' + 1); - } - } - tmp[8] = '\0'; - - path = g_strdup_printf ("unix:abstract=/tmp/gdm-chooser-%s", tmp); -#else - path = g_strdup ("unix:tmpdir=/tmp"); -#endif - - return path; -} - -static DBusHandlerResult -handle_select_hostname (GdmChooserServer *chooser_server, - DBusConnection *connection, - DBusMessage *message) +static void +handle_select_hostname (GdmChooserServer *chooser_server, + GDBusMethodInvocation *invocation, + GVariant *parameters) { - DBusMessage *reply; - DBusError error; const char *text; - dbus_error_init (&error); - if (! dbus_message_get_args (message, &error, - DBUS_TYPE_STRING, &text, - DBUS_TYPE_INVALID)) { - g_warning ("ERROR: %s", error.message); - } + g_variant_get (parameters, "(&s)", &text); g_debug ("ChooserServer: SelectHostname: %s", text); - reply = dbus_message_new_method_return (message); - dbus_connection_send (connection, reply, NULL); - if (reply != NULL) { - dbus_message_unref (reply); - } + g_dbus_method_invocation_return_value (invocation, NULL); g_signal_emit (chooser_server, signals [HOSTNAME_SELECTED], 0, text); - - return DBUS_HANDLER_RESULT_HANDLED; } -static DBusHandlerResult -handle_disconnect (GdmChooserServer *chooser_server, - DBusConnection *connection, - DBusMessage *message) +static void +handle_disconnect (GdmChooserServer *chooser_server, + GDBusMethodInvocation *invocation, + GVariant *parameters) { - DBusMessage *reply; + g_debug ("ChooserServer: Disconnect"); - reply = dbus_message_new_method_return (message); - dbus_connection_send (connection, reply, NULL); - if (reply != NULL) { - dbus_message_unref (reply); - } + g_dbus_method_invocation_return_value (invocation, NULL); g_signal_emit (chooser_server, signals [DISCONNECTED], 0); - - return DBUS_HANDLER_RESULT_HANDLED; } -static DBusHandlerResult -chooser_handle_child_message (DBusConnection *connection, - DBusMessage *message, - void *user_data) +static void +chooser_handle_child_method (GDBusConnection *connection, + const char *sender, + const char *object_path, + const char *interface_name, + const char *method_name, + GVariant *parameters, + GDBusMethodInvocation *invocation, + void *user_data) { GdmChooserServer *chooser_server = GDM_CHOOSER_SERVER (user_data); - if (dbus_message_is_method_call (message, GDM_CHOOSER_SERVER_DBUS_INTERFACE, "SelectHostname")) { - return handle_select_hostname (chooser_server, connection, message); - } else if (dbus_message_is_method_call (message, GDM_CHOOSER_SERVER_DBUS_INTERFACE, "Disconnect")) { - return handle_disconnect (chooser_server, connection, message); - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static DBusHandlerResult -do_introspect (DBusConnection *connection, - DBusMessage *message) -{ - DBusMessage *reply; - GString *xml; - char *xml_string; - - g_debug ("ChooserServer: Do introspect"); - - /* standard header */ - xml = g_string_new ("<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" - "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n" - "<node>\n" - " <interface name=\"org.freedesktop.DBus.Introspectable\">\n" - " <method name=\"Introspect\">\n" - " <arg name=\"data\" direction=\"out\" type=\"s\"/>\n" - " </method>\n" - " </interface>\n"); - - /* interface */ - xml = g_string_append (xml, - " <interface name=\"org.gnome.DisplayManager.ChooserServer\">\n" - " <method name=\"SelectHostname\">\n" - " <arg name=\"text\" direction=\"in\" type=\"s\"/>\n" - " </method>\n" - " <method name=\"Disconnect\">\n" - " </method>\n" - " </interface>\n"); - - reply = dbus_message_new_method_return (message); - - xml = g_string_append (xml, "</node>\n"); - xml_string = g_string_free (xml, FALSE); - - dbus_message_append_args (reply, - DBUS_TYPE_STRING, &xml_string, - DBUS_TYPE_INVALID); - - g_free (xml_string); - - if (reply == NULL) { - g_error ("No memory"); - } - - if (! dbus_connection_send (connection, reply, NULL)) { - g_error ("No memory"); - } - - if (reply != NULL) { - dbus_message_unref (reply); - } - - return DBUS_HANDLER_RESULT_HANDLED; -} - -static DBusHandlerResult -chooser_server_message_handler (DBusConnection *connection, - DBusMessage *message, - void *user_data) -{ - const char *dbus_destination = dbus_message_get_destination (message); - const char *dbus_path = dbus_message_get_path (message); - const char *dbus_interface = dbus_message_get_interface (message); - const char *dbus_member = dbus_message_get_member (message); - - g_debug ("chooser_server_message_handler: destination=%s obj_path=%s interface=%s method=%s", - dbus_destination ? dbus_destination : "(null)", - dbus_path ? dbus_path : "(null)", - dbus_interface ? dbus_interface : "(null)", - dbus_member ? dbus_member : "(null)"); - - if (dbus_message_is_method_call (message, "org.freedesktop.DBus", "AddMatch")) { - DBusMessage *reply; - - reply = dbus_message_new_method_return (message); - - if (reply == NULL) { - g_error ("No memory"); - } - - if (! dbus_connection_send (connection, reply, NULL)) { - g_error ("No memory"); - } - - dbus_message_unref (reply); - - return DBUS_HANDLER_RESULT_HANDLED; - } else if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") && - strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) { - - /*dbus_connection_unref (connection);*/ - - return DBUS_HANDLER_RESULT_HANDLED; - } else if (dbus_message_is_method_call (message, "org.freedesktop.DBus.Introspectable", "Introspect")) { - return do_introspect (connection, message); - } else { - return chooser_handle_child_message (connection, message, user_data); - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + if (strcmp (method_name, "SelectHostname") == 0) + return handle_select_hostname (chooser_server, invocation, parameters); + else if (strcmp (method_name, "Disconnect") == 0) + return handle_disconnect (chooser_server, invocation, parameters); } static void -chooser_server_unregister_handler (DBusConnection *connection, - void *user_data) -{ - g_debug ("chooser_server_unregister_handler"); -} - -static DBusHandlerResult -connection_filter_function (DBusConnection *connection, - DBusMessage *message, - void *user_data) +connection_closed (GDBusConnection *connection, + GdmChooserServer *chooser_server) { - GdmChooserServer *chooser_server = GDM_CHOOSER_SERVER (user_data); - const char *dbus_path = dbus_message_get_path (message); - const char *dbus_interface = dbus_message_get_interface (message); - const char *dbus_message = dbus_message_get_member (message); - - g_debug ("ChooserServer: obj_path=%s interface=%s method=%s", - dbus_path ? dbus_path : "(null)", - dbus_interface ? dbus_interface : "(null)", - dbus_message ? dbus_message : "(null)"); - - if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") - && strcmp (dbus_path, DBUS_PATH_LOCAL) == 0) { - - g_debug ("ChooserServer: Disconnected"); - - dbus_connection_unref (connection); - chooser_server->priv->chooser_connection = NULL; - - return DBUS_HANDLER_RESULT_HANDLED; - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + g_clear_object (&chooser_server->priv->chooser_connection); } -static dbus_bool_t -allow_user_function (DBusConnection *connection, - unsigned long uid, - void *data) +static gboolean +allow_user_function (GDBusAuthObserver *observer, + GIOStream *stream, + GCredentials *credentials, + void *data) { GdmChooserServer *chooser_server = GDM_CHOOSER_SERVER (data); struct passwd *pwent; @@ -330,93 +163,77 @@ allow_user_function (DBusConnection *connection, return FALSE; } - if (pwent->pw_uid == uid) { - return TRUE; - } - - return FALSE; + return g_credentials_get_unix_user (credentials, NULL) == pwent->pw_uid; } static void -handle_connection (DBusServer *server, - DBusConnection *new_connection, - void *user_data) +handle_connection (GDBusServer *server, + GDBusConnection *new_connection, + void *user_data) { GdmChooserServer *chooser_server = GDM_CHOOSER_SERVER (user_data); g_debug ("ChooserServer: Handing new connection"); if (chooser_server->priv->chooser_connection == NULL) { - DBusObjectPathVTable vtable = { &chooser_server_unregister_handler, - &chooser_server_message_handler, - NULL, NULL, NULL, NULL - }; + GDBusInterfaceVTable vtable = { chooser_handle_child_method }; + GDBusNodeInfo *info; - chooser_server->priv->chooser_connection = new_connection; - dbus_connection_ref (new_connection); - dbus_connection_setup_with_g_main (new_connection, NULL); + chooser_server->priv->chooser_connection = g_object_ref (new_connection); - g_debug ("ChooserServer: chooser connection is %p", new_connection); + info = g_dbus_node_info_new_for_xml (chooser_server_introspection, NULL); - dbus_connection_add_filter (new_connection, - connection_filter_function, - chooser_server, - NULL); + g_debug ("GdmChooserServer: new connection %p", new_connection); - dbus_connection_set_unix_user_function (new_connection, - allow_user_function, - chooser_server, - NULL); + g_dbus_connection_register_object (new_connection, + "/org/gnome/DisplayManager/ChooserServer", + info->interfaces[0], + &vtable, + NULL, NULL, NULL); - dbus_connection_register_object_path (new_connection, - GDM_CHOOSER_SERVER_DBUS_PATH, - &vtable, - chooser_server); + g_signal_connect (new_connection, "closed", + G_CALLBACK (connection_closed), chooser_server); g_signal_emit (chooser_server, signals[CONNECTED], 0); - } } gboolean gdm_chooser_server_start (GdmChooserServer *chooser_server) { - DBusError error; - gboolean ret; - char *address; - const char *auth_mechanisms[] = {"EXTERNAL", NULL}; + GDBusAuthObserver *observer; + GError *error = NULL; + gboolean ret; ret = FALSE; g_debug ("ChooserServer: Creating D-Bus server for chooser"); - address = generate_address (); + observer = g_dbus_auth_observer_new (); + g_signal_connect (observer, "authorize-authenticated-peer", + G_CALLBACK (allow_user_function), chooser_server); - dbus_error_init (&error); - chooser_server->priv->server = dbus_server_listen (address, &error); - g_free (address); + chooser_server->priv->server = gdm_dbus_setup_private_server (observer, + &error); + g_object_unref (observer); if (chooser_server->priv->server == NULL) { - g_warning ("Cannot create D-BUS server for the chooser: %s", error.message); + g_warning ("Cannot create D-BUS server for the chooser: %s", error->message); /* FIXME: should probably fail if we can't create the socket */ goto out; } - dbus_server_setup_with_g_main (chooser_server->priv->server, NULL); - dbus_server_set_auth_mechanisms (chooser_server->priv->server, auth_mechanisms); - dbus_server_set_new_connection_function (chooser_server->priv->server, - handle_connection, - chooser_server, - NULL); + g_signal_connect (chooser_server->priv->server, "new-connection", + G_CALLBACK (handle_connection), chooser_server); + ret = TRUE; - g_free (chooser_server->priv->server_address); - chooser_server->priv->server_address = dbus_server_get_address (chooser_server->priv->server); + g_debug ("ChooserServer: D-Bus server listening on %s", + g_dbus_server_get_client_address (chooser_server->priv->server)); - g_debug ("ChooserServer: D-Bus server listening on %s", chooser_server->priv->server_address); + g_dbus_server_start (chooser_server->priv->server); out: - return ret; } @@ -429,13 +246,16 @@ gdm_chooser_server_stop (GdmChooserServer *chooser_server) g_debug ("ChooserServer: Stopping chooser server..."); + g_clear_object (&chooser_server->priv->server); + g_clear_object (&chooser_server->priv->chooser_connection); + return ret; } char * gdm_chooser_server_get_address (GdmChooserServer *chooser_server) { - return g_strdup (chooser_server->priv->server_address); + return g_strdup (g_dbus_server_get_client_address (chooser_server->priv->server)); } static void diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c index cb2901a5..c08a344f 100644 --- a/daemon/gdm-session-worker-job.c +++ b/daemon/gdm-session-worker-job.c @@ -39,9 +39,6 @@ #include <glib.h> #include <glib/gi18n.h> #include <glib-object.h> -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> #include "gdm-common.h" diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c index da660748..3e4c71f4 100644 --- a/daemon/gdm-slave.c +++ b/daemon/gdm-slave.c @@ -103,7 +103,6 @@ struct GdmSlavePrivate GdmDBusDisplay *display_proxy; GDBusConnection *connection; - GDBusObjectSkeleton *object_skeleton; GdmDBusSlave *skeleton; }; @@ -879,9 +878,7 @@ gdm_slave_real_stop (GdmSlave *slave) { g_debug ("GdmSlave: Stopping slave"); - if (slave->priv->display_proxy != NULL) { - g_object_unref (slave->priv->display_proxy); - } + g_clear_object (&slave->priv->display_proxy); return TRUE; } @@ -1368,6 +1365,7 @@ gdm_slave_get_primary_session_id_for_user_from_ck (GdmSlave *slave, char *primary_ssid; uid_t uid; GVariant *reply; + GVariant *array; GVariantIter iter; char *ssid; @@ -1422,7 +1420,8 @@ gdm_slave_get_primary_session_id_for_user_from_ck (GdmSlave *slave, return NULL; } - g_variant_iter_init (&iter, reply); + array = g_variant_get_child_value (reply, 0); + g_variant_iter_init (&iter, array); while (g_variant_iter_loop (&iter, "(&s)", &ssid)) { if (x11_session_is_on_seat (slave, ssid, slave->priv->display_seat_id)) { primary_ssid = g_strdup (ssid); @@ -1431,6 +1430,7 @@ gdm_slave_get_primary_session_id_for_user_from_ck (GdmSlave *slave, } g_variant_unref (reply); + g_variant_unref (array); return primary_ssid; } #endif @@ -1813,11 +1813,9 @@ register_slave (GdmSlave *slave) exit (1); } - slave->priv->object_skeleton = g_dbus_object_skeleton_new (slave->priv->id); slave->priv->skeleton = GDM_DBUS_SLAVE (gdm_dbus_slave_skeleton_new ()); - - g_dbus_object_skeleton_add_interface (slave->priv->object_skeleton, - G_DBUS_INTERFACE_SKELETON (slave->priv->skeleton)); + gdm_slave_export_interface (slave, + G_DBUS_INTERFACE_SKELETON (slave->priv->skeleton)); return TRUE; } @@ -1969,3 +1967,13 @@ gdm_slave_finalize (GObject *object) G_OBJECT_CLASS (gdm_slave_parent_class)->finalize (object); } + +void +gdm_slave_export_interface (GdmSlave *slave, + GDBusInterfaceSkeleton *interface) +{ + g_dbus_interface_skeleton_export (interface, + slave->priv->connection, + slave->priv->id, + NULL); +} diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h index aaaa8f23..58a727b9 100644 --- a/daemon/gdm-slave.h +++ b/daemon/gdm-slave.h @@ -23,6 +23,7 @@ #define __GDM_SLAVE_H #include <glib-object.h> +#include <gio/gio.h> G_BEGIN_DECLS @@ -84,6 +85,9 @@ gboolean gdm_slave_run_script (GdmSlave *slave, const char *username); void gdm_slave_stopped (GdmSlave *slave); +void gdm_slave_export_interface (GdmSlave *slave, + GDBusInterfaceSkeleton *interface); + G_END_DECLS #endif /* __GDM_SLAVE_H */ diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c index 795363af..13f79191 100644 --- a/daemon/gdm-welcome-session.c +++ b/daemon/gdm-welcome-session.c @@ -40,9 +40,6 @@ #include <glib/gi18n.h> #include <glib/gstdio.h> #include <glib-object.h> -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> #include "gdm-common.h" diff --git a/daemon/gdm-xdmcp-chooser-slave.c b/daemon/gdm-xdmcp-chooser-slave.c index 2dd6edce..45d04ad4 100644 --- a/daemon/gdm-xdmcp-chooser-slave.c +++ b/daemon/gdm-xdmcp-chooser-slave.c @@ -34,10 +34,6 @@ #include <glib/gstdio.h> #include <glib-object.h> -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> - #include <X11/Xlib.h> /* for Display */ #include "gdm-common.h" @@ -70,6 +66,8 @@ struct GdmXdmcpChooserSlavePrivate GdmChooserServer *chooser_server; GdmChooserSession *chooser; + + GdmDBusXdmcpChooserSlave *skeleton; }; enum { @@ -129,6 +127,9 @@ on_chooser_hostname_selected (GdmChooserServer *chooser_server, { g_debug ("GdmXdmcpChooserSlave: emitting hostname selected: %s", name); g_signal_emit (slave, signals [HOSTNAME_SELECTED], 0, name); + + gdm_dbus_xdmcp_chooser_slave_emit_hostname_selected (slave->priv->skeleton, + name); } static void @@ -316,12 +317,32 @@ gdm_xdmcp_chooser_slave_stop (GdmSlave *slave) return TRUE; } +static GObject * +gdm_xdmcp_chooser_slave_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GdmXdmcpChooserSlave *slave; + + slave = GDM_XDMCP_CHOOSER_SLAVE (G_OBJECT_CLASS (gdm_xdmcp_chooser_slave_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); + + slave->priv->skeleton = GDM_DBUS_XDMCP_CHOOSER_SLAVE (gdm_dbus_xdmcp_chooser_slave_skeleton_new ()); + gdm_slave_export_interface (GDM_SLAVE (slave), + G_DBUS_INTERFACE_SKELETON (slave->priv->skeleton)); + + return G_OBJECT (slave); +} + + static void gdm_xdmcp_chooser_slave_class_init (GdmXdmcpChooserSlaveClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GdmSlaveClass *slave_class = GDM_SLAVE_CLASS (klass); + object_class->constructor = gdm_xdmcp_chooser_slave_constructor; object_class->finalize = gdm_xdmcp_chooser_slave_finalize; slave_class->start = gdm_xdmcp_chooser_slave_start; diff --git a/daemon/gdm-xdmcp-display.h b/daemon/gdm-xdmcp-display.h index db9b4014..8802a868 100644 --- a/daemon/gdm-xdmcp-display.h +++ b/daemon/gdm-xdmcp-display.h @@ -25,7 +25,6 @@ #include <sys/types.h> #include <sys/socket.h> #include <glib-object.h> -#include <dbus/dbus-glib.h> #include "gdm-display.h" #include "gdm-address.h" diff --git a/daemon/gdm-xdmcp-greeter-display.c b/daemon/gdm-xdmcp-greeter-display.c index e836ddae..ad7ea75f 100644 --- a/daemon/gdm-xdmcp-greeter-display.c +++ b/daemon/gdm-xdmcp-greeter-display.c @@ -37,7 +37,7 @@ #include "gdm-xdmcp-display.h" #include "gdm-xdmcp-greeter-display.h" -#include "gdm-xdmcp-greeter-display-glue.h" +#include "gdm-xdmcp-display-glue.h" #include "gdm-common.h" #include "gdm-address.h" @@ -46,6 +46,7 @@ struct GdmXdmcpGreeterDisplayPrivate { + GdmDBusXdmcpDisplay *skeleton; GdmAddress *remote_address; gint32 session_number; }; @@ -63,18 +64,36 @@ static gboolean gdm_xdmcp_greeter_display_finish (GdmDisplay *display); G_DEFINE_TYPE (GdmXdmcpGreeterDisplay, gdm_xdmcp_greeter_display, GDM_TYPE_XDMCP_DISPLAY) +static GObject * +gdm_xdmcp_greeter_display_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GdmXdmcpGreeterDisplay *display; + + display = GDM_XDMCP_GREETER_DISPLAY (G_OBJECT_CLASS (gdm_xdmcp_greeter_display_parent_class)->constructor (type, + n_construct_properties, + construct_properties)); + + display->priv->skeleton = GDM_DBUS_XDMCP_DISPLAY (gdm_dbus_xdmcp_display_skeleton_new ()); + + g_dbus_object_skeleton_add_interface (gdm_display_get_object_skeleton (GDM_DISPLAY (display)), + G_DBUS_INTERFACE_SKELETON (display->priv->skeleton)); + + return G_OBJECT (display); +} + static void gdm_xdmcp_greeter_display_class_init (GdmXdmcpGreeterDisplayClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass); + object_class->constructor = gdm_xdmcp_greeter_display_constructor; object_class->finalize = gdm_xdmcp_greeter_display_finalize; display_class->finish = gdm_xdmcp_greeter_display_finish; g_type_class_add_private (klass, sizeof (GdmXdmcpGreeterDisplayPrivate)); - - dbus_g_object_type_install_info (GDM_TYPE_XDMCP_GREETER_DISPLAY, &dbus_glib_gdm_xdmcp_greeter_display_object_info); } static void @@ -96,6 +115,8 @@ gdm_xdmcp_greeter_display_finalize (GObject *object) g_return_if_fail (xdmcp_greeter_display->priv != NULL); + g_clear_object (&xdmcp_greeter_display->priv->skeleton); + G_OBJECT_CLASS (gdm_xdmcp_greeter_display_parent_class)->finalize (object); } diff --git a/daemon/gdm-xdmcp-greeter-display.h b/daemon/gdm-xdmcp-greeter-display.h index c4c82a50..b99cd994 100644 --- a/daemon/gdm-xdmcp-greeter-display.h +++ b/daemon/gdm-xdmcp-greeter-display.h @@ -24,7 +24,6 @@ #include <sys/types.h> #include <sys/socket.h> #include <glib-object.h> -#include <dbus/dbus-glib.h> #include "gdm-xdmcp-display.h" #include "gdm-address.h" diff --git a/daemon/session-worker-main.c b/daemon/session-worker-main.c index 42fcd527..94496b5d 100644 --- a/daemon/session-worker-main.c +++ b/daemon/session-worker-main.c @@ -35,10 +35,6 @@ #include <glib/gi18n.h> #include <glib-object.h> -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> - #include "gdm-signal-handler.h" #include "gdm-common.h" #include "gdm-log.h" diff --git a/daemon/xdmcp-chooser-slave-main.c b/daemon/xdmcp-chooser-slave-main.c index ea542109..b12fa6ab 100644 --- a/daemon/xdmcp-chooser-slave-main.c +++ b/daemon/xdmcp-chooser-slave-main.c @@ -34,10 +34,7 @@ #include <glib.h> #include <glib/gi18n.h> #include <glib-object.h> - -#define DBUS_API_SUBJECT_TO_CHANGE -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> +#include <gio/gio.h> #include "gdm-xerrors.h" #include "gdm-signal-handler.h" @@ -52,24 +49,21 @@ static GdmSettings *settings = NULL; static int gdm_return_code = 0; -static DBusGConnection * +static GDBusConnection * get_system_bus (void) { GError *error; - DBusGConnection *bus; - DBusConnection *connection; + GDBusConnection *bus; error = NULL; - bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); if (bus == NULL) { - g_warning ("Couldn't connect to system bus: %s", - error->message); + g_warning ("Couldn't connect to system bus: %s", error->message); g_error_free (error); goto out; } - connection = dbus_g_connection_get_connection (bus); - dbus_connection_set_exit_on_disconnect (connection, FALSE); + g_dbus_connection_set_exit_on_close (bus, FALSE); out: return bus; @@ -176,7 +170,7 @@ main (int argc, { GMainLoop *main_loop; GOptionContext *context; - DBusGConnection *connection; + GDBusConnection *connection; GdmSlave *slave; static char *display_id = NULL; GdmSignalHandler *signal_handler; |