「sendmailは昔からそういうもんですね。/etc/resolv.confの中を覚えてる。」の調査
owakiさんからのコメントが本当なのか気になって眠れないので(ウソ(TM))Sendmailのソースコードを読んでみた。
http://d.hatena.ne.jp/p206sw/20070116/1168953004#c1169115322
ソフトウェア屋の性?
Sendmailはres_query(), res_search()を使っている。
- sendmail/domain.c
int getmxrr(host, mxhosts, mxprefs, droplocalhost, rcode, tryfallback, pttl) char *host; char **mxhosts; unsigned short *mxprefs; bool droplocalhost; int *rcode; bool tryfallback; int *pttl; { : if (HasWildcardMX && ConfigLevel >= 6) resfunc = res_query; else resfunc = res_search; errno = 0; n = (*resfunc)(host, C_IN, T_MX, (unsigned char *) &answer, sizeof(answer));
つまり、resolver(3)を使っているということ。まぁ、これは普通というか当たり前やね。
で、res_init()をmain()で呼び出している。
- sendmail/main.c
int main(argc, argv, envp) int argc; char **argv; char **envp; { : #if NAMED_BIND if (!bitset(RES_INIT, _res.options)) (void) res_init();
/etc/resolv.confはres_init()で読み込まれるので、デーモンが再起動されない限り、起動時のresolv.confの情報が使われるわけだね。
納得。