Changeset View
Changeset View
Standalone View
Standalone View
gnupg-2.0.16/common/pka.c
Context not available. | |||||
return buffer; | return buffer; | ||||
#else /*!USE_ADNS*/ | #else /*!USE_ADNS*/ | ||||
unsigned char answer[PACKETSZ]; | union | ||||
{ | |||||
signed char p[PACKETSZ]; | |||||
HEADER h; | |||||
} answer; | |||||
int anslen; | int anslen; | ||||
int qdcount, ancount, nscount, arcount; | int qdcount, ancount, nscount, arcount; | ||||
int rc; | int rc; | ||||
Context not available. | |||||
memcpy (name, address, domain - address); | memcpy (name, address, domain - address); | ||||
strcpy (stpcpy (name + (domain-address), "._pka."), domain+1); | strcpy (stpcpy (name + (domain-address), "._pka."), domain+1); | ||||
anslen = res_query (name, C_IN, T_TXT, answer, PACKETSZ); | anslen = res_query (name, C_IN, T_TXT, answer.p, PACKETSZ); | ||||
xfree (name); | xfree (name); | ||||
if (anslen < sizeof(HEADER)) | if (anslen < sizeof(HEADER)) | ||||
return NULL; /* DNS resolver returned a too short answer. */ | return NULL; /* DNS resolver returned a too short answer. */ | ||||
if ( (rc=((HEADER*)answer)->rcode) != NOERROR ) | if ( (rc=answer.h.rcode) != NOERROR ) | ||||
return NULL; /* DNS resolver returned an error. */ | return NULL; /* DNS resolver returned an error. */ | ||||
/* We assume that PACKETSZ is large enough and don't do dynmically | /* We assume that PACKETSZ is large enough and don't do dynmically | ||||
Context not available. | |||||
if (anslen > PACKETSZ) | if (anslen > PACKETSZ) | ||||
return NULL; /* DNS resolver returned a too long answer */ | return NULL; /* DNS resolver returned a too long answer */ | ||||
qdcount = ntohs (((HEADER*)answer)->qdcount); | qdcount = ntohs (answer.h.qdcount); | ||||
ancount = ntohs (((HEADER*)answer)->ancount); | ancount = ntohs (answer.h.ancount); | ||||
nscount = ntohs (((HEADER*)answer)->nscount); | nscount = ntohs (answer.h.nscount); | ||||
arcount = ntohs (((HEADER*)answer)->arcount); | arcount = ntohs (answer.h.arcount); | ||||
if (!ancount) | if (!ancount) | ||||
return NULL; /* Got no answer. */ | return NULL; /* Got no answer. */ | ||||
p = answer + sizeof (HEADER); | p = answer.p + sizeof (HEADER); | ||||
pend = answer + anslen; /* Actually points directly behind the buffer. */ | pend = answer.p + anslen; /* Actually points directly behind the buffer. */ | ||||
while (qdcount-- && p < pend) | while (qdcount-- && p < pend) | ||||
{ | { | ||||
Context not available. |