attachversion() bug in sdb
Mark Andrews
Mark_Andrews at isc.org
Sun Jul 25 22:09:33 UTC 2004
> I have an LDAP sdb back-end (see contrib/sdb/ldap/) that works fine
> with BIND 9.2.3 but fails on the BIND 9.3.0rc2.
>
> When I try to do a zone transfer the assertion ENSURE(*targetp != NULL);"
> in dns_db_attachversion() fails. See backtrace below:
>
> #0 0x401d9c31 in kill () from /lib/libc.so.6
> #1 0x401d99f5 in raise () from /lib/libc.so.6
> #2 0x401dade0 in abort () from /lib/libc.so.6
> #3 0x0805827d in assertion_failed (file=0x818c62b "db.c", line=135985440,
> type=isc_assertiontype_ensure, cond=0x818f644 "*targetp != ((void *)0)")
> at main.c:148
> #4 0x08091658 in dns_db_attachversion (db=0x1, source=0x0, targetp=0x818f644
> )
> at db.c:397
> #5 0x080724ad in xfrout_ctx_create (mctx=0x81b2130, client=0x0, id=0,
> qname=0x0, qtype=40428, qclass=1258, db=0x81bcc80, ver=0x0, quota=0x0,
> stream=0x0, tsigkey=0x0, lasttsig=0x0, maxtime=0, idletime=0,
> many_answers=isc_boolean_false, xfrp=0xbfffdaf4) at xfrout.c:1229
> #6 0x08071f48 in ns_xfr_start (client=0x81f36e8, reqtype=252) at xfrout.c:11
> 34
> #7 0x0805f807 in ns_query_start (client=0x81f36e8) at query.c:3474
> #8 0x0804e6e1 in client_request (task=0x81f3948, event=0x81f3858)
> at client.c:1543
> #9 0x08173db5 in dispatch (manager=0x81b6a40) at task.c:869
> #10 0x081744ad in isc__taskmgr_dispatch () at task.c:1262
> #11 0x081764a2 in evloop () at app.c:355
> #12 0x081767be in isc_app_run () at app.c:547
> #13 0x08059175 in main (argc=0, argv=0xbffff894) at main.c:751
>
> AFAICS attachversion() in sdb needs to be changed. Here's the code for
> dns_db_attachversion():
>
> dns_db_attachversion(dns_db_t *db, dns_dbversion_t *source,
> dns_dbversion_t **targetp)
> {
> /*
> * Attach '*targetp' to 'source'.
> */
>
> REQUIRE(DNS_DB_VALID(db));
> REQUIRE((db->attributes & DNS_DBATTR_CACHE) == 0);
> REQUIRE(source != NULL);
> REQUIRE(targetp != NULL && *targetp == NULL);
>
> (db->methods->attachversion)(db, source, targetp);
>
> ENSURE(*targetp != NULL);
> }
>
> As you can see, *targetp == NULL before calling
> db->methods->attachversion(). In this case that is attachversion() in
> sdb.c. The code is simply:
>
> static void
> attachversion(dns_db_t *db, dns_dbversion_t *source,
> dns_dbversion_t **targetp)
> {
> REQUIRE(source != NULL && source == (void *) &dummy);
>
> UNUSED(db);
> UNUSED(source);
> UNUSED(targetp);
> return;
> }
>
> so targetp is obviously not modified.
>
> It seems the attachversions code in 9.2.3 is the same, but in 9.2.3
> xfrout_ctx_create() doesn't use dns_db_attachversion() so the problem
> doesn't turn up there.
>
> Stig
Known issue.
1691. [bug] sdb's attachversion was not complete. [RT #11990]
static void
attachversion(dns_db_t *db, dns_dbversion_t *source,
dns_dbversion_t **targetp)
{
REQUIRE(source != NULL && source == (void *) &dummy);
REQUIRE(targetp != NULL && *targetp == NULL);
UNUSED(db);
*targetp = source;
return;
}
--
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742 INTERNET: Mark_Andrews at isc.org
More information about the bind-workers
mailing list