Help with sdb/pgsql zonetodb
Enrico Pelletta
enrico at it.kth.se
Fri Aug 12 08:06:55 UTC 2005
Mark Andrews wrote:
>>On Thu, 2005-08-11 at 11:17, Enrico Pelletta wrote:
>>
>>
>>>Hi!
>>>
>>>I'm trying to making working Bind 9.3.1 with sdb/pgsql on Debian 3.1
>>>running postgresql 7.4.7.
>>>
>>>I built and installed bind with sdb/pgsql. Now, I would like to use
>>>zonetodb to add into my DB a test zone. The tool successfully compiled
>>>but when I run:
>>>
>>>./zonetodb mydom.net myzonefile zonesDB t_zone
>>>
>>>I always get the error message:
>>>
>>>hash.c:383: INSIST(hash != ((void *)0) && ((((hash)) != ((void *)0)) &&
>>>(((const isc__magic_t *)((hash)))->magic == ((('H') << 24 | ('a') << 16
>>>| ('s') << 8 | ('h')))))) failed.
>>>Aborted
>>>
>>>It seems zonetodb fails when running the following main function line:.
>>>
>>>result = dns_db_create(mctx, "rbt", origin,
>>>dns_dbtype_zone,dns_rdataclass_in, 0, NULL, &db);
>>>
>>>I have token a look around without founding any kind of tips. I'm new to
>>>bind/sdb and any help will be really welcome!
>>>Thank!
>>>
>>> Enrico.
>>>
>>>
>>>
>>>
>>You need to apply something like this patch, which I applied in
>>Red Hat bind-9.3.1's contrib/sdb/ldap/zone2ldap.c, @ line 200, in the
>>main() function initialization code before any dns_*name or
>>dns_db_create functions are called:
>>
>>+
>>+ /* It is required to initialize the hash before dns_db_create in BIND 9 */
>>+ result = isc_hash_create(isc_ctx, NULL, DNS_NAME_MAXWIRE);
>>+ isc_result_check (result, "isc_hash_create");
>>+
>>
>>I'll patch Red Hat's zonetodb.c today in bind-9.3.1-10 and you can pick it up
>>from there.
>>
>>
>>
>>
>>
>
> I don't have ldap install on my box but the following should
> be correct.
>
> There is a possibility that more cleanup is required.
>
> Mark
>
>Index: bind9/contrib/sdb/ldap/zone2ldap.c
>diff -u bind9/contrib/sdb/ldap/zone2ldap.c:1.3 bind9/contrib/sdb/ldap/zone2ldap.c:1.4
>--- bind9/contrib/sdb/ldap/zone2ldap.c:1.3 Sun Jun 10 22:36:38 2001
>+++ bind9/contrib/sdb/ldap/zone2ldap.c Thu Aug 11 23:32:32 2005
>@@ -20,6 +20,8 @@
> #include <getopt.h>
>
> #include <isc/buffer.h>
>+#include <isc/entropy.h>
>+#include <isc/hash.h>
> #include <isc/mem.h>
> #include <isc/print.h>
> #include <isc/result.h>
>@@ -106,7 +108,8 @@
> int
> main (int *argc, char **argv)
> {
>- isc_mem_t *isc_ctx = NULL;
>+ isc_mem_t *mctx = NULL;
>+ isc_entropy_t *ectx = NULL;
> isc_result_t result;
> char *basedn;
> ldap_info *tmp;
>@@ -185,9 +188,15 @@
> if (debug)
> printf ("Initializing ISC Routines, parsing zone file\n");
>
>- result = isc_mem_create (0, 0, &isc_ctx);
>+ result = isc_mem_create (0, 0, &mctx);
> isc_result_check (result, "isc_mem_create");
>
>+ result = isc_entropy_create(mctx, &ectx);
>+ isc_result_check (result, "isc_entropy_create");
>+
>+ result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
>+ isc_result_check (result, "isc_hash_create");
>+
> isc_buffer_init (&buff, argzone, strlen (argzone));
> isc_buffer_add (&buff, strlen (argzone));
> dns_fixedname_init (&fixedzone);
>@@ -195,9 +204,8 @@
> result = dns_name_fromtext (zone, &buff, dns_rootname, ISC_FALSE, NULL);
> isc_result_check (result, "dns_name_fromtext");
>
>- result =
>- dns_db_create (isc_ctx, "rbt", zone, dns_dbtype_zone, dns_rdataclass_in,
>- 0, NULL, &db);
>+ result = dns_db_create (mctx, "rbt", zone, dns_dbtype_zone,
>+ dns_rdataclass_in, 0, NULL, &db);
> isc_result_check (result, "dns_db_create");
>
> result = dns_db_load (db, zonefile);
>@@ -313,9 +321,14 @@
> add_ldap_values (tmp);
> }
>
>-if (debug)
>+ if (debug)
> printf("Operation Complete.\n");
>
>+ /* Cleanup */
>+ isc_hash_destroy();
>+ isc_entropy_detach(&ectx);
>+ isc_mem_destroy(&mctx);
>+
> return 0;
> }
>
>--
>Mark Andrews, ISC
>1 Seymour St., Dundas Valley, NSW 2117, Australia
>PHONE: +61 2 9871 4742 INTERNET: Mark_Andrews at isc.org
>
>
Thank for helping!
I managed to make zonetodb working, but making changes to your patches.
I'm using bind-9.3.1 from the original source distribution and I
modified zonetodb.c in contrib/sdb/pgsql (not Ldap).
Here I send you my patch.
Enrico.
-- Attached file included as plaintext by Ecartis --
-- File: zonetodb.patch
--- zonetodb.c 2004-03-08 10:04:22.000000000 +0100
+++ zonetodb.c 2005-08-12 09:49:38.000000000 +0200
@@ -149,7 +149,7 @@
printf("Note that dbname must be an existing database.\n");
exit(1);
}
-
+
porigin = argv[1];
zonefile = argv[2];
dbname = argv[3];
@@ -169,15 +169,19 @@
check_result(result, "dns_name_fromtext");
db = NULL;
+ /* It is required to initialize the hash before dns_db_create in BIND 9
+ */
+ result = isc_hash_create(mctx, NULL, DNS_NAME_MAXWIRE);
+ check_result (result, "isc_hash_create");
+
result = dns_db_create(mctx, "rbt", origin, dns_dbtype_zone,
dns_rdataclass_in, 0, NULL, &db);
check_result(result, "dns_db_create");
-
+
result = dns_db_load(db, zonefile);
if (result == DNS_R_SEENINCLUDE)
result = ISC_R_SUCCESS;
check_result(result, "dns_db_load");
-
printf("Connecting to '%s'\n", dbname);
conn = PQsetdb(NULL, NULL, NULL, NULL, dbname);
if (PQstatus(conn) == CONNECTION_BAD) {
@@ -275,6 +279,7 @@
PQclear(res);
dns_dbiterator_destroy(&dbiter);
dns_db_detach(&db);
+ isc_hash_destroy();
isc_mem_destroy(&mctx);
closeandexit(0);
exit(0);
More information about the bind-users
mailing list