summaryrefslogtreecommitdiff
path: root/daemon/gdm-xdmcp-display.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-07-25 22:45:28 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2007-07-25 22:45:28 +0000
commitcab659a1278bd000f116a41a4321159f720b0d2a (patch)
tree1d253e9756d9ba8a1d80d745e3bd2fa10dab18d5 /daemon/gdm-xdmcp-display.c
parent466d7376ec05b05e82efb5c359006cfb225cf653 (diff)
downloadgdm-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.c65
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,