Module Name: src Committed By: christos Date: Thu Jul 5 17:40:11 UTC 2012
Modified Files: src/external/ibm-public/postfix/dist/src/dns: dns_lookup.c Log Message: use the modern resolver functions if available. To generate a diff of this commit: cvs rdiff -u -r1.1.1.2 -r1.2 \ src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c diff -u src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c:1.1.1.2 src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c:1.2 --- src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c:1.1.1.2 Thu Jun 17 14:06:44 2010 +++ src/external/ibm-public/postfix/dist/src/dns/dns_lookup.c Thu Jul 5 13:40:11 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: dns_lookup.c,v 1.1.1.2 2010/06/17 18:06:44 tron Exp $ */ +/* $NetBSD: dns_lookup.c,v 1.2 2012/07/05 17:40:11 christos Exp $ */ /*++ /* NAME @@ -176,12 +176,37 @@ typedef struct DNS_REPLY { /* dns_query - query name server and pre-parse the reply */ +#if __RES < 20030124 + +static int +res_ninit(res_state res) +{ + int error; + + if ((error = res_init()) < 0) + return error; + + *res = _res; + return error; +} + +static int +res_nsearch(res_state statp, const char *dname, int class, int type, + u_char *answer, int anslen) +{ + return res_search(dname, class, type, answer, anslen); +} + +#endif + static int dns_query(const char *name, int type, int flags, DNS_REPLY *reply, VSTRING *why) { HEADER *reply_header; int len; unsigned long saved_options; + /* For efficiency, we are not called from multiple threads */ + static struct __res_state res; /* * Initialize the reply buffer. @@ -194,7 +219,7 @@ static int dns_query(const char *name, i /* * Initialize the name service. */ - if ((_res.options & RES_INIT) == 0 && res_init() < 0) { + if ((res.options & RES_INIT) == 0 && res_ninit(&res) < 0) { if (why) vstring_strcpy(why, "Name service initialization failure"); return (DNS_FAIL); @@ -208,18 +233,18 @@ static int dns_query(const char *name, i if ((flags & USER_FLAGS) != flags) msg_panic("dns_query: bad flags: %d", flags); - saved_options = (_res.options & USER_FLAGS); + saved_options = (res.options & USER_FLAGS); /* * Perform the lookup. Claim that the information cannot be found if and * only if the name server told us so. */ for (;;) { - _res.options &= ~saved_options; - _res.options |= flags; - len = res_search((char *) name, C_IN, type, reply->buf, reply->buf_len); - _res.options &= ~flags; - _res.options |= saved_options; + res.options &= ~saved_options; + res.options |= flags; + len = res_nsearch(&res, name, C_IN, type, reply->buf, reply->buf_len); + res.options &= ~flags; + res.options |= saved_options; if (len < 0) { if (why) vstring_sprintf(why, "Host or domain name not found. "