mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-08-04 02:08:49 -04:00
150 lines
4.2 KiB
Plaintext
150 lines
4.2 KiB
Plaintext
$NetBSD: patch-at,v 1.1 2014/06/15 20:48:50 jnemeth Exp $
|
|
|
|
--- sendmail/domain.c.orig 2014-03-06 17:31:31.000000000 +0000
|
|
+++ sendmail/domain.c
|
|
@@ -39,7 +39,7 @@ static char MXHostBuf[MXHOSTBUFSIZE];
|
|
# endif /* ! MAXDNSRCH */
|
|
|
|
# ifndef RES_DNSRCH_VARIABLE
|
|
-# define RES_DNSRCH_VARIABLE _res.dnsrch
|
|
+# define RES_DNSRCH_VARIABLE sm_res.dnsrch
|
|
# endif /* ! RES_DNSRCH_VARIABLE */
|
|
|
|
# ifndef NO_DATA
|
|
@@ -58,6 +58,8 @@ static char MXHostBuf[MXHOSTBUFSIZE];
|
|
# define RES_UNC_T unsigned char *
|
|
# endif /* defined(__RES) && (__RES >= 19940415) */
|
|
|
|
+extern struct __res_state sm_res;
|
|
+
|
|
static int mxrand __P((char *));
|
|
static int fallbackmxrr __P((int, unsigned short *, char **));
|
|
|
|
@@ -205,11 +207,9 @@ getmxrr(host, mxhosts, mxprefs, droploca
|
|
char *fallbackMX = FallbackMX;
|
|
bool trycanon = false;
|
|
unsigned short *prefs;
|
|
- int (*resfunc) __P((const char *, int, int, u_char *, int));
|
|
unsigned short prefer[MAXMXHOSTS];
|
|
int weight[MAXMXHOSTS];
|
|
int ttl = 0;
|
|
- extern int res_query(), res_search();
|
|
|
|
if (tTd(8, 2))
|
|
sm_dprintf("getmxrr(%s, droplocalhost=%d)\n",
|
|
@@ -246,14 +246,24 @@ getmxrr(host, mxhosts, mxprefs, droploca
|
|
|
|
if (!UseNameServer)
|
|
goto punt;
|
|
- if (HasWildcardMX && ConfigLevel >= 6)
|
|
- resfunc = res_query;
|
|
- else
|
|
- resfunc = res_search;
|
|
|
|
errno = 0;
|
|
- n = (*resfunc)(host, C_IN, T_MX, (unsigned char *) &answer,
|
|
+ if (HasWildcardMX && ConfigLevel >= 6)
|
|
+#if NAMED_RESN
|
|
+ n = res_nquery(&sm_res, host, C_IN, T_MX,
|
|
+ (unsigned char *) &answer, sizeof(answer));
|
|
+#else
|
|
+ n = res_query(host, C_IN, T_MX, (unsigned char *) &answer,
|
|
+ sizeof(answer));
|
|
+#endif
|
|
+ else
|
|
+#if NAMED_RESN
|
|
+ n = res_nsearch(&sm_res, host, C_IN, T_MX,
|
|
+ (unsigned char *) &answer, sizeof(answer));
|
|
+#else
|
|
+ n = res_search(host, C_IN, T_MX, (unsigned char *) &answer,
|
|
sizeof(answer));
|
|
+#endif
|
|
if (n < 0)
|
|
{
|
|
if (tTd(8, 1))
|
|
@@ -337,7 +347,7 @@ getmxrr(host, mxhosts, mxprefs, droploca
|
|
GETSHORT(n, cp); /* rdlength */
|
|
if (type != T_MX)
|
|
{
|
|
- if (tTd(8, 8) || _res.options & RES_DEBUG)
|
|
+ if (tTd(8, 8) || sm_res.options & RES_DEBUG)
|
|
sm_dprintf("unexpected answer type %d, size %d\n",
|
|
type, n);
|
|
cp += n;
|
|
@@ -635,7 +645,7 @@ bestmx_map_lookup(map, name, av, statp)
|
|
int *statp;
|
|
{
|
|
int nmx;
|
|
- int saveopts = _res.options;
|
|
+ int saveopts = sm_res.options;
|
|
int i;
|
|
ssize_t len = 0;
|
|
char *result;
|
|
@@ -647,9 +657,9 @@ bestmx_map_lookup(map, name, av, statp)
|
|
char buf[PSBUFSIZE / 2];
|
|
#endif /* _FFR_BESTMX_BETTER_TRUNCATION */
|
|
|
|
- _res.options &= ~(RES_DNSRCH|RES_DEFNAMES);
|
|
+ sm_res.options &= ~(RES_DNSRCH|RES_DEFNAMES);
|
|
nmx = getmxrr(name, mxhosts, NULL, false, statp, false, NULL);
|
|
- _res.options = saveopts;
|
|
+ sm_res.options = saveopts;
|
|
if (nmx <= 0)
|
|
return NULL;
|
|
if (bitset(MF_MATCHONLY, map->map_mflags))
|
|
@@ -793,10 +803,15 @@ dns_getcanonname(host, hbsize, trymx, st
|
|
if (tTd(8, 2))
|
|
sm_dprintf("dns_getcanonname(%s, trymx=%d)\n", host, trymx);
|
|
|
|
- if ((_res.options & RES_INIT) == 0 && res_init() == -1)
|
|
- {
|
|
- *statp = EX_UNAVAILABLE;
|
|
- return false;
|
|
+ if ((sm_res.options & RES_INIT) == 0)
|
|
+# if NAMED_RESN
|
|
+ memset(&sm_res, 0, sizeof(sm_res));
|
|
+ if (res_ninit(&sm_res) == -1) {
|
|
+# else
|
|
+ if (res_init() == -1) {
|
|
+# endif
|
|
+ *statp = EX_UNAVAILABLE;
|
|
+ return false;
|
|
}
|
|
|
|
*statp = EX_OK;
|
|
@@ -834,7 +849,7 @@ cnameloop:
|
|
dp = searchlist;
|
|
if (n > 0)
|
|
*dp++ = "";
|
|
- if (n >= 0 && *--cp != '.' && bitset(RES_DNSRCH, _res.options))
|
|
+ if (n >= 0 && *--cp != '.' && bitset(RES_DNSRCH, sm_res.options))
|
|
{
|
|
/* make sure there are less than MAXDNSRCH domains */
|
|
for (domain = RES_DNSRCH_VARIABLE, ret = 0;
|
|
@@ -842,9 +857,9 @@ cnameloop:
|
|
ret++)
|
|
*dp++ = *domain++;
|
|
}
|
|
- else if (n == 0 && bitset(RES_DEFNAMES, _res.options))
|
|
+ else if (n == 0 && bitset(RES_DEFNAMES, sm_res.options))
|
|
{
|
|
- *dp++ = _res.defdname;
|
|
+ *dp++ = sm_res.defdname;
|
|
}
|
|
else if (*cp == '.')
|
|
{
|
|
@@ -879,8 +894,13 @@ cnameloop:
|
|
qtype == T_MX ? "MX" :
|
|
"???");
|
|
errno = 0;
|
|
+# if NAMED_RESN
|
|
+ ret = res_nquerydomain(&sm_res, host, *dp, C_IN, qtype,
|
|
+ answer.qb2, sizeof(answer.qb2));
|
|
+# else
|
|
ret = res_querydomain(host, *dp, C_IN, qtype,
|
|
answer.qb2, sizeof(answer.qb2));
|
|
+# endif
|
|
if (ret <= 0)
|
|
{
|
|
int save_errno = errno;
|