summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author5 <mkp@mkp.net>1999-08-14 22:49:15 +0000
committerMartin Peterson <mkp@src.gnome.org>1999-08-14 22:49:15 +0000
commitbbe7d0e90e89374a78b5bc1cf3f95a73af647aa8 (patch)
tree0cd48f888d61a747434d5355c2fca7b7663731af
parenta7bb22a0ca6f3c9403dac59ce0e2f8a475935b00 (diff)
downloadgdm-bbe7d0e90e89374a78b5bc1cf3f95a73af647aa8.tar.gz
Fixed cookie problems for local displays.
1999-08-15 <mkp@mkp.net> * daemon/auth.c: Fixed cookie problems for local displays. * daemon/gdm.c (gdm_display_dispose): Free Xauth. 1999-08-14 <mkp@mkp.net> * gui/gdmlogin.c: Fixed a few gtk_widget_set_sensitive(NULL) occurrences.
-rw-r--r--ChangeLog11
-rw-r--r--daemon/auth.c32
-rw-r--r--daemon/gdm.c8
-rw-r--r--daemon/gdm.h14
-rw-r--r--daemon/slave.c2
-rw-r--r--daemon/xdmcp.c3
-rw-r--r--gui/gdmlogin.c8
7 files changed, 68 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 301e6ba8..fcb14806 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+1999-08-15 <mkp@mkp.net>
+
+ * daemon/auth.c: Fixed cookie problems for local displays.
+
+ * daemon/gdm.c (gdm_display_dispose): Free Xauth.
+
+1999-08-14 <mkp@mkp.net>
+
+ * gui/gdmlogin.c: Fixed a few gtk_widget_set_sensitive(NULL)
+ occurrences.
+
1999-08-11 <mkp@mkp.net>
* daemon/auth.c: Nailed down the bug that has been haunting me the
diff --git a/daemon/auth.c b/daemon/auth.c
index 5f8caca1..38255fcb 100644
--- a/daemon/auth.c
+++ b/daemon/auth.c
@@ -80,6 +80,28 @@ gdm_auth_secure_display (GdmDisplay *d)
if (!af)
return (FALSE);
+ /* If this is a local display the struct hasn't changed and we
+ * have to clean up old authentication cookies before baking new
+ * ones
+ */
+ if (d->type == DISPLAY_LOCAL && d->auths) {
+ GSList *alist = d->auths;
+
+ while (alist && alist->data) {
+ XauDisposeAuth ((Xauth *) alist->data);
+ alist = alist->next;
+ }
+
+ g_slist_free (d->auths);
+ d->auths = NULL;
+
+ if (d->cookie)
+ g_free (d->cookie);
+
+ if (d->bcookie)
+ g_free (d->bcookie);
+ }
+
gdm_cookie_generate (d);
/* FQDN or IP of display host */
@@ -100,13 +122,13 @@ gdm_auth_secure_display (GdmDisplay *d)
return (FALSE);
xa->family = FamilyLocal;
- xa->address = d->hostname;
+ xa->address = strdup (d->hostname);
xa->address_length = strlen (d->hostname);
xa->number = g_strdup_printf ("%d", d->dispnum);
xa->number_length = 1;
- xa->name = "MIT-MAGIC-COOKIE-1";
+ xa->name = strdup ("MIT-MAGIC-COOKIE-1");
xa->name_length = 18;
- xa->data = d->bcookie;
+ xa->data = strdup (d->bcookie);
xa->data_length = strlen (d->bcookie);
XauWriteAuth (af, xa);
d->auths = g_slist_append (d->auths, xa);
@@ -138,9 +160,9 @@ gdm_auth_secure_display (GdmDisplay *d)
xa->address_length = 4;
xa->number = g_strdup_printf ("%d", d->dispnum);
xa->number_length = 1;
- xa->name = "MIT-MAGIC-COOKIE-1";
+ xa->name = strdup ("MIT-MAGIC-COOKIE-1");
xa->name_length = 18;
- xa->data = d->bcookie;
+ xa->data = strdup (d->bcookie);
xa->data_length = strlen (d->bcookie);
XauWriteAuth (af, xa);
diff --git a/daemon/gdm.c b/daemon/gdm.c
index 702c7ae5..861e03cf 100644
--- a/daemon/gdm.c
+++ b/daemon/gdm.c
@@ -87,6 +87,9 @@ gint GdmMaxPending;
gint GdmMaxManageWait;
gint GdmMaxSessions;
gint GdmPort;
+gint GdmIndirect;
+gint GdmMaxIndirect;
+gint GdmMaxIndirectWait;
gint GdmDebug;
gint GdmVerboseAuth;
gint GdmAllowRoot;
@@ -125,7 +128,7 @@ gdm_display_dispose (GdmDisplay *d)
tmpauth = d->auths;
while (tmpauth && tmpauth->data) {
- /* XauDisposeAuth ((Xauth *) tmpauth->data); */
+ XauDisposeAuth ((Xauth *) tmpauth->data);
tmpauth = tmpauth->next;
}
@@ -195,6 +198,9 @@ gdm_config_parse (void)
GdmMaxManageWait = gnome_config_get_int (GDM_KEY_MAXWAIT);
GdmMaxSessions = gnome_config_get_int (GDM_KEY_MAXSESS);
GdmPort = gnome_config_get_int (GDM_KEY_UDPPORT);
+ GdmIndirect = gnome_config_get_int (GDM_KEY_INDIRECT);
+ GdmMaxIndirect = gnome_config_get_int (GDM_KEY_MAXINDIR);
+ GdmMaxIndirectWait = gnome_config_get_int (GDM_KEY_MAXINDWAIT);
GdmDebug = gnome_config_get_int (GDM_KEY_DEBUG);
diff --git a/daemon/gdm.h b/daemon/gdm.h
index 37bcce35..bc6c30f9 100644
--- a/daemon/gdm.h
+++ b/daemon/gdm.h
@@ -19,6 +19,9 @@
#ifndef __GDM_H__
#define __GDM_H__
+#include <X11/Xmd.h>
+#include <X11/Xdmcp.h>
+
#define DISPLAY_LOCAL 1 /* Local X server */
#define DISPLAY_XDMCP 2 /* Remote display */
@@ -92,6 +95,9 @@
#define GDM_KEY_MAXSESS "xdmcp/MaxSessions=16"
#define GDM_KEY_MAXWAIT "xdmcp/MaxWait=30"
#define GDM_KEY_UDPPORT "xdmcp/Port=177"
+#define GDM_KEY_INDIRECT "xdmcp/HonorIndirect=1"
+#define GDM_KEY_MAXINDIR "xdmcp/MaxPendingIndirect=4"
+#define GDM_KEY_MAXINDWAIT "xdmcp/MaxWaitIndirect=30"
#define GDM_KEY_GTKRC "gui/GtkRC="
#define GDM_KEY_ICONWIDTH "gui/MaxIconWidth=128"
@@ -149,6 +155,14 @@ struct _GdmDisplay {
time_t acctime;
};
+
+typedef struct _GdmIndirectHost GdmIndirectHost;
+
+struct _GdmIndirectHost {
+ ARRAY8Ptr addr;
+ time_t acctime;
+};
+
#endif /* __GDM_H__ */
/* EOF */
diff --git a/daemon/slave.c b/daemon/slave.c
index bb2eb85e..ccad2690 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -260,7 +260,7 @@ gdm_slave_greeter (void)
sigaddset (&mask, SIGCHLD);
sigprocmask (SIG_BLOCK, &mask, &omask);
- greet=FALSE;
+ greet = FALSE;
/* Kill greeter and wait for it to die */
kill (d->greetpid, SIGINT);
diff --git a/daemon/xdmcp.c b/daemon/xdmcp.c
index 79672cef..dfd14d2e 100644
--- a/daemon/xdmcp.c
+++ b/daemon/xdmcp.c
@@ -91,7 +91,7 @@ gint deny_severity = LOG_WARNING;
gint xdmcpfd;
gint globsessid;
-gint pending=0;
+gint pending = 0;
static gchar *sysid;
static ARRAY8 servhost;
static XdmcpBuffer buf;
@@ -105,6 +105,7 @@ extern gint GdmMaxPending; /* only accept this number of pending sessions */
extern gint GdmMaxManageWait; /* Dispose sessions not responding with MANAGE after 10 secs */
extern gint GdmMaxSessions; /* Maximum number of remote sessions */
extern gint GdmPort; /* UDP port number */
+extern gint GdmIndirect; /* Honor XDMCP_INDIRECT, i.e. choosing */
/*
* We don't support XDM-AUTHENTICATION-1 and XDM-AUTHORIZATION-1.
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c
index eb9c1537..c640107f 100644
--- a/gui/gdmlogin.c
+++ b/gui/gdmlogin.c
@@ -587,7 +587,9 @@ gdm_login_entry_handler (GtkWidget *widget, GdkEventKey *event)
case GDK_Return:
gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (browser), FALSE);
+
+ if (GdmBrowser)
+ gtk_widget_set_sensitive (GTK_WIDGET (browser), FALSE);
/* Save login. I'm making the assumption that login is always
* the first thing entered. This might not be true for all PAM
@@ -911,7 +913,9 @@ gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd)
}
gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (browser), TRUE);
+
+ if (GdmBrowser)
+ gtk_widget_set_sensitive (GTK_WIDGET (browser), TRUE);
g_print ("\n");
break;