Index: asr/asr.c =================================================================== RCS file: /cvs/src/lib/libc/asr/asr.c,v retrieving revision 1.68 diff -u -p -r1.68 asr.c --- asr/asr.c 20 Jan 2022 14:18:10 -0000 1.68 +++ asr/asr.c 1 Mar 2024 06:57:11 -0000 @@ -528,6 +528,7 @@ asr_ctx_create(void) return (NULL); ac->ac_options = RES_RECURSE | RES_DEFNAMES | RES_DNSRCH; + ac->ac_rdomain = -1; /* we don't care by default */ ac->ac_refcount = 1; ac->ac_ndots = 1; ac->ac_family[0] = AF_INET; @@ -594,12 +595,32 @@ pass0(char **tok, int n, struct asr_ctx int i, j, d; const char *e; struct sockaddr_storage ss; + int rdomain; + const char *errstr; if (!strcmp(tok[0], "nameserver")) { if (ac->ac_nscount == ASR_MAXNS) return; - if (n != 2) + switch (n) { + case 4: + if (strcmp(tok[2], "rdomain") != 0) + return; + + if (ac->ac_rdomain == -1) + ac->ac_rdomain = getrtable(); + + rdomain = strtonum(tok[3], 0, INT_MAX, &errstr); + if (errstr != NULL) + return; + + if (ac->ac_rdomain != rdomain) + return; + /* FALLTHROUGH */ + case 2: + break; + default: return; + } if (asr_parse_nameserver((struct sockaddr *)&ss, tok[1])) return; if ((ac->ac_ns[ac->ac_nscount] = calloc(1, ss.ss_len)) == NULL) Index: asr/asr_private.h =================================================================== RCS file: /cvs/src/lib/libc/asr/asr_private.h,v retrieving revision 1.49 diff -u -p -r1.49 asr_private.h --- asr/asr_private.h 20 Nov 2023 12:15:16 -0000 1.49 +++ asr/asr_private.h 1 Mar 2024 06:57:11 -0000 @@ -121,6 +121,7 @@ enum async_type { #define ASR_DB_DNS 'b' struct asr_ctx { + int ac_rdomain; int ac_refcount; int ac_options; int ac_ndots;