(find_auth_cookie, match_local_auth): re-write to use getaddrinfo

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7496 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-12-04 18:04:50 +00:00
parent c33ef3747d
commit 69c0957e94

View File

@@ -564,7 +564,7 @@ fail:
*/ */
static int static int
match_local_auth (Xauth* auth, struct hostent *disp_he, int disp_nr) match_local_auth (Xauth* auth, struct addrinfo *ai, int disp_nr)
{ {
int auth_disp; int auth_disp;
char *tmp_disp; char *tmp_disp;
@@ -578,16 +578,8 @@ match_local_auth (Xauth* auth, struct hostent *disp_he, int disp_nr)
return 1; return 1;
if (auth->family == FamilyLocal if (auth->family == FamilyLocal
|| auth->family == FamilyWild) { || auth->family == FamilyWild) {
int i;
if (strncmp (auth->address, if (strncmp (auth->address,
disp_he->h_name, ai->ai_canonname,
auth->address_length) == 0)
return 0;
for (i = 0; disp_he->h_aliases[i] != NULL; ++i)
if (strncmp (auth->address,
disp_he->h_aliases[i],
auth->address_length) == 0) auth->address_length) == 0)
return 0; return 0;
} }
@@ -605,8 +597,10 @@ find_auth_cookie (FILE *f)
char local_hostname[MaxHostNameLen]; char local_hostname[MaxHostNameLen];
char *display = getenv("DISPLAY"); char *display = getenv("DISPLAY");
char *colon; char *colon;
struct hostent *display_he; struct addrinfo *ai;
struct addrinfo hints;
int disp; int disp;
int error;
if (display == NULL) if (display == NULL)
display = ":0"; display = ":0";
@@ -623,16 +617,24 @@ find_auth_cookie (FILE *f)
gethostname (local_hostname, sizeof(local_hostname)); gethostname (local_hostname, sizeof(local_hostname));
display = local_hostname; display = local_hostname;
} }
display_he = gethostbyname (display); memset (&hints, 0, sizeof(hints));
if (display_he == NULL) { hints.ai_flags = AI_CANONNAME;
warnx ("gethostbyname %s: %s", display, hstrerror(h_errno)); hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
error = getaddrinfo (display, NULL, &hints, &ai);
if (error) {
warnx ("getaddrinfo %s: %s", display, gai_strerror(error));
return NULL; return NULL;
} }
for (; (ret = XauReadAuth (f)) != NULL; XauDisposeAuth(ret)) { for (; (ret = XauReadAuth (f)) != NULL; XauDisposeAuth(ret)) {
if (match_local_auth (ret, display_he, disp) == 0) if (match_local_auth (ret, ai, disp) == 0) {
freeaddrinfo (ai);
return ret; return ret;
} }
}
freeaddrinfo (ai);
return NULL; return NULL;
} }