SDB driver question about dns_sdb_putrr data
Robert Bryant
robertb at MIT.EDU
Sun Mar 30 22:15:26 UTC 2008
I am currently writing a BIND sdb driver on my Ubuntu machine. As a
simple first step, I created a nearly empty driver that only implements
lookup, and returns a hardcoded IP address every time. I then compiled,
installed, and ran my new named nameserver. I edited my
named.conf.local file to use my new database driver for "foo.com", and
edited my resolv.conf file to include 127.0.0.1 (I don't run
resolvconf).
So, what happens when I run dig on foo.com? Well, it seems to correctly
resolve via my localhost nameserver, but I don't get any valid answers
(in fact, I get status: SERVFAIL in the response). The named process is
still running, however, so my driver didn't kill anything, it just
didn't return a correct A record via dns_sdb_putrr.
So, what should the data look like for a dns_sdb_putrr call? I
currently just pass "A", 3600, and a hardcoded IP address string
literal. Please advise as to what is correct. I have searched the
bind-users and bind9-users mail archives without any luck. A copy of my
minimal driver implementation follows. Thanks so much for your help.
static dns_sdbimplementation_t *opencdndb = NULL;
static isc_result_t opencdndb_lookup(const char *zone, const char *name,
void *dbdata, dns_sdblookup_t *lookup)
{
UNUSED(zone);
UNUSED(dbdata);
isc_result_t result;
result = dns_sdb_putrr(lookup, "A", 3600, "65.254.250.110");
return result;
}
static dns_sdbmethods_t opencdndb_methods =
{
opencdndb_lookup,
NULL, /* authority */
NULL, /* allnodes */
NULL, /* create */
NULL /* destroy */
};
isc_result_t opencdndb_init(void)
{
unsigned int flags = 0;
return (dns_sdb_register("opencdn", &opencdndb_methods, NULL, flags,
ns_g_mctx, &opencdndb));
}
void opencdndb_clear(void)
{
if(opencdndb != NULL)
dns_sdb_unregister(&opencdndb);
}
More information about the bind-users
mailing list