--- xorg-server-1.3.0.0/os/access.c.bak 2007-08-25 22:54:32.324544000 +0300 +++ xorg-server-1.3.0.0/os/access.c 2007-08-26 03:08:26.409496484 +0300 @@ -286,6 +286,13 @@ EnableLocalHost (void) { if (!UsingXdmcp) { + HOST *hosttmp; + + for (hosttmp = validhosts; hosttmp; hosttmp = hosttmp->next) + { + if ((hosttmp->family == FamilyServerInterpreted)) + return; + } LocalHostEnabled = TRUE; AddLocalHosts (); } @@ -1273,9 +1280,16 @@ ResetHosts (char *display) if (family == FamilyServerInterpreted) { - len = siCheckAddr(hostname, hostlen); - if (len >= 0) { - NewHost(family, hostname, len, FALSE); + char *delim; + + delim = strchr(hostname, ':'); + if (delim) { + *delim = '\0'; + len = siCheckAddr(hostname, hostlen); + *delim = ':'; + if (len >= 0) { + NewHost(family, hostname, hostlen, FALSE); + } } } else @@ -1809,8 +1823,9 @@ InvalidHost ( pointer addr; register HOST *selfhost, *host; - if (!AccessEnabled) /* just let them in */ - return(0); + if (!AccessEnabled) /* just let them in */ + return(0); + family = ConvertAddr (saddr, &len, (pointer *)&addr); if (family == -1) return 1; @@ -1841,7 +1856,7 @@ InvalidHost ( return (0); } } else { - if (addrEqual (family, addr, len, host)) + if (addrEqual (family, addr, len, host)) return (0); } @@ -2003,8 +2018,11 @@ siAddrMatch(int family, pointer addr, in Bool matches = FALSE; struct siType *s; const char *valueString; - int addrlen; + int addrlen = 0; + char *delim; + delim = memchr(host->addr, ':', host->len); + if (delim) *delim = '\0'; valueString = (const char *) memchr(host->addr, '\0', host->len); if (valueString != NULL) { for (s = siTypeList; s != NULL ; s = s->next) {