X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/14d7100dc1e40351ee02bd1c0d2f1496f547b9ec..9dc511e46d5acad665175981f824288062e27671:/bres-adns.c diff --git a/bres-adns.c b/bres-adns.c index 54e6708..68b919c 100644 --- a/bres-adns.c +++ b/bres-adns.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: bres-adns.c,v 1.1 2003/12/13 20:37:59 mdw Exp $ + * $Id$ * * Background reverse name resolution (ADNS version) * @@ -39,14 +39,6 @@ * must be licensed under the full GPL. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: bres-adns.c,v $ - * Revision 1.1 2003/12/13 20:37:59 mdw - * Add adns support in background resolver. - * - */ - #ifndef HAVE_ADNS # error "You need the ADNS library to compile this file." #endif @@ -163,7 +155,7 @@ void bres_byname(bres_client *rc, const char *name, if (!ads) goto fail; if ((e = adns_submit(ads, name, adns_r_addr, - adns_qf_search, rc, &rc->aq)) != 0) + adns_qf_search | adns_qf_owner, rc, &rc->aq)) != 0) goto fail; rc->a = 0; rc->q = adns_r_addr; @@ -262,7 +254,7 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) void *c; bres_client *rc; adns_query q; - adns_answer *a; + adns_answer *a, *aa; int e; int i; @@ -276,8 +268,8 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) else switch (rc->q) { case adns_r_addr: assert(a->type == adns_r_addr); - report(rc, a, a->rrs.addr, a->nrrs, &rc->u.name, 1); - free(rc->u.name); + xfree(rc->u.name); + report(rc, a, a->rrs.addr, a->nrrs, &a->owner, 1); free(a); break; case adns_r_ptr: @@ -297,8 +289,9 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) } goto fail; match: - report(rc, a, &a->rrs.addr[i], 1, rc->a->rrs.str, rc->a->nrrs); - free(rc->a); + aa = rc->a; + report(rc, a, &a->rrs.addr[i], 1, aa->rrs.str, aa->nrrs); + free(aa); free(a); } break; @@ -308,9 +301,9 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) continue; fail: - rc->func(0, rc->p); if (rc->q == adns_r_addr) xfree(rc->u.name); if (rc->a) free(rc->a); + rc->func(0, rc->p); free(a); } } @@ -328,7 +321,7 @@ void bres_init(sel_state *s) { int e; - if ((e = adns_init(&ads, 0, 0)) != 0) { + if ((e = adns_init(&ads, adns_if_noautosys, 0)) != 0) { moan("adns_init failed: resolver won't work"); return; }