$NetBSD$

--- sendmail/main.c.orig	2020-06-02 11:41:43.000000000 +0200
+++ sendmail/main.c	2021-03-18 15:17:14.113717245 +0100
@@ -152,8 +152,12 @@
 		break;							\
 	}								\
 }
 
+#if NAMED_BIND
+struct __res_state sm_res;
+#endif
+
 int
 main(argc, argv, envp)
 	int argc;
 	char **argv;
@@ -214,8 +218,17 @@
 #if USE_ENVIRON
 	envp = environ;
 #endif
 
+#if NAMED_BIND
+# if NAMED_RESN
+	sm_res = *(struct __res_state *)sm_malloc(sizeof(struct __res_state));
+	memset(&sm_res, 0, sizeof(struct __res_state));
+# else
+	sm_res = _res;
+# endif
+#endif
+
 	/* turn off profiling */
 	SM_PROF(0);
 
 	/* install default exception handler */
@@ -696,23 +709,27 @@
 	**  Initialize name server if it is going to be used.
 	*/
 
 #if NAMED_BIND
-	if (!bitset(RES_INIT, _res.options))
+	if (!bitset(RES_INIT, sm_res.options))
+# if NAMED_RESN
+		(void) res_ninit(&sm_res);
+# else
 		(void) res_init();
+# endif
 	if (tTd(8, 8))
-		_res.options |= RES_DEBUG;
+		sm_res.options |= RES_DEBUG;
 	else
-		_res.options &= ~RES_DEBUG;
+		sm_res.options &= ~RES_DEBUG;
 # ifdef RES_NOALIASES
-	_res.options |= RES_NOALIASES;
+	sm_res.options |= RES_NOALIASES;
 # endif
-	TimeOuts.res_retry[RES_TO_DEFAULT] = _res.retry;
-	TimeOuts.res_retry[RES_TO_FIRST] = _res.retry;
-	TimeOuts.res_retry[RES_TO_NORMAL] = _res.retry;
-	TimeOuts.res_retrans[RES_TO_DEFAULT] = _res.retrans;
-	TimeOuts.res_retrans[RES_TO_FIRST] = _res.retrans;
-	TimeOuts.res_retrans[RES_TO_NORMAL] = _res.retrans;
+	TimeOuts.res_retry[RES_TO_DEFAULT] = sm_res.retry;
+	TimeOuts.res_retry[RES_TO_FIRST] = sm_res.retry;
+	TimeOuts.res_retry[RES_TO_NORMAL] = sm_res.retry;
+	TimeOuts.res_retrans[RES_TO_DEFAULT] = sm_res.retrans;
+	TimeOuts.res_retrans[RES_TO_FIRST] = sm_res.retrans;
+	TimeOuts.res_retrans[RES_TO_NORMAL] = sm_res.retrans;
 #endif /* NAMED_BIND */
 
 	errno = 0;
 	from = NULL;
@@ -1393,10 +1410,10 @@
 		}
 	}
 
 #if NAMED_BIND
-	_res.retry = TimeOuts.res_retry[RES_TO_DEFAULT];
-	_res.retrans = TimeOuts.res_retrans[RES_TO_DEFAULT];
+	sm_res.retry = TimeOuts.res_retry[RES_TO_DEFAULT];
+	sm_res.retrans = TimeOuts.res_retrans[RES_TO_DEFAULT];
 #endif
 
 	/*
 	**  Find our real host name for future logging.
@@ -2943,10 +2960,10 @@
 		e->e_to = NULL;
 		sm_getla();
 		GrabTo = false;
 #if NAMED_BIND
-		_res.retry = TimeOuts.res_retry[RES_TO_FIRST];
-		_res.retrans = TimeOuts.res_retrans[RES_TO_FIRST];
+		sm_res.retry = TimeOuts.res_retry[RES_TO_FIRST];
+		sm_res.retrans = TimeOuts.res_retrans[RES_TO_FIRST];
 #endif
 		next = e->e_sibling;
 		e->e_sibling = NULL;
 
