Your message dated Thu, 6 Nov 2025 18:23:43 -0500
with message-id 
<caaajcmyisu8nkqxma6xp8q0cdypipa9j2xhxdr1stczqo6-...@mail.gmail.com>
and subject line closing old gdm3 bugs
has caused the Debian Bug report #692579,
regarding xdmcp: use FamilyInternet instead of FamilyWild
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
692579: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692579
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: xauth
Version: 1:1.0.4-1
Severity: normal
Tags: upstream patch


When using GDM via XDMCP, for examle when accessing GDM via
vncserver->XDMCP->localhost, ssh is no longer able to forward X11.

        Invalid MIT-MAGIC-COOKIE-1 keyxterm Xt error: Can't open display:
        localhost:10.0

The problem is, that xauth is unable to deal with the Family "FamilyWild" which
is used by GDM in XDMCP to store the MIT-MAGIC-COOKIE-1 for the user.

Attached are two patches, one for 1.0.4-1 and one for 1.0.7-1. The original
Patch is by Dr. Tilmann Bubeck.

Upstream Bug is at

        https://bugs.freedesktop.org/show_bug.cgi?id=43425

FWIW, Redhat also has a bug for this:

        https://bugzilla.redhat.com/show_bug.cgi?id=505545

-- System Information:
Debian Release: 6.0.6
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-xen-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages xauth depends on:
ii  libc6                         2.11.3-4   Embedded GNU C Library: Shared lib
ii  libx11-6                      2:1.3.3-4  X11 client-side library
ii  libxau6                       1:1.0.6-1  X11 authorisation library
ii  libxext6                      2:1.1.2-1  X11 miscellaneous extension librar
ii  libxmuu1                      2:1.0.5-2  X11 miscellaneous micro-utility li

xauth recommends no packages.

xauth suggests no packages.

-- no debconf information
>From 5da21eaf6ec6537c3aab23adbebd617050e0c2c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20V=C3=B6lkel?= <[email protected]>
Date: Wed, 8 Aug 2012 14:13:08 +0200
Subject: [PATCH] improve to handle FamilyWild necessary for GDM/XDMCP/SSH #43425

---
 process.c |   76 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 67 insertions(+), 9 deletions(-)

diff --git a/process.c b/process.c
index 893b51d..5a3984c 100644
--- a/process.c
+++ b/process.c
@@ -465,8 +465,11 @@ read_auth_entries(FILE *fp, Bool numeric, AuthList 
**headp, AuthList **tailp)
     return n;
 }
 
-static Bool 
-get_displayname_auth(char *displayname, AuthList **authl)
+/**
+ * Parse the given displayname and build a corresponding AuthList.
+ */
+static Bool
+get_displayname_auth(const char *displayname, AuthList **authl)
 {
     int family;
     char *host = NULL, *rest = NULL;
@@ -997,6 +1000,9 @@ dump_entry(char *inputfilename, int lineno, Xauth *auth, 
char *data)
            fwrite (auth->address, sizeof (char), auth->address_length, fp);
            fprintf (fp, "/unix");
            break;
+         case FamilyWild:
+           fwrite (auth->address, sizeof (char), auth->address_length, fp);
+           break;
          case FamilyInternet:
 #if defined(IPv6) && defined(AF_INET6)
          case FamilyInternet6:
@@ -1079,6 +1085,49 @@ match_auth_dpy(register Xauth *a, register Xauth *b)
             memcmp(a->number, b->number, a->number_length) == 0) ? 1 : 0);
 }
 
+static int
+match_authwild_dpy(register Xauth *a, const char *displayname)
+{
+    int family;
+    char *host = NULL, *rest = NULL;
+    int dpynum, scrnum;
+    char dpynumbuf[40];                        /* want to hold largest display 
num */
+
+    if ( a->family != FamilyWild )
+       return False;
+
+    if (!parse_displayname (displayname,
+                           &family, &host, &dpynum, &scrnum, &rest)) {
+       free(host);
+       free(rest);
+
+       return False;
+    }
+
+    dpynumbuf[0] = '\0';
+    sprintf (dpynumbuf, "%d", dpynum);
+
+    if (a->address_length != strlen(host) || a->number_length != 
strlen(dpynumbuf)) {
+       free(host);
+       free(rest);
+
+        return False;
+    }
+
+    if (memcmp(a->address, host, a->address_length) == 0 &&
+        memcmp(a->number, dpynumbuf, a->number_length) == 0) {
+       free(host);
+       free(rest);
+
+        return True;
+    } else {
+       free(host);
+       free(rest);
+
+        return False;
+   }
+}
+
 /* return non-zero iff display and authorization type are the same */
 
 static int 
@@ -1242,13 +1291,22 @@ iterdpy (char *inputfilename, int lineno, int start,
            /* l may be freed by remove_entry below. so save its contents */
            next = l->next;
            tmp_auth = copyAuth(l->auth);
-           for (proto = proto_head; proto; proto = proto->next) {
-               if (match_auth_dpy (proto->auth, tmp_auth)) {
-                   matched = True;
-                   if (yfunc) {
-                       status = (*yfunc) (inputfilename, lineno,
-                                          tmp_auth, data);
-                       if (status < 0) break;
+
+           if ( match_authwild_dpy(tmp_auth, displayname) ) {
+               matched = True;
+               if (yfunc) {
+                   status = (*yfunc) (inputfilename, lineno,
+                                      tmp_auth, data);
+               }
+           } else {
+               for (proto = proto_head; proto; proto = proto->next) {
+                   if (match_auth_dpy (proto->auth, tmp_auth)) {
+                       matched = True;
+                       if (yfunc) {
+                           status = (*yfunc) (inputfilename, lineno,
+                                              tmp_auth, data);
+                           if (status < 0) break;
+                       }
                    }
                }
            }
-- 
1.7.2.5

>From 1c84f163fd3dcdcb8b1193cc2debe08addf38551 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20V=C3=B6lkel?= <[email protected]>
Date: Wed, 8 Aug 2012 14:13:08 +0200
Subject: [PATCH] improve to handle FamilyWild necessary for GDM/XDMCP/SSH #43425

---
 process.c |   72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 7 deletions(-)

diff --git a/process.c b/process.c
index 283b4a1..03ea366 100644
--- a/process.c
+++ b/process.c
@@ -462,6 +462,9 @@ read_auth_entries(FILE *fp, Bool numeric, AuthList **headp, 
AuthList **tailp)
     return n;
 }
 
+/**
+ * Parse the given displayname and build a corresponding AuthList.
+ */
 static Bool
 get_displayname_auth(const char *displayname, AuthList **authl)
 {
@@ -991,6 +994,9 @@ dump_entry(const char *inputfilename, int lineno, Xauth 
*auth, char *data)
            fwrite (auth->address, sizeof (char), auth->address_length, fp);
            fprintf (fp, "/unix");
            break;
+         case FamilyWild:
+           fwrite (auth->address, sizeof (char), auth->address_length, fp);
+           break;
          case FamilyInternet:
 #if defined(IPv6) && defined(AF_INET6)
          case FamilyInternet6:
@@ -1073,6 +1079,49 @@ match_auth_dpy(register Xauth *a, register Xauth *b)
             memcmp(a->number, b->number, a->number_length) == 0) ? 1 : 0);
 }
 
+static int
+match_authwild_dpy(register Xauth *a, const char *displayname)
+{
+    int family;
+    char *host = NULL, *rest = NULL;
+    int dpynum, scrnum;
+    char dpynumbuf[40];                        /* want to hold largest display 
num */
+
+    if ( a->family != FamilyWild )
+       return False;
+
+    if (!parse_displayname (displayname,
+                           &family, &host, &dpynum, &scrnum, &rest)) {
+       free(host);
+       free(rest);
+
+       return False;
+    }
+
+    dpynumbuf[0] = '\0';
+    sprintf (dpynumbuf, "%d", dpynum);
+
+    if (a->address_length != strlen(host) || a->number_length != 
strlen(dpynumbuf)) {
+       free(host);
+       free(rest);
+
+        return False;
+    }
+
+    if (memcmp(a->address, host, a->address_length) == 0 &&
+        memcmp(a->number, dpynumbuf, a->number_length) == 0) {
+       free(host);
+       free(rest);
+
+        return True;
+    } else {
+       free(host);
+       free(rest);
+
+        return False;
+   }
+}
+
 /* return non-zero iff display and authorization type are the same */
 
 static int
@@ -1236,13 +1285,22 @@ iterdpy (const char *inputfilename, int lineno, int 
start,
            /* l may be freed by remove_entry below. so save its contents */
            next = l->next;
            tmp_auth = copyAuth(l->auth);
-           for (proto = proto_head; proto; proto = proto->next) {
-               if (match_auth_dpy (proto->auth, tmp_auth)) {
-                   matched = True;
-                   if (yfunc) {
-                       status = (*yfunc) (inputfilename, lineno,
-                                          tmp_auth, data);
-                       if (status < 0) break;
+
+           if ( match_authwild_dpy(tmp_auth, displayname) ) {
+               matched = True;
+               if (yfunc) {
+                   status = (*yfunc) (inputfilename, lineno,
+                                      tmp_auth, data);
+               }
+           } else {
+               for (proto = proto_head; proto; proto = proto->next) {
+                   if (match_auth_dpy (proto->auth, tmp_auth)) {
+                       matched = True;
+                       if (yfunc) {
+                           status = (*yfunc) (inputfilename, lineno,
+                                              tmp_auth, data);
+                           if (status < 0) break;
+                       }
                    }
                }
            }
-- 
1.7.2.5


--- End Message ---
--- Begin Message ---
There have been many changes to Debian since this bug was originally
reported. If you are still experiencing this issue with Debian 13 (or
with Debian 12 or Testing or Unstable), please report a new bug.

Thank you,
Jeremy BĂ­cha

--- End Message ---

Reply via email to