diff options
author | William Jon McCann <mccann@jhu.edu> | 2007-07-25 22:45:28 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2007-07-25 22:45:28 +0000 |
commit | cab659a1278bd000f116a41a4321159f720b0d2a (patch) | |
tree | 1d253e9756d9ba8a1d80d745e3bd2fa10dab18d5 /daemon/gdm-xdmcp-display.c | |
parent | 466d7376ec05b05e82efb5c359006cfb225cf653 (diff) | |
download | gdm-cab659a1278bd000f116a41a4321159f720b0d2a.tar.gz |
Make XDMCP logins work.
2007-07-25 William Jon McCann <mccann@jhu.edu>
* common/gdm-address.c: (gdm_address_get_hostname),
(gdm_address_get_numeric_info), (address_family_str),
(gdm_address_debug):
* common/gdm-address.h:
* daemon/Makefile.am:
* daemon/auth.c: (gdm_auth_add_entry),
(gdm_auth_add_entry_for_display), (gdm_auth_user_add):
* daemon/auth.h:
* daemon/gdm-ck-session.c: (unlock_ck_session):
* daemon/gdm-display.c: (gdm_display_real_add_user_authorization),
(gdm_display_add_user_authorization),
(gdm_display_real_remove_user_authorization),
(gdm_display_remove_user_authorization),
(gdm_display_get_x11_display_number),
(gdm_display_get_x11_display_name),
(_gdm_display_set_x11_display_number),
(_gdm_display_set_x11_display_name), (gdm_display_set_property),
(gdm_display_get_property), (gdm_display_class_init):
* daemon/gdm-display.h:
* daemon/gdm-display.xml:
* daemon/gdm-factory-slave.c: (run_greeter):
* daemon/gdm-greeter-proxy.c: (listify_hash):
* daemon/gdm-product-display.c:
(gdm_product_display_add_user_authorization),
(gdm_product_display_remove_user_authorization),
(gdm_product_display_class_init), (gdm_product_display_new):
* daemon/gdm-simple-slave.c: (listify_hash),
(get_script_environment), (add_user_authorization),
(setup_session_environment), (run_greeter),
(gdm_simple_slave_init):
* daemon/gdm-slave.c: (gdm_slave_real_start),
(gdm_slave_add_user_authorization),
(_gdm_slave_set_display_number), (gdm_slave_set_property),
(gdm_slave_get_property), (gdm_slave_class_init):
* daemon/gdm-slave.h:
* daemon/gdm-static-display.c:
(gdm_static_display_add_user_authorization),
(gdm_static_display_remove_user_authorization),
(gdm_static_display_class_init), (gdm_static_display_new):
* daemon/gdm-static-factory-display.c:
(gdm_static_factory_display_add_user_authorization),
(gdm_static_factory_display_remove_user_authorization),
(gdm_static_factory_display_class_init),
(gdm_static_factory_display_new):
* daemon/gdm-xdmcp-display.c: (gdm_xdmcp_display_create_authority),
(gdm_xdmcp_display_add_user_authorization),
(gdm_xdmcp_display_remove_user_authorization),
(_gdm_xdmcp_display_set_remote_address),
(gdm_xdmcp_display_set_property), (gdm_xdmcp_display_class_init),
(gdm_xdmcp_display_new):
* daemon/gdm-xdmcp-manager.c: (do_bind), (gdm_xdmcp_host_allow),
(lookup_by_host), (gdm_xdmcp_send_willing),
(gdm_xdmcp_send_unwilling), (gdm_xdmcp_send_forward_query),
(gdm_forward_query_dispose), (gdm_forward_query_lookup),
(gdm_xdmcp_handle_forward_query),
(gdm_xdmcp_really_send_managed_forward),
(gdm_xdmcp_send_got_managed_forward), (remove_host),
(gdm_xdmcp_send_decline), (gdm_xdmcp_display_alloc),
(gdm_xdmcp_send_accept), (gdm_xdmcp_handle_request),
(gdm_xdmcp_handle_manage), (gdm_xdmcp_handle_managed_forward),
(gdm_xdmcp_handle_got_managed_forward),
(gdm_xdmcp_handle_keepalive), (decode_packet):
* data/gdm.conf:
* gui/simple-greeter/greeter-main.c: (main):
Make XDMCP logins work.
svn path=/branches/mccann-gobject/; revision=5086
Diffstat (limited to 'daemon/gdm-xdmcp-display.c')
-rw-r--r-- | daemon/gdm-xdmcp-display.c | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/daemon/gdm-xdmcp-display.c b/daemon/gdm-xdmcp-display.c index 18ed9019..a2faea18 100644 --- a/daemon/gdm-xdmcp-display.c +++ b/daemon/gdm-xdmcp-display.c @@ -97,8 +97,8 @@ gdm_xdmcp_display_create_authority (GdmDisplay *display) x11_display = NULL; g_object_get (display, - "x11-display", &x11_display, - "number", &display_num, + "x11-display-name", &x11_display, + "x11-display-number", &display_num, NULL); /* Create new random cookie */ @@ -119,8 +119,9 @@ gdm_xdmcp_display_create_authority (GdmDisplay *display) goto out; } + g_debug ("Adding auth entry for xdmcp display:%d cookie:%s", display_num, cookie->str); authlist = NULL; - if (! gdm_auth_add_entry_for_display (display_num, cookie, &authlist, af)) { + if (! gdm_auth_add_entry_for_display (display_num, NULL, cookie, af, &authlist)) { goto out; } @@ -154,6 +155,42 @@ gdm_xdmcp_display_create_authority (GdmDisplay *display) } static gboolean +gdm_xdmcp_display_add_user_authorization (GdmDisplay *display, + const char *username, + char **filename, + GError **error) +{ + gboolean res; + char *cookie; + char *hostname; + int display_num; + + res = gdm_display_get_x11_cookie (display, &cookie, NULL); + res = gdm_display_get_x11_display_number (display, &display_num, NULL); + + hostname = NULL; + res = gdm_address_get_hostname (GDM_XDMCP_DISPLAY (display)->priv->remote_address, &hostname); + g_debug ("add user auth for xdmcp display: %s host:%s", username, hostname); + gdm_address_debug (GDM_XDMCP_DISPLAY (display)->priv->remote_address); + g_free (hostname); + + res = gdm_auth_user_add (display_num, + GDM_XDMCP_DISPLAY (display)->priv->remote_address, + username, + cookie, + filename); + return res; +} + +static gboolean +gdm_xdmcp_display_remove_user_authorization (GdmDisplay *display, + const char *username, + GError **error) +{ + return TRUE; +} + +static gboolean gdm_xdmcp_display_manage (GdmDisplay *display) { g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); @@ -174,6 +211,20 @@ gdm_xdmcp_display_unmanage (GdmDisplay *display) } static void +_gdm_xdmcp_display_set_remote_address (GdmXdmcpDisplay *display, + GdmAddress *address) +{ + if (display->priv->remote_address != NULL) { + gdm_address_free (display->priv->remote_address); + } + + g_assert (address != NULL); + + gdm_address_debug (address); + display->priv->remote_address = gdm_address_copy (address); +} + +static void gdm_xdmcp_display_set_property (GObject *object, guint prop_id, const GValue *value, @@ -185,7 +236,7 @@ gdm_xdmcp_display_set_property (GObject *object, switch (prop_id) { case PROP_REMOTE_ADDRESS: - self->priv->remote_address = g_value_get_boxed (value); + _gdm_xdmcp_display_set_remote_address (self, g_value_get_boxed (value)); break; case PROP_SESSION_NUMBER: self->priv->session_number = g_value_get_int (value); @@ -230,6 +281,8 @@ gdm_xdmcp_display_class_init (GdmXdmcpDisplayClass *klass) object_class->finalize = gdm_xdmcp_display_finalize; display_class->create_authority = gdm_xdmcp_display_create_authority; + display_class->add_user_authorization = gdm_xdmcp_display_add_user_authorization; + display_class->remove_user_authorization = gdm_xdmcp_display_remove_user_authorization; display_class->manage = gdm_xdmcp_display_manage; display_class->unmanage = gdm_xdmcp_display_unmanage; @@ -290,8 +343,8 @@ gdm_xdmcp_display_new (const char *hostname, x11_display = g_strdup_printf ("%s:%d", hostname, number); object = g_object_new (GDM_TYPE_XDMCP_DISPLAY, "remote-hostname", hostname, - "number", number, - "x11-display", x11_display, + "x11-display-number", number, + "x11-display-name", x11_display, "is-local", FALSE, "remote-address", address, "session-number", session_number, |