X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=checkalias.c;h=1e1d16339fe033fc082154c494d78f15b830e512;hb=da62b17f726ff48fd1e166dd7e62ca2c4b7f5663;hp=1f0495b9b3d8aea8830ab9fae01ef55476355ea7;hpb=c37b5d80dcbc0b30427ac7671b9eccd8856b1579;p=~andy%2Ffetchmail diff --git a/checkalias.c b/checkalias.c index 1f0495b9..1e1d1633 100644 --- a/checkalias.c +++ b/checkalias.c @@ -28,6 +28,7 @@ typedef unsigned char address_t[sizeof (struct in_addr)]; +#ifdef HAVE_RES_SEARCH static int getaddresses(struct addrinfo **result, const char *name) { struct addrinfo hints; @@ -36,7 +37,7 @@ static int getaddresses(struct addrinfo **result, const char *name) hints.ai_socktype=SOCK_STREAM; hints.ai_protocol=PF_UNSPEC; hints.ai_family=AF_UNSPEC; - return getaddrinfo(name, NULL, &hints, result); + return fm_getaddrinfo(name, NULL, &hints, result); } /* XXX FIXME: doesn't detect if an IPv6-mapped IPv4 address @@ -77,20 +78,23 @@ static int is_ip_alias(const char *name1,const char *name2) found: if (res2) - freeaddrinfo(res2); + fm_freeaddrinfo(res2); if (res1) - freeaddrinfo(res1); + fm_freeaddrinfo(res1); return rc; } +#endif int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) /* determine whether name is a DNS alias of the mailserver for this query */ { +#ifdef HAVE_RES_SEARCH struct mxentry *mxp, *mxrecords; - struct idlist *idl; - size_t namelen; int e; struct addrinfo hints, *res_st; +#endif + struct idlist *idl; + size_t namelen; struct hostdata *lead_server = ctl->server.lead_server ? ctl->server.lead_server : &ctl->server; @@ -125,7 +129,7 @@ int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) namelen = strlen(name); for (idl = lead_server->akalist; idl; idl = idl->next) { - char *ep; + const char *ep; /* * Test is >= here because str_in_list() should have caught the @@ -134,7 +138,7 @@ int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) */ if (strlen(idl->id) >= namelen) continue; - ep = (char *)name + (namelen - strlen(idl->id)); + ep = name + (namelen - strlen(idl->id)); /* a suffix led by . must match */ if (ep[-1] == '.' && !strcasecmp(ep, idl->id)) return(TRUE); @@ -143,6 +147,7 @@ int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) if (!ctl->server.dns) return(FALSE); #ifndef HAVE_RES_SEARCH + (void)res; return(FALSE); #else /* @@ -160,16 +165,16 @@ int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) hints.ai_socktype=SOCK_STREAM; hints.ai_flags=AI_CANONNAME; - e = getaddrinfo(name, NULL, &hints, res); + e = fm_getaddrinfo(name, NULL, &hints, res); if (e == 0) { int rr = (strcasecmp(ctl->server.truename, (*res)->ai_canonname) == 0); - freeaddrinfo(*res); *res = NULL; + fm_freeaddrinfo(*res); *res = NULL; if (rr) goto match; - else if (ctl->server.checkalias && 0 == getaddrinfo(ctl->server.truename, NULL, &hints, &res_st)) + else if (ctl->server.checkalias && 0 == fm_getaddrinfo(ctl->server.truename, NULL, &hints, &res_st)) { - freeaddrinfo(res_st); + fm_freeaddrinfo(res_st); if (outlevel >= O_DEBUG) report(stdout, GT_("Checking if %s is really the same node as %s\n"),ctl->server.truename,name); if (is_ip_alias(ctl->server.truename,name) == TRUE) @@ -189,6 +194,15 @@ int is_host_alias(const char *name, struct query *ctl, struct addrinfo **res) switch (e) { case EAI_NONAME: /* specified host is unknown */ +#ifdef EAI_NODATA + /* EAI_NODATA was in the older RFC-2553, but that got + * obsoleted by RFC-3493 - there, EAI_NODATA is no longer + * valid, and modern operating systems no longer issue this + * error code. libesmtp/getaddrinfo.?, however, still does. + * (This was reported to Brian Stafford 2013-02-03.) + */ + case EAI_NODATA: /* specified host is unknown */ +#endif break; default: